From 1d7cb1e6fc1e5250f54489814a8c614fbc1a9192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0okala?= Date: Sun, 7 Jun 2026 22:39:53 +0200 Subject: [PATCH] Fix camera fluid check in 1.12.2 to use eye position instead of entity position --- .../common/commonMixins/MixinVanillaFogCommon.java | 10 +++++++++- .../common/wrappers/level/KeyedClientLevelManager.java | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinVanillaFogCommon.java b/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinVanillaFogCommon.java index 01883bd3c..39715a783 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinVanillaFogCommon.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinVanillaFogCommon.java @@ -21,7 +21,11 @@ import net.minecraft.world.entity.LivingEntity; #if MC_VER <= MC_1_12_2 import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.Entity; import net.minecraft.init.MobEffects; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraft.block.state.IBlockState; #elif MC_VER < MC_1_17_1 import net.minecraft.world.level.material.FluidState; import net.minecraft.client.renderer.FogRenderer; @@ -129,7 +133,11 @@ public class MixinVanillaFogCommon #endif { #if MC_VER <= MC_1_12_2 - boolean cameraNotInFluid = mc.getRenderViewEntity() != null && !mc.world.getBlockState(mc.getRenderViewEntity().getPosition()).getMaterial().isLiquid(); + Entity view = mc.getRenderViewEntity(); + if (view == null) return true; + + IBlockState fluidState = mc.world.getBlockState(new BlockPos(view.getPositionEyes(mc.getRenderPartialTicks()))); + boolean cameraNotInFluid = !(fluidState.getMaterial().isLiquid() || fluidState.getBlock() instanceof IFluidBlock); #elif MC_VER < MC_1_17_1 FluidState fluidState = camera.getFluidInCamera(); boolean cameraNotInFluid = fluidState.isEmpty(); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java index 58262555b..802ea0404 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/level/KeyedClientLevelManager.java @@ -49,7 +49,11 @@ public class KeyedClientLevelManager implements IKeyedClientLevelManager // This prevents multiple threads from creating duplicate wrappers for the same level. synchronized (this.keyedLevelsCache) { + #if MC_VER <= MC_1_12_2 + WorldClient level = (WorldClient) levelWrapper.getWrappedMcObject(); + #else ClientLevel level = (ClientLevel) levelWrapper.getWrappedMcObject(); + #endif // Check the cache first IServerKeyedClientLevel cached = this.keyedLevelsCache.get(level);