diff --git a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java index 59cf721f..2e77268a 100644 --- a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java @@ -39,7 +39,7 @@ public abstract class AbstractPonyModel extends ClientPo @Override public IEquestrianArmour createArmour() { - return new ArmourWrapper<>(new ModelPonyArmour<>(), new ModelPonyArmour<>()); + return new ArmourWrapper<>(ModelPonyArmour::new); } /** @@ -208,7 +208,6 @@ public abstract class AbstractPonyModel extends ClientPo * @param y New rotation Y */ private void updateHeadRotation(float headYaw, float headPitch) { - head.yaw = attributes.isSleeping ? (Math.abs(attributes.interpolatorId.getMostSignificantBits()) % 2.8F) - 1.9F : headYaw / 57.29578F; headPitch = attributes.isSleeping ? 0.1f : headPitch / 57.29578F; @@ -647,22 +646,22 @@ public abstract class AbstractPonyModel extends ClientPo leftArm .setRotationPoint( rarmX, yOffset + rarmY, 0); rightArm .setRotationPoint(-rarmX, yOffset + rarmY, 0); - leftArmOverlay .setRotationPoint(rarmX, yOffset + rarmY, 0); + leftArmOverlay .setRotationPoint( rarmX, yOffset + rarmY, 0); rightArmOverlay.setRotationPoint(-rarmX, yOffset + rarmY, 0); leftLeg .setRotationPoint( rarmX, yOffset, 0); rightLeg .setRotationPoint(-rarmX, yOffset, 0); - leftLegOverlay .setRotationPoint(rarmX, yOffset, 0); + leftLegOverlay .setRotationPoint( rarmX, yOffset, 0); rightLegOverlay.setRotationPoint(-rarmX, yOffset, 0); - leftArm .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch); + leftArm .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch); rightArm .addBox(armX - armWidth, armY, armZ, armWidth, armLength, armDepth, stretch); - leftArmOverlay .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); + leftArmOverlay .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); rightArmOverlay.addBox(armX - armWidth, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); - leftLeg .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch); + leftLeg .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch); rightLeg .addBox(armX - armWidth, armY, armZ, armWidth, armLength, armDepth, stretch); - leftLegOverlay .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); + leftLegOverlay .addBox(armX, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); rightLegOverlay.addBox(armX - armWidth, armY, armZ, armWidth, armLength, armDepth, stretch + 0.25f); } 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 44af1ed9..634a5cc9 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ArmourWrapper.java @@ -6,14 +6,16 @@ import com.minelittlepony.model.armour.ArmourLayer; import com.minelittlepony.model.armour.IEquestrianArmour; import com.minelittlepony.pony.IPonyData; +import java.util.function.Supplier; + public class ArmourWrapper implements IEquestrianArmour> { private final ModelPonyArmour outerLayer; private final ModelPonyArmour innerLayer; - public ArmourWrapper(ModelPonyArmour outer, ModelPonyArmour inner) { - outerLayer = outer; - innerLayer = inner; + public ArmourWrapper(Supplier> supplier) { + outerLayer = supplier.get(); + innerLayer = supplier.get(); } @Override 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 da191720..0f6d6ea4 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java +++ b/src/main/java/com/minelittlepony/client/model/armour/DefaultArmourTextureResolver.java @@ -11,6 +11,7 @@ import net.minecraft.util.Identifier; import com.google.common.collect.Maps; import com.minelittlepony.client.ForgeProxy; import com.minelittlepony.model.armour.ArmourLayer; +import com.minelittlepony.model.armour.ArmourVariant; import com.minelittlepony.model.armour.IArmourTextureResolver; import javax.annotation.Nullable; @@ -77,4 +78,12 @@ public class DefaultArmourTextureResolver implements IAr private Identifier getArmorTexture(T entity, ItemStack item, String def, EquipmentSlot slot, @Nullable String type) { return HUMAN_ARMOUR.computeIfAbsent(ForgeProxy.getArmorTexture(entity, item, def, slot, type), Identifier::new); } + + @Override + public ArmourVariant getArmourVariant(ArmourLayer layer, Identifier resolvedTexture) { + if (resolvedTexture.getPath().endsWith("_pony.png")) { + return ArmourVariant.NORMAL; + } + return ArmourVariant.LEGACY; + } } diff --git a/src/main/java/com/minelittlepony/client/model/armour/ModelPonyArmour.java b/src/main/java/com/minelittlepony/client/model/armour/ModelPonyArmour.java index f01229fe..d9e6a347 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ModelPonyArmour.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ModelPonyArmour.java @@ -1,17 +1,25 @@ package com.minelittlepony.client.model.armour; +import net.minecraft.client.model.Cuboid; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.entity.LivingEntity; import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.util.render.PonyRenderer; +import com.minelittlepony.client.util.render.plane.PlaneRenderer; import com.minelittlepony.model.IModel; +import com.minelittlepony.model.armour.ArmourVariant; import com.minelittlepony.model.armour.IArmour; public class ModelPonyArmour extends AbstractPonyModel implements IArmour { public PonyRenderer chestPiece; + public Cuboid steveRightLeg; + public Cuboid steveLeftLeg; + + private ArmourVariant variant = ArmourVariant.NORMAL; + public ModelPonyArmour() { super(false); textureHeight = 32; @@ -28,7 +36,24 @@ public class ModelPonyArmour extends AbstractPonyModel extends AbstractPonyModel extends AbstractPonyModel extends AbstractPonyModel extends AbstractPonyModel extends AbstractPonyModel extends ModelUnicorn { @Override public IEquestrianArmour createArmour() { - return new ArmourWrapper<>(new Armour(), new Armour()); + return new ArmourWrapper<>(Armour::new); } @Override diff --git a/src/main/java/com/minelittlepony/client/model/races/ModelZebra.java b/src/main/java/com/minelittlepony/client/model/races/ModelZebra.java index ad3fb023..dd5d34b0 100644 --- a/src/main/java/com/minelittlepony/client/model/races/ModelZebra.java +++ b/src/main/java/com/minelittlepony/client/model/races/ModelZebra.java @@ -19,7 +19,7 @@ public class ModelZebra extends ModelEarthPony { @Override public IEquestrianArmour createArmour() { - return new ArmourWrapper<>(new Armour(), new Armour()); + return new ArmourWrapper<>(Armour::new); } @Override diff --git a/src/main/java/com/minelittlepony/client/render/layer/LayerPonyArmor.java b/src/main/java/com/minelittlepony/client/render/layer/LayerPonyArmor.java index ce76086c..0cc6627a 100644 --- a/src/main/java/com/minelittlepony/client/render/layer/LayerPonyArmor.java +++ b/src/main/java/com/minelittlepony/client/render/layer/LayerPonyArmor.java @@ -61,6 +61,7 @@ public class LayerPonyArmor & I IArmourTextureResolver resolver = armour instanceof IArmourTextureResolver ? (IArmourTextureResolver)armour : (IArmourTextureResolver)textures; Identifier armourTexture = resolver.getArmourTexture(entity, itemstack, armorSlot, layer, null); + armour.setVariant(resolver.getArmourVariant(layer, armourTexture)); getContext().bindTexture(armourTexture); @@ -73,6 +74,8 @@ public class LayerPonyArmor & I armour.render(entity, move, swing, ticks, headYaw, headPitch, scale); armourTexture = resolver.getArmourTexture(entity, itemstack, armorSlot, layer, "overlay"); + armour.setVariant(resolver.getArmourVariant(layer, armourTexture)); + getContext().bindTexture(armourTexture); } diff --git a/src/main/java/com/minelittlepony/model/armour/ArmourVariant.java b/src/main/java/com/minelittlepony/model/armour/ArmourVariant.java new file mode 100644 index 00000000..017cefc5 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/armour/ArmourVariant.java @@ -0,0 +1,6 @@ +package com.minelittlepony.model.armour; + +public enum ArmourVariant { + NORMAL, + LEGACY +} diff --git a/src/main/java/com/minelittlepony/model/armour/IArmour.java b/src/main/java/com/minelittlepony/model/armour/IArmour.java index 2b95e361..cfb189b3 100644 --- a/src/main/java/com/minelittlepony/model/armour/IArmour.java +++ b/src/main/java/com/minelittlepony/model/armour/IArmour.java @@ -17,6 +17,8 @@ public interface IArmour { */ void setInVisible(); + void setVariant(ArmourVariant variant); + /** * Prepares an armour model for rendering, first hiding all the pieces and then incrementally showing them as appropriate. * diff --git a/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java b/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java index 2afab3cd..c972e154 100644 --- a/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java +++ b/src/main/java/com/minelittlepony/model/armour/IArmourTextureResolver.java @@ -13,4 +13,12 @@ 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); + + /** + * 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) { + return ArmourVariant.NORMAL; + } }