我再次编写另一个Banksystem插件,但是这次使用ATM。我试图弄清楚如何在单击选项后如何使玩家进行聊天输入,以防止单击100次以将50,000美元存入银行帐户。

我正在使用Paper-Spigot 1.14.4编写此插件,并且尝试了以下步骤:


AsyncPlayerChatEvent作为单独的类,仅当我在Pluginmanager中注册事件时才激活:


Bukkit.getPluginManager().registerEvents(new ChatListener(), Main.getPlugin());



使用get-和set-method创建private AsyncPlayerChatEvent变量e,并在需要时在方法中调用它。


String input = getChat().getMessage();


我当前的chatListener()方法:

public void chatListener(Inventory inv, Player pl) {
        pl.closeInventory();
        pl.sendMessage("§6Please enter your amount:");
        String input = getChat().getMessage();
        if(input.matches("[0-9]+")) {
            pl.openInventory(inv);
            inv.setItem(0, new ItemStack(Material.AIR));
            inv.setItem(0, CustomHeads.customHead(CustomHeads.BITCOIN,
                    input));
        } else {
            pl.sendMessage("§cPlease enter only numeric characters!");
        }
    }


AsyncPlayerChatEvent get-method:

public AsyncPlayerChatEvent getChat() {
        return chat;
    }


我希望在出现“请输入您的金额:”消息后,将播放器的消息保存在input变量中。

创建System.out.println(input)时,控制台不显示任何内容,包括错误和警告。

最佳答案

创建一个AsyncPlayerChatEventpublic static ArrayList

ExampleChatEvent.class

public static ArrayList<Player> waitingForAmountPlayers = new ArrayList<>();

public void onChat(AsyncPlayerChatEvent e) {

 Player p = e.getPlayer();

 if (waitingForAmountPlayers.indexOf(p) != -1) {

  //
  // YOUR CODE
  //

  waitingForAmountPlayers.remove(p);

 }

}


当您要在聊天室中键入播放器的数量(waitingForAmountPlayers)时,请不要忘记将播放器添加到ExampleChatEvent.waitingForAmountPlayers.add(p);

09-09 22:11