禁止移动,在Java的Minecraft上的GUI中添加项目

禁止移动,在Java的Minecraft上的GUI中添加项目,java,java-8,minecraft,Java,Java 8,Minecraft,信息: 插口:1.12和Java版本:8 我试图让玩家在打开GUI时,可以在GUI关闭后获取项目,因为: 所以我创建了一个新类来与事件(InventoryClickEvent)交互问题是,当它应用时,它从头到尾都会应用,除了我想把它置于一个条件中:如果玩家打开GUI,他就不能在这个GUI中获取项目,如果他关闭它,该事件将无效,玩家将能够在游戏模式中获取物品/或从他的库存中移动物品(例如) 我的问题是,我不知道如何在我创建的循环中应用它(用于我的GUI) 我使用CommandExecutor/它不

信息: 插口:1.12和Java版本:8

我试图让玩家在打开GUI时,可以在GUI关闭后获取项目,因为: 所以我创建了一个新类来与事件(InventoryClickEvent)交互问题是,当它应用时,它从头到尾都会应用,除了我想把它置于一个条件中:如果玩家打开GUI,他就不能在这个GUI中获取项目,如果他关闭它,该事件将无效,玩家将能够在游戏模式中获取物品/或从他的库存中移动物品(例如)

我的问题是,我不知道如何在我创建的循环中应用它(用于我的GUI) 我使用CommandExecutor/它不允许我使用事件(我想)

我的代码: 命令: ClickEvent:

使用一个静态列表(作为一个字段),其中存储所有打开GUI的玩家。当玩家执行命令时,您将其添加到列表中。当他关闭库存(InventoryCloseEvent)时,您将移除该播放器。然后在InventoryClickEvent中检查播放机是否在列表中。如果是,则阻止该事件

代码部分:

将其放在Commands类的顶部(从java.util.*导入列表和ArrayList)[命令行20]:

public static List<Player> playersInInventory = new ArrayList<>(); 
在InventoryCloseEvent[创建此事件]中:

Commands.playersInInventory.remove(event.getPlayer());
然后,您可以在清单ClickEvent[事件的唯一内容]中使用它:

if (Commands.playersInInventory.contains((Player) (event.getWhoClicked()))) {
    event.setCancelled(true);
}

这段代码应该可以正常工作,但我还没有测试它。如果它不起作用,请告诉我。

您好,我已经考虑过这种方法,问题是我的代码中根本无法实现它,我在执行时到处都有错误,您能再解释一下吗?无论如何,谢谢你的评论,我必须承认,在过去的一周里,我迷失了方向。当然。我将添加您必须放入此代码的行。但是我看不到你的ClickEvent文件。你能重新加载你的文件吗?(别忘了导入List和ArrayList)是的,我当然按照你说的那样做了,但是现在是“getPlayer”方法给了我一个错误://我的代码(类ClickEvent:)完整代码:1)主要:2)命令:3)ClickEvent:我不应该用:getWhoClicked()替换getPlayer()吗?是的,很抱歉。已经有一段时间了。。。使用e.getWhoClicked()。这给了你一个人类实体。你必须把它投给玩家。
if (Commands.playersInInventory.contains((Player) (event.getWhoClicked()))) {
    event.setCancelled(true);
}