This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Twine/src/main/java/com/thebrokenrail/twine/mixin/MixinBoatEntityRenderer.java

41 lines
2.1 KiB
Java

package com.thebrokenrail.twine.mixin;
import com.thebrokenrail.twine.util.boat.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);
}
}