你可以听PlayerInteractEvent
,检查它们是否右击一个书架,然后打开一个宝箱GUI
...你可以做这样的:
@EventHandler //ALWAYS use this before events
public void playerInteract(PlayerInteractEvent e){ //listen for PlayerInteractEvent
if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK){ //make sure the player right-clicked a block
if(e.getClickedBlock().getType().equals(Material.BOOKSHELF)){ //make sure the player right-clicked a bookshelf
Player p = e.getPlayer(); //get the player
if(p.getItemInHand() != null){ //make sure the player has something in their hand
if(p.getItemInHand().getType().equals(Material.WRITTEN_BOOK)){ //check if the player has a written book in their inventory
//Inventory inv = Bukkit.createInventory(null, <size (should be divisible by 9)>, "name"); //create the inventory
//An example of creating the inventory would be:
Inventory inv = Bukkit.createInventory(null, 36, "Disposal");
}
}
}
}
}
这应该是所有你需要做的。只要确保您在使用注册在onEnable()
方法事件:
this.getServer().getPluginManager().registerEvents(new HandlerClassName(), this);
,并确保处理程序类implements Listener
。
漂亮的多,这是第一个上面的代码做的是:
- 倾听
PlayerInteractEvent
- 确保参与的互动活动
Right Clicked
块
- 玩家确保正确的被点击的块是
Book Shelf
- 确保玩家手中的物品不是
null
- Ma确保玩家手中的物品是
Written Book
- 创建一个名为
Disposal
的新清单,其中36
插槽或9 x 4
插槽。
然后,当玩家将物品放入胸部并关闭它时,物品将被销毁!
如果你想它只是删除这本书,当用户右击胸部,只需使用:
p.setItemInHand(new ItemStack(Material.AIR));
取而代之的是:
Inventory inv = Bukkit.createInventory(null, 36, "Disposal");