package buildcraftAdditions.armour; import java.util.List; import org.apache.commons.lang3.text.WordUtils; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import cofh.api.energy.IEnergyContainerItem; import buildcraftAdditions.BuildcraftAdditions; import buildcraftAdditions.client.models.BackPackModel; import buildcraftAdditions.items.ItemPoweredBase; import buildcraftAdditions.reference.ItemLoader; import buildcraftAdditions.utils.IHUD; import buildcraftAdditions.utils.Utils; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Eureka is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ public class ItemKineticBackpack extends ItemArmor implements IEnergyContainerItem, IHUD { public ItemKineticBackpack() { super(ArmorMaterial.IRON, BuildcraftAdditions.proxy.addArmor("kineticBackpack"), 1); setUnlocalizedName("kineticBackpack"); GameRegistry.registerItem(this, "kineticBackpack"); } @Override public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { setDamage(itemStack, 0); ItemStack stack = player.getCurrentEquippedItem(); ItemStack capsule = null; /*if (getInstalledCapsule(itemStack, -1) > 0) Utils.dropItemstacksAtEntity(player, Utils.getDropsForCapsule(removeCapsule(stack, -1)));*/ if (stack != null && stack.getItem() instanceof IEnergyContainerItem) { IEnergyContainerItem eci = (IEnergyContainerItem) stack.getItem(); int transfer = Math.min(eci.receiveEnergy(player.getCurrentEquippedItem(), getEnergyStored(itemStack), true), 20000); eci.receiveEnergy(player.getCurrentEquippedItem(), transfer, false); extractEnergy(itemStack, transfer, false); } } @Override public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { int recieved = maxReceive; if (recieved > getMaxEnergyStored(container) - getEnergyStored(container)) recieved = getMaxEnergyStored(container) - getEnergyStored(container); if (!simulate) setEnergy(container, getEnergyStored(container) + recieved); return recieved; } @Override public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { int max = Math.min(getMaxEnergyStored(container), maxExtract); max = Math.min(max, getEnergyStored(container)); if (!simulate) setEnergy(container, getEnergyStored(container) - max); return max; } @Override public int getEnergyStored(ItemStack container) { tagTest(container); return container.stackTagCompound.getInteger("energy"); } @Override public int getMaxEnergyStored(ItemStack container) { tagTest(container); return container.stackTagCompound.getInteger("maxEnergy"); } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean sneaking) { list.add(Utils.getRFInfoTooltip(getEnergyStored(stack), getMaxEnergyStored(stack))); for (String line : WordUtils.wrap(Utils.localize("backpack.info"), 60).split(System.getProperty("line.separator"))) list.add(Utils.colorText(line, EnumChatFormatting.AQUA)); } private void tagTest(ItemStack stack) { if (stack.stackTagCompound == null) { stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setInteger("maxEnergy", 0); stack.stackTagCompound.setInteger("energy", 0); for (int t = 0; t < 4; t++) { stack.stackTagCompound.setInteger("capsule" + t, 0); } } } private void setEnergy(ItemStack stack, int energy) { tagTest(stack); stack.stackTagCompound.setInteger("energy", energy); } private void setMaxEnergy(ItemStack stack, int capacity) { tagTest(stack); stack.stackTagCompound.setInteger("maxEnergy", capacity); } public void installCapsule(ItemStack backpack, int slot, ItemStack capsule) { tagTest(backpack); int capsuleType = 0; if (capsule.getItem() == ItemLoader.powerCapsuleTier1) { capsuleType = 1; } else if (capsule.getItem() == ItemLoader.powerCapsuleTier2) { capsuleType = 2; } else if (capsule.getItem() == ItemLoader.powerCapsuleTier3) { capsuleType = 3; } if (capsuleType > 0) { ItemPoweredBase base = (ItemPoweredBase) capsule.getItem(); setMaxEnergy(backpack, getMaxEnergyStored(backpack) + base.getMaxEnergyStored(capsule)); receiveEnergy(backpack, base.getEnergyStored(capsule), false); backpack.stackTagCompound.setInteger("capsule" + slot, capsuleType); } } public int getInstalledCapsule(ItemStack stack, int slot) { tagTest(stack); return stack.stackTagCompound.getInteger("capsule" + slot); } public int removeCapsule(ItemStack stack, int slot) { tagTest(stack); int tier = stack.stackTagCompound.getInteger("capsule" + slot); stack.stackTagCompound.setInteger("capsule" + slot, 0); int capacity = 0; for (int t = 0; t < 4; t++) { int capsuletier = stack.stackTagCompound.getInteger("capsule" + t); if (capsuletier == 1) { capacity += 100000; } else if (capsuletier == 2) { capacity += 300000; } else if (capsuletier == 3) { capacity += 1000000; } } setMaxEnergy(stack, capacity); return tier; } @Override @SideOnly(Side.CLIENT) public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { return BackPackModel.INSTANCE2; } @Override public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { return "bcadditions:textures/models/armor/kineticBackpack_layer_1.png"; } @Override public void registerIcons(IIconRegister register) { } @Override public boolean isDamageable() { return false; } @Override public String getInfo(ItemStack stack) { return EnumChatFormatting.GOLD + Utils.localize("hud.backpack") + " " + Utils.getRFPercentTooltip(getEnergyStored(stack), getMaxEnergyStored(stack)); } }