Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.razorplay01.mixin;
- import net.minecraft.client.network.AbstractClientPlayerEntity;
- import net.minecraft.client.render.OverlayTexture;
- import net.minecraft.client.render.RenderLayer;
- import net.minecraft.client.render.VertexConsumer;
- import net.minecraft.client.render.VertexConsumerProvider;
- import net.minecraft.client.render.entity.LivingEntityRenderer;
- import net.minecraft.client.render.entity.PlayerModelPart;
- import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer;
- import net.minecraft.client.render.entity.feature.FeatureRenderer;
- import net.minecraft.client.render.entity.feature.FeatureRendererContext;
- import net.minecraft.client.render.entity.model.ElytraEntityModel;
- import net.minecraft.client.render.entity.model.EntityModel;
- import net.minecraft.client.render.entity.model.EntityModelLayers;
- import net.minecraft.client.render.entity.model.EntityModelLoader;
- import net.minecraft.client.render.item.ItemRenderer;
- import net.minecraft.client.util.math.MatrixStack;
- import net.minecraft.entity.EquipmentSlot;
- import net.minecraft.entity.LivingEntity;
- import net.minecraft.entity.player.PlayerEntity;
- import net.minecraft.item.ItemStack;
- import net.minecraft.item.Items;
- import net.minecraft.util.Identifier;
- import org.spongepowered.asm.mixin.Mixin;
- import org.spongepowered.asm.mixin.Unique;
- import org.spongepowered.asm.mixin.injection.At;
- import org.spongepowered.asm.mixin.injection.Inject;
- import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
- @Mixin(ElytraFeatureRenderer.class)
- public abstract class ElytraFeatureRendererMixin<T extends LivingEntity, M extends EntityModel<T>>
- extends FeatureRenderer<T, M> {
- private static final Identifier SKIN = new Identifier("minecraft","textures/entity/elytra.png");
- private final ElytraEntityModel<T> elytra;
- public ElytraFeatureRendererMixin(FeatureRendererContext<T, M> renderer, EntityModelLoader loader) {
- super(renderer);
- this.elytra = new ElytraEntityModel<>(loader.getModelPart(EntityModelLayers.ELYTRA));
- }
- @Inject(method = "render*", at = @At("HEAD"), cancellable = true)
- 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) {
- if (entity instanceof PlayerEntity) {
- AbstractClientPlayerEntity abstractClientPlayerEntity = (AbstractClientPlayerEntity) entity;
- ItemStack itemStack = ((LivingEntity) entity).getEquippedStack(EquipmentSlot.CHEST);
- if (!itemStack.isOf(Items.ELYTRA)) {
- return;
- }
- 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;
- matrices.push();
- if (entity.isSprinting()) {
- matrices.translate(0.0f, 0.2f, -0.1f);
- } else {
- matrices.translate(0.0f, 0.0f, 0.125f);
- }
- this.getContextModel().copyStateTo(this.elytra);
- this.elytra.setAngles(entity, limbAngle, limbDistance, animationProgress, headYaw, headPitch);
- VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumers, RenderLayer.getArmorCutoutNoCull(identifier), false, itemStack.hasGlint());
- this.elytra.render(matrices, vertexConsumer, light, OverlayTexture.DEFAULT_UV, 1.0f, 1.0f, 1.0f, 1.0f);
- matrices.pop();
- ci.cancel();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement