丛林水塘
我监听了玩家点击背包事件,InventoryClickEvent。层层if/else + switch 过滤,最终确定Inventory的类型是铁砧。
那么,我放一张纸,重命名,最右侧的格子已经出现了新物品了,这个时候,我这样操作:
  1. System.out.println(event.getCurrentItem());
复制代码
结果给我输出 null。
我点击左侧物品,输出正常。点击中间的空格,输出是null(这我能理解,因为确实是空的),但点击右侧那个,输出就是null,不能理解为什么会这样。
我就是要获取到右侧那个物品,应该怎么办?
谢谢!

Neige
我想你应该尝试监听PrepareAnvilEvent

麻花awa
处理铁砧事件时,应该监听 PrepareAnvilEvent 事件
然后
event.getResult();
就能获取右侧物品
详细参考:
https://hub.spigotmc.org/javadoc ... pareAnvilEvent.html

丛林水塘
麻花awa 发表于 2022-2-10 19:22
处理铁砧事件时,应该监听 PrepareAnvilEvent 事件
然后
event.getResult();

好的,谢谢,一会我试一下

丛林水塘
麻花awa 发表于 2022-2-10 19:22
处理铁砧事件时,应该监听 PrepareAnvilEvent 事件
然后
event.getResult();

那这个事件只能是玩家手动把物品放在铁砧上的时候才会触发吗?
用Bukkit.createInventory做出来的铁砧界面无法触发?

超級寶寶
丛林水塘 发表于 2022-2-10 21:51
那这个事件只能是玩家手动把物品放在铁砧上的时候才会触发吗?
用Bukkit.createInventory做出来的铁砧界 ...

字面上看起來是指要在最旁邊 都會觸發

create_小鱼
超級寶寶 发表于 2022-2-10 22:25
字面上看起來是指要在最旁邊 都會觸發

麻烦用简体中文,开发者看不懂繁体字

麻花awa
试试获取铁砧的Inventory 然后调用 getItem

丛林水塘
麻花awa 发表于 2022-2-11 00:06
试试获取铁砧的Inventory 然后调用 getItem

“准备铁砧”事件在Bukkit.createInventory的情况下根本就不触发,怎么getInventory?

麻花awa
丛林水塘 发表于 2022-2-11 08:49
“准备铁砧”事件在Bukkit.createInventory的情况下根本就不触发,怎么getInventory? ...

点击事件里用

丛林水塘

没用,仍然为null

麻花awa
尝试使用 getCursor() 方法InventoryClickEvent (Spigot-API 1.18.1-R0.1-SNAPSHOT API) (spigotmc.org)


丛林水塘
麻花awa 发表于 2022-2-11 21:39
尝试使用 getCursor() 方法InventoryClickEvent (Spigot-API 1.18.1-R0.1-SNAPSHOT API) (spigotmc.org)

...

已经使用getCursor函数,ItemStack有了,但无论输出的是什么物品,返回值都是AIR(我println了一下返回的ItemStack),且尝试获取ItemMeta的getDisplayName再次抛出空指针异常,说原因是ItemMeta 物品元数据是null。
我插件这个event.setCancelled(true),玩家点击Inventory的时候,取消该事件,但似乎并不影响刚刚说的那些问题,即便设置成false,它也还是认为物品是空气。

第一页 上一页 下一页 最后一页