From 7d918fe8dcc890975fba7b40e853040b125cf8a1 Mon Sep 17 00:00:00 2001 From: Acuadragon100 <8165958-acuadragon100@users.noreply.gitlab.com> Date: Sat, 16 May 2026 13:24:38 +0200 Subject: [PATCH] Also use the original camera position when Immersive Portals is loaded. --- .../MixinImmersivePortalsRenderStatesCommon.java | 12 ++++++++++++ .../wrappers/minecraft/MinecraftRenderWrapper.java | 11 +++++++++++ .../modAccessor/ImmersivePortalsAccessorCommon.java | 9 +++++++++ coreSubProjects | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinImmersivePortalsRenderStatesCommon.java b/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinImmersivePortalsRenderStatesCommon.java index 67a994d37..d10c9d7d4 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinImmersivePortalsRenderStatesCommon.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/commonMixins/MixinImmersivePortalsRenderStatesCommon.java @@ -4,9 +4,11 @@ package com.seibel.distanthorizons.common.commonMixins; import com.seibel.distanthorizons.common.wrappers.modAccessor.ImmersivePortalsAccessorCommon; import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos; +import com.seibel.distanthorizons.core.util.math.Vec3d; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.phys.Vec3; public class MixinImmersivePortalsRenderStatesCommon { @@ -19,8 +21,10 @@ public class MixinImmersivePortalsRenderStatesCommon if (mc.player == null) { ImmersivePortalsAccessorCommon.originalBlockPos = null; ImmersivePortalsAccessorCommon.originalChunkPos = null; + ImmersivePortalsAccessorCommon.originalCameraPos = null; return; } + BlockPos pos = mc.player.blockPosition(); ImmersivePortalsAccessorCommon.originalBlockPos = new DhBlockPos(pos.getX(), pos.getY(), pos.getZ()); #if MC_VER < MC_1_17_1 @@ -34,6 +38,14 @@ public class MixinImmersivePortalsRenderStatesCommon #else ImmersivePortalsAccessorCommon.originalChunkPos = new DhChunkPos(cPos.x(), cPos.z()); #endif + + + #if MC_VER <= MC_1_21_10 + Vec3 cameraPos = mc.gameRenderer.getMainCamera().getPosition(); + #else + Vec3 cameraPos = mc.gameRenderer.getMainCamera().position(); + #endif + ImmersivePortalsAccessorCommon.originalCameraPos = new Vec3d(cameraPos.x(), cameraPos.y(), cameraPos.z()); } } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java index 974e424e0..cf57ab829 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -64,6 +64,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper; import com.seibel.distanthorizons.core.util.math.Vec3d; import com.seibel.distanthorizons.core.util.math.Vec3f; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IImmersivePortalsAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IOptifineAccessor; #if MC_VER <= MC_1_12_2 @@ -127,6 +128,11 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper private static final Minecraft MC = Minecraft.getInstance(); #endif + // Need to classload this field later because otherwise it will be null even when Immersive Portals is present. + public static class Late { + private static final IImmersivePortalsAccessor IMMERSIVE_PORTALS = ModAccessorInjector.INSTANCE.get(IImmersivePortalsAccessor.class); + } + /** * In the case of immersive portals multiple levels may be active at once, causing conflicting lightmaps.
* Requiring the use of multiple {@link LightMapWrapper}. @@ -205,6 +211,11 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper @Override public Vec3d getCameraExactPosition() { + if (Late.IMMERSIVE_PORTALS != null) + { + Vec3d cameraPos = Late.IMMERSIVE_PORTALS.getOriginalCameraPos(); + if (cameraPos != null) return cameraPos; + } #if MC_VER <= MC_1_12_2 RenderManager rm = MC.getRenderManager(); return new Vec3d(rm.viewerPosX, rm.viewerPosY, rm.viewerPosZ); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/modAccessor/ImmersivePortalsAccessorCommon.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/modAccessor/ImmersivePortalsAccessorCommon.java index da1220c1c..67c86a42b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/modAccessor/ImmersivePortalsAccessorCommon.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/modAccessor/ImmersivePortalsAccessorCommon.java @@ -25,6 +25,7 @@ import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos; +import com.seibel.distanthorizons.core.util.math.Vec3d; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ImmersivePortalsAbstractAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import net.minecraft.client.Minecraft; @@ -56,6 +57,8 @@ public abstract class ImmersivePortalsAccessorCommon extends ImmersivePortalsAbs public static volatile DhBlockPos originalBlockPos; @Nullable public static volatile DhChunkPos originalChunkPos; + @Nullable + public static volatile Vec3d originalCameraPos; @Override protected Object getClientLevel() { return Minecraft.getInstance().level; } @@ -130,6 +133,12 @@ public abstract class ImmersivePortalsAccessorCommon extends ImmersivePortalsAbs return ClientLevelWrapper.getWrapper(originalLevel, false); } + @Override + @Nullable + public Vec3d getOriginalCameraPos() { + return originalCameraPos; + } + } #endif diff --git a/coreSubProjects b/coreSubProjects index 1f7cf793c..4f6d78189 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1f7cf793c638bc190cf68556e3704afd729c844d +Subproject commit 4f6d78189b915876d01406ab33d9558437415b06