我再次编写另一个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)
时,控制台不显示任何内容,包括错误和警告。 最佳答案
创建一个AsyncPlayerChatEvent
和public 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);
。