2014-03-27 40 views
0

服务器所有者要求我为服务器编写一个简单的插件。所需要的是,如果你点击书架上的书架,它会打开一个箱子。当这个人关闭那个箱子时,所有放在其中的书都被销毁。简单的Bukkit插件 - 打开箱子

我了解bukkit插件开发的基础知识,但其website上的说明非常复杂。我明白,我必须注册在手的玩家项目确实是一本书,与此代码:

Player player = event.getPlayer(); 
if (player.getItemInHand().getType() == Material.WRITTEN_BOOK) { 
// Do other stuff in here 
} 

但是,如果它会更容易的插件是按下一个按钮和书手被摧毁,请你让我知道,并帮助我去做这些步骤。

回答

0

你可以听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");