-2
我正在嘗試構建一個bukkit插件來將XP級別存儲在EXP_Bottle中。 EXP_Bottle是可拋出的並釋放EXP球體。Bukkit:將EXP_Bottle項目材質更改爲消耗而不是可丟失
我想讓它消耗而不是可扔。
另外,我希望在玩家抓住新酒瓶後取代EXP,而不是在他將所有東西放在精製表中時,獲得正確的事件。
任何人都可以幫我嗎?
我正在嘗試構建一個bukkit插件來將XP級別存儲在EXP_Bottle中。 EXP_Bottle是可拋出的並釋放EXP球體。Bukkit:將EXP_Bottle項目材質更改爲消耗而不是可丟失
我想讓它消耗而不是可扔。
另外,我希望在玩家抓住新酒瓶後取代EXP,而不是在他將所有東西放在精製表中時,獲得正確的事件。
任何人都可以幫我嗎?
我不認爲有可能將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。
乾杯!
它可以工作,但我有兩個奇怪的行爲: 1-在最後一個項目,消失,但如果我使用任何其他項目後,它會再次在同一庫存槽中獲取一個項目。 2-如果我離開並重新加入服務器,我無法使用正確創建的項目。在這種情況下,它會像通常的EXP_Bottle那樣將瓶子拋向地面。 – TheBigCheese
Herm ...我無法複製這兩個bug中的任何一個,我找到了一個會拋出[NPE](http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException .html)(我編輯了我的帖子並修復了它)。第一個讓我覺得你有「幻影項目」,這意味着客戶端和服務器不同意一個項目。第二次嘗試添加一些調試消息,確保事件正在被調用,確保事件正在取消等。祝你好運,乾杯! –
你認爲「幽靈」可能會受到優先級的影響嗎? – TheBigCheese