package net.glowstone.block.itemtype; import net.glowstone.EventFactory; import net.glowstone.entity.GlowPlayer; import org.bukkit.GameMode; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.ItemStack; public class ItemFood extends ItemTimedUsage { private int foodLevel; private float saturation; public ItemFood(int foodLevel, float saturation) { this.foodLevel = foodLevel; this.saturation = saturation; } ItemFood() { // class should override getFoodLevel and getSaturation foodLevel = 0; saturation = 0; } @Override public boolean canOnlyUseSelf() { return true; } protected int getFoodLevel(ItemStack stack) { return foodLevel; } protected float getSaturation(ItemStack stack) { return saturation; } public boolean eat(GlowPlayer player, ItemStack item) { PlayerItemConsumeEvent event1 = new PlayerItemConsumeEvent(player, item); EventFactory.callEvent(event1); if (event1.isCancelled()) return false; FoodLevelChangeEvent event2 = new FoodLevelChangeEvent(player, getFoodLevel(item) + player.getFoodLevel()); EventFactory.callEvent(event2); if (!event2.isCancelled()) { player.setFoodLevelAndSaturation(event2.getFoodLevel(), getSaturation(item)); } player.setUsageItem(null); player.setUsageTime(0); if (item.getAmount() > 1) { item.setAmount(item.getAmount() - 1); } else { player.getInventory().clear(player.getInventory().getHeldItemSlot()); } return true; } @Override public void startUse(GlowPlayer player, ItemStack item) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { player.setUsageItem(item); player.setUsageTime(32); } } @Override public void endUse(GlowPlayer player, ItemStack item) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { player.setUsageItem(null); player.setUsageTime(0); } } }