Arobcher
本帖最后由 Arobcher 于 2017-3-27 21:25 编辑

如题,我想写一个禁止铁砧修复一些物品的插件,但是有一个bug无法解决,导致玩家依然可以用 数字键盘(123456789 之内的)来直接移动放置到铁砧修复物品内.
代码
  1.         @EventHandler
  2.         public void onClick(InventoryClickEvent e){
  3.                 ItemStack stack = new ItemStack(Material.DIAMOND_PICKAXE);
  4.                 InventoryType type = e.getInventory().getType();
  5.                 if (type == InventoryType.ANVIL) {
  6.                         if (e.getCurrentItem().isSimilar(stack)) {
  7.                                 if (e.getClick().isKeyboardClick() || e.getClick() == ClickType.NUMBER_KEY) {
  8.                                         e.setCancelled(true);
  9.                                 }
  10.                                 e.setCancelled(true);
  11.                         }
  12.                 }
  13.         }
复制代码


这里拿 钻石镐为列子,一些基本的点击事件(左键 右键 Shift点击 之内的)都可以禁止,但是唯一的就是 数字键盘无法禁止.
用 getClick() 判断是否是 数字键盘 也不行! 求解决方法 谢谢!



602723113
嘛...其实呢有个事件是可以预览的

PrepareAnvilEvent.getResult()  //返回铁砧修复东西后得到的ItemStack
PrepareAnvilEvent.getInventory() //返回这个铁砧的Inventory,是个叫AnvilInventory的类好像是继承还是实现了Inventory类(还是接口)

相关网址: https://hub.spigotmc.org/javadoc ... pareAnvilEvent.html

Arobcher
602723113 发表于 2017-3-26 17:56
嘛...其实呢有个事件是可以预览的

PrepareAnvilEvent.getResult()  //返回铁砧修复东西后得到的ItemStack

我没有找到这个 Event 要换什么版本的服务端?

jiongjionger
监听InventoryClickEvent事件
通过e.getInventory().getType() == InventoryType.ANVIL判断是不是铁砧
通过InventoryAction.HOTBAR_MOVE_AND_READD.equals(e.getAction())判断是不是用数字键把快捷栏物品弄上去,是的话取消事件即可(e.setCancelled(true))

Arobcher
问题已解决!!!请勿再回复