package mods.eln.item.electricalitem; import mods.eln.item.electricalinterface.IItemEnergyBattery; import mods.eln.misc.Utils; import mods.eln.misc.UtilsClient; import mods.eln.wiki.Data; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.client.IItemRenderer.ItemRenderType; import net.minecraftforge.client.IItemRenderer.ItemRendererHelper; import java.util.List; import static mods.eln.i18n.I18N.tr; public class ElectricalLampItem extends LampItem implements IItemEnergyBattery { int lightMin, rangeMin; int lightMax, rangeMax; double energyStorage, dischargeMin, dischargeMax, chargePower; ResourceLocation on, off; public ElectricalLampItem(String name, int lightMin, int rangeMin, double dischargeMin, int lightMax, int rangeMax, double dischargeMax, double energyStorage, double chargePower) { super(name); this.lightMin = lightMin; this.rangeMin = rangeMin; this.lightMax = lightMax; this.rangeMax = rangeMax; this.chargePower = chargePower; this.dischargeMin = dischargeMin; this.dischargeMax = dischargeMax; this.energyStorage = energyStorage; on = new ResourceLocation("eln", "textures/items/" + name.replace(" ", "").toLowerCase() + "on.png"); off = new ResourceLocation("eln", "textures/items/" + name.replace(" ", "").toLowerCase() + "off.png"); // off = new ResourceLocation("eln", "/model/StoneFurnace/all.png"); } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); Data.addPortable(newItemStack()); Data.addLight(newItemStack()); } @Override int getRange(ItemStack stack) { return getLightState(stack) == 1 ? rangeMin : rangeMax; } @Override int getLight(ItemStack stack) { double energy = getEnergy(stack); int state = getLightState(stack); double power = 0; switch (state) { case 1: power = dischargeMin; break; case 2: power = dischargeMax; break; } if (energy > power) { //setEnergy(stack, energy - power); return getLightLevel(stack); } else { //setEnergy(stack,0); return 0; } } @Override public NBTTagCompound getDefaultNBT() { NBTTagCompound nbt = new NBTTagCompound(); nbt.setDouble("energy", 0); nbt.setBoolean("powerOn", false); nbt.setInteger("rand", (int) (Math.random() * 0xFFFFFFF)); return nbt; } int getLightState(ItemStack stack) { return getNbt(stack).getInteger("LightState"); } void setLightState(ItemStack stack, int value) { getNbt(stack).setInteger("LightState", value); } int getLightLevel(ItemStack stack) { return getLightState(stack) == 1 ? lightMin : lightMax; } /* @Override public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { if(world.isRemote == false && entity instanceof EntityPlayer && ((EntityPlayer) entity).inventory.getCurrentItem() == stack && Eln.playerManager.get((EntityPlayer) entity).getInteractRise()){ int lightState = getLightState(stack) + 1; if(lightState > 1) lightState = 0; //((EntityPlayer) entity).addChatMessage("Flashlight !!!"); switch (lightState) { case 0: Utils.addChatMessage((EntityPlayerMP)entity,"Flashlight OFF"); break; case 1: Utils.addChatMessage((EntityPlayerMP)entity,"Flashlight ON"); break; case 2: Utils.addChatMessage((EntityPlayerMP)entity,"Flashlight ON-2"); break; default: break; } setLightState(stack, lightState); } super.onUpdate(stack, world, entity, par4, par5); }*/ @Override public ItemStack onItemRightClick(ItemStack s, World w, EntityPlayer p) { if (!w.isRemote) { int lightState = getLightState(s) + 1; if (lightState > 1) lightState = 0; //((EntityPlayer) entity).addChatMessage("Flashlight !!!"); switch (lightState) { case 0: Utils.addChatMessage((EntityPlayerMP) p, "Flashlight OFF"); break; case 1: Utils.addChatMessage((EntityPlayerMP) p, "Flashlight ON"); break; case 2: Utils.addChatMessage((EntityPlayerMP) p, "Flashlight ON-2"); break; default: break; } setLightState(s, lightState); } return s; } @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); list.add(tr("Discharge power: %1$W", (int) dischargeMin)); if (itemStack != null) { list.add(tr("Stored Energy: %1$J (%2$%)", getEnergy(itemStack), (int) (getEnergy(itemStack) / energyStorage * 100))); list.add(tr("State:") + " " + (getLightState(itemStack) != 0 ? tr("On") : tr("Off"))); } } /* @Override public double putEnergy(ItemStack stack, double energy, double time) { double hit = Math.min(energy,Math.min(energyStorage - getEnergy(stack), chargePower * time)); setEnergy(stack, getEnergy(stack) + hit); return energy - hit; } @Override public boolean isFull(ItemStack stack) { return getEnergy(stack) == energyStorage; } */ public double getEnergy(ItemStack stack) { return getNbt(stack).getDouble("energy"); } public void setEnergy(ItemStack stack, double value) { getNbt(stack).setDouble("energy", value); } @Override public double getEnergyMax(ItemStack stack) { return energyStorage; } @Override public double getChargePower(ItemStack stack) { return chargePower; } @Override public double getDischagePower(ItemStack stack) { return 0; } @Override public int getPriority(ItemStack stack) { return 0; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { if (type == ItemRenderType.INVENTORY) return false; return true; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { UtilsClient.drawIcon(type, (getLight(item) != 0 && getLightState(item) != 0 ? on : off)); if (type == ItemRenderType.INVENTORY) { UtilsClient.drawEnergyBare(type, (float) (getEnergy(item) / getEnergyMax(item))); } } @Override public void electricalItemUpdate(ItemStack stack, double time) { double energy = getEnergy(stack); int state = getLightState(stack); double power = 0; switch (state) { case 1: power = dischargeMin * time; break; case 2: power = dischargeMax * time; break; } if (energy > power) setEnergy(stack, energy - power); else setEnergy(stack, 0); } }