| package universalelectricity.prefab; | |
| import java.util.List; | |
| import net.minecraft.src.CreativeTabs; | |
| import net.minecraft.src.Entity; | |
| import net.minecraft.src.EntityPlayer; | |
| import net.minecraft.src.Item; | |
| import net.minecraft.src.ItemStack; | |
| import net.minecraft.src.NBTTagCompound; | |
| import net.minecraft.src.NBTTagFloat; | |
| import net.minecraft.src.World; | |
| import universalelectricity.core.electricity.ElectricInfo; | |
| import universalelectricity.core.electricity.ElectricInfo.ElectricUnit; | |
| import universalelectricity.core.implement.IItemElectric; | |
| /** | |
| * 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((int) this.getMaxJoules()); | |
| this.setNoRepair(); | |
| } | |
| /** | |
| * Allows items to add custom lines of information to the mouseover description. If you want to | |
| * add more information to your item, you can super.addInformation() to keep the electiricty | |
| * info in the item info bar. | |
| */ | |
| @Override | |
| public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) | |
| { | |
| String color = ""; | |
| double joules = this.getJoules(par1ItemStack); | |
| if (joules <= this.getMaxJoules() / 3) | |
| { | |
| color = "\u00a74"; | |
| } | |
| else if (joules > this.getMaxJoules() * 2 / 3) | |
| { | |
| color = "\u00a72"; | |
| } | |
| else | |
| { | |
| color = "\u00a76"; | |
| } | |
| par3List.add(color + ElectricInfo.getDisplay(joules, ElectricUnit.JOULES) + " - " + Math.round((joules / this.getMaxJoules()) * 100) + "%"); | |
| } | |
| /** | |
| * Make sure you super this method! | |
| */ | |
| @Override | |
| public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) | |
| { | |
| // Makes sure the damage is set correctly | |
| // for this electric item! | |
| ItemElectric item = ((ItemElectric) par1ItemStack.getItem()); | |
| item.setJoules(item.getJoules(par1ItemStack), par1ItemStack); | |
| } | |
| /** | |
| * 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 par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) | |
| { | |
| par1ItemStack = this.getUncharged(); | |
| } | |
| @Override | |
| public double onReceive(double amps, double voltage, ItemStack itemStack) | |
| { | |
| double rejectedElectricity = Math.max((this.getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1)) - this.getMaxJoules(), 0); | |
| this.setJoules(this.getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1) - rejectedElectricity, itemStack); | |
| return rejectedElectricity; | |
| } | |
| @Override | |
| public double onUse(double joulesNeeded, ItemStack itemStack) | |
| { | |
| double electricityToUse = Math.min(this.getJoules(itemStack), joulesNeeded); | |
| this.setJoules(this.getJoules(itemStack) - electricityToUse, itemStack); | |
| return electricityToUse; | |
| } | |
| public boolean canReceiveElectricity() | |
| { | |
| return true; | |
| } | |
| public boolean canProduceElectricity() | |
| { | |
| return false; | |
| } | |
| /** | |
| * This function sets the electriicty. Do not directly call this function. Try to use | |
| * onReceiveElectricity or onUseElectricity instead. | |
| * | |
| * @param wattHours | |
| * - The amount of electricity in joules | |
| */ | |
| @Override | |
| public void setJoules(double wattHours, Object... data) | |
| { | |
| if (data[0] instanceof ItemStack) | |
| { | |
| ItemStack itemStack = (ItemStack) data[0]; | |
| // Saves the frequency in the | |
| // itemstack | |
| if (itemStack.stackTagCompound == null) | |
| { | |
| itemStack.setTagCompound(new NBTTagCompound()); | |
| } | |
| double electricityStored = Math.max(Math.min(wattHours, this.getMaxJoules()), 0); | |
| itemStack.stackTagCompound.setDouble("electricity", electricityStored); | |
| itemStack.setItemDamage((int) (getMaxJoules() - electricityStored)); | |
| } | |
| } | |
| /** | |
| * This function is called to get the electricity stored in this item | |
| * | |
| * @return - The amount of electricity stored in watts | |
| */ | |
| @Override | |
| public double getJoules(Object... data) | |
| { | |
| if (data[0] instanceof ItemStack) | |
| { | |
| ItemStack itemStack = (ItemStack) data[0]; | |
| if (itemStack.stackTagCompound == null) { return 0; } | |
| double electricityStored = 0; | |
| if (itemStack.stackTagCompound.getTag("electricity") instanceof NBTTagFloat) | |
| { | |
| electricityStored = itemStack.stackTagCompound.getFloat("electricity"); | |
| } | |
| else | |
| { | |
| electricityStored = itemStack.stackTagCompound.getDouble("electricity"); | |
| } | |
| itemStack.setItemDamage((int) (getMaxJoules() - electricityStored)); | |
| return electricityStored; | |
| } | |
| return -1; | |
| } | |
| /** | |
| * Returns an uncharged version of the electric item. Use this if you want the crafting recipe | |
| * to use a charged version of the electric item instead of an empty version of the electric | |
| * item | |
| * | |
| * @return The ItemStack of a fully charged electric item | |
| */ | |
| public ItemStack getUncharged() | |
| { | |
| ItemStack chargedItem = new ItemStack(this); | |
| chargedItem.setItemDamage((int) this.getMaxJoules()); | |
| return chargedItem; | |
| } | |
| public static ItemStack getUncharged(ItemStack itemStack) | |
| { | |
| if (itemStack.getItem() instanceof IItemElectric) | |
| { | |
| ItemStack chargedItem = itemStack.copy(); | |
| chargedItem.setItemDamage((int) ((IItemElectric) itemStack.getItem()).getMaxJoules()); | |
| return chargedItem; | |
| } | |
| return null; | |
| } | |
| @Override | |
| public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) | |
| { | |
| // Add an uncharged version of the | |
| // electric item | |
| ItemStack unchargedItem = new ItemStack(this, 1); | |
| unchargedItem.setItemDamage((int) this.getMaxJoules()); | |
| par3List.add(unchargedItem); | |
| // Add an electric item to the creative | |
| // list that is fully charged | |
| ItemStack chargedItem = new ItemStack(this, 1); | |
| this.setJoules(((IItemElectric) chargedItem.getItem()).getMaxJoules(), chargedItem); | |
| par3List.add(chargedItem); | |
| } | |
| } |