从另一个类导入命令参数

时间:2018-11-10 23:39:12

标签: java minecraft bukkit

我现在已经在插件上工作了大约两天了,我不确定如何做到这一点。我有一个/ punish命令,该命令打开一个清单,主持人可以在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;
        }
    }
}

在第二张屏幕截图中,我放置了一个临时的“名称”作为占位符,因为我不知道要放置什么。如果有人要答复,您能解释一下自己在做什么,这样我就不会再错过了。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用HashMaps,

您应该做的是在CommandClass中创建一个HashMap。

使Player对象具有Key和arg这样的值: HashMap myHashMap-如果有单个参数。

HashMap myHashMap-如果有多个参数。

然后,每次打开GUI之前,都应将播放器和Arg放入HashMap中。您应该在命令类中实现用于获取值的方法,例如public String getArg(Player player),然后返回该值。还有一个remove方法(这将防止错误),称为public void removeArgs(Player player),应在关闭GUI或需要时调用它。

希望您可以在其中找到任何用途。

相关问题