diff --git a/src/main/java/com/minelittlepony/client/model/gear/IRenderContext.java b/src/main/java/com/minelittlepony/client/model/gear/IRenderContext.java index 9eca7d00..039d8222 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/IRenderContext.java +++ b/src/main/java/com/minelittlepony/client/model/gear/IRenderContext.java @@ -6,6 +6,8 @@ import net.minecraft.util.Identifier; import com.minelittlepony.model.IModel; import com.minelittlepony.model.gear.IGear; +import javax.annotation.Nullable; + public interface IRenderContext { IRenderContext NULL = (e, g) -> null; @@ -14,5 +16,10 @@ public interface IRenderContext { return gear.canRender(model, entity); } + @Nullable + default IModel getEntityModel() { + return null; + } + Identifier getDefaultTexture(T entity, IGear gear); } diff --git a/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java b/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java index 837940ba..e31aa9f8 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java +++ b/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java @@ -4,6 +4,7 @@ import com.minelittlepony.client.util.render.plane.PlaneRenderer; import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.IModel; import com.minelittlepony.model.IPegasus; +import com.minelittlepony.pony.meta.Race; import com.minelittlepony.pony.meta.Wearable; import com.mojang.blaze3d.platform.GlStateManager; @@ -15,6 +16,8 @@ import net.minecraft.util.math.MathHelper; public class SaddleBags extends AbstractGear { + public static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/saddlebags.png"); + private PlaneRenderer leftBag; private PlaneRenderer rightBag; @@ -137,7 +140,9 @@ public class SaddleBags extends AbstractGear { @Override public Identifier getTexture(T entity, IRenderContext context) { + if (context.getEntityModel() != null && context.getEntityModel().getMetadata().getRace().isEquivalentTo(Race.CHANGELING)) { + return TEXTURE; + } return context.getDefaultTexture(entity, this); } - } diff --git a/src/main/java/com/minelittlepony/client/model/races/ModelBatpony.java b/src/main/java/com/minelittlepony/client/model/races/ModelBatpony.java index 8c2ff36c..1e6a2c8f 100644 --- a/src/main/java/com/minelittlepony/client/model/races/ModelBatpony.java +++ b/src/main/java/com/minelittlepony/client/model/races/ModelBatpony.java @@ -5,7 +5,6 @@ import net.minecraft.entity.LivingEntity; import com.minelittlepony.client.model.components.BatWings; import com.minelittlepony.client.model.components.PonyEars; import com.minelittlepony.client.util.render.PonyRenderer; -import com.minelittlepony.pony.meta.Wearable; public class ModelBatpony extends ModelPegasus { @@ -23,13 +22,4 @@ public class ModelBatpony extends ModelPegasus { ears = new PonyEars(head, true); ears.init(yOffset, stretch); } - - @Override - public boolean isWearing(Wearable wearable) { - if (wearable == Wearable.SADDLE_BAGS) { - return false; - } - - return super.isWearing(wearable); - } } diff --git a/src/main/java/com/minelittlepony/client/model/races/ModelChangeling.java b/src/main/java/com/minelittlepony/client/model/races/ModelChangeling.java index 5195f176..69b453ed 100644 --- a/src/main/java/com/minelittlepony/client/model/races/ModelChangeling.java +++ b/src/main/java/com/minelittlepony/client/model/races/ModelChangeling.java @@ -4,7 +4,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.util.math.MathHelper; import com.minelittlepony.client.model.components.BugWings; -import com.minelittlepony.pony.meta.Wearable; public class ModelChangeling extends ModelAlicorn { @@ -29,13 +28,4 @@ public class ModelChangeling extends ModelAlicorn { } return WING_ROT_Z_SNEAK; } - - @Override - public boolean isWearing(Wearable wearable) { - if (wearable == Wearable.SADDLE_BAGS) { - return false; - } - - return super.isWearing(wearable); - } } diff --git a/src/main/java/com/minelittlepony/client/render/entities/player/RenderPonyPlayer.java b/src/main/java/com/minelittlepony/client/render/entities/player/RenderPonyPlayer.java index 016ce369..35ecba16 100644 --- a/src/main/java/com/minelittlepony/client/render/entities/player/RenderPonyPlayer.java +++ b/src/main/java/com/minelittlepony/client/render/entities/player/RenderPonyPlayer.java @@ -3,6 +3,7 @@ package com.minelittlepony.client.render.entities.player; import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.model.ModelWrapper; +import com.minelittlepony.client.model.gear.SaddleBags; import com.minelittlepony.client.render.DebugBoundingBoxRenderer; import com.minelittlepony.client.render.IPonyRender; import com.minelittlepony.client.render.RenderPony; @@ -14,7 +15,9 @@ import com.minelittlepony.client.render.layer.LayerPonyArmor; import com.minelittlepony.client.render.layer.LayerPonyCape; import com.minelittlepony.client.render.layer.LayerPonyCustomHead; import com.minelittlepony.client.render.layer.LayerPonyElytra; +import com.minelittlepony.model.gear.IGear; import com.minelittlepony.pony.IPony; +import com.minelittlepony.pony.meta.Race; import com.mojang.blaze3d.platform.GlStateManager; import java.util.List; @@ -186,4 +189,14 @@ public class RenderPonyPlayer extends PlayerEntityRenderer implements IPonyRende return MineLittlePony.getInstance().getManager().getPony(entity); } + @Override + public Identifier getDefaultTexture(AbstractClientPlayerEntity entity, IGear gear) { + if (gear == LayerGear.SADDLE_BAGS) { + if (getInternalRenderer().getModel().getMetadata().getRace() == Race.BATPONY) { + return SaddleBags.TEXTURE; + } + } + + return IPonyRender.super.getDefaultTexture(entity, gear); + } } diff --git a/src/main/java/com/minelittlepony/pony/meta/Race.java b/src/main/java/com/minelittlepony/pony/meta/Race.java index a6823c36..f1f807ca 100644 --- a/src/main/java/com/minelittlepony/pony/meta/Race.java +++ b/src/main/java/com/minelittlepony/pony/meta/Race.java @@ -87,6 +87,13 @@ public enum Race implements ITriggerPixelMapped { return getAlias() != this; } + /** + * Returns true if both races resolve to the same value. + */ + public boolean isEquivalentTo(Race other) { + return getAlias() == other.getAlias(); + } + /** * Gets the actual race determined by the given pony level. * PonyLevel.HUMANS would force all races to be humans. diff --git a/src/main/resources/assets/minelittlepony/textures/models/saddlebags.png b/src/main/resources/assets/minelittlepony/textures/models/saddlebags.png new file mode 100644 index 00000000..d1a93953 Binary files /dev/null and b/src/main/resources/assets/minelittlepony/textures/models/saddlebags.png differ