From 0518b01b5018d8c41a0e5f501cf6e8aff7906d2f Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Mon, 26 Jul 2021 12:14:57 +0200 Subject: [PATCH] Optifine compatibility for mixin --- .../MixinOptifineChunkRendererDispatcher.java | 57 +++++++++++++++++++ .../MixinVanillaChunkRendererDispatcher.java | 5 +- .../render/pipeline/RenderCtxBase.kt | 3 +- .../betterfoliage.common.mixins.json | 1 - .../betterfoliage.optifine.mixins.json | 3 +- .../betterfoliage.vanilla.mixins.json | 1 + 6 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRendererDispatcher.java diff --git a/src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRendererDispatcher.java b/src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRendererDispatcher.java new file mode 100644 index 0000000..63650e9 --- /dev/null +++ b/src/main/java/mods/betterfoliage/mixin/MixinOptifineChunkRendererDispatcher.java @@ -0,0 +1,57 @@ +package mods.betterfoliage.mixin; + +import com.mojang.blaze3d.matrix.MatrixStack; +import mods.betterfoliage.render.pipeline.RenderCtxBase; +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; +import net.minecraft.client.renderer.chunk.VisGraph; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockDisplayReader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Coerce; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.Iterator; +import java.util.Random; +import java.util.Set; + +@Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$ChunkRender$RebuildTask") +public class MixinOptifineChunkRendererDispatcher { + + private static final String compile = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$RebuildTask;compile(FFFLnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk;Lnet/minecraft/client/renderer/RegionRenderCacheBuilder;)Ljava/util/Set;"; + private static final String getBlockStateMcp = "Lnet/optifine/override/ChunkCacheOF;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"; + private static final String getBlockStateSrg = "Lnet/optifine/override/ChunkCacheOF;func_180495_p(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"; + + @Inject(method = compile, locals = LocalCapture.CAPTURE_FAILHARD, require = 1, at = { + @At(value = "INVOKE", target = getBlockStateMcp), + @At(value = "INVOKE", target = getBlockStateSrg), + }) + void onStartBlockRender( + float xIn, float yIn, float zIn, + ChunkRenderDispatcher.CompiledChunk compiledChunkIn, RegionRenderCacheBuilder builderIn, + CallbackInfoReturnable cir, + int i, BlockPos blockpos, BlockPos blockpos1, VisGraph visgraph, Set set, MatrixStack matrixstack, + @Coerce IBlockDisplayReader chunkrendercache, RenderType[] singleLayer, + boolean shaders, boolean shadersMidBlock, Random random, + BlockRendererDispatcher blockrendererdispatcher, Iterator var18, + @Coerce BlockPos blockpos2 + ) { + RenderCtxBase.reset(chunkrendercache, blockrendererdispatcher, blockpos2, random); + } + +// @Inject(method = compile, locals = LocalCapture.PRINT, require = 1, at = { +// @At(value = "INVOKE", target = getBlockStateMcp), +// @At(value = "INVOKE", target = getBlockStateSrg), +// }) +// void printLocals( +// float p_228940_1_, float p_228940_2_, float p_228940_3_, +// ChunkRenderDispatcher.CompiledChunk p_228940_4_, RegionRenderCacheBuilder p_228940_5_, +// CallbackInfoReturnable ci) { +// } +} diff --git a/src/main/java/mods/betterfoliage/mixin/MixinVanillaChunkRendererDispatcher.java b/src/main/java/mods/betterfoliage/mixin/MixinVanillaChunkRendererDispatcher.java index 615d06b..cf43f41 100644 --- a/src/main/java/mods/betterfoliage/mixin/MixinVanillaChunkRendererDispatcher.java +++ b/src/main/java/mods/betterfoliage/mixin/MixinVanillaChunkRendererDispatcher.java @@ -2,8 +2,6 @@ package mods.betterfoliage.mixin; import com.mojang.blaze3d.matrix.MatrixStack; import mods.betterfoliage.render.pipeline.RenderCtxBase; -import mods.betterfoliage.render.pipeline.RenderCtxForge; -import mods.betterfoliage.render.pipeline.RenderCtxVanilla; import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.RegionRenderCacheBuilder; import net.minecraft.client.renderer.chunk.ChunkRenderCache; @@ -13,7 +11,6 @@ import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -22,7 +19,7 @@ import java.util.Random; import java.util.Set; @Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$ChunkRender$RebuildTask") -public class MixinChunkRendererDispatcher { +public class MixinVanillaChunkRendererDispatcher { private static final String compile = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$ChunkRender$RebuildTask;compile(FFFLnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher$CompiledChunk;Lnet/minecraft/client/renderer/RegionRenderCacheBuilder;)Ljava/util/Set;"; private static final String getBlockState = "Lnet/minecraft/client/renderer/chunk/ChunkRenderCache;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"; diff --git a/src/main/kotlin/mods/betterfoliage/render/pipeline/RenderCtxBase.kt b/src/main/kotlin/mods/betterfoliage/render/pipeline/RenderCtxBase.kt index c8082d4..6a8154c 100644 --- a/src/main/kotlin/mods/betterfoliage/render/pipeline/RenderCtxBase.kt +++ b/src/main/kotlin/mods/betterfoliage/render/pipeline/RenderCtxBase.kt @@ -16,6 +16,7 @@ import net.minecraft.client.renderer.BlockRendererDispatcher import net.minecraft.client.renderer.chunk.ChunkRenderCache import net.minecraft.util.Direction import net.minecraft.util.math.BlockPos +import net.minecraft.world.IBlockDisplayReader import net.minecraftforge.client.model.data.IModelData import java.util.Random @@ -67,7 +68,7 @@ abstract class RenderCtxBase( companion object { @JvmStatic - fun reset(chunkRenderCache: ChunkRenderCache, blockRendererDispatcher: BlockRendererDispatcher, pos: BlockPos, random: Random) { + fun reset(chunkRenderCache: IBlockDisplayReader, blockRendererDispatcher: BlockRendererDispatcher, pos: BlockPos, random: Random) { // prepare render data val blockCtx = BasicBlockCtx(chunkRenderCache, pos) val model = blockRendererDispatcher.getBlockModel(blockCtx.state) diff --git a/src/main/resources/betterfoliage.common.mixins.json b/src/main/resources/betterfoliage.common.mixins.json index 2614d3f..e1ee813 100644 --- a/src/main/resources/betterfoliage.common.mixins.json +++ b/src/main/resources/betterfoliage.common.mixins.json @@ -10,7 +10,6 @@ "MixinBlock", "MixinBlockState", "MixinBlockModelRenderer", - "MixinChunkRendererDispatcher", "MixinClientWorld", "MixinModelBakery", "MixinForgeBlockModelRenderer", diff --git a/src/main/resources/betterfoliage.optifine.mixins.json b/src/main/resources/betterfoliage.optifine.mixins.json index fd55290..c773c2c 100644 --- a/src/main/resources/betterfoliage.optifine.mixins.json +++ b/src/main/resources/betterfoliage.optifine.mixins.json @@ -7,7 +7,8 @@ "mixins": [ ], "client": [ - "MixinOptifineBlockUtils" + "MixinOptifineBlockUtils", + "MixinOptifineChunkRendererDispatcher" ], "server": [ ], diff --git a/src/main/resources/betterfoliage.vanilla.mixins.json b/src/main/resources/betterfoliage.vanilla.mixins.json index 6972cc3..8407b03 100644 --- a/src/main/resources/betterfoliage.vanilla.mixins.json +++ b/src/main/resources/betterfoliage.vanilla.mixins.json @@ -7,6 +7,7 @@ "mixins": [ ], "client": [ + "MixinVanillaChunkRendererDispatcher" ], "server": [ ],