diff --git a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/BlockRendererAccessor.java b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/BlockRendererAccessor.java new file mode 100644 index 0000000000..9aa9a4e6a9 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/BlockRendererAccessor.java @@ -0,0 +1,12 @@ +package net.irisshaders.iris.compat.sodium.mixin; + +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(BlockRenderer.class) +public interface BlockRendererAccessor { + @Accessor + ChunkBuildBuffers getBuffers(); +} diff --git a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinAbstractBlockRenderContext.java b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinAbstractBlockRenderContext.java new file mode 100644 index 0000000000..65fa9c7e67 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinAbstractBlockRenderContext.java @@ -0,0 +1,42 @@ +package net.irisshaders.iris.compat.sodium.mixin; + +import com.llamalad7.mixinextras.sugar.Local; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; +import net.caffeinemc.mods.sodium.client.render.frapi.render.AbstractBlockRenderContext; +import net.irisshaders.iris.platform.IrisPlatformHelpers; +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; +import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(AbstractBlockRenderContext.class) +public class MixinAbstractBlockRenderContext { + @Shadow + protected BlockPos pos; + + @Shadow + protected BlockAndTintGetter level; + + @Inject(method = "bufferDefaultModel", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/services/PlatformModelAccess;getQuads(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraft/client/renderer/RenderType;Lnet/caffeinemc/mods/sodium/client/services/SodiumModelData;)Ljava/util/List;")) + private void checkDirectionNeo(BakedModel model, BlockState state, CallbackInfo ci, @Local Direction cullFace) { + if ((Object) this instanceof BlockRenderer r && WorldRenderingSettings.INSTANCE.getBlockStateIds() != null && cullFace != null) { + BlockState appearance = IrisPlatformHelpers.getInstance().getBlockAppearance(this.level, state, cullFace, this.pos); + ((BlockSensitiveBufferBuilder) ((BlockRendererAccessor) r).getBuffers()).overrideBlock(WorldRenderingSettings.INSTANCE.getBlockStateIds().getInt(appearance)); + } + } + + @Inject(method = "bufferDefaultModel", at = @At(value = "TAIL")) + private void checkDirectionNeo(BakedModel model, BlockState state, CallbackInfo ci) { + if ((Object) this instanceof BlockRenderer r && WorldRenderingSettings.INSTANCE.getBlockStateIds() != null) { + ((BlockSensitiveBufferBuilder) ((BlockRendererAccessor) r).getBuffers()).restoreBlock(); + } + } +} diff --git a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinBakedChunkModelBuilder.java b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinBakedChunkModelBuilder.java new file mode 100644 index 0000000000..f7122ebada --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinBakedChunkModelBuilder.java @@ -0,0 +1,50 @@ +package net.irisshaders.iris.compat.sodium.mixin; + +import net.caffeinemc.mods.sodium.client.render.chunk.compile.buffers.BakedChunkModelBuilder; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.builder.ChunkMeshBufferBuilder; +import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; +import net.irisshaders.iris.vertices.sodium.terrain.BlockContextHolder; +import net.irisshaders.iris.vertices.sodium.terrain.VertexEncoderInterface; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = BakedChunkModelBuilder.class, remap = false) +public class MixinBakedChunkModelBuilder implements BlockSensitiveBufferBuilder { + @Unique + private final BlockContextHolder contextHolder = new BlockContextHolder(); + + @Inject(method = "", at = @At(value = "TAIL")) + private void setupContextHolder(ChunkMeshBufferBuilder[] vertexBuffers, CallbackInfo ci) { + for (ChunkMeshBufferBuilder vertexBuffer : vertexBuffers) { + ((VertexEncoderInterface) vertexBuffer).iris$setContextHolder(contextHolder); + } + } + + @Override + public void beginBlock(int block, byte renderType, byte blockEmission, int localPosX, int localPosY, int localPosZ) { + contextHolder.setBlockData(block, renderType, blockEmission, localPosX, localPosY, localPosZ); + } + + @Override + public void overrideBlock(int block) { + contextHolder.overrideBlock(block); + } + + @Override + public void restoreBlock() { + contextHolder.restoreBlock(); + } + + @Override + public void endBlock() { + contextHolder.setBlockData(0, (byte) 0, (byte) 0, 0, 0, 0); + } + + @Override + public void ignoreMidBlock(boolean b) { + contextHolder.setIgnoreMidBlock(b); + } +} diff --git a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkBuildBuffers.java b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkBuildBuffers.java index 8b15793164..a40412084d 100644 --- a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkBuildBuffers.java +++ b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkBuildBuffers.java @@ -1,43 +1,53 @@ package net.irisshaders.iris.compat.sodium.mixin; -import com.llamalad7.mixinextras.sugar.Local; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.buffers.BakedChunkModelBuilder; import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; -import net.caffeinemc.mods.sodium.client.render.chunk.vertex.builder.ChunkMeshBufferBuilder; -import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; -import net.irisshaders.iris.vertices.sodium.terrain.BlockContextHolder; -import net.irisshaders.iris.vertices.sodium.terrain.VertexEncoderInterface; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -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.Shadow; -@Mixin(value = ChunkBuildBuffers.class, remap = false) +@Mixin(ChunkBuildBuffers.class) public class MixinChunkBuildBuffers implements BlockSensitiveBufferBuilder { - @Unique - private final BlockContextHolder contextHolder = new BlockContextHolder(); - @Inject(method = "", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")) - private void setupContextHolder(ChunkVertexType vertexType, CallbackInfo ci, @Local TerrainRenderPass pass, @Local ChunkMeshBufferBuilder[] vertexBuffers) { - for (ChunkMeshBufferBuilder vertexBuffer : vertexBuffers) { - ((VertexEncoderInterface) vertexBuffer).iris$setContextHolder(contextHolder); + @Shadow + @Final + private Reference2ReferenceOpenHashMap builders; + + @Override + public void beginBlock(int block, byte renderType, byte blockEmission, int localPosX, int localPosY, int localPosZ) { + for (BakedChunkModelBuilder value : builders.values()) { + ((BlockSensitiveBufferBuilder) value).beginBlock(block, renderType, blockEmission, localPosX, localPosY, localPosZ); } } @Override - public void beginBlock(int block, byte renderType, byte blockEmission, int localPosX, int localPosY, int localPosZ) { - contextHolder.setBlockData(block, renderType, blockEmission, localPosX, localPosY, localPosZ); + public void overrideBlock(int block) { + for (BakedChunkModelBuilder value : builders.values()) { + ((BlockSensitiveBufferBuilder) value).overrideBlock(block); + } + } + + @Override + public void restoreBlock() { + for (BakedChunkModelBuilder value : builders.values()) { + ((BlockSensitiveBufferBuilder) value).restoreBlock(); + } } @Override public void endBlock() { - contextHolder.setBlockData(0, (byte) 0, (byte) 0, 0, 0, 0); + for (BakedChunkModelBuilder value : builders.values()) { + ((BlockSensitiveBufferBuilder) value).endBlock(); + } } @Override public void ignoreMidBlock(boolean b) { - contextHolder.setIgnoreMidBlock(b); + for (BakedChunkModelBuilder value : builders.values()) { + ((BlockSensitiveBufferBuilder) value).ignoreMidBlock(b); + } } } diff --git a/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkVertexConsumer.java b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkVertexConsumer.java new file mode 100644 index 0000000000..3794ea77ab --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/compat/sodium/mixin/MixinChunkVertexConsumer.java @@ -0,0 +1,40 @@ +package net.irisshaders.iris.compat.sodium.mixin; + +import net.caffeinemc.mods.sodium.client.render.chunk.compile.buffers.ChunkModelBuilder; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.buffers.ChunkVertexConsumer; +import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = ChunkVertexConsumer.class, remap = false) +public class MixinChunkVertexConsumer implements BlockSensitiveBufferBuilder { + @Shadow + @Final + private ChunkModelBuilder modelBuilder; + + @Override + public void beginBlock(int block, byte renderType, byte blockEmission, int localPosX, int localPosY, int localPosZ) { + ((BlockSensitiveBufferBuilder) modelBuilder).beginBlock(block, renderType, blockEmission, localPosX, localPosY, localPosZ); + } + + @Override + public void overrideBlock(int block) { + ((BlockSensitiveBufferBuilder) modelBuilder).overrideBlock(block); + } + + @Override + public void restoreBlock() { + ((BlockSensitiveBufferBuilder) modelBuilder).restoreBlock(); + } + + @Override + public void endBlock() { + ((BlockSensitiveBufferBuilder) modelBuilder).endBlock(); + } + + @Override + public void ignoreMidBlock(boolean b) { + ((BlockSensitiveBufferBuilder) modelBuilder).ignoreMidBlock(b); + } +} diff --git a/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java b/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java index a6a1551509..0b34550ef1 100644 --- a/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java +++ b/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java @@ -1211,6 +1211,10 @@ public void destroy() { customImages.forEach(GlImage::destroy); + if (shadowRenderTargets != null) { + shadowRenderTargets.destroy(); + } + if (shadowRenderer != null) { shadowRenderer.destroy(); } diff --git a/common/src/main/java/net/irisshaders/iris/platform/IrisPlatformHelpers.java b/common/src/main/java/net/irisshaders/iris/platform/IrisPlatformHelpers.java index 77f27fcf12..1248edde82 100644 --- a/common/src/main/java/net/irisshaders/iris/platform/IrisPlatformHelpers.java +++ b/common/src/main/java/net/irisshaders/iris/platform/IrisPlatformHelpers.java @@ -1,6 +1,10 @@ package net.irisshaders.iris.platform; import net.minecraft.client.KeyMapping; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import java.nio.file.Path; import java.util.ServiceLoader; @@ -27,4 +31,6 @@ static IrisPlatformHelpers getInstance() { KeyMapping registerKeyBinding(KeyMapping keyMapping); boolean useELS(); + + BlockState getBlockAppearance(BlockAndTintGetter level, BlockState state, Direction cullFace, BlockPos pos); } diff --git a/common/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java b/common/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java index 691cf1b3e9..de8925a999 100644 --- a/common/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java +++ b/common/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java @@ -745,7 +745,6 @@ private String getBlockEntitiesDebugString() { } public void destroy() { - targets.destroy(); ((MemoryTrackingRenderBuffers) buffers).freeAndDeleteBuffers(); } diff --git a/common/src/main/java/net/irisshaders/iris/vertices/BlockSensitiveBufferBuilder.java b/common/src/main/java/net/irisshaders/iris/vertices/BlockSensitiveBufferBuilder.java index 9a10e794cd..27c6b6cf5f 100644 --- a/common/src/main/java/net/irisshaders/iris/vertices/BlockSensitiveBufferBuilder.java +++ b/common/src/main/java/net/irisshaders/iris/vertices/BlockSensitiveBufferBuilder.java @@ -3,6 +3,10 @@ public interface BlockSensitiveBufferBuilder { void beginBlock(int block, byte renderType, byte blockEmission, int localPosX, int localPosY, int localPosZ); + void overrideBlock(int block); + + void restoreBlock(); + void endBlock(); void ignoreMidBlock(boolean b); diff --git a/common/src/main/java/net/irisshaders/iris/vertices/sodium/terrain/BlockContextHolder.java b/common/src/main/java/net/irisshaders/iris/vertices/sodium/terrain/BlockContextHolder.java index c2d6637e12..7d40a3dbe3 100644 --- a/common/src/main/java/net/irisshaders/iris/vertices/sodium/terrain/BlockContextHolder.java +++ b/common/src/main/java/net/irisshaders/iris/vertices/sodium/terrain/BlockContextHolder.java @@ -6,6 +6,7 @@ public class BlockContextHolder { private byte renderType; private int localPosX, localPosY, localPosZ; private boolean ignoreMidBlock; + private int oldId = -1; public int getBlockId() { return blockId; @@ -47,4 +48,20 @@ public boolean ignoreMidBlock() { public void setIgnoreMidBlock(boolean ignoreMidBlock) { this.ignoreMidBlock = ignoreMidBlock; } + + public void overrideBlock(int block) { + if (this.blockId == block) return; + + if (this.oldId == -1) { + this.oldId = blockId; + } + + this.blockId = block; + } + + public void restoreBlock() { + if (this.oldId == -1) return; + this.blockId = oldId; + this.oldId = -1; + } } diff --git a/common/src/main/resources/mixins.iris.compat.sodium.json b/common/src/main/resources/mixins.iris.compat.sodium.json index 85acabcdba..d6c1f4f0d1 100644 --- a/common/src/main/resources/mixins.iris.compat.sodium.json +++ b/common/src/main/resources/mixins.iris.compat.sodium.json @@ -6,9 +6,13 @@ "plugin": "net.irisshaders.iris.mixin.IrisMixinPlugin", "compatibilityLevel": "JAVA_8", "client": [ + "BlockRendererAccessor", "CloudRendererAccessor", + "MixinAbstractBlockRenderContext", "MixinBlockRenderer", + "MixinBakedChunkModelBuilder", "MixinChunkBuildBuffers", + "MixinChunkVertexConsumer", "MixinChunkMeshBufferBuilder", "MixinChunkMeshBuildTask", "MixinCloudRenderer", diff --git a/fabric/src/main/java/net/irisshaders/iris/platform/IrisFabricHelpers.java b/fabric/src/main/java/net/irisshaders/iris/platform/IrisFabricHelpers.java index e23e1c0933..bd97de8bca 100644 --- a/fabric/src/main/java/net/irisshaders/iris/platform/IrisFabricHelpers.java +++ b/fabric/src/main/java/net/irisshaders/iris/platform/IrisFabricHelpers.java @@ -6,6 +6,10 @@ import net.fabricmc.loader.api.SemanticVersion; import net.fabricmc.loader.api.VersionParsingException; import net.minecraft.client.KeyMapping; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import java.nio.file.Path; import java.text.ParseException; @@ -54,4 +58,9 @@ public KeyMapping registerKeyBinding(KeyMapping keyMapping) { public boolean useELS() { return false; } + + @Override + public BlockState getBlockAppearance(BlockAndTintGetter level, BlockState state, Direction cullFace, BlockPos pos) { + return state; + } } diff --git a/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGameClientEvents.java b/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGameClientEvents.java new file mode 100644 index 0000000000..502d5a9695 --- /dev/null +++ b/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGameClientEvents.java @@ -0,0 +1,29 @@ +package net.irisshaders.iris.mixin.forge; + +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; +import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.event.AddSectionGeometryEvent; +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.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Pseudo +@Mixin(targets = "com/portingdeadmods/cable_facades/events/GameClientEvents$2", remap = true) +public class MixinGameClientEvents { + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBatched(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;Lnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V")) + private void iris$setId(AddSectionGeometryEvent.SectionRenderingContext sectionRenderingContext, CallbackInfo ci, @Local BlockState state, @Local VertexConsumer buffer, @Local BlockPos pos) { + if (WorldRenderingSettings.INSTANCE.getBlockStateIds() == null) return; + ((BlockSensitiveBufferBuilder) buffer).beginBlock(WorldRenderingSettings.INSTANCE.getBlockStateIds().getInt(state), (byte) 0, (byte) state.getLightEmission(), pos.getX(), pos.getY(), pos.getZ()); + } + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/block/BlockRenderDispatcher;renderBatched(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;Lnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V", shift = At.Shift.AFTER)) + private void iris$removeId(AddSectionGeometryEvent.SectionRenderingContext sectionRenderingContext, CallbackInfo ci, @Local BlockState state, @Local VertexConsumer buffer, @Local BlockPos pos) { + if (WorldRenderingSettings.INSTANCE.getBlockStateIds() == null) return; + ((BlockSensitiveBufferBuilder) buffer).endBlock(); + } +} diff --git a/neoforge/src/main/java/net/irisshaders/iris/platform/IrisForgeHelpers.java b/neoforge/src/main/java/net/irisshaders/iris/platform/IrisForgeHelpers.java index 4975e84c6b..a15a5653b5 100644 --- a/neoforge/src/main/java/net/irisshaders/iris/platform/IrisForgeHelpers.java +++ b/neoforge/src/main/java/net/irisshaders/iris/platform/IrisForgeHelpers.java @@ -2,6 +2,10 @@ import net.irisshaders.iris.Iris; import net.minecraft.client.KeyMapping; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import net.neoforged.fml.loading.FMLLoader; import net.neoforged.fml.loading.FMLPaths; import net.neoforged.fml.loading.LoadingModList; @@ -16,6 +20,8 @@ public boolean isModLoaded(String modId) { return LoadingModList.get().getModFileById(modId) != null; } + boolean HAS_CAMO = isModLoaded("cable_facades"); + @Override public String getVersion() { return LoadingModList.get().getModFileById(Iris.MODID).versionString(); @@ -51,4 +57,10 @@ public KeyMapping registerKeyBinding(KeyMapping keyMapping) { public boolean useELS() { return true; } + + // TODO find a way to do this without breaking Cable Facades... + @Override + public BlockState getBlockAppearance(BlockAndTintGetter level, BlockState state, Direction cullFace, BlockPos pos) { + return state; + } } diff --git a/neoforge/src/main/resources/mixins.iris.forge.json b/neoforge/src/main/resources/mixins.iris.forge.json index 0bf870d4e9..08fce22ab4 100644 --- a/neoforge/src/main/resources/mixins.iris.forge.json +++ b/neoforge/src/main/resources/mixins.iris.forge.json @@ -4,6 +4,7 @@ "package": "net.irisshaders.iris.mixin.forge", "compatibilityLevel": "JAVA_8", "client": [ + "MixinGameClientEvents", "MixinItemBlockRenderTypes", "MixinRenderFlame", "MixinRenderMekasuit",