2020-06-15 15:15:20 +00:00
|
|
|
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 {
|
2020-06-15 15:42:05 +00:00
|
|
|
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;pop()V"), method = "render", allow = 1)
|
2020-06-15 15:15:20 +00:00
|
|
|
public void render(BoatEntity boatEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) {
|
2020-06-16 16:21:17 +00:00
|
|
|
BlockState blockState = ((BoatUtil) boatEntity).getChestMode().getBlock().getDefaultState();
|
2020-06-15 15:15:20 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|