java - 禁止移动,在 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
解决方案
使用静态列表(作为字段)存储所有打开 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);
}
这段代码应该可以正常工作,但我还没有测试过。如果它不起作用,请告诉我。
推荐阅读
- google-colaboratory - AlphaFold 内存不足错误,15 GB RAM 和 95 GB 磁盘空间未使用?
- python - 如何从元组列表创建字典而不覆盖键
- cmd - 为什么我的 WiX 生成的 msi 安装到错误的目录
- javascript - 图表不会从谷歌表格数据中绘制线条
- visual-studio-code - 用于复制代码段行的 VSCode 代码段语法
- r - 如何在 R 中执行 RCBD,每个块有多行?
- java - 如何打开像谷歌地图使用的全功能安卓照片选择器?
- vbscript - Vbscript 无法读取某些子键?
- azure-devops - 将 repo 动态检出到固定目录中
- r - 如何将复制的字符串保存在R中原子向量中用逗号分隔的多行中?