mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
193 lines
7.2 KiB
Java
193 lines
7.2 KiB
Java
package com.hbm.items.machine;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
|
|
import com.hbm.inventory.fluid.FluidType;
|
|
import com.hbm.inventory.fluid.Fluids;
|
|
import com.hbm.inventory.material.Mats;
|
|
import com.hbm.inventory.material.NTMMaterial;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.lib.RefStrings;
|
|
import com.hbm.util.BobMathUtil;
|
|
import com.hbm.util.EnumUtil;
|
|
import com.hbm.util.i18n.I18nUtil;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
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.IIcon;
|
|
|
|
public class ItemICFPellet extends Item {
|
|
|
|
protected IIcon iconBG;
|
|
|
|
public static enum EnumICFFuel {
|
|
|
|
HYDROGEN( 0x4040FF, 1.00D, 0.85D, 1.00D),
|
|
DEUTERIUM( 0x2828CB, 1.25D, 1.00D, 1.00D),
|
|
TRITIUM( 0x000092, 1.50D, 1.00D, 1.05D),
|
|
HELIUM3( 0xFFF09F, 1.75D, 1.00D, 1.25D),
|
|
HELIUM4( 0xFF9B60, 2.00D, 1.00D, 1.50D),
|
|
LITHIUM( 0xE9E9E9, 1.25D, 0.85D, 2.00D),
|
|
BERYLLIUM( 0xA79D80, 2.00D, 1.00D, 2.50D),
|
|
BORON( 0x697F89, 3.00D, 0.50D, 3.50D),
|
|
CARBON( 0x454545, 2.00D, 1.00D, 5.00D),
|
|
OXYGEN( 0xB4E2FF, 1.25D, 1.50D, 7.50D),
|
|
SODIUM( 0xDFE4E7, 3.00D, 0.75D, 8.75D),
|
|
//aluminium, silicon, phosphorus
|
|
CHLORINE( 0xDAE598, 2.50D, 1.00D, 10.0D),
|
|
CALCIUM( 0xD2C7A9, 3.00D, 1.00D, 12.5D),
|
|
//titanium
|
|
;
|
|
|
|
public int color;
|
|
public double reactionMult;
|
|
public double depletionSpeed;
|
|
public double fusingDifficulty;
|
|
|
|
private EnumICFFuel(int color, double react, double depl, double laser) {
|
|
this.color = color;
|
|
this.reactionMult = react;
|
|
this.depletionSpeed = depl;
|
|
this.fusingDifficulty = laser;
|
|
}
|
|
}
|
|
|
|
public static HashMap<FluidType, EnumICFFuel> fluidMap = new HashMap();
|
|
public static HashMap<NTMMaterial, EnumICFFuel> materialMap = new HashMap();
|
|
|
|
public static void init() {
|
|
if(!fluidMap.isEmpty() && !materialMap.isEmpty()) return;
|
|
fluidMap.put(Fluids.HYDROGEN, EnumICFFuel.HYDROGEN);
|
|
fluidMap.put(Fluids.DEUTERIUM, EnumICFFuel.DEUTERIUM);
|
|
fluidMap.put(Fluids.TRITIUM, EnumICFFuel.TRITIUM);
|
|
fluidMap.put(Fluids.HELIUM3, EnumICFFuel.HELIUM3);
|
|
fluidMap.put(Fluids.HELIUM4, EnumICFFuel.HELIUM4);
|
|
materialMap.put(Mats.MAT_LITHIUM, EnumICFFuel.LITHIUM);
|
|
materialMap.put(Mats.MAT_BERYLLIUM, EnumICFFuel.BERYLLIUM);
|
|
materialMap.put(Mats.MAT_BORON, EnumICFFuel.BORON);
|
|
materialMap.put(Mats.MAT_GRAPHITE, EnumICFFuel.CARBON);
|
|
fluidMap.put(Fluids.OXYGEN, EnumICFFuel.OXYGEN);
|
|
materialMap.put(Mats.MAT_SODIUM, EnumICFFuel.SODIUM);
|
|
fluidMap.put(Fluids.CHLORINE, EnumICFFuel.CHLORINE);
|
|
materialMap.put(Mats.MAT_CALCIUM, EnumICFFuel.CALCIUM);
|
|
}
|
|
|
|
public ItemICFPellet() {
|
|
this.setMaxStackSize(1);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(Item item, CreativeTabs tab, List list) {
|
|
list.add(this.setup(EnumICFFuel.DEUTERIUM, EnumICFFuel.TRITIUM, false));
|
|
list.add(this.setup(EnumICFFuel.HELIUM3, EnumICFFuel.HELIUM4, false));
|
|
list.add(this.setup(EnumICFFuel.LITHIUM, EnumICFFuel.OXYGEN, false));
|
|
list.add(this.setup(EnumICFFuel.SODIUM, EnumICFFuel.CHLORINE, true));
|
|
list.add(this.setup(EnumICFFuel.BERYLLIUM, EnumICFFuel.CALCIUM, true));
|
|
}
|
|
|
|
public static long getMaxDepletion(ItemStack stack) {
|
|
long base = 50_000_000_000L;
|
|
base /= getType(stack, true).depletionSpeed;
|
|
base /= getType(stack, false).depletionSpeed;
|
|
return base;
|
|
}
|
|
|
|
public static long getFusingDifficulty(ItemStack stack) {
|
|
long base = 10_000_000L;
|
|
base *= getType(stack, true).fusingDifficulty * getType(stack, false).fusingDifficulty;
|
|
if(stack.hasTagCompound() && stack.stackTagCompound.getBoolean("muon")) base /= 4;
|
|
return base;
|
|
}
|
|
|
|
public static long getDepletion(ItemStack stack) {
|
|
if(!stack.hasTagCompound()) return 0L;
|
|
return stack.stackTagCompound.getLong("depletion");
|
|
}
|
|
|
|
public static long react(ItemStack stack, long heat) {
|
|
if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("depletion", stack.stackTagCompound.getLong("depletion") + heat);
|
|
return (long) (heat * getType(stack, true).reactionMult * getType(stack, false).reactionMult);
|
|
}
|
|
|
|
public static ItemStack setup(EnumICFFuel type1, EnumICFFuel type2, boolean muon) {
|
|
return setup(new ItemStack(ModItems.icf_pellet), type1, type2, muon);
|
|
}
|
|
|
|
public static ItemStack setup(ItemStack stack, EnumICFFuel type1, EnumICFFuel type2, boolean muon) {
|
|
if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setByte("type1", (byte) type1.ordinal());
|
|
stack.stackTagCompound.setByte("type2", (byte) type2.ordinal());
|
|
stack.stackTagCompound.setBoolean("muon", muon);
|
|
return stack;
|
|
}
|
|
|
|
public static EnumICFFuel getType(ItemStack stack, boolean first) {
|
|
if(!stack.hasTagCompound()) return first ? EnumICFFuel.DEUTERIUM : EnumICFFuel.TRITIUM;
|
|
return EnumUtil.grabEnumSafely(EnumICFFuel.class, stack.stackTagCompound.getByte("type" + (first ? 1 : 2)));
|
|
}
|
|
|
|
@Override
|
|
public boolean showDurabilityBar(ItemStack stack) {
|
|
return getDurabilityForDisplay(stack) > 0D;
|
|
}
|
|
|
|
@Override
|
|
public double getDurabilityForDisplay(ItemStack stack) {
|
|
return (double) getDepletion(stack) / (double) getMaxDepletion(stack);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public boolean requiresMultipleRenderPasses() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IIconRegister reg) {
|
|
super.registerIcons(reg);
|
|
this.iconBG = reg.registerIcon(RefStrings.MODID + ":icf_pellet_bg");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIconFromDamageForRenderPass(int meta, int pass) {
|
|
return pass == 1 ? super.getIconFromDamageForRenderPass(meta, pass) : this.iconBG;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public int getColorFromItemStack(ItemStack stack, int pass) {
|
|
if(pass == 0) {
|
|
EnumICFFuel type1 = this.getType(stack, true);
|
|
EnumICFFuel type2 = this.getType(stack, false);
|
|
int r = (((type1.color & 0xff0000) >> 16) + ((type2.color & 0xff0000) >> 16)) / 2;
|
|
int g = (((type1.color & 0x00ff00) >> 8) + ((type2.color & 0x00ff00) >> 8)) / 2;
|
|
int b = ((type1.color & 0x0000ff) + (type2.color & 0x0000ff)) / 2;
|
|
return r << 16 | g << 8 | b;
|
|
}
|
|
return 0xffffff;
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
|
|
boolean muon = stack.hasTagCompound() && stack.stackTagCompound.getBoolean("muon");
|
|
list.add(EnumChatFormatting.GREEN + "Depletion: " + String.format(Locale.US, "%.1f", getDurabilityForDisplay(stack) * 100D) + "%");
|
|
list.add(EnumChatFormatting.YELLOW + "Fuel: " + I18nUtil.resolveKey("icffuel." + getType(stack, true).name().toLowerCase(Locale.US)) + " / " + I18nUtil.resolveKey("icffuel." + getType(stack, false).name().toLowerCase(Locale.US)));
|
|
list.add(EnumChatFormatting.YELLOW + "Heat required: " + BobMathUtil.getShortNumber(this.getFusingDifficulty(stack)) + "TU");
|
|
list.add(EnumChatFormatting.YELLOW + "Reactivity multiplier: x" + (int) (getType(stack, true).reactionMult * getType(stack, false).reactionMult * 100) / 100D);
|
|
if(muon) list.add(EnumChatFormatting.DARK_AQUA + "Muon catalyzed!");
|
|
}
|
|
}
|