2015-05-31 42 views
-2

我正在嘗試構建一個bukkit插件來將XP級別存儲在EXP_Bottle中。 EXP_Bottle是可拋出的並釋放EXP球體。Bukkit:將EXP_Bottle項目材質更改爲消耗而不是可丟失

我想讓它消耗而不是可扔。

另外,我希望在玩家抓住新酒瓶後取代EXP,而不是在他將所有東西放在精製表中時,獲得正確的事件。

任何人都可以幫我嗎?

回答

2

我不認爲有可能將exp瓶更換爲消耗品,因爲minecraft客戶仍然認爲它是exp瓶。但是,您可以聽取PlayerInteractEvent並獲得類似的功能。例如:

@EventHandler 
public void interact(PlayerInteractEvent e) { 
    ItemStack itemStack = e.getItem(); 
    // Check to see if the item is a exp bottle 
    if (itemStack != null && e.getItem().getType().equals(Material.EXP_BOTTLE)) { 
     // Cancel the event so it will not be thrown 
     e.setCancelled(true); 

     Player player = e.getPlayer(); 

     // Add exp to the player 
     player.giveExp(1); 

     // Remove the bottle from the players hand 
     int newAmount = e.getItem().getAmount() - 1; 
     if (newAmount > 0) 
      player.getItemInHand().setAmount(newAmount); 
     else 
      player.setItemInHand(null); 
    } 
} 

另外,如果你想監聽當一個項目是製作可以使用CraftItemEvent

乾杯!

+0

它可以工作,但我有兩個奇怪的行爲: 1-在最後一個項目,消失,但如果我使用任何其他項目後,它會再次在同一庫存槽中獲取一個項目。 2-如果我離開並重新加入服務器,我無法使用正確創建的項目。在這種情況下,它會像通常的EXP_Bottle那樣將瓶子拋向地面。 – TheBigCheese

+1

Herm ...我無法複製這兩個bug中的任何一個,我找到了一個會拋出[NPE](http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException .html)(我編輯了我的帖子並修復了它)。第一個讓我覺得你有「幻影項目」,這意味着客戶端和服務器不同意一個項目。第二次嘗試添加一些調試消息,確保事件正在被調用,確保事件正在取消等。祝你好運,乾杯! –

+0

你認爲「幽靈」可能會受到優先級的影響嗎? – TheBigCheese

相關問題