| package universalelectricity.core.item; |
| |
| import java.util.List; |
| |
| import net.minecraft.creativetab.CreativeTabs; |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.item.Item; |
| import net.minecraft.item.ItemStack; |
| import net.minecraft.nbt.NBTBase; |
| import net.minecraft.nbt.NBTTagCompound; |
| import net.minecraft.nbt.NBTTagDouble; |
| import net.minecraft.nbt.NBTTagFloat; |
| import net.minecraft.world.World; |
| import universalelectricity.core.electricity.ElectricityDisplay; |
| import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit; |
| |
| /** Extend from this class if your item requires electricity or to be charged. Optionally, you can |
| * implement IItemElectric instead. |
| * |
| * @author Calclavia */ |
| public abstract class ItemElectric extends Item implements IItemElectric |
| { |
| public ItemElectric(int id) |
| { |
| super(id); |
| this.setMaxStackSize(1); |
| this.setMaxDamage(100); |
| this.setNoRepair(); |
| } |
| |
| @Override |
| public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) |
| { |
| String color = ""; |
| float joules = this.getElectricityStored(itemStack); |
| |
| if (joules <= this.getMaxElectricityStored(itemStack) / 3) |
| { |
| color = "\u00a74"; |
| } |
| else if (joules > this.getMaxElectricityStored(itemStack) * 2 / 3) |
| { |
| color = "\u00a72"; |
| } |
| else |
| { |
| color = "\u00a76"; |
| } |
| |
| list.add(color + ElectricityDisplay.getDisplayShort(joules, ElectricUnit.JOULES) + "/" + ElectricityDisplay.getDisplayShort(this.getMaxElectricityStored(itemStack), ElectricUnit.JOULES)); |
| } |
| |
| /** Makes sure the item is uncharged when it is crafted and not charged. Change this if you do |
| * not want this to happen! */ |
| @Override |
| public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer) |
| { |
| this.setElectricity(itemStack, 0); |
| } |
| |
| @Override |
| public float recharge(ItemStack itemStack, float energy, boolean doReceive) |
| { |
| float rejectedElectricity = Math.max((this.getElectricityStored(itemStack) + energy) - this.getMaxElectricityStored(itemStack), 0); |
| float energyToReceive = energy - rejectedElectricity; |
| |
| if (doReceive) |
| { |
| this.setElectricity(itemStack, this.getElectricityStored(itemStack) + energyToReceive); |
| } |
| |
| return energyToReceive; |
| } |
| |
| @Override |
| public float discharge(ItemStack itemStack, float energy, boolean doTransfer) |
| { |
| float energyToTransfer = Math.min(this.getElectricityStored(itemStack), energy); |
| |
| if (doTransfer) |
| { |
| this.setElectricity(itemStack, this.getElectricityStored(itemStack) - energyToTransfer); |
| } |
| |
| return energyToTransfer; |
| } |
| |
| @Override |
| public float getVoltage(ItemStack itemStack) |
| { |
| return 0.120f; |
| } |
| |
| @Override |
| public void setElectricity(ItemStack itemStack, float joules) |
| { |
| // Saves the frequency in the ItemStack |
| if (itemStack.getTagCompound() == null) |
| { |
| itemStack.setTagCompound(new NBTTagCompound()); |
| } |
| |
| float electricityStored = Math.max(Math.min(joules, this.getMaxElectricityStored(itemStack)), 0); |
| itemStack.getTagCompound().setFloat("electricity", electricityStored); |
| |
| /** Sets the damage as a percentage to render the bar properly. */ |
| itemStack.setItemDamage((int) (100 - (electricityStored / getMaxElectricityStored(itemStack)) * 100)); |
| } |
| |
| @Override |
| public float getTransfer(ItemStack itemStack) |
| { |
| return this.getMaxElectricityStored(itemStack) - this.getElectricityStored(itemStack); |
| } |
| |
| /** Gets the energy stored in the item. Energy is stored using item NBT */ |
| @Override |
| public float getElectricityStored(ItemStack itemStack) |
| { |
| if (itemStack.getTagCompound() == null) |
| { |
| itemStack.setTagCompound(new NBTTagCompound()); |
| } |
| float energyStored = 0f; |
| if (itemStack.getTagCompound().hasKey("electricity")) |
| { |
| NBTBase obj = itemStack.getTagCompound().getTag("electricity"); |
| if (obj instanceof NBTTagDouble) |
| { |
| energyStored = (float) ((NBTTagDouble) obj).data; |
| } |
| else if (obj instanceof NBTTagFloat) |
| { |
| energyStored = ((NBTTagFloat) obj).data; |
| } |
| } |
| |
| /** Sets the damage as a percentage to render the bar properly. */ |
| itemStack.setItemDamage((int) (100 - (energyStored / getMaxElectricityStored(itemStack)) * 100)); |
| return energyStored; |
| } |
| |
| @Override |
| public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) |
| { |
| par3List.add(ElectricItemHelper.getUncharged(new ItemStack(this))); |
| par3List.add(ElectricItemHelper.getWithCharge(new ItemStack(this), this.getMaxElectricityStored(new ItemStack(this)))); |
| } |
| } |