package mods.eln.item.electricalitem;
import mods.eln.Eln;
import mods.eln.generic.GenericItemUsingDamageDescriptor;
import mods.eln.item.electricalinterface.IItemEnergyBattery;
import mods.eln.misc.Utils;
import mods.eln.misc.UtilsClient;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
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 ElectricalTool extends GenericItemUsingDamageDescriptor implements IItemEnergyBattery {
int light, range;
double energyStorage, energyPerBlock, chargePower;
float strengthOff, strengthOn;
ResourceLocation rIcon;
public ElectricalTool(String name, float strengthOn, float strengthOff,
double energyStorage, double energyPerBlock, double chargePower) {
super(name);
this.chargePower = chargePower;
this.energyPerBlock = energyPerBlock;
this.energyStorage = energyStorage;
this.strengthOn = strengthOn;
this.strengthOff = strengthOff;
rIcon = new ResourceLocation("eln", "textures/items/" + name.replace(" ", "").toLowerCase() + ".png");
}
@Override
public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) {
if (entityLiving.worldObj.isRemote) return false;
Eln.itemEnergyInventoryProcess.addExclusion(this, 2);
return super.onEntitySwing(entityLiving, stack);
}
@Override
public boolean onBlockDestroyed(ItemStack stack, World w, Block block, int x, int y, int z, EntityLivingBase entity) {
if (getStrVsBlock(stack, block) == strengthOn) {
double e = getEnergy(stack) - energyPerBlock;
if (e < 0) e = 0;
setEnergy(stack, e);
}
Utils.println("destroy");
return true;
}
// public static final Block[] blocksEffectiveAgainst = new Block[] {Block.cobblestone, Block.stoneDoubleSlab, Block.stoneSingleSlab, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockIron, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.netherrack, Block.oreLapis, Block.blockLapis, Block.oreRedstone, Block.oreRedstoneGlowing, Block.rail, Block.railDetector, Block.railPowered, Block.railActivator};
public static final Block[] blocksEffectiveAgainst = new Block[]{Blocks.grass, Blocks.dirt, Blocks.sand, Blocks.gravel, Blocks.snow, Blocks.snow, Blocks.clay, Blocks.farmland, Blocks.soul_sand, Blocks.mycelium};
//@Override
//public abstract float getStrVsBlock(ItemStack stack, Block block);
public float getStrength(ItemStack stack) {
return getEnergy(stack) >= energyPerBlock ? strengthOn : strengthOff;
}
@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;
}
boolean getPowerOn(ItemStack stack) {
return getNbt(stack).getBoolean("powerOn");
}
void setPowerOn(ItemStack stack, boolean value) {
getNbt(stack).setBoolean("powerOn", value);
}
/*
@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()){
boolean status = ! getPowerOn(stack);
if(status)
((EntityPlayer) entity).addChatMessage("Flashlight ON");
else
((EntityPlayer) entity).addChatMessage("Flashlight OFF");
setPowerOn(stack, status);
}
super.onUpdate(stack, world, entity, par4, par5);
}
*/
@Override
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) {
super.addInformation(itemStack, entityPlayer, list, par4);
if (itemStack != null)
list.add(tr("Stored energy: %1$J (%2$%)", getEnergy(itemStack),
(int) (getEnergy(itemStack) / energyStorage * 100)));
//list.add("Power button is " + (getPowerOn(itemStack) ? "ON" : "OFF"));
}
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) {
super.renderItem(type, item, data);
if (type == ItemRenderType.INVENTORY) {
UtilsClient.drawEnergyBare(type, (float) (getEnergy(item) / getEnergyMax(item)));
}
}
@Override
public void electricalItemUpdate(ItemStack stack, double time) {
}
}