ModCapeLayer.java 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package me.km.overrides;
  2. import com.mojang.blaze3d.platform.GlStateManager;
  3. import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
  4. import net.minecraft.client.renderer.entity.IEntityRenderer;
  5. import net.minecraft.client.renderer.entity.layers.CapeLayer;
  6. import net.minecraft.client.renderer.entity.model.PlayerModel;
  7. import net.minecraft.entity.player.PlayerModelPart;
  8. import net.minecraft.inventory.EquipmentSlotType;
  9. import net.minecraft.item.ItemStack;
  10. import net.minecraft.item.Items;
  11. import net.minecraft.util.ResourceLocation;
  12. import net.minecraft.util.math.MathHelper;
  13. import net.minecraftforge.api.distmarker.Dist;
  14. import net.minecraftforge.api.distmarker.OnlyIn;
  15. @OnlyIn(Dist.CLIENT)
  16. public class ModCapeLayer extends CapeLayer
  17. {
  18. public ModCapeLayer(IEntityRenderer<AbstractClientPlayerEntity, PlayerModel<AbstractClientPlayerEntity>> pRenderer)
  19. {
  20. super(pRenderer);
  21. }
  22. @Override
  23. public void render(AbstractClientPlayerEntity entityIn, float p_212842_2_, float p_212842_3_, float p_212842_4_, float p_212842_5_, float p_212842_6_, float p_212842_7_, float p_212842_8_)
  24. {
  25. if(entityIn.hasPlayerInfo() && !entityIn.isInvisible() && entityIn.isWearing(PlayerModelPart.CAPE))
  26. {
  27. ItemStack itemstack = entityIn.getItemStackFromSlot(EquipmentSlotType.CHEST);
  28. if(itemstack.getItem() != Items.ELYTRA)
  29. {
  30. ResourceLocation rl = PlayerCapeLoader.INSTANCE.getTexture(entityIn.getUniqueID());
  31. if(rl == null)
  32. {
  33. return;
  34. }
  35. GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
  36. this.bindTexture(rl);
  37. GlStateManager.pushMatrix();
  38. GlStateManager.translatef(0.0F, 0.0F, 0.125F);
  39. double d0 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosX, entityIn.chasingPosX) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosX, entityIn.posX);
  40. double d1 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosY, entityIn.chasingPosY) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosY, entityIn.posY);
  41. double d2 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosZ, entityIn.chasingPosZ) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosZ, entityIn.posZ);
  42. float f = entityIn.prevRenderYawOffset + (entityIn.renderYawOffset - entityIn.prevRenderYawOffset);
  43. double d3 = (double) MathHelper.sin(f * ((float) Math.PI / 180F));
  44. double d4 = (double) (-MathHelper.cos(f * ((float) Math.PI / 180F)));
  45. float f1 = (float) d1 * 10.0F;
  46. f1 = MathHelper.clamp(f1, -6.0F, 32.0F);
  47. float f2 = (float) (d0 * d3 + d2 * d4) * 100.0F;
  48. f2 = MathHelper.clamp(f2, 0.0F, 150.0F);
  49. float f3 = (float) (d0 * d4 - d2 * d3) * 100.0F;
  50. f3 = MathHelper.clamp(f3, -20.0F, 20.0F);
  51. if(f2 < 0.0F)
  52. {
  53. f2 = 0.0F;
  54. }
  55. float f4 = MathHelper.lerp(p_212842_4_, entityIn.prevCameraYaw, entityIn.cameraYaw);
  56. f1 = f1 + MathHelper.sin(MathHelper.lerp(p_212842_4_, entityIn.prevDistanceWalkedModified, entityIn.distanceWalkedModified) * 6.0F) * 32.0F * f4;
  57. if(entityIn.shouldRenderSneaking())
  58. {
  59. f1 += 25.0F;
  60. }
  61. GlStateManager.rotatef(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
  62. GlStateManager.rotatef(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
  63. GlStateManager.rotatef(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
  64. GlStateManager.rotatef(180.0F, 0.0F, 1.0F, 0.0F);
  65. this.getEntityModel().renderCape(0.0625F);
  66. GlStateManager.popMatrix();
  67. }
  68. }
  69. }
  70. }