mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
175 lines
6.3 KiB
Java
175 lines
6.3 KiB
Java
package com.hbm.items.machine;
|
|
|
|
import java.util.List;
|
|
|
|
import com.hbm.interfaces.IOrderedEnum;
|
|
import com.hbm.items.ItemEnumMulti;
|
|
import com.hbm.lib.RefStrings;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.util.BobMathUtil;
|
|
import com.hbm.util.EnumUtil;
|
|
|
|
import api.hbm.energymk2.IBatteryItem;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
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.NBTTagCompound;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem {
|
|
|
|
public ItemBatteryPack() {
|
|
super(EnumBatteryPack.class, true, false);
|
|
this.setMaxStackSize(1);
|
|
this.setCreativeTab(MainRegistry.controlTab);
|
|
}
|
|
|
|
public static enum EnumBatteryPack {
|
|
BATTERY_REDSTONE ("battery_redstone", 100L, false),
|
|
BATTERY_LEAD ("battery_lead", 1_000L, false),
|
|
BATTERY_LITHIUM ("battery_lithium", 10_000L, false),
|
|
BATTERY_SODIUM ("battery_sodium", 50_000L, false),
|
|
BATTERY_SCHRABIDIUM ("battery_schrabidium", 250_000L, false),
|
|
BATTERY_QUANTUM ("battery_quantum", 1_000_000L, 20 * 60 * 60),
|
|
|
|
CAPACITOR_COPPER ("capacitor_copper", 1_000L, true),
|
|
CAPACITOR_GOLD ("capacitor_gold", 10_000L, true),
|
|
CAPACITOR_NIOBIUM ("capacitor_niobium", 100_000L, true),
|
|
CAPACITOR_TANTALUM ("capacitor_tantalum", 500_000L, true),
|
|
CAPACITOR_BISMUTH ("capacitor_bismuth", 2_500_000L, true),
|
|
CAPACITOR_SPARK ("capacitor_spark", 10_000_000L, true);
|
|
|
|
public ResourceLocation texture;
|
|
public long capacity;
|
|
public long chargeRate;
|
|
public long dischargeRate;
|
|
|
|
private EnumBatteryPack(String tex, long dischargeRate, boolean capacitor) {
|
|
this(tex,
|
|
capacitor ? (dischargeRate * 20 * 30) : (dischargeRate * 20 * 60 * 15),
|
|
capacitor ? dischargeRate : dischargeRate * 10,
|
|
dischargeRate);
|
|
}
|
|
|
|
private EnumBatteryPack(String tex, long dischargeRate, long duration) {
|
|
this(tex, dischargeRate * duration, dischargeRate * 10, dischargeRate);
|
|
}
|
|
|
|
private EnumBatteryPack(String tex, long capacity, long chargeRate, long dischargeRate) {
|
|
this.texture = new ResourceLocation(RefStrings.MODID, "textures/models/machines/" + tex + ".png");
|
|
this.capacity = capacity;
|
|
this.chargeRate = chargeRate;
|
|
this.dischargeRate = dischargeRate;
|
|
}
|
|
|
|
public boolean isCapacitor() { return this.ordinal() > BATTERY_QUANTUM.ordinal(); }
|
|
}
|
|
|
|
@Override
|
|
public void chargeBattery(ItemStack stack, long i) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") + i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setCharge(ItemStack stack, long i) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void dischargeBattery(ItemStack stack, long i) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", this.getMaxCharge(stack) - i);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public long getCharge(ItemStack stack) {
|
|
if(stack.hasTagCompound()) {
|
|
return stack.stackTagCompound.getLong("charge");
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", getMaxCharge(stack));
|
|
return stack.stackTagCompound.getLong("charge");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public long getMaxCharge(ItemStack stack) {
|
|
EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage());
|
|
return pack.capacity;
|
|
}
|
|
|
|
@Override
|
|
public long getChargeRate(ItemStack stack) {
|
|
EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage());
|
|
return pack.chargeRate;
|
|
}
|
|
|
|
@Override
|
|
public long getDischargeRate(ItemStack stack) {
|
|
EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage());
|
|
return pack.dischargeRate;
|
|
}
|
|
|
|
@Override public boolean showDurabilityBar(ItemStack stack) { return true; }
|
|
@Override public double getDurabilityForDisplay(ItemStack stack) { return 1D - (double) getCharge(stack) / (double) getMaxCharge(stack); }
|
|
|
|
@Override
|
|
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
|
|
long maxCharge = this.getMaxCharge(itemstack);
|
|
long chargeRate = this.getChargeRate(itemstack);
|
|
long dischargeRate = this.getDischargeRate(itemstack);
|
|
long charge = maxCharge;
|
|
|
|
if(itemstack.hasTagCompound()) charge = getCharge(itemstack);
|
|
|
|
list.add(EnumChatFormatting.GREEN + "Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE (" + (charge * 1000 / maxCharge / 10D) + "%)");
|
|
list.add(EnumChatFormatting.YELLOW + "Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t");
|
|
list.add(EnumChatFormatting.YELLOW + "Discharge rate: " + BobMathUtil.getShortNumber(dischargeRate) + "HE/t");
|
|
list.add(EnumChatFormatting.GOLD + "Time for full charge: " + (maxCharge / chargeRate / 20 / 60D) + "min");
|
|
list.add(EnumChatFormatting.GOLD + "Charge lasts for: " + (maxCharge / dischargeRate / 20 / 60D) + "min");
|
|
}
|
|
|
|
public static ItemStack makeEmptyBattery(ItemStack stack) {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", 0);
|
|
return stack;
|
|
}
|
|
|
|
public static ItemStack makeFullBattery(ItemStack stack) {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", ((ItemBatteryPack) stack.getItem()).getMaxCharge(stack));
|
|
return stack;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(Item item, CreativeTabs tab, List list) {
|
|
|
|
Enum[] order = theEnum.getEnumConstants();
|
|
if(order[0] instanceof IOrderedEnum) order = ((IOrderedEnum) order[0]).getOrder();
|
|
|
|
for(int i = 0; i < order.length; i++) {
|
|
list.add(makeEmptyBattery(new ItemStack(item, 1, order[i].ordinal())));
|
|
list.add(makeFullBattery(new ItemStack(item, 1, order[i].ordinal())));
|
|
}
|
|
}
|
|
}
|