Я должен был работать над плагином пару дней или около того, и я не уверен, как это сделать. У меня есть команда / наказание, которая открывает инвентарь, где модераторы могут отключить звук, пнуть, заблокировать или предупредить игрока в arg [0]. как только команда открыла первый инвентарь, я создал другой класс, называемый guievents, который контролирует инвентарь. У меня вопрос, как мне получить аргументы от команды в одном классе в другой класс. Я искал в Google некоторое время, и большую часть времени я находил людей, использующих хеш-карты, однако я никогда не понимал, как они это делают, или мне вообще следует использовать хеш-карты.
Командный класс:
package io.github.bxnie.gui.punish;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import net.minecraft.server.v1_12_R1.CommandExecute;
public class punish extends CommandExecute implements Listener, CommandExecutor{
public String punish = "punish";
//open main GUI for moderation /punish
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player p = (Player) sender;
if (!(sender instanceof Player)) {
sender.sendMessage("Only players may execute this command!");
return true;
}
if (cmd.getName().equalsIgnoreCase(punish) && sender instanceof Player) {
if (p.hasPermission("fp.punish")) {
if (args.length == 0){
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + ChatColor.BOLD + "Fiore" + ChatColor.DARK_GRAY + "] " + ChatColor.RED + "Correct usage: " + ChatColor.GRAY + ChatColor.ITALIC + "/punish <player>");
return false;
}
if (args.length >= 1){
String message = "";
Player target = Bukkit.getPlayer(args[0]);
for (int i = 0; i < args.length; i++) {
message = message + args[i] + " ";
}
if (message.length() == 0){
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + ChatColor.BOLD + "Fiore" + ChatColor.DARK_GRAY + "] " + ChatColor.RED + "Correct usage: " + ChatColor.GRAY + ChatColor.ITALIC + "/punish <player>");
return false;
}
if (target == null){
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_RED + ChatColor.BOLD + "Fiore" + ChatColor.DARK_GRAY + "] " + ChatColor.RED + "Correct usage: " + ChatColor.GRAY + ChatColor.ITALIC + "player not online");
return false;
}
//Creates the Inventory
Inventory punishgui = Bukkit.createInventory(null, 9, ChatColor.RED + "Punish Menu");
//Where the Items and Meta are made
ItemStack warn = new ItemStack(Material.CONCRETE, 1, (short) 14);
ItemMeta warnmeta = warn.getItemMeta();
warnmeta.setDisplayName(ChatColor.RED + "Warn Player");
warnmeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> warnlore = new ArrayList<String>();
warnlore.add(ChatColor.GRAY + "Click this to Warn the Selected Player!");
warnmeta.setLore(warnlore);
warn.setItemMeta(warnmeta);
ItemStack kick = new ItemStack(Material.CONCRETE, 1);
ItemMeta kickmeta = kick.getItemMeta();
kickmeta.setDisplayName(ChatColor.WHITE + "Kick Player");
kickmeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> kicklore = new ArrayList<String>();
kicklore.add(ChatColor.GRAY + "Click this to Kick the Selected Player!");
kickmeta.setLore(kicklore);
kick.setItemMeta(kickmeta);
ItemStack mute = new ItemStack(Material.CONCRETE, 1, (short) 1);
ItemMeta mutemeta = mute.getItemMeta();
mutemeta.setDisplayName(ChatColor.GOLD + "Mute Player");
mutemeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> mutelore = new ArrayList<String>();
mutelore.add(ChatColor.GRAY + "Click this to Mute the Selected Player!");
mutemeta.setLore(mutelore);
mute.setItemMeta(mutemeta);
ItemStack tempban = new ItemStack(Material.CONCRETE, 1, (short) 7);
ItemMeta tempbanmeta = tempban.getItemMeta();
tempbanmeta.setDisplayName(ChatColor.GRAY + "TempBan Player");
tempbanmeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> tempbanlore = new ArrayList<String>();
tempbanlore.add(ChatColor.GRAY + "Click this to TempBan the Selected Player!");
tempbanmeta.setLore(tempbanlore);
tempban.setItemMeta(tempbanmeta);
ItemStack ban = new ItemStack(Material.CONCRETE, 1, (short) 15);
ItemMeta banmeta = ban.getItemMeta();
banmeta.setDisplayName(ChatColor.DARK_GRAY + "Ban Player");
banmeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
ArrayList<String> banlore = new ArrayList<String>();
banlore.add(ChatColor.GRAY + "Click this to Ban the Selected Player!");
banmeta.setLore(banlore);
ban.setItemMeta(banmeta);
//Positioning
punishgui.setItem(2, warn);
punishgui.setItem(3, kick);
punishgui.setItem(4, mute);
punishgui.setItem(5, tempban);
punishgui.setItem(6, ban);
p.openInventory(punishgui);
}
} else {
p.sendMessage(ChatColor.RED + "Insufficient Permission!");
return false;
}
}
return true;
}
}
один из классов Guievents:
package io.github.bxnie.events.punish;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import io.github.bxnie.gui.punish.punish;
import io.github.bxnie.gui.punish.punishmain;
public class punishmutemenu implements Listener {
@EventHandler
public void InventoryOnClick(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
Inventory open = event.getInventory();
ItemStack item = event.getCurrentItem();
if(open.getName().equals(ChatColor.RED + "Mute Time Menu")) {
event.setCancelled(true);
if(item == null || !item.hasItemMeta()) {
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "< Back")) {
player.openInventory(punishmain.punishmaingui());
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "5 Minutes")) {
Bukkit.dispatchCommand(player, "mute " + name + " 5mins");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "10 Minutes")) {
Bukkit.dispatchCommand(player, "mute " + name + " 10mins");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "30 Minutes")) {
Bukkit.dispatchCommand(player, "mute " + name + " 30mins");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "1 Hour")) {
Bukkit.dispatchCommand(player, "mute " + name + " 1hour");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "3 Hours")) {
Bukkit.dispatchCommand(player, "mute " + name + " 3hours");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "24 Hours")) {
Bukkit.dispatchCommand(player, "mute " + name + " 1day");
return;
}
if(item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "7 Days")) {
Bukkit.dispatchCommand(player, "mute " + name + " 7days");
return;
}
return;
}
}
}
на втором снимке экрана я поместил временное «имя» в качестве заполнителя, так как не знаю, что поставить. если кто-то хочет ответить, не могли бы вы объяснить, что вы делаете, просто чтобы я снова не справился с этим.
Спасибо