首页 > 解决方案 > 禁止移动,在 Java 中的 Minecraft 上的 GUI 中添加项目

问题描述

信息: Spigot:1.12 & Java 版本:8

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

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

我的代码: 命令:https: //bin.readthedocs.fr/jeedur.txt ClickEvent:https ://bin.readthedocs.fr/nermit.txt

标签: javajava-8minecraft

解决方案


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

代码部分:

把它放在你的 Commands 类的顶部(从 java.util.* 导入 List 和 ArrayList)[Commands line 20]:

public static List<Player> playersInInventory = new ArrayList<>(); 

在您打开清单之前 [命令行 142]:

Commands.playersInInventory.add(player);

在您的 InventoryCloseEvent [创建此事件] 中:

Commands.playersInInventory.remove(event.getPlayer());

然后你可以在你的 InventoryClickEvent [你活动的唯一内容] 中使用它:

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

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


推荐阅读