Replace reflection in ChunkLoadingRenderGlobal with mixin

This commit is contained in:
Jonas Herzig
2021-02-23 11:45:08 +01:00
parent 4b4d18026b
commit 90bbc68443
3 changed files with 23 additions and 21 deletions

View File

@@ -3,8 +3,6 @@ package com.replaymod.render.hooks;
import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
import java.lang.reflect.Field;
//#if MC>=11500 //#if MC>=11500
//#else //#else
//$$ import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor; //$$ import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor;
@@ -45,20 +43,10 @@ public class ChunkLoadingRenderGlobal {
this.hooked = renderGlobal; this.hooked = renderGlobal;
//#if MC>=11500 //#if MC>=11500
install();
//#else //#else
//$$ setup(((WorldRendererAccessor) renderGlobal).getRenderDispatcher()); //$$ setup(((WorldRendererAccessor) renderGlobal).getRenderDispatcher());
//$$ install();
//#endif //#endif
} IForceChunkLoading.from(renderGlobal).replayModRender_setHook(this);
private void install() {
try {
Field hookField = WorldRenderer.class.getField("replayModRender_hook");
hookField.set(hooked, this);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new Error(e);
}
} }
//#if MC>=11500 //#if MC>=11500
@@ -153,12 +141,7 @@ public class ChunkLoadingRenderGlobal {
//$$ workerJailingQueue.freeAll(); //$$ workerJailingQueue.freeAll();
//#endif //#endif
try { IForceChunkLoading.from(hooked).replayModRender_setHook(null);
Field hookField = WorldRenderer.class.getField("replayModRender_hook");
hookField.set(hooked, null);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new Error(e);
}
} }
//#if MC>=11500 //#if MC>=11500

View File

@@ -0,0 +1,13 @@
//#if MC>=10800
package com.replaymod.render.hooks;
import net.minecraft.client.render.WorldRenderer;
public interface IForceChunkLoading {
void replayModRender_setHook(ChunkLoadingRenderGlobal hook);
static IForceChunkLoading from(WorldRenderer worldRenderer) {
return (IForceChunkLoading) worldRenderer;
}
}
//#endif

View File

@@ -3,6 +3,7 @@ package com.replaymod.render.mixin;
//#if MC>=10800 //#if MC>=10800
import com.replaymod.compat.shaders.ShaderReflection; import com.replaymod.compat.shaders.ShaderReflection;
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal; import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
import com.replaymod.render.hooks.IForceChunkLoading;
import net.minecraft.client.render.Camera; import net.minecraft.client.render.Camera;
import net.minecraft.client.render.Frustum; import net.minecraft.client.render.Frustum;
import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
@@ -31,8 +32,13 @@ import java.util.Set;
//#endif //#endif
@Mixin(WorldRenderer.class) @Mixin(WorldRenderer.class)
public abstract class Mixin_ForceChunkLoading { public abstract class Mixin_ForceChunkLoading implements IForceChunkLoading {
public ChunkLoadingRenderGlobal replayModRender_hook; private ChunkLoadingRenderGlobal replayModRender_hook;
@Override
public void replayModRender_setHook(ChunkLoadingRenderGlobal hook) {
this.replayModRender_hook = hook;
}
//#if MC>=11500 //#if MC>=11500
@Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild; @Shadow private Set<ChunkBuilder.BuiltChunk> chunksToRebuild;