diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java index 873fe267..57fc64f3 100644 --- a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java +++ b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java @@ -327,6 +327,11 @@ public class FixesConfig { @Config.RequiresMcRestart public static boolean earlyChunkTileCoordinateCheck; + @Config.Comment("Fix the temperature can go below absolute zero at very high place") + @Config.DefaultBoolean(true) + @Config.RequiresMcRestart + public static boolean fixNegativeKelvin; + @Config.Comment("Destroy and log TileEntities failing the safe coordinate instead of crashing the game (can cause loss of data)") @Config.DefaultBoolean(false) @Config.RequiresMcRestart diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java index f7debcd5..8aa4c902 100644 --- a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java @@ -369,6 +369,9 @@ public enum Mixins { FAST_BLOCK_PLACING(new Builder("Allows blocks to be placed faster").addTargetedMod(TargetedMod.VANILLA) .setSide(Side.CLIENT).setPhase(Phase.EARLY).addMixinClasses("minecraft.MixinMinecraft_FastBlockPlacing") .setApplyIf(() -> true)), // Always apply, config handled in mixin + FIX_NEGATIVE_KELVIN(new Builder("Fix the local temperature can go below absolute zero") + .addTargetedMod(TargetedMod.VANILLA).setSide(Side.BOTH).setPhase(Phase.EARLY) + .addMixinClasses("minecraft.MixinBiomeGenBase").setApplyIf(() -> FixesConfig.fixNegativeKelvin)), SPIGOT_EXTENDED_CHUNKS(new Builder("Spigot-style extended chunk format to remove the 2MB chunk size limit") .addTargetedMod(TargetedMod.VANILLA).addExcludedMod(TargetedMod.BUKKIT).setSide(Side.BOTH) diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinBiomeGenBase.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinBiomeGenBase.java new file mode 100644 index 00000000..ddf44bb8 --- /dev/null +++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinBiomeGenBase.java @@ -0,0 +1,21 @@ +package com.mitchej123.hodgepodge.mixins.early.minecraft; + +import net.minecraft.world.biome.BiomeGenBase; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BiomeGenBase.class) +public abstract class MixinBiomeGenBase { + + @Unique + private static final float ABSOLUTE_ZERO = -459.67f / 100f; // in Fahrenheit scale + + @Inject(method = "getFloatTemperature", at = @At("RETURN"), cancellable = true) + public final void hodgepodge$getFloatTemperature(int x, int y, int z, CallbackInfoReturnable cir) { + cir.setReturnValue(Math.max(cir.getReturnValue(), ABSOLUTE_ZERO)); + } +}