From 3d4e50cd335159c9030a045783805233de9bfd7b Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 11 Jun 2026 12:59:49 +0200 Subject: [PATCH] speedrun --- changelog | 9 ++++++++- .../blocks/machine/FoundryCastingBase.java | 2 +- .../com/hbm/blocks/machine/FoundryOutlet.java | 2 +- .../hbm/inventory/material/NTMMaterial.java | 5 +++++ .../inventory/recipes/CentrifugeRecipes.java | 6 ++---- src/main/java/com/hbm/module/ParseMSES1.java | 16 ++++++++-------- .../TileEntityMachineIndustrialTurbine.java | 4 ++++ .../machine/TileEntityMachineThresher.java | 2 ++ .../hbm/textures/models/machines/thresher.png | Bin 2661 -> 2716 bytes 9 files changed, 31 insertions(+), 15 deletions(-) diff --git a/changelog b/changelog index b5897bc7a..00e00be3c 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,10 @@ ## Changed * Updated chinese localization -* Watz powerplant now has OC and RoR integration \ No newline at end of file +* Watz powerplant now has OC and RoR integration +* The automatic thresher now has a fluid port on the bottom as well +* The foundry basins and outlet filters now use the properly translated name instead of the internal name for the material + +## Fixed +* Fixed AUTOCAL's number comparison functions not working with variable substitution as advertised +* Fixed broken thorium ore centrifuging recipe shown in NEI +* Fixed industrial turbine not properly saving its energy values, causing the flywheel to stop on relog \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java index fe57bc788..9c499f04d 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryCastingBase.java @@ -202,7 +202,7 @@ public abstract class FoundryCastingBase extends BlockContainer implements ICruc } if(cast.type != null && cast.amount > 0) { - text.add(EnumChatFormatting.YELLOW + cast.type.names[0] + ": " + cast.amount + " / " + cast.getCapacity()); + text.add(EnumChatFormatting.YELLOW + cast.type.getLocalizedName() + ": " + cast.amount + " / " + cast.getCapacity()); } ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text); diff --git a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java index bbf18772b..a9a0d1d7d 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryOutlet.java @@ -204,7 +204,7 @@ public class FoundryOutlet extends BlockContainer implements ICrucibleAcceptor, List text = new ArrayList(); if(outlet.filter != null) { - text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.filter", outlet.filter.names[0])); + text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.filter", outlet.filter.getLocalizedName())); } if(outlet.invertFilter) { text.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("foundry.invertFilter")); diff --git a/src/main/java/com/hbm/inventory/material/NTMMaterial.java b/src/main/java/com/hbm/inventory/material/NTMMaterial.java index 7f15f1bed..56c1a1aa1 100644 --- a/src/main/java/com/hbm/inventory/material/NTMMaterial.java +++ b/src/main/java/com/hbm/inventory/material/NTMMaterial.java @@ -5,6 +5,7 @@ import java.util.Locale; import java.util.Set; import com.hbm.inventory.OreDictManager.DictFrame; +import com.hbm.util.i18n.I18nUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -50,6 +51,10 @@ public class NTMMaterial { return "hbmmat." + this.names[0].toLowerCase(Locale.US); } + public String getLocalizedName() { + return I18nUtil.resolveKey(getUnlocalizedName()); + } + public NTMMaterial setConversion(NTMMaterial mat, int in, int out) { this.smeltsInto = mat; this.convIn = in; diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index b8b9b5e43..fdc31be9c 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -14,12 +14,10 @@ import com.hbm.config.GeneralConfig; import com.hbm.handler.imc.IMCCentrifuge; import static com.hbm.inventory.OreDictManager.*; import com.hbm.inventory.OreDictManager.DictFrame; -import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; -import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums; import com.hbm.items.ItemEnums.EnumAshType; @@ -131,7 +129,7 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_solinium, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreRareEarth"), new ItemStack[] { + recipes.put(new OreDictStack(RAREEARTH.ore()), new ItemStack[] { new ItemStack(ModItems.powder_desh_mix, 1), new ItemStack(ModItems.nugget_zirconium, 1), new ItemStack(ModItems.nugget_zirconium, 1), @@ -149,7 +147,7 @@ public class CentrifugeRecipes extends SerializableRecipe { lbs ? new ItemStack(ModItems.nugget_ra226, 2) : new ItemStack(ModItems.nugget_ra226, 1), new ItemStack(Blocks.gravel, 1) }); - for(String ore : OreDictManager.TH232.all(MaterialShapes.ORE)) recipes.put(new OreDictStack(ore), new ItemStack[] { + recipes.put(new OreDictStack(TH232.ore()), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_uranium, 1), diff --git a/src/main/java/com/hbm/module/ParseMSES1.java b/src/main/java/com/hbm/module/ParseMSES1.java index 453cb1ea3..1f9c8c931 100644 --- a/src/main/java/com/hbm/module/ParseMSES1.java +++ b/src/main/java/com/hbm/module/ParseMSES1.java @@ -180,10 +180,10 @@ public class ParseMSES1 implements IParse { // greater than buffer if(lower.startsWith("gtb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); ctx.buffer = val > buffer ? "true" : "false"; } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; @@ -191,10 +191,10 @@ public class ParseMSES1 implements IParse { // lower than buffer if(lower.startsWith("ltb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); ctx.buffer = val < buffer ? "true" : "false"; } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; @@ -202,10 +202,10 @@ public class ParseMSES1 implements IParse { // greater than or equal buffer if(lower.startsWith("geb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); ctx.buffer = val >= buffer ? "true" : "false"; } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; @@ -213,10 +213,10 @@ public class ParseMSES1 implements IParse { // lower than or equal buffer if(lower.startsWith("leb ")) { - if(line.length() <= 3 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; + if(line.length() <= 4 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; try { double buffer = Double.parseDouble(ctx.buffer); - double val = Double.parseDouble(line.substring(3)); + double val = Double.parseDouble(substitute(ctx, line.substring(4), false)); ctx.buffer = val <= buffer ? "true" : "false"; } catch(Exception ex) { return EnumStatementReturn.PARAMETER_ERROR; } return EnumStatementReturn.OK; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index cb1798c91..8ecc1a189 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -183,6 +183,8 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); lastPowerTarget = nbt.getLong("lastPowerTarget"); + flywheel_energy = nbt.getLong("flywheel_energy"); + maxPower = nbt.getLong("maxPower"); spin = nbt.getDouble("spin"); } @@ -190,6 +192,8 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setLong("lastPowerTarget", lastPowerTarget); + nbt.setLong("flywheel_energy", flywheel_energy); + nbt.setLong("maxPower", maxPower); nbt.setDouble("spin", spin); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java index ffc71f2be..43d329614 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineThresher.java @@ -9,6 +9,7 @@ import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.ModItems; +import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.main.NTMSounds; @@ -85,6 +86,7 @@ public class TileEntityMachineThresher extends TileEntityLoadedBase implements I trySubscribe(tank.getTankType(), worldObj, xCoord + rot.offsetX, yCoord, zCoord + rot.offsetZ, rot); trySubscribe(tank.getTankType(), worldObj, xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()); + trySubscribe(tank.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); } if(isOn && !isSuspended) { diff --git a/src/main/resources/assets/hbm/textures/models/machines/thresher.png b/src/main/resources/assets/hbm/textures/models/machines/thresher.png index a8eb43a0d62eb212207b49426e2540f3ab54d5f4..122d7ed734bd22e4a14c1389f452f292874b25bb 100644 GIT binary patch delta 2668 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