diff --git a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java index e05d21ca..7695388b 100644 --- a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java +++ b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java @@ -41,6 +41,8 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe private final long startTime; + private long fakeFinishTimeNano; + public EntityRendererHandler(RenderSettings settings, RenderInfo renderInfo) { this.settings = settings; this.renderInfo = renderInfo; @@ -71,6 +73,7 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe } public void renderWorld(float partialTicks, long finishTimeNano) { + fakeFinishTimeNano = finishTimeNano; //#if MC>=11400 PreRenderCallback.EVENT.invoker().preRender(); //#else @@ -142,6 +145,10 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe return this.renderInfo; } + public long getFakeFinishTimeNano() { + return fakeFinishTimeNano; + } + public interface IEntityRenderer { void replayModRender_setHandler(EntityRendererHandler handler); EntityRendererHandler replayModRender_getHandler(); diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java b/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java new file mode 100644 index 00000000..21fcd479 --- /dev/null +++ b/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java @@ -0,0 +1 @@ +// 1.21+ diff --git a/src/main/resources/mixins.render.replaymod.json b/src/main/resources/mixins.render.replaymod.json index bd3761e4..28795704 100644 --- a/src/main/resources/mixins.render.replaymod.json +++ b/src/main/resources/mixins.render.replaymod.json @@ -14,6 +14,9 @@ "Mixin_ChromaKeyColorSky", "Mixin_ChromaKeyDisableFog", "Mixin_ChromaKeyForceSky", + //#if MC>=12100 + //$$ "Mixin_FakeSystemTimeUniforms_Iris", + //#endif "Mixin_ForceChunkLoading", "Mixin_HideNameTags", "Mixin_HideNameTags_LivingEntity", diff --git a/versions/1.21/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java b/versions/1.21/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java new file mode 100644 index 00000000..042d8008 --- /dev/null +++ b/versions/1.21/src/main/java/com/replaymod/render/mixin/Mixin_FakeSystemTimeUniforms_Iris.java @@ -0,0 +1,25 @@ +package com.replaymod.render.mixin; + +import com.replaymod.render.hooks.EntityRendererHandler; +import net.irisshaders.iris.uniforms.SystemTimeUniforms; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.GameRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Pseudo +@Mixin(value = SystemTimeUniforms.Timer.class, remap = false) +public class Mixin_FakeSystemTimeUniforms_Iris { + @ModifyVariable(method = "beginFrame", at = @At("HEAD"), argsOnly = true) + private long useReplayTimeDuringRender(long frameStartTimeNs) { + GameRenderer gameRenderer = MinecraftClient.getInstance().gameRenderer; + EntityRendererHandler entityRendererHandler = + ((EntityRendererHandler.IEntityRenderer) gameRenderer).replayModRender_getHandler(); + if (entityRendererHandler != null) { + frameStartTimeNs = entityRendererHandler.getFakeFinishTimeNano(); + } + return frameStartTimeNs; + } +}