From f0fe4119f54a4e797c3b3d7a6d946c964f1dc841 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 27 Mar 2023 16:32:23 +0200 Subject: [PATCH] watz pellet depletion --- .../java/com/hbm/blocks/machine/Watz.java | 5 +- src/main/java/com/hbm/items/ModItems.java | 4 +- .../com/hbm/items/machine/ItemWatzPellet.java | 65 ++++++++++++++++--- .../tileentity/machine/TileEntityWatz.java | 11 +++- src/main/java/com/hbm/util/StatHelper.java | 2 +- 5 files changed, 69 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/Watz.java b/src/main/java/com/hbm/blocks/machine/Watz.java index b53286f1b..8edb70cb7 100644 --- a/src/main/java/com/hbm/blocks/machine/Watz.java +++ b/src/main/java/com/hbm/blocks/machine/Watz.java @@ -6,7 +6,6 @@ import com.hbm.tileentity.machine.TileEntityWatz; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; public class Watz extends BlockDummyable { @@ -26,9 +25,7 @@ public class Watz extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(!world.isRemote) player.addChatComponentMessage(new ChatComponentText("Oh gee, I wonder if the nameless uncraftable thing that isn't even in the changelog works yet, maybe if I click often enough it will work!!")); - return true; - //return super.standardOpenBehavior(world, x, y, z, player, 0); + return super.standardOpenBehavior(world, x, y, z, player, 0); } @Override diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index fac3fb7d6..c9708afcd 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -6659,8 +6659,8 @@ public class ModItems { GameRegistry.registerItem(rbmk_pellet_zfb_am_mix, rbmk_pellet_zfb_am_mix.getUnlocalizedName()); GameRegistry.registerItem(rbmk_pellet_drx, rbmk_pellet_drx.getUnlocalizedName()); - //GameRegistry.registerItem(watz_pellet, watz_pellet.getUnlocalizedName()); - //GameRegistry.registerItem(watz_pellet_depleted, watz_pellet_depleted.getUnlocalizedName()); + GameRegistry.registerItem(watz_pellet, watz_pellet.getUnlocalizedName()); + GameRegistry.registerItem(watz_pellet_depleted, watz_pellet_depleted.getUnlocalizedName()); GameRegistry.registerItem(debris_graphite, debris_graphite.getUnlocalizedName()); GameRegistry.registerItem(debris_metal, debris_metal.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index 7e50d4389..c45a53954 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -17,8 +17,10 @@ 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 @@ -34,18 +36,20 @@ public class ItemWatzPellet extends ItemEnumMulti { public static enum EnumWatzType { //TODO: durability - SCHRABIDIUM( 0x32FFFF, 0x005C5C, 200, 1D, new FunctionLogarithmic(10), null, null), - HES( 0xffffff, 0x000000, 0, 0, null, null, null), - LES( 0xffffff, 0x000000, 0, 0, null, null, null), - MES( 0xffffff, 0x000000, 0, 0, null, null, null), - NP( 0xffffff, 0x000000, 0, 0, null, null, null), - MEU( 0xffffff, 0x000000, 0, 0, null, null, null), - MEP( 0xffffff, 0x000000, 0, 0, null, null, null), - LEAD( 0xA6A6B2, 0x03030F, 0, 0, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient - DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)); //absorber with positive coefficient + SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 10D, new FunctionLogarithmic(10), null, null), + HES( 0x66DCD6, 0x023933, 1_500, 10D, null, null, null), + LES( 0xABB4A8, 0x0C1105, 500, 10D, null, null, null), + MES( 0xCBEADF, 0x28473C, 1_000, 10D, null, null, null), + NP( 0xA6B2A6, 0x030F03, 0, 10D, null, null, null), + MEU( 0xC1C7BD, 0x2B3227, 0, 10D, null, null, null), + MEP( 0x9AA3A0, 0x111A17, 0, 10D, null, null, null), + LEAD( 0xA6A6B2, 0x03030F, 0, 0, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient + DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)); //absorber with positive coefficient + 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) @@ -129,4 +133,47 @@ public class ItemWatzPellet extends ItemEnumMulti { if(num.heatMult != null) list.add(color + "Thermal coefficient: " + reset + num.heatMult.getLabelForFuel()); if(num.absorbFunc != null) list.add(color + "Flux capture: " + reset + num.absorbFunc.getLabelForFuel()); } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return getDurabilityForDisplay(stack) > 0D; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return 1D - getEnrichment(stack); + } + + public static double getEnrichment(ItemStack stack) { + return getYield(stack) / ((ItemRBMKRod) stack.getItem()).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) { + setNBTDefaults(stack); //minimize the window where NBT screwups can happen + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index b5c1c0e23..fe4c48a0e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.trait.FT_Heatable; import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingStep; import com.hbm.inventory.gui.GUIWatz; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemWatzPellet; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -101,8 +102,6 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand segment.updateReaction(above, sharedTanks); } - //TODO: call fluidSend on the bottom-most segment - /* re-distribute fluid from shared tanks back into actual tanks, bottom to top */ for(int i = segments.size() - 1; i >= 0; i--) { TileEntityWatz segment = segments.get(i); @@ -183,8 +182,10 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand if(burnFunc != null) { double mod = heatMod != null ? heatMod.effonix(heat) : 1D; double burn = burnFunc.effonix(inputFlux) * mod; + ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn); addedFlux += burn; addedHeat += type.heatEmission * burn; + tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * burn)); } } @@ -206,6 +207,12 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand ItemStack stackBottom = slots[i]; ItemStack stackTop = above.slots[i]; + /* deplete */ + if(stackBottom != null && stackBottom.getItem() == ModItems.watz_pellet && ItemWatzPellet.getYield(stackBottom) <= 0) { + slots[i] = new ItemStack(ModItems.watz_pellet_depleted, 1, stackBottom.getItemDamage()); + continue; // depleted pellets may persist for one tick + } + /* items fall down if the bottom slot is empty */ if(stackBottom == null && stackTop != null) { slots[i] = stackTop.copy(); diff --git a/src/main/java/com/hbm/util/StatHelper.java b/src/main/java/com/hbm/util/StatHelper.java index a006486f9..4c9e7cc12 100644 --- a/src/main/java/com/hbm/util/StatHelper.java +++ b/src/main/java/com/hbm/util/StatHelper.java @@ -36,7 +36,7 @@ public class StatHelper { */ public static void resetStatShitFuck() { - publicReferenceToOneshotStatListPleaseAllPointAndLaugh = ReflectionHelper.getPrivateValue(StatList.class, null, "field_75942_a", "oneShotStats"); //TODO: not fuck up the mapping here + publicReferenceToOneshotStatListPleaseAllPointAndLaugh = ReflectionHelper.getPrivateValue(StatList.class, null, "field_75942_a", "oneShotStats"); for(int i = 0; i < StatList.objectCraftStats.length; i++) StatList.objectCraftStats[i] = null; for(int i = 0; i < StatList.mineBlockStatArray.length; i++) StatList.mineBlockStatArray[i] = null;