package mcjty.rftools.items.dimensionmonitor; import cofh.api.energy.IEnergyContainerItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mcjty.rftools.RFTools; import mcjty.rftools.blocks.dimlets.DimletConfiguration; import mcjty.rftools.dimension.DimensionTickEvent; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import java.util.List; public class PhasedFieldGeneratorItem extends Item implements IEnergyContainerItem { private int capacity; private int maxReceive; private int maxExtract; private IIcon powerLevel[] = new IIcon[9]; public PhasedFieldGeneratorItem() { setMaxStackSize(1); capacity = DimletConfiguration.PHASEDFIELD_MAXENERGY; maxReceive = DimletConfiguration.PHASEDFIELD_RECEIVEPERTICK; maxExtract = DimletConfiguration.PHASEDFIELD_CONSUMEPERTICK * DimensionTickEvent.MAXTICKS; } @Override public int getMaxItemUseDuration(ItemStack stack) { return 1; } @Override public void registerIcons(IIconRegister iconRegister) { for (int i = 0 ; i <= 8 ; i++) { powerLevel[i] = iconRegister.registerIcon(RFTools.MODID + ":phasedFieldGeneratorItemL" + i); } } @SideOnly(Side.CLIENT) @Override public IIcon getIconIndex(ItemStack stack) { NBTTagCompound tagCompound = stack.getTagCompound(); int energy = 0; if (tagCompound != null) { energy = tagCompound.getInteger("Energy"); } int level = (9*energy) / DimletConfiguration.PHASEDFIELD_MAXENERGY; if (level < 0) { level = 0; } else if (level > 8) { level = 8; } return powerLevel[8-level]; } @Override public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean whatIsThis) { super.addInformation(itemStack, player, list, whatIsThis); NBTTagCompound tagCompound = itemStack.getTagCompound(); if (tagCompound != null) { list.add(EnumChatFormatting.BLUE + "Energy: " + tagCompound.getInteger("Energy") + " RF"); } list.add("This RF/charged module gives a temporary"); list.add("protection while visiting an unpowered dimension."); list.add("Use at your own risk and don't let power run out!"); } @Override public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { if (container.stackTagCompound == null) { container.stackTagCompound = new NBTTagCompound(); } int energy = container.stackTagCompound.getInteger("Energy"); int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); if (!simulate) { energy += energyReceived; container.stackTagCompound.setInteger("Energy", energy); } return energyReceived; } @Override public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { return 0; } int energy = container.stackTagCompound.getInteger("Energy"); int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); if (!simulate) { energy -= energyExtracted; container.stackTagCompound.setInteger("Energy", energy); } return energyExtracted; } @Override public int getEnergyStored(ItemStack container) { if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { return 0; } return container.stackTagCompound.getInteger("Energy"); } @Override public int getMaxEnergyStored(ItemStack container) { return capacity; } }