diff --git a/versions/1.18/src/main/java/com/replaymod/render/mixin/Mixin_ForceChunkLoading.java b/versions/1.18/src/main/java/com/replaymod/render/mixin/Mixin_ForceChunkLoading.java index e7cfc626..288c4317 100644 --- a/versions/1.18/src/main/java/com/replaymod/render/mixin/Mixin_ForceChunkLoading.java +++ b/versions/1.18/src/main/java/com/replaymod/render/mixin/Mixin_ForceChunkLoading.java @@ -26,6 +26,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; @Mixin(WorldRenderer.class) public abstract class Mixin_ForceChunkLoading implements IForceChunkLoading { @@ -54,6 +55,10 @@ public abstract class Mixin_ForceChunkLoading implements IForceChunkLoading { @Shadow private Future field_34808; + @Shadow @Final private AtomicBoolean field_34809; + + @Shadow protected abstract void applyFrustum(Frustum par1); + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;setupTerrain(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;ZZ)V")) private void forceAllChunks(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, CallbackInfo ci) { if (replayModRender_hook == null) { @@ -85,6 +90,12 @@ public abstract class Mixin_ForceChunkLoading implements IForceChunkLoading { } } + // If that async processing did change the chunk graph, we need to re-apply the frustum (otherwise this is + // only done in the next setupTerrain call, which not happen this frame) + if (this.field_34809.compareAndSet(true, false)) { + this.applyFrustum((new Frustum(frustum)).method_38557(8)); // call based on the one in setupTerrain + } + // Schedule all chunks which need rebuilding (we schedule even important rebuilds because we wait for // all of them anyway and this way we can take advantage of threading) for (ChunkInfoAccessor chunkInfo : this.chunkInfos) {