импорт аргументов команды из другого класса - PullRequest
0 голосов
/ 11 ноября 2018

Я должен был работать над плагином пару дней или около того, и я не уверен, как это сделать. У меня есть команда / наказание, которая открывает инвентарь, где модераторы могут отключить звук, пнуть, заблокировать или предупредить игрока в 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 голосов
/ 11 ноября 2018

Вы можете использовать HashMaps,

Что вам нужно сделать, это создать HashMap в вашем CommandClass.

Сделайте объект Player ключевым и arg (s) значением следующим образом: HashMap myHashMap - в случае одного аргумента.

HashMap myHashMap - в случае нескольких аргументов.

Затем каждый раз перед открытием GUI вы должны помещать Player и Arg в HashMap. Вы должны реализовать методы в своем классе команд для извлечения значений, например, public String getArg (Player player), и вернуть значение. А также метод удаления (это предотвратит ошибки), public void removeArgs (Player player), его следует вызывать, когда графический интерфейс пользователя закрыт или когда вам это нравится.

Надеюсь, вы могли бы найти какое-либо применение в этом.

...