将 itemstack 移动到其他库存时的事件
Event when moving itemstack to other inventory
每次玩家发出特定命令时,都会根据 MySQL table 的内容生成虚拟库存,然后显示给玩家。没问题。
现在,当玩家将物品从这个虚拟物品栏移动到他自己的物品栏时,它应该检查物品是否仍在数据库中。如果没有,则该事件应被取消。当玩家将物品从他的物品栏移动到虚拟物品栏时,它们应该被添加到数据库中 table.
我对 MySQL 查询没有问题,但我不知道应该为事件使用哪个 EventHandler(Player Inv -> Virtual Inv,Virtual Inv -> Player Inv)。
Bukkit Inventory Events
InventoryMoveItemEvent
会很完美,但只有当方块(漏斗、发射器等)移动物品而不是玩家时才会调用它。
InventoryClickEvent
不是解决方案,因为将物品移动到另一个库存有多种不同的可能性:
- 按住 Shift 键单击只会调用一次事件
- 拿起物品并使用光标将其移动到另一个库存将调用该事件两次。
- 拿起一个物品堆并将其物品分散到其他物品栏中会调用
InventoryClickEvent
和 InventoryDragEvent
。
- 等等...
有人知道我如何解决这个问题吗?
对此我有一个简单的解决方案,使用 InventoryCloseEvent
然后在关闭时检查清单内容是否与数据库中的内容相同,如果不相同则使用新清单更新数据库并反之亦然。
每次玩家发出特定命令时,都会根据 MySQL table 的内容生成虚拟库存,然后显示给玩家。没问题。
现在,当玩家将物品从这个虚拟物品栏移动到他自己的物品栏时,它应该检查物品是否仍在数据库中。如果没有,则该事件应被取消。当玩家将物品从他的物品栏移动到虚拟物品栏时,它们应该被添加到数据库中 table.
我对 MySQL 查询没有问题,但我不知道应该为事件使用哪个 EventHandler(Player Inv -> Virtual Inv,Virtual Inv -> Player Inv)。 Bukkit Inventory Events
InventoryMoveItemEvent
会很完美,但只有当方块(漏斗、发射器等)移动物品而不是玩家时才会调用它。
InventoryClickEvent
不是解决方案,因为将物品移动到另一个库存有多种不同的可能性:
- 按住 Shift 键单击只会调用一次事件
- 拿起物品并使用光标将其移动到另一个库存将调用该事件两次。
- 拿起一个物品堆并将其物品分散到其他物品栏中会调用
InventoryClickEvent
和InventoryDragEvent
。 - 等等...
有人知道我如何解决这个问题吗?
对此我有一个简单的解决方案,使用 InventoryCloseEvent
然后在关闭时检查清单内容是否与数据库中的内容相同,如果不相同则使用新清单更新数据库并反之亦然。