|
| 1 | +package dev.ryanhcode.sable.neoforge.mixin.compatibility.iris; |
| 2 | + |
| 3 | +import com.mojang.blaze3d.vertex.PoseStack; |
| 4 | +import com.mojang.blaze3d.vertex.VertexConsumer; |
| 5 | +import it.unimi.dsi.fastutil.objects.Object2IntMap; |
| 6 | +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; |
| 7 | +import net.irisshaders.iris.vertices.BlockSensitiveBufferBuilder; |
| 8 | +import net.minecraft.client.renderer.RenderType; |
| 9 | +import net.minecraft.client.renderer.block.ModelBlockRenderer; |
| 10 | +import net.minecraft.client.resources.model.BakedModel; |
| 11 | +import net.minecraft.core.BlockPos; |
| 12 | +import net.minecraft.util.RandomSource; |
| 13 | +import net.minecraft.world.level.BlockAndTintGetter; |
| 14 | +import net.minecraft.world.level.block.state.BlockState; |
| 15 | +import net.neoforged.neoforge.client.model.data.ModelData; |
| 16 | +import org.spongepowered.asm.mixin.Mixin; |
| 17 | +import org.spongepowered.asm.mixin.Unique; |
| 18 | +import org.spongepowered.asm.mixin.injection.At; |
| 19 | +import org.spongepowered.asm.mixin.injection.Inject; |
| 20 | +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; |
| 21 | + |
| 22 | +@Mixin(ModelBlockRenderer.class) |
| 23 | +public class ModelBlockRendererMixin { |
| 24 | + |
| 25 | + @Unique |
| 26 | + private void sable$beginBlock(final BlockState state, final BlockPos pos, final VertexConsumer consumer) { |
| 27 | + if (!(consumer instanceof BlockSensitiveBufferBuilder buffer)) { |
| 28 | + return; |
| 29 | + } |
| 30 | + |
| 31 | + final Object2IntMap<BlockState> blockStateIds = WorldRenderingSettings.INSTANCE.getBlockStateIds(); |
| 32 | + if (blockStateIds == null) { |
| 33 | + return; |
| 34 | + } |
| 35 | + |
| 36 | + buffer.beginBlock(blockStateIds.getOrDefault(state, -1), (byte) 0, (byte) state.getLightEmission(), pos.getX() & 15, pos.getY() & 15, pos.getZ() & 15); |
| 37 | + } |
| 38 | + |
| 39 | + @Unique |
| 40 | + private void sable$endBlock(final VertexConsumer consumer) { |
| 41 | + if (consumer instanceof BlockSensitiveBufferBuilder buffer) { |
| 42 | + buffer.endBlock(); |
| 43 | + } |
| 44 | + } |
| 45 | + |
| 46 | + @Inject(method = "tesselateWithAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V", at = @At("HEAD")) |
| 47 | + private void sable$beginBlockAO(final BlockAndTintGetter level, final BakedModel model, final BlockState state, final BlockPos pos, final PoseStack poseStack, final VertexConsumer consumer, final boolean checkSides, final RandomSource random, final long seed, final int packedOverlay, final ModelData modelData, final RenderType renderType, final CallbackInfo ci) { |
| 48 | + this.sable$beginBlock(state, pos, consumer); |
| 49 | + } |
| 50 | + |
| 51 | + @Inject(method = "tesselateWithAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V", at = @At("RETURN")) |
| 52 | + private void sable$endBlockAO(final BlockAndTintGetter level, final BakedModel model, final BlockState state, final BlockPos pos, final PoseStack poseStack, final VertexConsumer consumer, final boolean checkSides, final RandomSource random, final long seed, final int packedOverlay, final ModelData modelData, final RenderType renderType, final CallbackInfo ci) { |
| 53 | + this.sable$endBlock(consumer); |
| 54 | + } |
| 55 | + |
| 56 | + @Inject(method = "tesselateWithoutAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V", at = @At("HEAD")) |
| 57 | + private void sable$beginBlockFlat(final BlockAndTintGetter level, final BakedModel model, final BlockState state, final BlockPos pos, final PoseStack poseStack, final VertexConsumer consumer, final boolean checkSides, final RandomSource random, final long seed, final int packedOverlay, final ModelData modelData, final RenderType renderType, final CallbackInfo ci) { |
| 58 | + this.sable$beginBlock(state, pos, consumer); |
| 59 | + } |
| 60 | + |
| 61 | + @Inject(method = "tesselateWithoutAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/neoforged/neoforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V", at = @At("RETURN")) |
| 62 | + private void sable$endBlockFlat(final BlockAndTintGetter level, final BakedModel model, final BlockState state, final BlockPos pos, final PoseStack poseStack, final VertexConsumer consumer, final boolean checkSides, final RandomSource random, final long seed, final int packedOverlay, final ModelData modelData, final RenderType renderType, final CallbackInfo ci) { |
| 63 | + this.sable$endBlock(consumer); |
| 64 | + } |
| 65 | +} |
0 commit comments