package com.thebrokenrail.twine.mixin; import com.thebrokenrail.twine.util.BoatUtil; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.BoatEntityRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; import net.minecraft.entity.vehicle.BoatEntity; 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; @Environment(EnvType.CLIENT) @Mixin(BoatEntityRenderer.class) public class MixinBoatEntityRenderer { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V"), method = "render", allow = 1) public void render(BoatEntity boatEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) { BlockState blockState = ((BoatUtil) boatEntity).getChestMode().getBlock().getDefaultState(); if (blockState.getRenderType() != BlockRenderType.INVISIBLE) { matrixStack.push(); matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(180.0f)); matrixStack.scale(0.75f, 0.75f, 0.75f); matrixStack.translate(-1d, -0.25f, 0.5d); matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90.0f)); renderBlock(blockState, matrixStack, vertexConsumerProvider, i); matrixStack.pop(); } } private void renderBlock(BlockState state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { MinecraftClient.getInstance().getBlockRenderManager().renderBlockAsEntity(state, matrixStack, vertexConsumerProvider, i, OverlayTexture.DEFAULT_UV); } }