From 859ceef03d2955b26e71f6b84eb858e3fe7bebf2 Mon Sep 17 00:00:00 2001 From: playfuldoggo Date: Tue, 1 Sep 2026 06:36:28 +0100 Subject: [PATCH 1/3] Fixed furnace BurnTime overflow with high BurnTime fuels --- .../hodgepodge/config/FixesConfig.java | 4 ++ .../mitchej123/hodgepodge/mixins/Mixins.java | 4 ++ ...ixinTileEntityFurnace_FixFuelOverflow.java | 43 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java index 349ee1e93..fc14d5bd6 100644 --- a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java +++ b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java @@ -113,6 +113,10 @@ public class FixesConfig { @Config.DefaultBoolean(true) public static boolean fixFriendlyCreatureSounds; + @Config.Comment("Fix vanilla furnaces' burn time overflowing from long burn time fuel") + @Config.DefaultBoolean(true) + public static boolean fixFuelOverflow; + @Config.Comment("Fix Volume Slider is ineffective until reaching the lower end") @Config.DefaultBoolean(true) public static boolean logarithmicVolumeControl; diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java index e1a83925f..dc9c106eb 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java @@ -341,6 +341,10 @@ public enum Mixins implements IMixins { .setApplyIf(() -> SpeedupsConfig.speedupVanillaFurnace) .addRequiredMod(TargetedMod.GTNHLIB) .setPhase(Phase.EARLY)), + FIX_FUEL_OVERFLOW(new MixinBuilder("Fix vanilla furnace fuel overflow") + .addCommonMixins("minecraft.MixinTileEntityFurnace_FixFuelOverflow") + .setApplyIf(() -> FixesConfig.fixFuelOverflow) + .setPhase(Phase.EARLY)), GAMEOVER_GUI_LOCKED_DISABLED(new MixinBuilder("Fix Gameover GUI") .addClientMixins("minecraft.MixinGuiGameOver") .setApplyIf(() -> FixesConfig.fixGuiGameOver) diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java new file mode 100644 index 000000000..b2cb88cdc --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java @@ -0,0 +1,43 @@ +package com.mitchej123.hodgepodge.mixins.early.minecraft; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(TileEntityFurnace.class) +public class MixinTileEntityFurnace_FixFuelOverflow { + + /** + * Fixes BurnTime overflow with fuel over Short.MAX_VALUE BurnTime + *

+ * Writes an Integer instead of a short for the BurnTime tag + */ + @Redirect( + method = "writeToNBT", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/nbt/NBTTagCompound;setShort(Ljava/lang/String;S)V", + ordinal = 0)) + private void hodgepodge$writeBurnTime(NBTTagCompound compound, String key, short value) { + compound.setInteger(key, ((TileEntityFurnace) (Object) this).furnaceBurnTime); + } + + /** + * Fixes BurnTime overflow with fuel over Short.MAX_VALUE BurnTime + *

+ * Overwrites the getShort earlier in the method, additionally allows conversion of old short BurnTime to an Integer + */ + @Inject(method = "readFromNBT", at = @At("RETURN")) + private void hodgepodge$readBurnTime(NBTTagCompound compound, CallbackInfo ci) { + if (compound.hasKey("BurnTime", 3)) { + ((TileEntityFurnace) (Object) this).furnaceBurnTime = compound.getInteger("BurnTime"); + } + } +} From 5f6012a7e78e31fb02ace1294a401d7b573d2086 Mon Sep 17 00:00:00 2001 From: playfuldoggo Date: Tue, 1 Sep 2026 07:01:30 +0100 Subject: [PATCH 2/3] Removed unnecessary imports --- .../early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java index b2cb88cdc..af1015ea6 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java @@ -1,11 +1,9 @@ package com.mitchej123.hodgepodge.mixins.early.minecraft; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntityFurnace; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; From ec412f6e99a66d43fa173038e6114b7e14f40f10 Mon Sep 17 00:00:00 2001 From: playfuldoggo Date: Tue, 1 Sep 2026 14:50:46 +0100 Subject: [PATCH 3/3] Now uses a redirect on PUTFIELD for readFromNBT --- ...ixinTileEntityFurnace_FixFuelOverflow.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java index af1015ea6..93107f28b 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinTileEntityFurnace_FixFuelOverflow.java @@ -3,11 +3,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntityFurnace; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.llamalad7.mixinextras.sugar.Local; @Mixin(TileEntityFurnace.class) public class MixinTileEntityFurnace_FixFuelOverflow { @@ -30,12 +31,16 @@ public class MixinTileEntityFurnace_FixFuelOverflow { /** * Fixes BurnTime overflow with fuel over Short.MAX_VALUE BurnTime *

- * Overwrites the getShort earlier in the method, additionally allows conversion of old short BurnTime to an Integer + * Overwrites the getShort with the getInteger value when it attempts to write the short value */ - @Inject(method = "readFromNBT", at = @At("RETURN")) - private void hodgepodge$readBurnTime(NBTTagCompound compound, CallbackInfo ci) { - if (compound.hasKey("BurnTime", 3)) { - ((TileEntityFurnace) (Object) this).furnaceBurnTime = compound.getInteger("BurnTime"); - } + @Redirect( + method = "readFromNBT", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/tileentity/TileEntityFurnace;furnaceBurnTime:I", + opcode = Opcodes.PUTFIELD)) + private void hodgepodge$readBurnTime(TileEntityFurnace instance, int value, + @Local(argsOnly = true) NBTTagCompound compound) { + instance.furnaceBurnTime = compound.getInteger("BurnTime"); } }