package mods.eln.item.electricalitem;
import mods.eln.generic.genericArmorItem;
import mods.eln.item.electricalinterface.IItemEnergyBattery;
import mods.eln.misc.Utils;
import mods.eln.wiki.Data;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraftforge.common.ISpecialArmor;
import java.util.List;
import static mods.eln.i18n.I18N.tr;
public class ElectricalArmor extends genericArmorItem implements IItemEnergyBattery, ISpecialArmor {
double ratioMax, ratioMaxEnergy, energyPerDamage;
double energyStorage, chargePower;
public ElectricalArmor(ArmorMaterial par2EnumArmorMaterial,
int par3,
ArmourType type,
String t1,
String t2,//String icon,
double energyStorage,
double chargePower,
double ratioMax,
double ratioMaxEnergy,
double energyPerDamage) {
super(par2EnumArmorMaterial, par3, type, t1, t2);
//rIcon = new ResourceLocation("eln", icon);
this.chargePower = chargePower;
this.energyStorage = energyStorage;
this.ratioMax = ratioMax;
this.ratioMaxEnergy = ratioMaxEnergy;
this.energyPerDamage = energyPerDamage;
Data.addPortable(new ItemStack(this));
}
@Override
public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
return new ArmorProperties(100, Math.min(1.0, getEnergy(armor) / ratioMaxEnergy) * ratioMax, (int) (getEnergy(armor) / energyPerDamage * 25D));
}
@Override
public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
return (int) (Math.min(1.0, getEnergy(armor) / ratioMaxEnergy) * ratioMax * 20);
}
@Override
public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
double e = getEnergy(stack);
e = Math.max(0.0, e - damage * energyPerDamage);
setEnergy(stack, e);
Utils.println("armor hit damage=" + damage + " energy=" + e + " energyLost=" + damage * energyPerDamage);
}
public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
return false;
}
@Override
public boolean hasColor(ItemStack par1ItemStack) {
return false;
}
public NBTTagCompound getDefaultNBT() {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setDouble("energy", 0);
nbt.setBoolean("powerOn", false);
nbt.setInteger("rand", (int) (Math.random() * 0xFFFFFFF));
return nbt;
}
protected NBTTagCompound getNbt(ItemStack stack) {
NBTTagCompound nbt = stack.getTagCompound();
if (nbt == null) {
stack.setTagCompound(nbt = getDefaultNBT());
}
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 addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) {
super.addInformation(itemStack, entityPlayer, list, par4);
list.add(tr("Charge power: %1$W", (int) chargePower));
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 void electricalItemUpdate(ItemStack stack, double time) {
}
@Override
public int getItemEnchantability() {
return 0;
}
}