package chbachman.armour.upgrade.upgradeList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.util.FoodStats; import net.minecraft.world.World; import chbachman.api.configurability.Configurable; import chbachman.api.configurability.ConfigurableField; import chbachman.api.item.IModularItem; import chbachman.api.nbt.helper.NBTInteger; import chbachman.api.upgrade.Upgrade; import chbachman.api.util.ArmourSlot; import chbachman.armour.util.ConfigHelper; public class UpgradeAutoFeeder extends Upgrade { // Data Storage private NBTInteger storedFood = new NBTInteger("foodLevel", 0); // Configrability @Configurable public ConfigurableField foodAmount = new ConfigurableField(this, "foodAmount", 100); // Config Options private int absorbing; private int eating; private int amountToHold; public UpgradeAutoFeeder() { super("feeder"); } @Override public void registerConfigOptions() { absorbing = ConfigHelper.get(ConfigHelper.ENERGY, this, "cost for absorbing food", 100); eating = ConfigHelper.get(ConfigHelper.ENERGY, this, "cost for eating food", 100); amountToHold = ConfigHelper.get(ConfigHelper.OTHER, this, "amount of food to hold", 20); } @Override public boolean isCompatible(IModularItem item, ItemStack stack, int armourType) { return armourType == ArmourSlot.HELMET.id; } @Override public int onTick(World world, EntityPlayer player, ItemStack stack, ArmourSlot slot) { int modifiedAmount = amountToHold * foodAmount.get(stack).getAmount(); if (storedFood.get(stack) < modifiedAmount) { // Grab the food from the // player's inventory. for (int i = 0; i < player.inventory.mainInventory.length; i++) { ItemStack playerStack = player.inventory.mainInventory[i]; if (playerStack == null) { continue; } if (playerStack.getItem() instanceof ItemFood) { ItemFood food = (ItemFood) playerStack.getItem(); int amountToStore = food.func_150905_g(playerStack); if (modifiedAmount - storedFood.get(stack) >= amountToStore) { // If // we // can // store // food storedFood.set(stack, storedFood.get(stack) + amountToStore); playerStack.stackSize--; if (playerStack.stackSize <= 0) { player.inventory.mainInventory[i] = null; } return absorbing; } } } } FoodStats food = player.getFoodStats(); // Feed the player if necesary. if (food.needFood() && this.storedFood.get(stack) > 0) { int foodNeeded = 20 - food.getFoodLevel(); food.addStats(foodNeeded, 0); this.storedFood.set(stack, this.storedFood.get(stack) - foodNeeded); return eating; } return 0; } }