Optifine compatibility for mixin

This commit is contained in:
octarine-noise
2021-07-26 12:14:57 +02:00
parent 563a67f213
commit 0518b01b50
6 changed files with 63 additions and 7 deletions

View File

@@ -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<Set> 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<BlockState> ci) {
// }
}

View File

@@ -2,8 +2,6 @@ package mods.betterfoliage.mixin;
import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack;
import mods.betterfoliage.render.pipeline.RenderCtxBase; 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.BlockRendererDispatcher;
import net.minecraft.client.renderer.RegionRenderCacheBuilder; import net.minecraft.client.renderer.RegionRenderCacheBuilder;
import net.minecraft.client.renderer.chunk.ChunkRenderCache; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; 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.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@@ -22,7 +19,7 @@ import java.util.Random;
import java.util.Set; import java.util.Set;
@Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$ChunkRender$RebuildTask") @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 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;"; private static final String getBlockState = "Lnet/minecraft/client/renderer/chunk/ChunkRenderCache;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;";

View File

@@ -16,6 +16,7 @@ import net.minecraft.client.renderer.BlockRendererDispatcher
import net.minecraft.client.renderer.chunk.ChunkRenderCache import net.minecraft.client.renderer.chunk.ChunkRenderCache
import net.minecraft.util.Direction import net.minecraft.util.Direction
import net.minecraft.util.math.BlockPos import net.minecraft.util.math.BlockPos
import net.minecraft.world.IBlockDisplayReader
import net.minecraftforge.client.model.data.IModelData import net.minecraftforge.client.model.data.IModelData
import java.util.Random import java.util.Random
@@ -67,7 +68,7 @@ abstract class RenderCtxBase(
companion object { companion object {
@JvmStatic @JvmStatic
fun reset(chunkRenderCache: ChunkRenderCache, blockRendererDispatcher: BlockRendererDispatcher, pos: BlockPos, random: Random) { fun reset(chunkRenderCache: IBlockDisplayReader, blockRendererDispatcher: BlockRendererDispatcher, pos: BlockPos, random: Random) {
// prepare render data // prepare render data
val blockCtx = BasicBlockCtx(chunkRenderCache, pos) val blockCtx = BasicBlockCtx(chunkRenderCache, pos)
val model = blockRendererDispatcher.getBlockModel(blockCtx.state) val model = blockRendererDispatcher.getBlockModel(blockCtx.state)

View File

@@ -10,7 +10,6 @@
"MixinBlock", "MixinBlock",
"MixinBlockState", "MixinBlockState",
"MixinBlockModelRenderer", "MixinBlockModelRenderer",
"MixinChunkRendererDispatcher",
"MixinClientWorld", "MixinClientWorld",
"MixinModelBakery", "MixinModelBakery",
"MixinForgeBlockModelRenderer", "MixinForgeBlockModelRenderer",

View File

@@ -7,7 +7,8 @@
"mixins": [ "mixins": [
], ],
"client": [ "client": [
"MixinOptifineBlockUtils" "MixinOptifineBlockUtils",
"MixinOptifineChunkRendererDispatcher"
], ],
"server": [ "server": [
], ],

View File

@@ -7,6 +7,7 @@
"mixins": [ "mixins": [
], ],
"client": [ "client": [
"MixinVanillaChunkRendererDispatcher"
], ],
"server": [ "server": [
], ],