将itemstack移动到其他库存时的事件

时间:2015-09-14 15:06:20

标签: bukkit inventory

每次玩家发出特定命令时,都会从MySQL表的内容生成虚拟广告资源,然后显示给玩家。这很好。

现在,当玩家将物品从此虚拟库存移动到他自己的库存时,应该检查这些物品是否仍在数据库中。如果没有,该事件应该被取消。当玩家将物品从库存移动到虚拟库存时,应将它们添加到数据库表中。

我对MySQL查询没有任何问题,但我不知道我应该为事件使用哪个EventHandler(Player Inv - > Virtual Inv,Virtual Inv - > Player Inv)。 Bukkit Inventory Events

InventoryMoveItemEvent会很完美,但只有当积木(料斗,分配器等)移动物品而不是玩家时才会调用它。

InventoryClickEvent不是解决方案,因为将项目移动到另一个广告资源有很多种可能性:

  • 按住Shift键单击只会调用一次
  • 将项目提取并使用光标将其移至其他库存将调用该事件两次。
  • 提取商品堆叠并将其商品分散到其他广告资源中会调用InventoryClickEventInventoryDragEvent
  • 等......

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我有一个简单的解决方案,使用InventoryCloseEvent,然后检查关闭是否库存内容与数据库中的内容相同,如果没有,则使用新库存更新数据库,反之亦然