java - Minecraft Bukkit - 右键单击村民时的自定义 GUI
问题描述
我正在为我的Minecraft服务器制作 [Bed Wars][1] 插件。实际上我必须做一个定制的村民商店。
我已经制作了我的 GUI(使用 InventoryHolder 工具)。它正在使用命令。我在整个互联网上进行了搜索,但我没有在系统上找到任何东西,当你右键单击一个村民(我知道如何生成它)时,它正在显示我的 GUI。有什么想法呢?
编辑:我尝试使用 PlayerInteractAtEntityEvent,我创建了一个类,注册它并制作这个代码:
@EventHandler
public void interactAtEntity(PlayerInteractAtEntityEvent e) {
if (e.getRightClicked() == ShopVillager.villager1) {
System.out.println("UwU");
Player player = e.getPlayer();
FastShop shop = new FastShop(player);
player.openInventory(shop.getInventory());
e.setCancelled(true);
return;
}
}
它显示 gui 像 0.2 秒,但是在我关闭它并显示原始交易 gui 之后,我在控制台中得到了 uwu。
解决方案
这取决于您如何制作 PNJ(村民)。
- 生成 PNJ 作为默认实体
如果使用 生成它world.spawnEntity
,则可以使用默认的 spigot 事件。
例如,使用PlayerInteractAtEntityEvent
,您可以获得实体。
- 使用数据包生成实体
就个人而言,我使用数据包来检测PacketPlayInUseEntity
并获取具有 ID 的村民。
- 在全球范围内,通过多个交互事件并通过检查位置/最近的 PNJ,您将能够找到您正在寻找的那个。
推荐阅读
- php - 如何在while语句中只打印表中的一行?
- javascript - 正则表达式和 javascript,带点和零的数字
- python - 如何在 python 函数中指定传递的参数必须是函数
- java - 当 MockMvc 不可自动装配时,选择性地从 Spring Security 向 MockMvc 应用单个过滤器
- react-native - 找不到参数的方法 implementation() [com.google.android.gms:play-services-base:16.0.1]
- c - 搜索文件被程序拒绝
- android - 在我的 React Native 应用程序中,我无法检查用户何时从 Android 中的 Branch.io 链接安装应用程序,但会显示在 Liveview 中
- javascript - 如何在 java selenium 中使用 PageObjects 和 @FindBy 执行 javascript 元素
- c# - 我的 .NET 应用程序如何在我的应用程序读取文件时阻止其他进程写入文件?
- node.js - CORS 政策快递