diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java index 5ef86cf0..857e4c96 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.client.FirstPersonRendererOverrides.ArmRenderer; +import com.minelittlepony.unicopia.client.minelittlepony.MineLPDelegate; import com.minelittlepony.unicopia.client.render.spell.SpellEffectsRenderDispatcher; import net.minecraft.client.MinecraftClient; @@ -13,14 +14,14 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; -import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Arm; public class AccessoryFeatureRenderer< T extends LivingEntity, - M extends BipedEntityModel> extends FeatureRenderer { + M extends EntityModel> extends FeatureRenderer { private static final List> REGISTRY = new ArrayList<>(); @@ -40,6 +41,10 @@ public class AccessoryFeatureRenderer< @Override public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, T entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if (MineLPDelegate.getInstance().getRace(entity).isEquine()) { + return; + } + features.forEach(feature -> feature.render(matrices, vertexConsumers, light, entity, limbAngle, limbDistance, tickDelta, animationProgress, headYaw, headPitch)); Caster.of(entity).ifPresent(caster -> { @@ -60,7 +65,7 @@ public class AccessoryFeatureRenderer< } public interface FeatureFactory { - Feature create(FeatureRendererContext> context); + Feature create(FeatureRendererContext> context); } public interface Feature { @@ -75,11 +80,11 @@ public class AccessoryFeatureRenderer< public interface FeatureRoot< T extends LivingEntity, - M extends BipedEntityModel> { + M extends EntityModel> { AccessoryFeatureRenderer getAccessories(); @SuppressWarnings("unchecked") @Nullable - static > FeatureRoot of(T entity) { + static > FeatureRoot of(T entity) { var renderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(entity); if (renderer instanceof FeatureRoot) { return (FeatureRoot)renderer; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java index be01f778..2e6cc68b 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinArmorFeatureRenderer.java @@ -1,19 +1,9 @@ package com.minelittlepony.unicopia.mixin.client; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.minelittlepony.unicopia.client.render.AccessoryFeatureRenderer; - -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRenderer; -import net.minecraft.client.render.entity.feature.FeatureRendererContext; import net.minecraft.client.render.entity.model.BipedEntityModel; -import net.minecraft.client.render.model.BakedModelManager; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; @Mixin(ArmorFeatureRenderer.class) @@ -21,13 +11,13 @@ abstract class MixinArmorFeatureRenderer< T extends LivingEntity, M extends BipedEntityModel, A extends BipedEntityModel> - extends FeatureRenderer implements AccessoryFeatureRenderer.FeatureRoot { + extends FeatureRenderer/* implements AccessoryFeatureRenderer.FeatureRoot*/ { - private AccessoryFeatureRenderer accessories; + //private AccessoryFeatureRenderer accessories; MixinArmorFeatureRenderer() { super(null); } - @Override + /*@Override public AccessoryFeatureRenderer getAccessories() { return accessories; } @@ -40,5 +30,5 @@ abstract class MixinArmorFeatureRenderer< @Inject(method = "render", at = @At("RETURN")) private void onRender(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch, CallbackInfo info) { getAccessories().render(stack, renderContext, lightUv, entity, limbDistance, limbAngle, tickDelta, age, headYaw, headPitch); - } + }*/ } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinLivingEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinLivingEntityRenderer.java index 3e153574..6f915b70 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinLivingEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinLivingEntityRenderer.java @@ -1,17 +1,25 @@ package com.minelittlepony.unicopia.mixin.client; +import java.util.List; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import com.minelittlepony.unicopia.client.render.AccessoryFeatureRenderer; import com.minelittlepony.unicopia.client.render.AnimalPoser; import com.minelittlepony.unicopia.client.render.PlayerPoser; +import com.minelittlepony.unicopia.client.render.AccessoryFeatureRenderer.FeatureRoot; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.model.EntityModel; @@ -21,8 +29,31 @@ import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; @Mixin(LivingEntityRenderer.class) -abstract class MixinLivingEntityRenderer> extends EntityRenderer implements FeatureRendererContext { +abstract class MixinLivingEntityRenderer> extends EntityRenderer + implements FeatureRendererContext, FeatureRoot { + @Shadow + private @Final List> features; + MixinLivingEntityRenderer() { super(null); } + @Nullable + private AccessoryFeatureRenderer accessories; + + @Override + @SuppressWarnings("unchecked") + public AccessoryFeatureRenderer getAccessories() { + if (accessories == null) { + accessories = features.stream() + .filter(a -> a instanceof FeatureRoot) + .map(a -> ((FeatureRoot)a).getAccessories()) + .findFirst() + .orElseGet(() -> { + var feature = new AccessoryFeatureRenderer<>(this); + features.add(feature); + return feature; + }); + } + return accessories; + } @Inject(method = "render", at = @At( @@ -36,6 +67,7 @@ abstract class MixinLivingEntityRenderer)getModel(), PlayerPoser.Context.THIRD_PERSON); } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinPlayerEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinPlayerEntityRenderer.java index 35503ffd..cd1eac71 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinPlayerEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinPlayerEntityRenderer.java @@ -1,13 +1,11 @@ package com.minelittlepony.unicopia.mixin.client; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.client.render.AccessoryFeatureRenderer; import com.minelittlepony.unicopia.client.render.PlayerPoser; import com.minelittlepony.unicopia.client.render.AccessoryFeatureRenderer.FeatureRoot; @@ -21,31 +19,14 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Arm; @Mixin(PlayerEntityRenderer.class) -abstract class MixinPlayerEntityRenderer - extends LivingEntityRenderer> - implements FeatureRoot> { - @Nullable - private AccessoryFeatureRenderer> accessories; - +abstract class MixinPlayerEntityRenderer extends LivingEntityRenderer> { MixinPlayerEntityRenderer() { super(null, null, 0); } - @Override @SuppressWarnings("unchecked") - public AccessoryFeatureRenderer> getAccessories() { - if (accessories == null) { - accessories = features.stream() - .filter(a -> a instanceof FeatureRoot) - .map(a -> ((FeatureRoot>)a).getAccessories()) - .findFirst() - .orElseGet(() -> new AccessoryFeatureRenderer<>(this)); - } - return accessories; - } - @Inject(method = "renderArm", at = @At("RETURN")) private void onRenderArm(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, AbstractClientPlayerEntity player, ModelPart arm, ModelPart sleeve, CallbackInfo info) { Arm a = this.getModel().leftArm == arm ? Arm.LEFT : Arm.RIGHT; - getAccessories().renderArm(matrices, vertexConsumers, light, player, arm, a); + ((FeatureRoot>)this).getAccessories().renderArm(matrices, vertexConsumers, light, player, arm, a); } @Inject(method = "renderArm",