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 extends EntityRenderer { 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); } }