Guest User

ArmRender

a guest
Sep 24th, 2024
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. import com.mojang.blaze3d.systems.RenderSystem;
  2. import net.minecraft.client.Minecraft;
  3. import net.minecraft.client.model.PlayerModel;
  4. import net.minecraft.client.player.AbstractClientPlayer;
  5. import net.minecraft.client.renderer.MultiBufferSource;
  6. import net.minecraft.client.renderer.entity.player.PlayerRenderer;
  7. import net.minecraft.resources.ResourceLocation;
  8. import net.minecraft.world.entity.EquipmentSlot;
  9. import net.minecraft.world.item.Items;
  10. import net.minecraftforge.api.distmarker.Dist;
  11. import net.minecraftforge.client.event.RenderHandEvent;
  12. import net.minecraftforge.eventbus.api.SubscribeEvent;
  13. import net.minecraftforge.fml.common.Mod;
  14. import com.mojang.blaze3d.vertex.PoseStack;
  15. import com.mojang.math.Vector3f;
  16.  
  17. @Mod.EventBusSubscriber(modid = "displayarmorthingamajin", bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
  18. public class CustomArmRenderer {
  19.  
  20. private static final ResourceLocation CUSTOM_ARM_TEXTURE = new ResourceLocation("displayarmorthingamajin", "textures/entity/custom_arm_texture.png");
  21.  
  22. @SubscribeEvent
  23. public static void onRenderHand(RenderHandEvent event) {
  24. AbstractClientPlayer player = Minecraft.getInstance().player;
  25.  
  26. // Check diamond chestplate
  27. boolean isWearingDiamondChestplate = player.getItemBySlot(EquipmentSlot.CHEST).getItem() == Items.DIAMOND_CHESTPLATE;
  28.  
  29. if (isWearingDiamondChestplate) {
  30. PoseStack poseStack = event.getPoseStack();
  31. MultiBufferSource bufferSource = event.getMultiBufferSource();
  32. RenderSystem.setShaderTexture(0, CUSTOM_ARM_TEXTURE);
  33.  
  34. // PlayerRenderer and PlayerModel
  35. PlayerRenderer playerRenderer = (PlayerRenderer) Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(player);
  36. PlayerModel<AbstractClientPlayer> playerModel = playerRenderer.getModel();
  37.  
  38. playerModel.leftArm.visible = true;
  39.  
  40. playerModel.setupAnim(player, 0, 0, 0, 0, 0);
  41.  
  42. poseStack.pushPose();
  43.  
  44. poseStack.translate(0.0D, -0.5D, -1.0D);
  45. poseStack.mulPose(Vector3f.XP.rotationDegrees(playerModel.leftArm.xRot));
  46. poseStack.mulPose(Vector3f.YP.rotationDegrees(playerModel.leftArm.yRot));
  47. poseStack.mulPose(Vector3f.ZP.rotationDegrees(playerModel.leftArm.zRot));
  48.  
  49.  
  50. // Get swing
  51. float swingProgress = player.getAttackAnim(0.0F);
  52. float swingAnimation = swingProgress;
  53. poseStack.mulPose(com.mojang.math.Vector3f.YP.rotation(swingAnimation));
  54. poseStack.mulPose(com.mojang.math.Vector3f.ZP.rotation(swingAnimation));
  55. poseStack.mulPose(com.mojang.math.Vector3f.XP.rotation(playerModel.leftArm.xRot));
  56. poseStack.mulPose(com.mojang.math.Vector3f.YP.rotation(playerModel.leftArm.yRot));
  57. poseStack.mulPose(com.mojang.math.Vector3f.ZP.rotation(playerModel.leftArm.zRot));
  58.  
  59. // Texture
  60. playerModel.leftArm.render(poseStack, bufferSource.getBuffer(playerModel.renderType(CUSTOM_ARM_TEXTURE)),
  61. event.getPackedLight(), 0, 1.0F, 1.0F, 1.0F, 1.0F);
  62.  
  63. poseStack.popPose();
  64. }
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment