diff --git a/src/main/java/com/minelittlepony/model/BodyPart.java b/src/main/java/com/minelittlepony/api/model/BodyPart.java similarity index 69% rename from src/main/java/com/minelittlepony/model/BodyPart.java rename to src/main/java/com/minelittlepony/api/model/BodyPart.java index 12a7bdfe..fe26388d 100644 --- a/src/main/java/com/minelittlepony/model/BodyPart.java +++ b/src/main/java/com/minelittlepony/api/model/BodyPart.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; public enum BodyPart { HEAD, diff --git a/src/main/java/com/minelittlepony/api/model/ICapitated.java b/src/main/java/com/minelittlepony/api/model/ICapitated.java new file mode 100644 index 00000000..a838408d --- /dev/null +++ b/src/main/java/com/minelittlepony/api/model/ICapitated.java @@ -0,0 +1,11 @@ +package com.minelittlepony.api.model; + +/** + * Interface for models that have a head. + */ +public interface ICapitated { + /** + * Gets the head of this capitated object. + */ + T getHead(); +} diff --git a/src/main/java/com/minelittlepony/model/IModel.java b/src/main/java/com/minelittlepony/api/model/IModel.java similarity index 78% rename from src/main/java/com/minelittlepony/model/IModel.java rename to src/main/java/com/minelittlepony/api/model/IModel.java index 45379727..5541aafd 100644 --- a/src/main/java/com/minelittlepony/model/IModel.java +++ b/src/main/java/com/minelittlepony/api/model/IModel.java @@ -1,17 +1,14 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; -import net.minecraft.client.render.entity.model.ModelWithArms; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.api.pony.IPonyData; import com.minelittlepony.api.pony.meta.Size; -import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.armour.IEquestrianArmour; - -public interface IModel extends ModelWithArms { +public interface IModel { /** * Applies a transform particular to a certain body part. */ @@ -25,12 +22,12 @@ public interface IModel extends ModelWithArms { /** * Returns a new pony armour to go with this model. Called on startup by a model wrapper. */ - IEquestrianArmour createArmour(); + IArmour createArmour(); /** * Gets the transitive properties of this model. */ - ModelAttributes getAttributes(); + ModelAttributes getAttributes(); /** * Gets the skin metadata associated with this model. @@ -40,7 +37,7 @@ public interface IModel extends ModelWithArms { /** * Sets the pony metadata object associated with this model. */ - void apply(IPonyData meta); + void setMetadata(IPonyData meta); /** * Returns true if the model is flying. @@ -61,13 +58,6 @@ public interface IModel extends ModelWithArms { return getMetadata().getRace().hasWings(); } - /** - * Returns true if the current model is a child or a child-like foal. - */ - default boolean isChild() { - return getSize() == Sizes.FOAL; - } - /** * Gets the current leg swing amount. */ diff --git a/src/main/java/com/minelittlepony/model/IModelWrapper.java b/src/main/java/com/minelittlepony/api/model/IModelWrapper.java similarity index 65% rename from src/main/java/com/minelittlepony/model/IModelWrapper.java rename to src/main/java/com/minelittlepony/api/model/IModelWrapper.java index 5e852472..dddb62b7 100644 --- a/src/main/java/com/minelittlepony/model/IModelWrapper.java +++ b/src/main/java/com/minelittlepony/api/model/IModelWrapper.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; import com.minelittlepony.api.pony.IPonyData; @@ -6,5 +6,5 @@ public interface IModelWrapper { /** * Updates metadata values to this wrapper's contained models. */ - IModelWrapper apply(IPonyData meta); + IModelWrapper applyMetadata(IPonyData meta); } diff --git a/src/main/java/com/minelittlepony/model/IPart.java b/src/main/java/com/minelittlepony/api/model/IPart.java similarity index 95% rename from src/main/java/com/minelittlepony/model/IPart.java rename to src/main/java/com/minelittlepony/api/model/IPart.java index a61ebe69..fd4506b0 100644 --- a/src/main/java/com/minelittlepony/model/IPart.java +++ b/src/main/java/com/minelittlepony/api/model/IPart.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; diff --git a/src/main/java/com/minelittlepony/model/IPegasus.java b/src/main/java/com/minelittlepony/api/model/IPegasus.java similarity index 94% rename from src/main/java/com/minelittlepony/model/IPegasus.java rename to src/main/java/com/minelittlepony/api/model/IPegasus.java index 0c2c7dd9..89e2a6e2 100644 --- a/src/main/java/com/minelittlepony/model/IPegasus.java +++ b/src/main/java/com/minelittlepony/api/model/IPegasus.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; public interface IPegasus extends IModel { diff --git a/src/main/java/com/minelittlepony/model/IUnicorn.java b/src/main/java/com/minelittlepony/api/model/IUnicorn.java similarity index 95% rename from src/main/java/com/minelittlepony/model/IUnicorn.java rename to src/main/java/com/minelittlepony/api/model/IUnicorn.java index d6f5b159..2b0d186c 100644 --- a/src/main/java/com/minelittlepony/model/IUnicorn.java +++ b/src/main/java/com/minelittlepony/api/model/IUnicorn.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; import net.minecraft.util.Arm; diff --git a/src/main/java/com/minelittlepony/model/ModelAttributes.java b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java similarity index 84% rename from src/main/java/com/minelittlepony/model/ModelAttributes.java rename to src/main/java/com/minelittlepony/api/model/ModelAttributes.java index 9ea83033..0252004d 100644 --- a/src/main/java/com/minelittlepony/model/ModelAttributes.java +++ b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java @@ -1,8 +1,6 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; import com.minelittlepony.api.pony.IPony; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.client.render.EquineRenderManager.Mode; import com.minelittlepony.util.MathUtil; import net.minecraft.entity.LivingEntity; @@ -13,11 +11,10 @@ import net.minecraft.util.math.Vec3d; import java.util.UUID; -import static com.minelittlepony.model.PonyModelConstants.ROTATE_270; -import static com.minelittlepony.model.PonyModelConstants.WING_ROT_Z_SNEAK; - -public class ModelAttributes { +import static com.minelittlepony.api.model.PonyModelConstants.ROTATE_270; +import static com.minelittlepony.api.model.PonyModelConstants.WING_ROT_Z_SNEAK; +public class ModelAttributes { /** * True if the model is sleeping in a bed. */ @@ -95,7 +92,7 @@ public class ModelAttributes { /** * Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast. */ - public void checkRainboom(T entity, float swing, boolean hasWings, float ticks) { + public void checkRainboom(LivingEntity entity, float swing, boolean hasWings, float ticks) { Vec3d motion = entity.getVelocity(); double zMotion = Math.sqrt(motion.x * motion.x + motion.z * motion.z); @@ -117,7 +114,7 @@ public class ModelAttributes { return WING_ROT_Z_SNEAK; } - public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(LivingEntity entity, IPony pony, Mode mode) { visualHeight = entity.getHeight() + 0.125F; isSitting = pony.isSitting(entity); isCrouching = !isSitting && mode == Mode.THIRD_PERSON && pony.isCrouching(entity); @@ -125,10 +122,22 @@ public class ModelAttributes { isFlying = mode == Mode.THIRD_PERSON && pony.isFlying(entity); isGliding = entity.isFallFlying(); isSwimming = mode == Mode.THIRD_PERSON && pony.isSwimming(entity); - isSwimmingRotated = isSwimming && (entity instanceof PlayerEntity || entity instanceof IRotatedSwimmer); + isSwimmingRotated = isSwimming && (entity instanceof PlayerEntity || entity instanceof Swimmer); isHorizontal = isSwimming; isRidingInteractive = pony.isRidingInteractive(entity); interpolatorId = entity.getUuid(); isLeftHanded = entity.getMainArm() == Arm.LEFT; } + + public enum Mode { + FIRST_PERSON, + THIRD_PERSON, + OTHER + } + + /** + * Special interface to mark entities that rotate horizontally when they swim. + */ + public interface Swimmer { + } } diff --git a/src/main/java/com/minelittlepony/model/PonyModelConstants.java b/src/main/java/com/minelittlepony/api/model/PonyModelConstants.java similarity index 97% rename from src/main/java/com/minelittlepony/model/PonyModelConstants.java rename to src/main/java/com/minelittlepony/api/model/PonyModelConstants.java index ce620e7d..a1598731 100644 --- a/src/main/java/com/minelittlepony/model/PonyModelConstants.java +++ b/src/main/java/com/minelittlepony/api/model/PonyModelConstants.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model; +package com.minelittlepony.api.model; public interface PonyModelConstants { diff --git a/src/main/java/com/minelittlepony/model/armour/ArmourLayer.java b/src/main/java/com/minelittlepony/api/model/armour/ArmourLayer.java similarity index 86% rename from src/main/java/com/minelittlepony/model/armour/ArmourLayer.java rename to src/main/java/com/minelittlepony/api/model/armour/ArmourLayer.java index 11d34cd6..bbaafadb 100644 --- a/src/main/java/com/minelittlepony/model/armour/ArmourLayer.java +++ b/src/main/java/com/minelittlepony/api/model/armour/ArmourLayer.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model.armour; +package com.minelittlepony.api.model.armour; /** * The layer used to render a given armour piece. diff --git a/src/main/java/com/minelittlepony/api/model/armour/ArmourRegistry.java b/src/main/java/com/minelittlepony/api/model/armour/ArmourRegistry.java new file mode 100644 index 00000000..23f614aa --- /dev/null +++ b/src/main/java/com/minelittlepony/api/model/armour/ArmourRegistry.java @@ -0,0 +1,19 @@ +package com.minelittlepony.api.model.armour; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.util.registry.SimpleRegistry; + +import com.mojang.serialization.Lifecycle; + +public final class ArmourRegistry { + private ArmourRegistry() {} + static final Registry> REGISTRY = new SimpleRegistry<>(RegistryKey.ofRegistry(new Identifier("minelittlepony", "armour")), Lifecycle.stable()); + + @SuppressWarnings("unchecked") + public static IArmour getArmour(ItemStack stack, IArmour fallback) { + return (IArmour)REGISTRY.getOrEmpty(Registry.ITEM.getId(stack.getItem())).orElse(fallback); + } +} diff --git a/src/main/java/com/minelittlepony/model/armour/ArmourVariant.java b/src/main/java/com/minelittlepony/api/model/armour/ArmourVariant.java similarity index 54% rename from src/main/java/com/minelittlepony/model/armour/ArmourVariant.java rename to src/main/java/com/minelittlepony/api/model/armour/ArmourVariant.java index 017cefc5..ab4a3d82 100644 --- a/src/main/java/com/minelittlepony/model/armour/ArmourVariant.java +++ b/src/main/java/com/minelittlepony/api/model/armour/ArmourVariant.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model.armour; +package com.minelittlepony.api.model.armour; public enum ArmourVariant { NORMAL, diff --git a/src/main/java/com/minelittlepony/api/model/armour/IArmour.java b/src/main/java/com/minelittlepony/api/model/armour/IArmour.java new file mode 100644 index 00000000..f3785e71 --- /dev/null +++ b/src/main/java/com/minelittlepony/api/model/armour/IArmour.java @@ -0,0 +1,33 @@ +package com.minelittlepony.api.model.armour; + +import net.minecraft.item.Item; +import net.minecraft.util.registry.Registry; + +import com.minelittlepony.api.model.IModelWrapper; + +public interface IArmour extends IModelWrapper { + /** + * Registers a custom armour for the supplied item. + * + * Mods can register their own armour here if they wish to override the default handling. + * + * Only one registration per item allowed. + */ + public static IArmour register(IArmour armour, Item item) { + return Registry.register(ArmourRegistry.REGISTRY, Registry.ITEM.getId(item), armour); + } + + /** + * Gets the armour model to render for the given layer. + */ + V getModel(ArmourLayer layer); + + /** + * Override this to specify your own textures. + * + * The default resolver will simply attempt to ponify the vanilla locations. + */ + default IArmourTextureResolver getTextureResolver(IArmourTextureResolver defaultResolver) { + return defaultResolver; + } +} diff --git a/src/main/java/com/minelittlepony/model/armour/IArmour.java b/src/main/java/com/minelittlepony/api/model/armour/IArmourModel.java similarity index 95% rename from src/main/java/com/minelittlepony/model/armour/IArmour.java rename to src/main/java/com/minelittlepony/api/model/armour/IArmourModel.java index 37073ee0..e2a0c945 100644 --- a/src/main/java/com/minelittlepony/model/armour/IArmour.java +++ b/src/main/java/com/minelittlepony/api/model/armour/IArmourModel.java @@ -1,10 +1,10 @@ -package com.minelittlepony.model.armour; +package com.minelittlepony.api.model.armour; import net.minecraft.entity.EquipmentSlot; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; -public interface IArmour { +public interface IArmourModel { /** * Called to synchronise this armour's angles with that of another. * diff --git a/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java b/src/main/java/com/minelittlepony/api/model/armour/IArmourTextureResolver.java similarity index 61% rename from src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java rename to src/main/java/com/minelittlepony/api/model/armour/IArmourTextureResolver.java index 8d08ff59..249ea7c3 100644 --- a/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java +++ b/src/main/java/com/minelittlepony/api/model/armour/IArmourTextureResolver.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model.armour; +package com.minelittlepony.api.model.armour; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.EquipmentSlot; @@ -7,18 +7,18 @@ import net.minecraft.util.Identifier; import javax.annotation.Nullable; -public interface IArmourTextureResolver { +public interface IArmourTextureResolver { /** * Gets the armour texture to be used for the given entity, armour piece, slot, and render layer. */ - Identifier getArmourTexture(T entity, ItemStack itemstack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type); + Identifier getTexture(LivingEntity entity, ItemStack itemstack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type); /** * Gets the armour variant for the identified texture. * Either normal for pony-style textures, or legacy for other textures. */ - default ArmourVariant getArmourVariant(ArmourLayer layer, Identifier resolvedTexture) { + default ArmourVariant getVariant(ArmourLayer layer, Identifier resolvedTexture) { return ArmourVariant.NORMAL; } } diff --git a/src/main/java/com/minelittlepony/model/armour/package-info.java b/src/main/java/com/minelittlepony/api/model/armour/package-info.java similarity index 65% rename from src/main/java/com/minelittlepony/model/armour/package-info.java rename to src/main/java/com/minelittlepony/api/model/armour/package-info.java index 27bfae36..d83c4806 100644 --- a/src/main/java/com/minelittlepony/model/armour/package-info.java +++ b/src/main/java/com/minelittlepony/api/model/armour/package-info.java @@ -1,4 +1,4 @@ @ParametersAreNonnullByDefault -package com.minelittlepony.model.armour; +package com.minelittlepony.api.model.armour; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/minelittlepony/model/fabric/PonyModelPrepareCallback.java b/src/main/java/com/minelittlepony/api/model/fabric/PonyModelPrepareCallback.java similarity index 66% rename from src/main/java/com/minelittlepony/model/fabric/PonyModelPrepareCallback.java rename to src/main/java/com/minelittlepony/api/model/fabric/PonyModelPrepareCallback.java index 1a2c0eb3..fc4c03d2 100644 --- a/src/main/java/com/minelittlepony/model/fabric/PonyModelPrepareCallback.java +++ b/src/main/java/com/minelittlepony/api/model/fabric/PonyModelPrepareCallback.java @@ -1,11 +1,11 @@ -package com.minelittlepony.model.fabric; +package com.minelittlepony.api.model.fabric; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.entity.Entity; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.ModelAttributes; public interface PonyModelPrepareCallback { @@ -15,5 +15,5 @@ public interface PonyModelPrepareCallback { } }); - void onPonyModelPrepared(Entity entity, IModel model, EquineRenderManager.Mode mode); + void onPonyModelPrepared(Entity entity, IModel model, ModelAttributes.Mode mode); } diff --git a/src/main/java/com/minelittlepony/model/gear/package-info.java b/src/main/java/com/minelittlepony/api/model/fabric/package-info.java similarity index 65% rename from src/main/java/com/minelittlepony/model/gear/package-info.java rename to src/main/java/com/minelittlepony/api/model/fabric/package-info.java index 73947b89..3cef78fe 100644 --- a/src/main/java/com/minelittlepony/model/gear/package-info.java +++ b/src/main/java/com/minelittlepony/api/model/fabric/package-info.java @@ -1,4 +1,4 @@ @ParametersAreNonnullByDefault -package com.minelittlepony.model.gear; +package com.minelittlepony.api.model.fabric; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/minelittlepony/model/gear/IGear.java b/src/main/java/com/minelittlepony/api/model/gear/IGear.java similarity index 57% rename from src/main/java/com/minelittlepony/model/gear/IGear.java rename to src/main/java/com/minelittlepony/api/model/gear/IGear.java index 5e1c8826..44752d61 100644 --- a/src/main/java/com/minelittlepony/model/gear/IGear.java +++ b/src/main/java/com/minelittlepony/api/model/gear/IGear.java @@ -1,4 +1,4 @@ -package com.minelittlepony.model.gear; +package com.minelittlepony.api.model.gear; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; @@ -6,11 +6,15 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.client.render.entity.feature.GearFeature; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; + +import javax.annotation.Nullable; import java.util.UUID; +import java.util.function.Supplier; /** * Interface for an accessory on a pony's body. @@ -21,7 +25,7 @@ public interface IGear { *

* This would be awesome for creating socks. */ - static IGear addModGear(IGear gear) { + static Supplier register(Supplier gear) { GearFeature.addModGear(gear); return gear; } @@ -46,9 +50,9 @@ public interface IGear { * * If you need to use the player's own skin, use {@link IRenderContext#getDefaultTexture(entity, wearable)} */ - Identifier getTexture(T entity, IRenderContext context); + Identifier getTexture(T entity, Context context); - default RenderLayer getLayer(T entity, IRenderContext context) { + default RenderLayer getLayer(T entity, Context context) { return RenderLayer.getEntityTranslucent(getTexture(entity, context)); } @@ -78,4 +82,36 @@ public interface IGear { default void setVisible(boolean visible) { } + + /** + * A render context for instance of IGear. + * + * @param The type of entity being rendered. + * @param The type of the entity's primary model. + */ + public interface Context { + /** + * The empty context. + */ + Context NULL = (e, g) -> null; + + /** + * Checks whether the given wearable and gear are able to render for this specific entity and its renderer. + */ + default boolean shouldRender(M model, T entity, Wearable wearable, IGear gear) { + return gear.canRender(model, entity); + } + + @Nullable + default M getEntityModel() { + return null; + } + + /** + * Gets the default texture to use for this entity and wearable. + * + * May be the entity's own texture or a specific texture allocated for that wearable. + */ + Identifier getDefaultTexture(T entity, Wearable wearable); + } } diff --git a/src/main/java/com/minelittlepony/api/model/gear/IStackable.java b/src/main/java/com/minelittlepony/api/model/gear/IStackable.java new file mode 100644 index 00000000..c519f68f --- /dev/null +++ b/src/main/java/com/minelittlepony/api/model/gear/IStackable.java @@ -0,0 +1,14 @@ +package com.minelittlepony.api.model.gear; + +/** + * Interface for any gear that changes its position based on where it is in the hat stack. + */ +public interface IStackable { + /** + * The vertical height of this gear when present in a stack. + * + * Any gear rendered after this one will be shifted to sit on top of it. + */ + float getStackingHeight(); + +} diff --git a/src/main/java/com/minelittlepony/model/fabric/package-info.java b/src/main/java/com/minelittlepony/api/model/gear/package-info.java similarity index 66% rename from src/main/java/com/minelittlepony/model/fabric/package-info.java rename to src/main/java/com/minelittlepony/api/model/gear/package-info.java index c8133dbc..4b8a0f09 100644 --- a/src/main/java/com/minelittlepony/model/fabric/package-info.java +++ b/src/main/java/com/minelittlepony/api/model/gear/package-info.java @@ -1,4 +1,4 @@ @ParametersAreNonnullByDefault -package com.minelittlepony.model.fabric; +package com.minelittlepony.api.model.gear; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/minelittlepony/model/package-info.java b/src/main/java/com/minelittlepony/api/model/package-info.java similarity index 69% rename from src/main/java/com/minelittlepony/model/package-info.java rename to src/main/java/com/minelittlepony/api/model/package-info.java index 7c3428bf..b455d0ee 100644 --- a/src/main/java/com/minelittlepony/model/package-info.java +++ b/src/main/java/com/minelittlepony/api/model/package-info.java @@ -1,4 +1,4 @@ @ParametersAreNonnullByDefault -package com.minelittlepony.model; +package com.minelittlepony.api.model; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/minelittlepony/api/pony/meta/Sizes.java b/src/main/java/com/minelittlepony/api/pony/meta/Sizes.java index c9f6443d..6a85191c 100644 --- a/src/main/java/com/minelittlepony/api/pony/meta/Sizes.java +++ b/src/main/java/com/minelittlepony/api/pony/meta/Sizes.java @@ -7,6 +7,8 @@ import com.minelittlepony.client.MineLittlePony; * Represents the different model sizes that are possible. * * This is the client-side version. + * + * For spooky things at a distance, use {@link Size} instead. */ public enum Sizes implements ITriggerPixelMapped, Size { TALL (0x534b76, 0.45f, 1.1F, 1.15F), diff --git a/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java b/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java index 1806f466..6701725d 100644 --- a/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java +++ b/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java @@ -1,16 +1,16 @@ package com.minelittlepony.client.hdskins; +import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.client.IPreviewModel; import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.model.entity.race.PlayerModels; import com.minelittlepony.hdskins.client.dummy.DummyPlayer; import com.minelittlepony.hdskins.client.dummy.TextureProxy; -import com.minelittlepony.model.IRotatedSwimmer; /** * Dummy model used for the skin uploading screen. */ -class DummyPony extends DummyPlayer implements IRotatedSwimmer, IPreviewModel { +class DummyPony extends DummyPlayer implements IPreviewModel, ModelAttributes.Swimmer { public DummyPony(TextureProxy textures) { super(textures); diff --git a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java index 5f97cfd0..f54ad7b9 100644 --- a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java @@ -1,14 +1,14 @@ package com.minelittlepony.client.model; import com.minelittlepony.client.model.armour.PonyArmourModel; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.model.fabric.PonyModelPrepareCallback; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.ModelAttributes; +import com.minelittlepony.api.model.armour.IArmour; +import com.minelittlepony.api.model.fabric.PonyModelPrepareCallback; import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.client.model.armour.ArmourWrapper; import com.minelittlepony.client.transform.PonyTransformation; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.armour.IEquestrianArmour; import com.minelittlepony.mson.api.model.MsonPart; import net.minecraft.client.model.ModelPart; @@ -39,7 +39,7 @@ public abstract class AbstractPonyModel extends ClientPo } @Override - public IEquestrianArmour createArmour() { + public IArmour createArmour() { return new ArmourWrapper<>(PonyArmourModel::new); } @@ -61,7 +61,7 @@ public abstract class AbstractPonyModel extends ClientPo @Override public void setAngles(T entity, float move, float swing, float ticks, float headYaw, float headPitch) { attributes.checkRainboom(entity, swing, canFly(), ticks); - PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(entity, this, EquineRenderManager.Mode.OTHER); + PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(entity, this, ModelAttributes.Mode.OTHER); super.setAngles(entity, move, swing, ticks, headYaw, headPitch); diff --git a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java index b385cdca..86b2c70a 100644 --- a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java @@ -6,14 +6,13 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.util.Arm; import net.minecraft.util.Hand; -import com.minelittlepony.model.fabric.PonyModelPrepareCallback; +import com.minelittlepony.api.model.ModelAttributes; +import com.minelittlepony.api.model.fabric.PonyModelPrepareCallback; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.api.pony.IPonyData; import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.client.pony.PonyData; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.model.ModelAttributes; import com.minelittlepony.mson.api.model.biped.MsonPlayer; /** @@ -28,7 +27,7 @@ public abstract class ClientPonyModel extends MsonPlayer /** * The model attributes. */ - protected ModelAttributes attributes = new ModelAttributes<>(); + protected ModelAttributes attributes = new ModelAttributes(); /** * Associated pony data. @@ -45,7 +44,7 @@ public abstract class ClientPonyModel extends MsonPlayer } @Override - public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode) { child = entity.isBaby(); attributes.updateLivingState(entity, pony, mode); PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(entity, this, mode); @@ -59,7 +58,7 @@ public abstract class ClientPonyModel extends MsonPlayer } @Override - public ModelAttributes getAttributes() { + public ModelAttributes getAttributes() { return attributes; } @@ -74,7 +73,7 @@ public abstract class ClientPonyModel extends MsonPlayer } @Override - public void apply(IPonyData meta) { + public void setMetadata(IPonyData meta) { metadata = meta; } diff --git a/src/main/java/com/minelittlepony/client/model/IMobModel.java b/src/main/java/com/minelittlepony/client/model/IMobModel.java index 9aa6730c..3f43ee14 100644 --- a/src/main/java/com/minelittlepony/client/model/IMobModel.java +++ b/src/main/java/com/minelittlepony/client/model/IMobModel.java @@ -3,7 +3,7 @@ package com.minelittlepony.client.model; import net.minecraft.client.model.ModelPart; import net.minecraft.util.math.MathHelper; -import com.minelittlepony.model.PonyModelConstants; +import com.minelittlepony.api.model.PonyModelConstants; /** * Common interface for all undead enemies. diff --git a/src/main/java/com/minelittlepony/client/model/IPonyMixinModel.java b/src/main/java/com/minelittlepony/client/model/IPonyMixinModel.java index 33d896ab..49ffb511 100644 --- a/src/main/java/com/minelittlepony/client/model/IPonyMixinModel.java +++ b/src/main/java/com/minelittlepony/client/model/IPonyMixinModel.java @@ -2,22 +2,22 @@ package com.minelittlepony.client.model; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.client.render.entity.model.ModelWithArms; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Arm; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IUnicorn; +import com.minelittlepony.api.model.ModelAttributes; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.api.pony.IPonyData; import com.minelittlepony.api.pony.meta.Size; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IUnicorn; -import com.minelittlepony.model.ModelAttributes; -import com.minelittlepony.model.armour.IEquestrianArmour; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.model.BoxBuilder.RenderLayerSetter; -public interface IPonyMixinModel> extends IPonyModel { +public interface IPonyMixinModel> extends IPonyModel, ModelWithArms { M mixin(); @@ -30,7 +30,7 @@ public interface IPonyMixinModel } @Override - default void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + default void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode) { mixin().updateLivingState(entity, pony, mode); } @@ -50,7 +50,7 @@ public interface IPonyMixinModel } @Override - default ModelAttributes getAttributes() { + default ModelAttributes getAttributes() { return mixin().getAttributes(); } @@ -60,13 +60,13 @@ public interface IPonyMixinModel } @Override - default IEquestrianArmour createArmour() { + default IArmour createArmour() { return mixin().createArmour(); } @Override - default void apply(IPonyData meta) { - mixin().apply(meta); + default void setMetadata(IPonyData meta) { + mixin().setMetadata(meta); } @Override @@ -91,7 +91,9 @@ public interface IPonyMixinModel @Override default void setArmAngle(Arm arm, MatrixStack stack) { - mixin().setArmAngle(arm, stack); + if (mixin() instanceof ModelWithArms) { + ((ModelWithArms)mixin()).setArmAngle(arm, stack); + } } @Override diff --git a/src/main/java/com/minelittlepony/client/model/IPonyModel.java b/src/main/java/com/minelittlepony/client/model/IPonyModel.java index 5c7735d4..e0da776e 100644 --- a/src/main/java/com/minelittlepony/client/model/IPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/IPonyModel.java @@ -4,19 +4,19 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.entity.LivingEntity; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.ICapitated; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.ModelAttributes; +import com.minelittlepony.api.model.PonyModelConstants; import com.minelittlepony.api.pony.IPony; -import com.minelittlepony.client.render.EquineRenderManager; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.ICapitated; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.PonyModelConstants; import com.minelittlepony.mson.api.MsonModel; public interface IPonyModel extends PonyModelConstants, IModel, ICapitated, MsonModel { void copyAttributes(BipedEntityModel other); - void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode); + void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode); ModelPart getBodyPart(BodyPart part); } diff --git a/src/main/java/com/minelittlepony/client/model/ModelType.java b/src/main/java/com/minelittlepony/client/model/ModelType.java index 9a25e491..da7e6b8d 100644 --- a/src/main/java/com/minelittlepony/client/model/ModelType.java +++ b/src/main/java/com/minelittlepony/client/model/ModelType.java @@ -7,6 +7,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.VexEntity; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.gear.IGear; import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.client.model.armour.PonyArmourModel; @@ -38,7 +39,6 @@ import com.minelittlepony.client.model.gear.Stetson; import com.minelittlepony.client.model.gear.WitchHat; import com.minelittlepony.client.render.entity.PlayerPonyRenderer; import com.minelittlepony.client.render.entity.PlayerSeaponyRenderer; -import com.minelittlepony.model.gear.IGear; import com.minelittlepony.mson.api.ModelKey; import com.minelittlepony.mson.api.Mson; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/model/ModelWrapper.java b/src/main/java/com/minelittlepony/client/model/ModelWrapper.java index ac853a95..4389b227 100644 --- a/src/main/java/com/minelittlepony/client/model/ModelWrapper.java +++ b/src/main/java/com/minelittlepony/client/model/ModelWrapper.java @@ -2,11 +2,11 @@ package com.minelittlepony.client.model; import net.minecraft.entity.LivingEntity; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.IModelWrapper; +import com.minelittlepony.api.model.armour.IArmourModel; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.api.pony.IPonyData; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.IModelWrapper; -import com.minelittlepony.model.armour.IArmour; -import com.minelittlepony.model.armour.IEquestrianArmour; import com.minelittlepony.mson.api.ModelKey; /** @@ -16,7 +16,7 @@ public class ModelWrapper implements I private final M body; - private final IEquestrianArmour armor; + private final IArmour armor; /** * Creates a new model wrapper to contain the given pony. @@ -25,7 +25,7 @@ public class ModelWrapper implements I public ModelWrapper(ModelKey key) { body = (M)key.createModel(); armor = body.createArmour(); - armor.apply(body.getMetadata()); + armor.applyMetadata(body.getMetadata()); } public M getBody() { @@ -33,17 +33,17 @@ public class ModelWrapper implements I } /** - * Returns the contained armour model. + * Returns the contained armour models. */ @SuppressWarnings("unchecked") - public IEquestrianArmour getArmor() { - return (IEquestrianArmour)armor; + public IArmour getArmor() { + return (IArmour)armor; } @Override - public ModelWrapper apply(IPonyData meta) { - body.apply(meta); - armor.apply(meta); + public ModelWrapper applyMetadata(IPonyData meta) { + body.setMetadata(meta); + armor.applyMetadata(meta); return this; } } diff --git a/src/main/java/com/minelittlepony/client/model/PonyElytra.java b/src/main/java/com/minelittlepony/client/model/PonyElytra.java index d71683b2..87865424 100644 --- a/src/main/java/com/minelittlepony/client/model/PonyElytra.java +++ b/src/main/java/com/minelittlepony/client/model/PonyElytra.java @@ -8,7 +8,7 @@ import net.minecraft.util.math.Vec3d; import com.google.common.collect.ImmutableList; -import static com.minelittlepony.model.PonyModelConstants.*; +import static com.minelittlepony.api.model.PonyModelConstants.*; /** * Modified from ModelElytra. diff --git a/src/main/java/com/minelittlepony/client/model/PonySkullModel.java b/src/main/java/com/minelittlepony/client/model/PonySkullModel.java index 5e467e6c..b264c3d0 100644 --- a/src/main/java/com/minelittlepony/client/model/PonySkullModel.java +++ b/src/main/java/com/minelittlepony/client/model/PonySkullModel.java @@ -1,11 +1,11 @@ package com.minelittlepony.client.model; +import com.minelittlepony.api.model.ICapitated; import com.minelittlepony.api.pony.IPonyData; import com.minelittlepony.client.model.part.PonyEars; import com.minelittlepony.client.model.part.PonySnout; import com.minelittlepony.client.model.part.UnicornHorn; import com.minelittlepony.client.pony.PonyData; -import com.minelittlepony.model.ICapitated; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java b/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java index e0ed358a..8392c73e 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java @@ -2,13 +2,13 @@ package com.minelittlepony.client.model.armour; import net.minecraft.entity.LivingEntity; +import com.minelittlepony.api.model.armour.ArmourLayer; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.api.pony.IPonyData; import com.minelittlepony.client.model.ModelType; -import com.minelittlepony.model.armour.ArmourLayer; -import com.minelittlepony.model.armour.IEquestrianArmour; import com.minelittlepony.mson.api.MsonModel; -public class ArmourWrapper implements IEquestrianArmour> { +public class ArmourWrapper implements IArmour> { private final PonyArmourModel outerLayer; private final PonyArmourModel innerLayer; @@ -19,14 +19,14 @@ public class ArmourWrapper implements IEquestrianArmour< } @Override - public ArmourWrapper apply(IPonyData meta) { - outerLayer.apply(meta); - innerLayer.apply(meta); + public ArmourWrapper applyMetadata(IPonyData meta) { + outerLayer.setMetadata(meta); + innerLayer.setMetadata(meta); return this; } @Override - public PonyArmourModel getArmorForLayer(ArmourLayer layer) { + public PonyArmourModel getModel(ArmourLayer layer) { if (layer == ArmourLayer.INNER) { return innerLayer; diff --git a/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java b/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java index b5cdf426..9bb5b68c 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java +++ b/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java @@ -9,9 +9,9 @@ import net.minecraft.resource.ResourceManager; import net.minecraft.util.Identifier; import com.google.common.base.Strings; -import com.minelittlepony.model.armour.ArmourLayer; -import com.minelittlepony.model.armour.ArmourVariant; -import com.minelittlepony.model.armour.IArmourTextureResolver; +import com.minelittlepony.api.model.armour.ArmourLayer; +import com.minelittlepony.api.model.armour.ArmourVariant; +import com.minelittlepony.api.model.armour.IArmourTextureResolver; import com.minelittlepony.util.ResourceUtil; import javax.annotation.Nullable; @@ -21,13 +21,13 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; -public class DefaultArmourTextureResolver implements IArmourTextureResolver { +public class DefaultArmourTextureResolver implements IArmourTextureResolver { private final Map HUMAN_ARMOUR = new HashMap<>(); private final Map PONY_ARMOUR = new HashMap<>(); @Override - public Identifier getArmourTexture(T entity, ItemStack itemstack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type) { + public Identifier getTexture(LivingEntity entity, ItemStack itemstack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type) { type = Strings.nullToEmpty(type); ArmorItem item = (ArmorItem) itemstack.getItem(); @@ -109,7 +109,7 @@ public class DefaultArmourTextureResolver implements IAr } @Override - public ArmourVariant getArmourVariant(ArmourLayer layer, Identifier resolvedTexture) { + public ArmourVariant getVariant(ArmourLayer layer, Identifier resolvedTexture) { if (resolvedTexture.getPath().endsWith("_pony.png")) { return ArmourVariant.NORMAL; } diff --git a/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java b/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java index 1a8fd7e4..c9cd3361 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java +++ b/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java @@ -6,12 +6,12 @@ import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.armour.ArmourVariant; +import com.minelittlepony.api.model.armour.IArmourModel; import com.minelittlepony.client.model.AbstractPonyModel; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.armour.ArmourVariant; -import com.minelittlepony.model.armour.IArmour; -public class PonyArmourModel extends AbstractPonyModel implements IArmour { +public class PonyArmourModel extends AbstractPonyModel implements IArmourModel { private ModelPart chestPiece; diff --git a/src/main/java/com/minelittlepony/client/model/entity/BreezieModel.java b/src/main/java/com/minelittlepony/client/model/entity/BreezieModel.java index 25f50e30..730fa5c9 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/BreezieModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/BreezieModel.java @@ -11,7 +11,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.minelittlepony.mson.api.model.MsonPart; -import static com.minelittlepony.model.PonyModelConstants.PI; +import static com.minelittlepony.api.model.PonyModelConstants.PI; public class BreezieModel extends BipedEntityModel { diff --git a/src/main/java/com/minelittlepony/client/model/entity/PiglinPonyModel.java b/src/main/java/com/minelittlepony/client/model/entity/PiglinPonyModel.java index 0e9ca81b..26904987 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/PiglinPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/PiglinPonyModel.java @@ -6,8 +6,8 @@ import net.minecraft.entity.mob.HostileEntity; import net.minecraft.entity.mob.PiglinActivity; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.pony.IPony; -import com.minelittlepony.client.render.EquineRenderManager; public class PiglinPonyModel extends ZomponyModel { @@ -23,7 +23,7 @@ public class PiglinPonyModel extends ZomponyModel { } @Override - public void updateLivingState(HostileEntity entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(HostileEntity entity, IPony pony, ModelAttributes.Mode mode) { super.updateLivingState(entity, pony, mode); leftArmPose = ArmPose.EMPTY; rightArmPose = entity.getMainHandStack().isEmpty() ? ArmPose.EMPTY : ArmPose.ITEM; diff --git a/src/main/java/com/minelittlepony/client/model/entity/VillagerPonyModel.java b/src/main/java/com/minelittlepony/client/model/entity/VillagerPonyModel.java index b87a5159..e60d91bd 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/VillagerPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/VillagerPonyModel.java @@ -10,12 +10,12 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.village.VillagerDataContainer; import net.minecraft.village.VillagerProfession; +import com.minelittlepony.api.model.IPart; +import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.client.model.entity.race.AlicornModel; -import com.minelittlepony.client.render.EquineRenderManager; import com.minelittlepony.client.render.entity.npc.PonyTextures; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; public class VillagerPonyModel extends AlicornModel implements ModelWithHat { @@ -40,7 +40,7 @@ public class VillagerPonyModel e } @Override - public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode) { super.updateLivingState(entity, pony, mode); ears.setVisible(pony.getMetadata().getRace() != Race.BATPONY); diff --git a/src/main/java/com/minelittlepony/client/model/entity/WitchPonyModel.java b/src/main/java/com/minelittlepony/client/model/entity/WitchPonyModel.java index d77c4140..3163578c 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/WitchPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/WitchPonyModel.java @@ -4,10 +4,10 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.entity.mob.WitchEntity; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.client.model.entity.race.ZebraModel; -import com.minelittlepony.client.render.EquineRenderManager; public class WitchPonyModel extends ZebraModel { @@ -16,7 +16,7 @@ public class WitchPonyModel extends ZebraModel { } @Override - public void updateLivingState(WitchEntity entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(WitchEntity entity, IPony pony, ModelAttributes.Mode mode) { super.updateLivingState(entity, pony, mode); if (entity.hasCustomName() && "Filly".equals(entity.getCustomName().getString())) { diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/AlicornModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/AlicornModel.java index 57964ee3..13a8156a 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/AlicornModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/AlicornModel.java @@ -1,7 +1,7 @@ package com.minelittlepony.client.model.entity.race; -import com.minelittlepony.model.IPart; -import com.minelittlepony.model.IPegasus; +import com.minelittlepony.api.model.IPart; +import com.minelittlepony.api.model.IPegasus; import com.minelittlepony.mson.api.ModelContext; import net.minecraft.client.model.ModelPart; diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/EarthPonyModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/EarthPonyModel.java index d3a0dc8a..0a79f632 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/EarthPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/EarthPonyModel.java @@ -1,8 +1,8 @@ package com.minelittlepony.client.model.entity.race; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.model.part.PonySnout; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import net.minecraft.client.model.ModelPart; diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/PegasusModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/PegasusModel.java index 197f6da5..690219a4 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/PegasusModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/PegasusModel.java @@ -1,7 +1,7 @@ package com.minelittlepony.client.model.entity.race; -import com.minelittlepony.model.IPart; -import com.minelittlepony.model.IPegasus; +import com.minelittlepony.api.model.IPart; +import com.minelittlepony.api.model.IPegasus; import com.minelittlepony.mson.api.ModelContext; import net.minecraft.client.model.ModelPart; diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java index 064dcb7b..c967172f 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java @@ -1,11 +1,11 @@ package com.minelittlepony.client.model.entity.race; import com.minelittlepony.client.model.armour.PonyArmourModel; -import com.minelittlepony.client.render.EquineRenderManager; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.ModelAttributes; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.client.model.armour.ArmourWrapper; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.armour.IEquestrianArmour; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumer; @@ -34,12 +34,12 @@ public class SeaponyModel extends UnicornModel { } @Override - public IEquestrianArmour createArmour() { + public IArmour createArmour() { return new ArmourWrapper<>(Armour::new); } @Override - public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode) { super.updateLivingState(entity, pony, mode); // Seaponies can't sneak, silly @@ -159,7 +159,7 @@ public class SeaponyModel extends UnicornModel { } @Override - public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { + public void updateLivingState(T entity, IPony pony, ModelAttributes.Mode mode) { super.updateLivingState(entity, pony, mode); // Seaponies can't sneak, silly diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java index d6adb201..8ff67b5d 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/UnicornModel.java @@ -1,8 +1,8 @@ package com.minelittlepony.client.model.entity.race; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IUnicorn; import com.minelittlepony.client.model.part.UnicornHorn; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IUnicorn; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.model.MsonPart; diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/ZebraModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/ZebraModel.java index 594fb5c2..9910e09a 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/ZebraModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/ZebraModel.java @@ -5,9 +5,9 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import com.minelittlepony.client.model.armour.PonyArmourModel; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.armour.IArmour; import com.minelittlepony.client.model.armour.ArmourWrapper; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.armour.IEquestrianArmour; public class ZebraModel extends EarthPonyModel { @@ -16,7 +16,7 @@ public class ZebraModel extends EarthPonyModel { } @Override - public IEquestrianArmour createArmour() { + public IArmour createArmour() { return new ArmourWrapper<>(Armour::new); } diff --git a/src/main/java/com/minelittlepony/client/model/gear/AbstractGear.java b/src/main/java/com/minelittlepony/client/model/gear/AbstractGear.java index 864c69c9..646614ce 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/AbstractGear.java +++ b/src/main/java/com/minelittlepony/client/model/gear/AbstractGear.java @@ -6,7 +6,7 @@ import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; -import com.minelittlepony.model.gear.IGear; +import com.minelittlepony.api.model.gear.IGear; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/minelittlepony/client/model/gear/ChristmasHat.java b/src/main/java/com/minelittlepony/client/model/gear/ChristmasHat.java index 29177509..aecdcc0d 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/ChristmasHat.java +++ b/src/main/java/com/minelittlepony/client/model/gear/ChristmasHat.java @@ -7,12 +7,11 @@ import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.PonyModelConstants; import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.common.util.Color; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.PonyModelConstants; -import com.minelittlepony.model.gear.IRenderContext; import java.util.Calendar; import java.util.UUID; @@ -76,7 +75,7 @@ public class ChristmasHat extends AbstractGear implements PonyModelConstants { } @Override - public Identifier getTexture(T entity, IRenderContext context) { + public Identifier getTexture(T entity, Context context) { return TEXTURE; } diff --git a/src/main/java/com/minelittlepony/client/model/gear/Muffin.java b/src/main/java/com/minelittlepony/client/model/gear/Muffin.java index aad00a6f..f817b927 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/Muffin.java +++ b/src/main/java/com/minelittlepony/client/model/gear/Muffin.java @@ -4,11 +4,10 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.gear.IStackable; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.gear.IRenderContext; -import com.minelittlepony.model.gear.IStackable; public class Muffin extends AbstractGear implements IStackable { @@ -29,12 +28,12 @@ public class Muffin extends AbstractGear implements IStackable { } @Override - public Identifier getTexture(T entity, IRenderContext context) { + public Identifier getTexture(T entity, Context context) { return TEXTURE; } @Override - public float getStackingOffset() { + public float getStackingHeight() { return 0.5F; } } 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 18ee223e..98864c90 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java +++ b/src/main/java/com/minelittlepony/client/model/gear/SaddleBags.java @@ -1,12 +1,11 @@ package com.minelittlepony.client.model.gear; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.IPegasus; +import com.minelittlepony.api.model.PonyModelConstants; import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.IPegasus; -import com.minelittlepony.model.PonyModelConstants; -import com.minelittlepony.model.gear.IRenderContext; import java.util.UUID; @@ -101,7 +100,7 @@ public class SaddleBags extends AbstractGear implements PonyModelConstants { } @Override - public Identifier getTexture(T entity, IRenderContext context) { + public Identifier getTexture(T entity, Context context) { if (context.getEntityModel() != null && context.getEntityModel().getMetadata().getRace().isEquivalentTo(Race.CHANGELING)) { return TEXTURE; } diff --git a/src/main/java/com/minelittlepony/client/model/gear/Stetson.java b/src/main/java/com/minelittlepony/client/model/gear/Stetson.java index 9df44325..1c2676ac 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/Stetson.java +++ b/src/main/java/com/minelittlepony/client/model/gear/Stetson.java @@ -4,11 +4,10 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.gear.IStackable; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.gear.IRenderContext; -import com.minelittlepony.model.gear.IStackable; public class Stetson extends AbstractGear implements IStackable { private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/stetson.png"); @@ -23,7 +22,7 @@ public class Stetson extends AbstractGear implements IStackable { } @Override - public Identifier getTexture(T entity, IRenderContext context) { + public Identifier getTexture(T entity, Context context) { return TEXTURE; } @@ -33,7 +32,7 @@ public class Stetson extends AbstractGear implements IStackable { } @Override - public float getStackingOffset() { + public float getStackingHeight() { return 0; } } diff --git a/src/main/java/com/minelittlepony/client/model/gear/WitchHat.java b/src/main/java/com/minelittlepony/client/model/gear/WitchHat.java index de48e6e1..3bee3a7e 100644 --- a/src/main/java/com/minelittlepony/client/model/gear/WitchHat.java +++ b/src/main/java/com/minelittlepony/client/model/gear/WitchHat.java @@ -4,11 +4,10 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.entity.Entity; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; +import com.minelittlepony.api.model.gear.IStackable; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; -import com.minelittlepony.model.gear.IRenderContext; -import com.minelittlepony.model.gear.IStackable; public class WitchHat extends AbstractGear implements IStackable { @@ -29,12 +28,12 @@ public class WitchHat extends AbstractGear implements IStackable { } @Override - public Identifier getTexture(T entity, IRenderContext context) { + public Identifier getTexture(T entity, Context context) { return WITCH_TEXTURES; } @Override - public float getStackingOffset() { + public float getStackingHeight() { return 0.7F; } } diff --git a/src/main/java/com/minelittlepony/client/model/part/BatWings.java b/src/main/java/com/minelittlepony/client/model/part/BatWings.java index 887337b3..f47eeca3 100644 --- a/src/main/java/com/minelittlepony/client/model/part/BatWings.java +++ b/src/main/java/com/minelittlepony/client/model/part/BatWings.java @@ -5,7 +5,7 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; -import com.minelittlepony.model.IPegasus; +import com.minelittlepony.api.model.IPegasus; import java.util.UUID; diff --git a/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java b/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java index 92d286d1..c234695d 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java +++ b/src/main/java/com/minelittlepony/client/model/part/PegasusWings.java @@ -6,9 +6,9 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.IPart; +import com.minelittlepony.api.model.IPegasus; import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.IPart; -import com.minelittlepony.model.IPegasus; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java index 5feeaffd..859ba6b3 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java @@ -4,7 +4,7 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; -import com.minelittlepony.model.IPart; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.model.PartBuilder; diff --git a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java index 19449172..a66c0b00 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java @@ -4,9 +4,9 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.pony.meta.Gender; import com.minelittlepony.client.MineLittlePony; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.model.MsonPart; diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java index 2995c02a..598f6c23 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java @@ -5,8 +5,8 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.client.model.AbstractPonyModel; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java b/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java index 1eb99a91..fe9f1b0b 100644 --- a/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/SeaponyTail.java @@ -1,7 +1,7 @@ package com.minelittlepony.client.model.part; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.client.model.IPonyModel; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java index 6e445031..560e8e99 100644 --- a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java +++ b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java @@ -7,9 +7,9 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider.Immediate; import net.minecraft.client.util.math.MatrixStack; +import com.minelittlepony.api.model.IPart; import com.minelittlepony.client.render.MagicGlow; import com.minelittlepony.common.util.Color; -import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; diff --git a/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java b/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java index 6142e3a3..cd685484 100644 --- a/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java +++ b/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java @@ -1,5 +1,6 @@ package com.minelittlepony.client.render; +import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.model.IPonyModel; @@ -60,7 +61,7 @@ public class EquineRenderManager & IPonyModel> extends PonyModelConstants, IRenderContext { +public interface IPonyRenderContext & IPonyModel> extends PonyModelConstants, IGear.Context { /** * Gets the wrapped pony model for this renderer. @@ -39,7 +39,7 @@ public interface IPonyRenderContext & IModel> extends FeatureRenderer { diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/ArmourFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/ArmourFeature.java index 8e944510..8d9ad9ed 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/ArmourFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/ArmourFeature.java @@ -1,13 +1,15 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.armour.ArmourLayer; +import com.minelittlepony.api.model.armour.ArmourRegistry; +import com.minelittlepony.api.model.armour.IArmour; +import com.minelittlepony.api.model.armour.IArmourModel; +import com.minelittlepony.api.model.armour.IArmourTextureResolver; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.model.ModelWrapper; import com.minelittlepony.client.model.armour.DefaultArmourTextureResolver; import com.minelittlepony.client.render.IPonyRenderContext; import com.minelittlepony.common.util.Color; -import com.minelittlepony.model.armour.ArmourLayer; -import com.minelittlepony.model.armour.IArmour; -import com.minelittlepony.model.armour.IArmourTextureResolver; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; @@ -26,7 +28,7 @@ import net.minecraft.util.Identifier; public class ArmourFeature & IPonyModel> extends AbstractPonyFeature { - public static final IArmourTextureResolver DEFAULT = new DefaultArmourTextureResolver<>(); + private static final IArmourTextureResolver DEFAULT = new DefaultArmourTextureResolver(); public ArmourFeature(IPonyRenderContext renderer) { super(renderer); @@ -44,7 +46,7 @@ public class ArmourFeature & IP } } - public static & IArmour> void renderArmor( + public static & IArmourModel> void renderArmor( ModelWrapper> pony, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, @@ -55,7 +57,11 @@ public class ArmourFeature & IP if (!itemstack.isEmpty() && itemstack.getItem() instanceof ArmorItem) { - V model = pony.getArmor().getArmorForLayer(layer); + IArmour armour = ArmourRegistry.getArmour(itemstack, pony.getArmor()); + + armour.applyMetadata(pony.getBody().getMetadata()); + + V model = armour.getModel(layer); if (model.prepareToRender(armorSlot, layer)) { pony.getBody().copyAttributes(model); @@ -75,27 +81,26 @@ public class ArmourFeature & IP blue = Color.b(color); } - @SuppressWarnings("unchecked") - IArmourTextureResolver resolver = model instanceof IArmourTextureResolver ? (IArmourTextureResolver)model : (IArmourTextureResolver)DEFAULT; + IArmourTextureResolver resolver = armour.getTextureResolver(DEFAULT); boolean glint = itemstack.hasGlint(); - renderArmourPart(stack, renderContext, lightUv, glint, model, red, green, blue, resolver, layer, resolver.getArmourTexture(entity, itemstack, armorSlot, layer, null)); + renderArmourPart(stack, renderContext, lightUv, glint, model, red, green, blue, resolver, layer, resolver.getTexture(entity, itemstack, armorSlot, layer, null)); if (item instanceof DyeableArmorItem) { - renderArmourPart(stack, renderContext, lightUv, false, model, 1, 1, 1, resolver, layer, resolver.getArmourTexture(entity, itemstack, armorSlot, layer, "overlay")); + renderArmourPart(stack, renderContext, lightUv, false, model, 1, 1, 1, resolver, layer, resolver.getTexture(entity, itemstack, armorSlot, layer, "overlay")); } } } } - private static & IArmour> void renderArmourPart( + private static & IArmourModel> void renderArmourPart( MatrixStack matrices, VertexConsumerProvider provider, - int light, boolean glint, V model, float r, float g, float b, IArmourTextureResolver resolver, ArmourLayer layer, Identifier texture) { + int light, boolean glint, V model, float r, float g, float b, IArmourTextureResolver resolver, ArmourLayer layer, Identifier texture) { VertexConsumer vertices = ItemRenderer.getArmorGlintConsumer(provider, RenderLayer.getArmorCutoutNoCull(texture), false, glint); - model.setVariant(resolver.getArmourVariant(layer, texture)); + model.setVariant(resolver.getVariant(layer, texture)); model.render(matrices, vertices, light, OverlayTexture.DEFAULT_UV, r, g, b, 1); } } diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/CapeFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/CapeFeature.java index 193d780f..52596837 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/CapeFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/CapeFeature.java @@ -1,8 +1,10 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; + +import static com.minelittlepony.api.model.PonyModelConstants.PI; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.OverlayTexture; @@ -16,8 +18,6 @@ import net.minecraft.item.Items; import net.minecraft.entity.EquipmentSlot; import net.minecraft.util.math.MathHelper; -import static com.minelittlepony.model.PonyModelConstants.PI; - public class CapeFeature> extends AbstractPonyFeature { public CapeFeature(IPonyRenderContext context) { diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/DJPon3Feature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/DJPon3Feature.java index 76d063b8..1d2d8b2b 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/DJPon3Feature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/DJPon3Feature.java @@ -9,9 +9,9 @@ import net.minecraft.client.util.math.MatrixStack; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.model.ModelType; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.DJPon3EarsModel; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; public class DJPon3Feature & IPonyModel> extends AbstractPonyFeature { diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/ElytraFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/ElytraFeature.java index 4edb8262..ca57add6 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/ElytraFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/ElytraFeature.java @@ -1,10 +1,10 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.PonyElytra; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.OverlayTexture; diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/GearFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/GearFeature.java index bfc8f2be..0a7b274b 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/GearFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/GearFeature.java @@ -9,27 +9,27 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import com.google.common.collect.Streams; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.gear.IGear; +import com.minelittlepony.api.model.gear.IStackable; import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.gear.IGear; -import com.minelittlepony.model.gear.IStackable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import java.util.stream.Collectors; public class GearFeature & IPonyModel> extends AbstractPonyFeature { - private static final List MOD_GEARS = new ArrayList<>(); + private static final List> MOD_GEARS = new ArrayList<>(); - public static IGear addModGear(IGear gear) { - MOD_GEARS.add(new Entry(gear, Wearable.NONE)); - return gear; + public static void addModGear(Supplier gear) { + MOD_GEARS.add(gear); } private final List gears; @@ -37,7 +37,10 @@ public class GearFeature & IPon public GearFeature(IPonyRenderContext renderer) { super(renderer); - gears = Streams.concat(ModelType.getWearables().map(e -> new Entry(e.getValue().createModel(), e.getKey())), MOD_GEARS.stream()).collect(Collectors.toList()); + gears = Streams.concat( + ModelType.getWearables().map(e -> new Entry(e.getValue().createModel(), e.getKey())), + MOD_GEARS.stream().map(e -> new Entry(e.get(), Wearable.NONE)) + ).collect(Collectors.toList()); } @Override @@ -62,7 +65,7 @@ public class GearFeature & IPon if (gear instanceof IStackable) { renderStackingOffsets.compute(part, (k, v) -> { - float offset = ((IStackable)gear).getStackingOffset(); + float offset = ((IStackable)gear).getStackingHeight(); if (v != null) { stack.translate(0, -v, 0); offset += v; diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/GlowingItemFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/GlowingItemFeature.java index aa7c2822..b8aa3108 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/GlowingItemFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/GlowingItemFeature.java @@ -1,9 +1,9 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.IUnicorn; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.render.IPonyRenderContext; import com.minelittlepony.client.render.PonyRenderDispatcher; -import com.minelittlepony.model.IUnicorn; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumerProvider; diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/HeldItemFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/HeldItemFeature.java index 6f26df3e..9a2064bf 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/HeldItemFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/HeldItemFeature.java @@ -1,13 +1,14 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.model.EntityModel; +import net.minecraft.client.render.entity.model.ModelWithArms; import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Vec3f; @@ -106,6 +107,9 @@ public class HeldItemFeature & * Renders the main arm */ protected void renderArm(Arm arm, MatrixStack stack) { - getContextModel().setArmAngle(arm, stack); + M model = getContextModel(); + if (model instanceof ModelWithArms) { + ((ModelWithArms)model).setArmAngle(arm, stack); + } } } diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/PassengerFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/PassengerFeature.java index a1fb713d..e27f8fe8 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/PassengerFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/PassengerFeature.java @@ -14,9 +14,9 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; import java.util.Optional; diff --git a/src/main/java/com/minelittlepony/client/render/entity/feature/SkullFeature.java b/src/main/java/com/minelittlepony/client/render/entity/feature/SkullFeature.java index 4f711562..9bb0534d 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/feature/SkullFeature.java +++ b/src/main/java/com/minelittlepony/client/render/entity/feature/SkullFeature.java @@ -1,9 +1,9 @@ package com.minelittlepony.client.render.entity.feature; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.render.IPonyRenderContext; -import com.minelittlepony.model.BodyPart; import com.mojang.authlib.GameProfile; import java.util.Map; diff --git a/src/main/java/com/minelittlepony/client/render/entity/npc/AbstractNpcRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/npc/AbstractNpcRenderer.java index 2410a58b..f638ea3b 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/npc/AbstractNpcRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/npc/AbstractNpcRenderer.java @@ -8,11 +8,11 @@ import net.minecraft.util.Identifier; import net.minecraft.village.VillagerDataContainer; import net.minecraft.village.VillagerProfession; +import com.minelittlepony.api.model.IUnicorn; +import com.minelittlepony.api.model.gear.IGear; import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.render.entity.PonyRenderer; -import com.minelittlepony.model.IUnicorn; -import com.minelittlepony.model.gear.IGear; import com.minelittlepony.mson.api.ModelKey; abstract class AbstractNpcRenderer< diff --git a/src/main/java/com/minelittlepony/client/transform/PonyPosture.java b/src/main/java/com/minelittlepony/client/transform/PonyPosture.java index 1028acbf..a872911c 100644 --- a/src/main/java/com/minelittlepony/client/transform/PonyPosture.java +++ b/src/main/java/com/minelittlepony/client/transform/PonyPosture.java @@ -4,7 +4,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; public interface PonyPosture { diff --git a/src/main/java/com/minelittlepony/client/transform/PonyTransformation.java b/src/main/java/com/minelittlepony/client/transform/PonyTransformation.java index fe7cf2ef..938de3e3 100644 --- a/src/main/java/com/minelittlepony/client/transform/PonyTransformation.java +++ b/src/main/java/com/minelittlepony/client/transform/PonyTransformation.java @@ -4,10 +4,10 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Vec3d; import com.google.common.collect.Maps; +import com.minelittlepony.api.model.BodyPart; +import com.minelittlepony.api.model.IModel; import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.Sizes; -import com.minelittlepony.model.BodyPart; -import com.minelittlepony.model.IModel; import java.util.Map; diff --git a/src/main/java/com/minelittlepony/client/transform/PostureElytra.java b/src/main/java/com/minelittlepony/client/transform/PostureElytra.java index c9886f85..fe492f7a 100644 --- a/src/main/java/com/minelittlepony/client/transform/PostureElytra.java +++ b/src/main/java/com/minelittlepony/client/transform/PostureElytra.java @@ -2,9 +2,10 @@ package com.minelittlepony.client.transform; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Vec3f; -import net.minecraft.entity.LivingEntity; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; + +import net.minecraft.entity.LivingEntity; public class PostureElytra implements PonyPosture { @Override diff --git a/src/main/java/com/minelittlepony/client/transform/PostureFalling.java b/src/main/java/com/minelittlepony/client/transform/PostureFalling.java index fb83a0f5..4bbeee8a 100644 --- a/src/main/java/com/minelittlepony/client/transform/PostureFalling.java +++ b/src/main/java/com/minelittlepony/client/transform/PostureFalling.java @@ -3,7 +3,7 @@ package com.minelittlepony.client.transform; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; public class PostureFalling implements PonyPosture { @Override diff --git a/src/main/java/com/minelittlepony/client/transform/PostureFlight.java b/src/main/java/com/minelittlepony/client/transform/PostureFlight.java index 4395efee..c3661523 100644 --- a/src/main/java/com/minelittlepony/client/transform/PostureFlight.java +++ b/src/main/java/com/minelittlepony/client/transform/PostureFlight.java @@ -1,7 +1,7 @@ package com.minelittlepony.client.transform; +import com.minelittlepony.api.model.IModel; import com.minelittlepony.common.util.animation.MotionCompositor; -import com.minelittlepony.model.IModel; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.client.util.math.MatrixStack; diff --git a/src/main/java/com/minelittlepony/client/transform/PostureStanding.java b/src/main/java/com/minelittlepony/client/transform/PostureStanding.java index d78fa479..30ce2ebc 100644 --- a/src/main/java/com/minelittlepony/client/transform/PostureStanding.java +++ b/src/main/java/com/minelittlepony/client/transform/PostureStanding.java @@ -3,7 +3,7 @@ package com.minelittlepony.client.transform; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; public class PostureStanding implements PonyPosture { @Override diff --git a/src/main/java/com/minelittlepony/client/transform/PostureSwimming.java b/src/main/java/com/minelittlepony/client/transform/PostureSwimming.java index 2cb6a4a7..feafeebc 100644 --- a/src/main/java/com/minelittlepony/client/transform/PostureSwimming.java +++ b/src/main/java/com/minelittlepony/client/transform/PostureSwimming.java @@ -4,7 +4,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import com.minelittlepony.model.IModel; +import com.minelittlepony.api.model.IModel; public class PostureSwimming extends PostureFlight { diff --git a/src/main/java/com/minelittlepony/model/ICapitated.java b/src/main/java/com/minelittlepony/model/ICapitated.java deleted file mode 100644 index f207547e..00000000 --- a/src/main/java/com/minelittlepony/model/ICapitated.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.minelittlepony.model; - -public interface ICapitated { - /** - * Gets the head of this capitated object. - */ - ModelRenderer getHead(); -} diff --git a/src/main/java/com/minelittlepony/model/IRotatedSwimmer.java b/src/main/java/com/minelittlepony/model/IRotatedSwimmer.java deleted file mode 100644 index 68aa8bfe..00000000 --- a/src/main/java/com/minelittlepony/model/IRotatedSwimmer.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.minelittlepony.model; - -public interface IRotatedSwimmer { - -} diff --git a/src/main/java/com/minelittlepony/model/armour/IEquestrianArmour.java b/src/main/java/com/minelittlepony/model/armour/IEquestrianArmour.java deleted file mode 100644 index 2c087196..00000000 --- a/src/main/java/com/minelittlepony/model/armour/IEquestrianArmour.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.minelittlepony.model.armour; - -import com.minelittlepony.model.IModelWrapper; - -public interface IEquestrianArmour extends IModelWrapper { - /** - * Gets the armour model to render for the given layer. - */ - V getArmorForLayer(ArmourLayer layer); -} diff --git a/src/main/java/com/minelittlepony/model/gear/IRenderContext.java b/src/main/java/com/minelittlepony/model/gear/IRenderContext.java deleted file mode 100644 index 78babe8d..00000000 --- a/src/main/java/com/minelittlepony/model/gear/IRenderContext.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.minelittlepony.model.gear; - -import net.minecraft.entity.Entity; -import net.minecraft.util.Identifier; - -import com.minelittlepony.api.pony.meta.Wearable; -import com.minelittlepony.model.IModel; - -import javax.annotation.Nullable; - -/** - * A render context for instance of IGear. - * - * @param The type of entity being rendered. - * @param The type of the entity's primary model. - */ -public interface IRenderContext { - /** - * The empty context. - */ - IRenderContext NULL = (e, g) -> null; - - /** - * Checks whether the given wearable and gear are able to render for this specific entity and its renderer. - */ - default boolean shouldRender(M model, T entity, Wearable wearable, IGear gear) { - return gear.canRender(model, entity); - } - - @Nullable - default M getEntityModel() { - return null; - } - - /** - * Gets the default texture to use for this entity and wearable. - * - * May be the entity's own texture or a specific texture allocated for that wearable. - */ - Identifier getDefaultTexture(T entity, Wearable wearable); -} diff --git a/src/main/java/com/minelittlepony/model/gear/IStackable.java b/src/main/java/com/minelittlepony/model/gear/IStackable.java deleted file mode 100644 index 8d6e913f..00000000 --- a/src/main/java/com/minelittlepony/model/gear/IStackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.minelittlepony.model.gear; - -public interface IStackable { - float getStackingOffset(); -}