74 lines
3.3 KiB
Java
74 lines
3.3 KiB
Java
package net.minecraft.client.renderer.entity;
|
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import com.mojang.math.Axis;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.world.entity.projectile.AbstractArrow;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public abstract class ArrowRenderer<T extends AbstractArrow> extends EntityRenderer<T> {
|
|
public ArrowRenderer(EntityRendererProvider.Context context) {
|
|
super(context);
|
|
}
|
|
|
|
public void render(T entity, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int packedLight) {
|
|
poseStack.pushPose();
|
|
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, entity.yRotO, entity.getYRot()) - 90.0F));
|
|
poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entity.xRotO, entity.getXRot())));
|
|
int i = 0;
|
|
float f = 0.0F;
|
|
float g = 0.5F;
|
|
float h = 0.0F;
|
|
float j = 0.15625F;
|
|
float k = 0.0F;
|
|
float l = 0.15625F;
|
|
float m = 0.15625F;
|
|
float n = 0.3125F;
|
|
float o = 0.05625F;
|
|
float p = entity.shakeTime - partialTicks;
|
|
if (p > 0.0F) {
|
|
float q = -Mth.sin(p * 3.0F) * p;
|
|
poseStack.mulPose(Axis.ZP.rotationDegrees(q));
|
|
}
|
|
|
|
poseStack.mulPose(Axis.XP.rotationDegrees(45.0F));
|
|
poseStack.scale(0.05625F, 0.05625F, 0.05625F);
|
|
poseStack.translate(-4.0F, 0.0F, 0.0F);
|
|
VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutout(this.getTextureLocation(entity)));
|
|
PoseStack.Pose pose = poseStack.last();
|
|
this.vertex(pose, vertexConsumer, -7, -2, -2, 0.0F, 0.15625F, -1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, -2, 2, 0.15625F, 0.15625F, -1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, 2, 2, 0.15625F, 0.3125F, -1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, 2, -2, 0.0F, 0.3125F, -1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, 2, -2, 0.0F, 0.15625F, 1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, 2, 2, 0.15625F, 0.15625F, 1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, -2, 2, 0.15625F, 0.3125F, 1, 0, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -7, -2, -2, 0.0F, 0.3125F, 1, 0, 0, packedLight);
|
|
|
|
for (int r = 0; r < 4; r++) {
|
|
poseStack.mulPose(Axis.XP.rotationDegrees(90.0F));
|
|
this.vertex(pose, vertexConsumer, -8, -2, 0, 0.0F, 0.0F, 0, 1, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, 8, -2, 0, 0.5F, 0.0F, 0, 1, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, 8, 2, 0, 0.5F, 0.15625F, 0, 1, 0, packedLight);
|
|
this.vertex(pose, vertexConsumer, -8, 2, 0, 0.0F, 0.15625F, 0, 1, 0, packedLight);
|
|
}
|
|
|
|
poseStack.popPose();
|
|
super.render(entity, entityYaw, partialTicks, poseStack, buffer, packedLight);
|
|
}
|
|
|
|
public void vertex(PoseStack.Pose pose, VertexConsumer consumer, int x, int y, int z, float u, float v, int normalX, int normalY, int normalZ, int packedLight) {
|
|
consumer.addVertex(pose, (float)x, (float)y, (float)z)
|
|
.setColor(-1)
|
|
.setUv(u, v)
|
|
.setOverlay(OverlayTexture.NO_OVERLAY)
|
|
.setLight(packedLight)
|
|
.setNormal(pose, normalX, normalZ, normalY);
|
|
}
|
|
}
|