Advertisement
RazorPlay01

ElytraFeatureRendererMixin

Oct 26th, 2023
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. package net.razorplay01.mixin;
  2.  
  3. import net.minecraft.client.network.AbstractClientPlayerEntity;
  4. import net.minecraft.client.render.OverlayTexture;
  5. import net.minecraft.client.render.RenderLayer;
  6. import net.minecraft.client.render.VertexConsumer;
  7. import net.minecraft.client.render.VertexConsumerProvider;
  8. import net.minecraft.client.render.entity.LivingEntityRenderer;
  9. import net.minecraft.client.render.entity.PlayerModelPart;
  10. import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer;
  11.  
  12. import net.minecraft.client.render.entity.feature.FeatureRenderer;
  13. import net.minecraft.client.render.entity.feature.FeatureRendererContext;
  14. import net.minecraft.client.render.entity.model.ElytraEntityModel;
  15. import net.minecraft.client.render.entity.model.EntityModel;
  16. import net.minecraft.client.render.entity.model.EntityModelLayers;
  17. import net.minecraft.client.render.entity.model.EntityModelLoader;
  18. import net.minecraft.client.render.item.ItemRenderer;
  19. import net.minecraft.client.util.math.MatrixStack;
  20. import net.minecraft.entity.EquipmentSlot;
  21. import net.minecraft.entity.LivingEntity;
  22. import net.minecraft.entity.player.PlayerEntity;
  23. import net.minecraft.item.ItemStack;
  24. import net.minecraft.item.Items;
  25. import net.minecraft.util.Identifier;
  26. import org.spongepowered.asm.mixin.Mixin;
  27. import org.spongepowered.asm.mixin.Unique;
  28. import org.spongepowered.asm.mixin.injection.At;
  29. import org.spongepowered.asm.mixin.injection.Inject;
  30. import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
  31.  
  32. @Mixin(ElytraFeatureRenderer.class)
  33. public abstract class ElytraFeatureRendererMixin<T extends LivingEntity, M extends EntityModel<T>>
  34. extends FeatureRenderer<T, M> {
  35.  
  36. private static final Identifier SKIN = new Identifier("minecraft","textures/entity/elytra.png");
  37. private final ElytraEntityModel<T> elytra;
  38.  
  39. public ElytraFeatureRendererMixin(FeatureRendererContext<T, M> renderer, EntityModelLoader loader) {
  40. super(renderer);
  41. this.elytra = new ElytraEntityModel<>(loader.getModelPart(EntityModelLayers.ELYTRA));
  42. }
  43.  
  44. @Inject(method = "render*", at = @At("HEAD"), cancellable = true)
  45. private void modifyRender(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, T entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch, CallbackInfo ci) {
  46. if (entity instanceof PlayerEntity) {
  47. AbstractClientPlayerEntity abstractClientPlayerEntity = (AbstractClientPlayerEntity) entity;
  48. ItemStack itemStack = ((LivingEntity) entity).getEquippedStack(EquipmentSlot.CHEST);
  49. if (!itemStack.isOf(Items.ELYTRA)) {
  50. return;
  51. }
  52.  
  53. Identifier identifier = entity instanceof AbstractClientPlayerEntity ? ((abstractClientPlayerEntity = (AbstractClientPlayerEntity) entity).canRenderElytraTexture() && abstractClientPlayerEntity.getElytraTexture() != null ? abstractClientPlayerEntity.getElytraTexture() : (abstractClientPlayerEntity.canRenderCapeTexture() && abstractClientPlayerEntity.getCapeTexture() != null && abstractClientPlayerEntity.isPartVisible(PlayerModelPart.CAPE) ? abstractClientPlayerEntity.getCapeTexture() : SKIN)) : SKIN;
  54. matrices.push();
  55.  
  56. if (entity.isSprinting()) {
  57. matrices.translate(0.0f, 0.2f, -0.1f);
  58. } else {
  59. matrices.translate(0.0f, 0.0f, 0.125f);
  60. }
  61.  
  62. this.getContextModel().copyStateTo(this.elytra);
  63. this.elytra.setAngles(entity, limbAngle, limbDistance, animationProgress, headYaw, headPitch);
  64. VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumers, RenderLayer.getArmorCutoutNoCull(identifier), false, itemStack.hasGlint());
  65. this.elytra.render(matrices, vertexConsumer, light, OverlayTexture.DEFAULT_UV, 1.0f, 1.0f, 1.0f, 1.0f);
  66. matrices.pop();
  67. ci.cancel();
  68. }
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement