ModCapeLayer.java 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package me.km.overrides;
  2. import com.mojang.blaze3d.matrix.MatrixStack;
  3. import com.mojang.blaze3d.platform.GlStateManager;
  4. import com.mojang.blaze3d.vertex.IVertexBuilder;
  5. import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
  6. import net.minecraft.client.renderer.IRenderTypeBuffer;
  7. import net.minecraft.client.renderer.RenderType;
  8. import net.minecraft.client.renderer.Vector3f;
  9. import net.minecraft.client.renderer.entity.IEntityRenderer;
  10. import net.minecraft.client.renderer.entity.layers.CapeLayer;
  11. import net.minecraft.client.renderer.entity.model.PlayerModel;
  12. import net.minecraft.client.renderer.texture.OverlayTexture;
  13. import net.minecraft.entity.player.PlayerModelPart;
  14. import net.minecraft.inventory.EquipmentSlotType;
  15. import net.minecraft.item.ItemStack;
  16. import net.minecraft.item.Items;
  17. import net.minecraft.util.ResourceLocation;
  18. import net.minecraft.util.math.MathHelper;
  19. import net.minecraftforge.api.distmarker.Dist;
  20. import net.minecraftforge.api.distmarker.OnlyIn;
  21. @OnlyIn(Dist.CLIENT)
  22. public class ModCapeLayer extends CapeLayer
  23. {
  24. public ModCapeLayer(IEntityRenderer<AbstractClientPlayerEntity, PlayerModel<AbstractClientPlayerEntity>> pRenderer)
  25. {
  26. super(pRenderer);
  27. }
  28. @Override
  29. public void render(MatrixStack mStack, IRenderTypeBuffer buffer, int packedLightIn, AbstractClientPlayerEntity p, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch)
  30. {
  31. if(p.hasPlayerInfo() && !p.isInvisible() && p.isWearing(PlayerModelPart.CAPE))
  32. {
  33. ItemStack chestStack = p.getItemStackFromSlot(EquipmentSlotType.CHEST);
  34. if(chestStack.getItem() != Items.ELYTRA)
  35. {
  36. ResourceLocation rl = PlayerCapeLoader.INSTANCE.getTexture(p.getUniqueID());
  37. if(rl == null)
  38. {
  39. return;
  40. }
  41. mStack.push();
  42. mStack.translate(0.0, 0.0, 0.125);
  43. double d0 = MathHelper.lerp(partialTicks, p.prevChasingPosX, p.chasingPosX) - MathHelper.lerp(partialTicks, p.prevPosX, p.getPosX());
  44. double d1 = MathHelper.lerp(partialTicks, p.prevChasingPosY, p.chasingPosY) - MathHelper.lerp(partialTicks, p.prevPosY, p.getPosY());
  45. double d2 = MathHelper.lerp(partialTicks, p.prevChasingPosZ, p.chasingPosZ) - MathHelper.lerp(partialTicks, p.prevPosZ, p.getPosZ());
  46. float f = p.prevRenderYawOffset + (p.renderYawOffset - p.prevRenderYawOffset);
  47. double d3 = MathHelper.sin(f * ((float) Math.PI / 180f));
  48. double d4 = -MathHelper.cos(f * ((float) Math.PI / 180f));
  49. float f1 = (float) d1 * 10.0f;
  50. f1 = MathHelper.clamp(f1, -6.0f, 32.0f);
  51. float f2 = (float) (d0 * d3 + d2 * d4) * 100.0f;
  52. f2 = MathHelper.clamp(f2, 0.0f, 150.0f);
  53. float f3 = (float) (d0 * d4 - d2 * d3) * 100.0f;
  54. f3 = MathHelper.clamp(f3, -20.0f, 20.0f);
  55. if(f2 < 0.0f)
  56. {
  57. f2 = 0.0f;
  58. }
  59. float f4 = MathHelper.lerp(partialTicks, p.prevCameraYaw, p.cameraYaw);
  60. f1 = f1 + MathHelper.sin(MathHelper.lerp(partialTicks, p.prevDistanceWalkedModified, p.distanceWalkedModified) * 6.0f) * 32.0f * f4;
  61. if(p.isCrouching())
  62. {
  63. f1 += 25.0f;
  64. }
  65. mStack.rotate(Vector3f.XP.rotationDegrees(6.0f + f2 / 2.0f + f1));
  66. mStack.rotate(Vector3f.ZP.rotationDegrees(f3 / 2.0f));
  67. mStack.rotate(Vector3f.YP.rotationDegrees(180.0f - f3 / 2.0f));
  68. IVertexBuilder ivertexbuilder = buffer.getBuffer(RenderType.getEntitySolid(rl));
  69. this.getEntityModel().renderCape(mStack, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY);
  70. mStack.pop();
  71. }
  72. }
  73. }
  74. }