mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
195 lines
7.8 KiB
Java
195 lines
7.8 KiB
Java
package com.hbm.items.machine;
|
|
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
|
|
import com.hbm.items.ItemEnumMulti;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.render.icon.RGBMutatorInterpolatedComponentRemap;
|
|
import com.hbm.render.icon.TextureAtlasSpriteMutatable;
|
|
import com.hbm.util.EnumUtil;
|
|
import com.hbm.util.I18nUtil;
|
|
import com.hbm.util.function.Function;
|
|
import com.hbm.util.function.Function.*;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.world.World;
|
|
|
|
/*
|
|
* Watz Isotropic Fuel, Oxidized
|
|
*/
|
|
public class ItemWatzPellet extends ItemEnumMulti {
|
|
|
|
public ItemWatzPellet() {
|
|
super(EnumWatzType.class, true, true);
|
|
this.setMaxStackSize(16);
|
|
this.setCreativeTab(MainRegistry.controlTab);
|
|
}
|
|
|
|
public static enum EnumWatzType {
|
|
|
|
SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 20D, 0.01D, new FunctionLinear(1.5D), new FunctionSqrtFalling(10D), null),
|
|
HES( 0x66DCD6, 0x023933, 1_750, 20D, 0.005D, new FunctionLinear(1.25D), new FunctionSqrtFalling(15D), null),
|
|
MES( 0xCBEADF, 0x28473C, 1_500, 15D, 0.0025D, new FunctionLinear(1.15D), new FunctionSqrtFalling(15D), null),
|
|
LES( 0xABB4A8, 0x0C1105, 1_250, 15D, 0.00125D, new FunctionLinear(1D), new FunctionSqrtFalling(20D), null),
|
|
HEN( 0xA6B2A6, 0x030F03, 0, 10D, 0.0005D, new FunctionSqrt(100), new FunctionSqrtFalling(10D), null),
|
|
MEU( 0xC1C7BD, 0x2B3227, 0, 10D, 0.0005D, new FunctionSqrt(75), new FunctionSqrtFalling(10D), null),
|
|
MEP( 0x9AA3A0, 0x111A17, 0, 15D, 0.0005D, new FunctionSqrt(150), new FunctionSqrtFalling(10D), null),
|
|
LEAD( 0xA6A6B2, 0x03030F, 0, 0, 0.0025D, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient
|
|
BORON( 0xBDC8D2, 0x29343E, 0, 0, 0.0025D, null, null, new FunctionLinear(10)), //improved absorber, linear
|
|
DU( 0xC1C7BD, 0x2B3227, 0, 0, 0.0025D, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient
|
|
NQD( 0x4B4B4B, 0x121212, 2_000, 20, 0.01D, new FunctionLinear(2D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null),
|
|
NQR( 0x2D2D2D, 0x0B0B0B, 2_500, 30, 0.01D, new FunctionLinear(1.5D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null);
|
|
|
|
public double yield = 1_000_000_000;
|
|
public int colorLight;
|
|
public int colorDark;
|
|
public double mudContent; //how much mud per reaction flux should be produced
|
|
public double passive; //base flux emission
|
|
public double heatEmission; //reactivity(1) to heat (heat per outgoing flux)
|
|
public Function burnFunc; //flux to reactivity(0) (classic reactivity)
|
|
public Function heatDiv; //reactivity(0) to reactivity(1) based on heat (temperature coefficient)
|
|
public Function absorbFunc; //flux to heat (flux absobtion for non-active component)
|
|
|
|
private EnumWatzType(int colorLight, int colorDark, double passive, double heatEmission, double mudContent, Function burnFunction, Function heatDivisor, Function absorbFunction) {
|
|
this.colorLight = colorLight;
|
|
this.colorDark = colorDark;
|
|
this.passive = passive;
|
|
this.heatEmission = heatEmission;
|
|
this.mudContent = mudContent;
|
|
this.burnFunc = burnFunction;
|
|
this.heatDiv = heatDivisor;
|
|
this.absorbFunc = absorbFunction;
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IIconRegister reg) {
|
|
|
|
Enum[] enums = theEnum.getEnumConstants();
|
|
this.icons = new IIcon[enums.length];
|
|
|
|
if(reg instanceof TextureMap) {
|
|
TextureMap map = (TextureMap) reg;
|
|
|
|
for(int i = 0; i < EnumWatzType.values().length; i++) {
|
|
EnumWatzType type = EnumWatzType.values()[i];
|
|
String placeholderName = this.getIconString() + "-" + (type.name() + this.getUnlocalizedName());
|
|
int light = this == ModItems.watz_pellet_depleted ? desaturate(type.colorLight) : type.colorLight;
|
|
int dark = this == ModItems.watz_pellet_depleted ? desaturate(type.colorDark) : type.colorDark;
|
|
TextureAtlasSpriteMutatable mutableIcon = new TextureAtlasSpriteMutatable(placeholderName, new RGBMutatorInterpolatedComponentRemap(0xD2D2D2, 0x333333, light, dark));
|
|
map.setTextureEntry(placeholderName, mutableIcon);
|
|
icons[i] = mutableIcon;
|
|
}
|
|
}
|
|
|
|
this.itemIcon = reg.registerIcon(this.getIconString());
|
|
}
|
|
|
|
public static int desaturate(int color) {
|
|
int r = (color & 0xff0000) >> 16;
|
|
int g = (color & 0x00ff00) >> 8;
|
|
int b = (color & 0x0000ff);
|
|
|
|
int avg = (r + g + b) / 3;
|
|
double approach = 0.9;
|
|
double mult = 0.75;
|
|
|
|
r -= (r - avg) * approach;
|
|
g -= (g - avg) * approach;
|
|
b -= (b - avg) * approach;
|
|
|
|
r *= mult;
|
|
g *= mult;
|
|
b *= mult;
|
|
|
|
return (r << 16) | (g << 8) | b;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIconFromDamage(int meta) {
|
|
IIcon icon = super.getIconFromDamage(meta);
|
|
return icon == null ? this.itemIcon : icon; //fallback if TextureMap fails during register
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
|
|
|
|
if(this != ModItems.watz_pellet) return;
|
|
|
|
EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
|
|
|
|
list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("trait.watz_pellet", String.format(Locale.US, "%.1f", getDurabilityForDisplay(stack) * 100D)));
|
|
|
|
String color = EnumChatFormatting.GOLD + "";
|
|
String reset = EnumChatFormatting.RESET + "";
|
|
|
|
if(num.passive > 0){
|
|
list.add(color + I18nUtil.resolveKeyArray("trait.watz_pellet.passive")[0] + reset + num.passive);
|
|
list.add(EnumChatFormatting.RED + I18nUtil.resolveKeyArray("trait.watz_pellet.passive")[1]);
|
|
}
|
|
if(num.heatEmission > 0) list.add(color + I18nUtil.resolveKey("trait.watz_pellet.heatEmission") + reset + num.heatEmission + " TU");
|
|
if(num.burnFunc != null) {
|
|
list.add(color + I18nUtil.resolveKeyArray("trait.watz_pellet.burnFunc")[0] + reset + num.burnFunc.getLabelForFuel());
|
|
list.add(color + I18nUtil.resolveKeyArray("trait.watz_pellet.burnFunc")[1] + reset + num.burnFunc.getDangerFromFuel());
|
|
}
|
|
if(num.heatDiv != null) list.add(color + I18nUtil.resolveKey("trait.watz_pellet.heatDiv") + reset + num.heatDiv.getLabelForFuel() + " TU⁻¹");
|
|
if(num.absorbFunc != null) list.add(color + I18nUtil.resolveKey("trait.watz_pellet.absorbFunc") + reset + num.absorbFunc.getLabelForFuel());
|
|
}
|
|
|
|
@Override
|
|
public boolean showDurabilityBar(ItemStack stack) {
|
|
return this == ModItems.watz_pellet && getDurabilityForDisplay(stack) > 0D;
|
|
}
|
|
|
|
@Override
|
|
public double getDurabilityForDisplay(ItemStack stack) {
|
|
return 1D - getEnrichment(stack);
|
|
}
|
|
|
|
public static double getEnrichment(ItemStack stack) {
|
|
EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
|
|
return getYield(stack) / num.yield;
|
|
}
|
|
|
|
public static double getYield(ItemStack stack) {
|
|
return getDouble(stack, "yield");
|
|
}
|
|
|
|
public static void setYield(ItemStack stack, double yield) {
|
|
setDouble(stack, "yield", yield);
|
|
}
|
|
|
|
public static void setDouble(ItemStack stack, String key, double yield) {
|
|
if(!stack.hasTagCompound()) setNBTDefaults(stack);
|
|
stack.stackTagCompound.setDouble(key, yield);
|
|
}
|
|
|
|
public static double getDouble(ItemStack stack, String key) {
|
|
if(!stack.hasTagCompound()) setNBTDefaults(stack);
|
|
return stack.stackTagCompound.getDouble(key);
|
|
}
|
|
|
|
private static void setNBTDefaults(ItemStack stack) {
|
|
EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
setYield(stack, num.yield);
|
|
}
|
|
|
|
@Override
|
|
public void onCreated(ItemStack stack, World world, EntityPlayer player) {
|
|
if(this != ModItems.watz_pellet) return;
|
|
setNBTDefaults(stack); //minimize the window where NBT screwups can happen
|
|
}
|
|
}
|