Java 如何在布尔值中调用InventoryClickEvent?

Java 如何在布尔值中调用InventoryClickEvent?,java,bukkit,Java,Bukkit,我首先创建了将打开的库存: private void openGUI(播放器){ Inventory inv=Bukkit.createInventory(null,9,ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“DuelRequest”+ChatColor.DARK_RED+“]); ItemStack accept=新的ItemStack(材质:翡翠块); ItemMeta-acceptMeta=accept.getItemMeta(); Ite

我首先创建了将打开的库存:

private void openGUI(播放器){
Inventory inv=Bukkit.createInventory(null,9,ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“DuelRequest”+ChatColor.DARK_RED+“]);
ItemStack accept=新的ItemStack(材质:翡翠块);
ItemMeta-acceptMeta=accept.getItemMeta();
ItemStack递减=新ItemStack(材料:红石块);
ItemMeta declineMeta=拒绝。getItemMeta();
setDisplayName(ChatColor.GREEN+“Accept!”);
accept.setItemMeta(acceptMeta);
declineMeta.setDisplayName(ChatColor.RED+“拒绝!”);
拒绝。setItemMeta(declineMeta);
库存设置项(3,接受);
库存设置项(5,拒绝);
玩家开放库存(inv);
}
然后我创建了将要运行的命令:

if(cmd.getName().equalsIgnoreCase(“决斗”)){
如果(!(args.length==1)){
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“用法:/duel”);
返回true;
}else if(args.length==1){
Player p=Bukkit.getServer().getPlayer(args[0]);
如果(p!=null){
如果(p.equals(发送方)){
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“你不能自己决斗!”);
返回true;
}否则{
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.GREEN+“您向“+ChatColor.BLUE+p.getName()发送了决斗请求”;
p、 sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.GREEN+“您收到了来自“+ChatColor.BLUE+sender.getName()的决斗请求”;
openGUI(p);
}
}
}否则{
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“找不到玩家!”);
}
}
返回true;
然后,我创建了一个事件,当玩家单击他们的库存时,该事件被调用

@SuppressWarnings(“弃用”)
@事件处理程序
私有void onClick(清单ClickEvent e){
if(!ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase(“[DuelRequest]”)
返回;
Player=(Player)e.getWhoClicked();
e、 setCancelled(真);
开关(如getCurrentItem().getType()){
案例祖母绿块:
player.closeInventory();
player.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.GREEN+“您接受了请求”);
player.getInventory().setItem(0,新的ItemStack(Material.DIAMOND_剑));
player.getInventory().setItem(1,新ItemStack(Material.BOW));
player.getInventory().setItem(2,新ItemStack(Material.GOLDEN_APPLE,2));
player.getInventory().setItem(3,新的ItemStack(Material.ARROW,32));
player.getInventory().setHelmet(新项目堆栈(Material.DIAMOND_HELMET));
player.getInventory().setChestplate(新项目堆栈(Material.DIAMOND_-CHESTPLATE));
player.getInventory().setLeggings(新项目堆栈(Material.DIAMOND_LEGGINGS));
player.getInventory().setBoots(新的ItemStack(Material.DIAMOND_BOOTS));
打破
case REDSTONE_区块:
player.closeInventory();
player.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“您拒绝了请求!”);
打破
违约:
player.closeInventory();
打破
}
}
所以,我想发生的是

当玩家键入/决斗时,(目标)将在他们面前打开一个清单,可以选择接受或拒绝决斗请求。我已经测试了这个,它的工作原理和预期的一样。如果他们拒绝,他们将收到一条消息,告诉他们拒绝了,如果他们接受,他们将得到一套装备与之决斗。这也如预期的那样起作用。但是,我需要能够为/duel命令的发送者提供相同的工具包,但我不知道如何。所以当(目标)接受决斗时,两名玩家都将收到一套装备,以便双方都能战斗

onCommand
中是否有调用
onClick
事件的方法? 或者有没有办法从
onClick
事件内部联系命令的发送者

我的Bukkit编码水平一般,但显然还有很多东西需要学习,所以任何帮助/建设性的批评都是有帮助的

您可以使用,来存储向玩家发送决斗请求的玩家:

Map duels=newhashmap();
用于存储另一个值的值,它实际上是一个大型变量集合

当发送方运行该命令时,您可以使用:

duels.put(target.getUniqueId(),sender.getUniqueId());
因此,当目标接受决斗时,您可以通过以下方式获得请求的发送者:

duels.get(target.getUniqueId());
以下是您的
onCommand()
的外观:

if(cmd.getName().equalsIgnoreCase(“决斗”)){
如果(!(args.length==1)){
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“用法:/duel”);
返回true;
}else if(args.length==1){
Player p=Bukkit.getServer().getPlayer(args[0]);
如果(p!=null){
如果(p.equals(发送方)){
sender.sendMessage(ChatColor.DARK_RED+“[”+ChatColor.DARK_GREEN+“HuntsCraft”+ChatColor.DARK_RED+“]”+ChatColor.RED+“你不能自己决斗!”);
返回true;
}否则{