diff --git a/src/main/java/com/minelittlepony/api/model/HornedPonyModel.java b/src/main/java/com/minelittlepony/api/model/HornedPonyModel.java deleted file mode 100644 index dd351c3b..00000000 --- a/src/main/java/com/minelittlepony/api/model/HornedPonyModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.minelittlepony.api.model; - -import net.minecraft.client.render.entity.model.BipedEntityModel.ArmPose; -import net.minecraft.client.render.entity.state.*; -import net.minecraft.util.Arm; - -public interface HornedPonyModel extends PonyModel { - /** - * Returns true if this model is currently using magic (horn is lit). - */ - default boolean isCasting(T state) { - return state instanceof PlayerEntityRenderState s - && (getArmPoseForSide(s, Arm.LEFT) != ArmPose.EMPTY || getArmPoseForSide(s, Arm.RIGHT) != ArmPose.EMPTY); - } - - @Override - default float getWobbleAmplitude(T state) { - return isCasting(state) ? 0 : 1; - } -} diff --git a/src/main/java/com/minelittlepony/api/model/ModelAttributes.java b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java index cacfe310..10f5d135 100644 --- a/src/main/java/com/minelittlepony/api/model/ModelAttributes.java +++ b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java @@ -2,7 +2,7 @@ package com.minelittlepony.api.model; import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.pony.*; -import com.minelittlepony.api.pony.meta.Wearable; +import com.minelittlepony.api.pony.meta.*; import com.minelittlepony.common.util.animation.Interpolator; import com.minelittlepony.util.MathUtil; @@ -126,6 +126,8 @@ public class ModelAttributes { */ public PonyData metadata = PonyData.NULL; + public Size size = SizePreset.NORMAL; + public Arm mainArm; public Hand activeHand; public ItemStack heldStack = ItemStack.EMPTY; @@ -160,6 +162,8 @@ public class ModelAttributes { } public void updateLivingState(LivingEntity entity, Pony pony, Mode mode) { + metadata = pony.metadata(); + size = entity.isBaby() ? SizePreset.FOAL : PonyConfig.getEffectiveSize(metadata.size()); isPlayer = entity instanceof PlayerEntity; visualHeight = entity.getHeight() + 0.125F; isSitting = PonyPosture.isSitting(entity); diff --git a/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java b/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java index b04fa592..3c2cbd43 100644 --- a/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/mixin/MixinHeldItemRenderer.java @@ -43,8 +43,10 @@ abstract class MixinHeldItemRenderer { VertexConsumerProvider vertices, @Nullable World world, int light, int overlay, int seed, Operation operation) { + + if (!MineLittlePony.getInstance().getRenderDispatcher().getMagicRenderer().renderItem(target, entity, stack, mode, left, matrices, vertices, world, light, overlay, seed, operation)) { - operation.call(entity, stack, mode, left, matrices, vertices, world, light, overlay, seed); + operation.call(target, entity, stack, mode, left, matrices, vertices, world, light, overlay, seed); } } } diff --git a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java index ed1b8a12..abf9ade6 100644 --- a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java @@ -14,6 +14,7 @@ import java.util.function.Supplier; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.EntityPose; @@ -42,19 +43,17 @@ public abstract class AbstractPonyModel extends Clien protected final ModelPart neck; - public final RenderList helmetRenderList; protected final RenderList neckRenderList; public final RenderList headRenderList; protected final RenderList bodyRenderList; - protected final RenderList vestRenderList; protected final RenderList legsRenderList; - protected final RenderList sleevesRenderList; protected final RenderList mainRenderList; private final List> parts = new ArrayList<>(); + @Deprecated @Nullable protected T currentState; @@ -66,10 +65,7 @@ public abstract class AbstractPonyModel extends Clien .add(withStage(BodyPart.BODY, bodyRenderList = RenderList.of(body).add(body::rotate))) .add(withStage(BodyPart.NECK, neckRenderList = RenderList.of(neck))) .add(withStage(BodyPart.HEAD, headRenderList = RenderList.of(head))) - .add(withStage(BodyPart.LEGS, legsRenderList = RenderList.of().add(leftArm, rightArm, leftLeg, rightLeg))) - .add(withStage(BodyPart.LEGS, sleevesRenderList = RenderList.of().add(leftSleeve, rightSleeve, leftPants, rightPants))) - .add(withStage(BodyPart.BODY, vestRenderList = RenderList.of(jacket))) - .add(withStage(BodyPart.HEAD, helmetRenderList = RenderList.of(hat))); + .add(withStage(BodyPart.LEGS, legsRenderList = RenderList.of().add(leftArm, rightArm, leftLeg, rightLeg))); } protected

> P addPart(P part) { @@ -88,14 +84,16 @@ public abstract class AbstractPonyModel extends Clien protected RenderList withStage(BodyPart part, RenderList action) { return (stack, vertices, overlay, light, color) -> { stack.push(); - transform(currentState, part, stack); + if (currentState != null) { + transform(currentState, part, stack); + } action.accept(stack, vertices, overlay, light, color); stack.pop(); }; } @Override - public void render(MatrixStack stack, VertexConsumer vertices, int overlay, int light, int color) { + public final void render(MatrixStack stack, VertexConsumer vertices, int overlay, int light, int color) { mainRenderList.accept(stack, vertices, overlay, light, color); } @@ -112,13 +110,6 @@ public abstract class AbstractPonyModel extends Clien setModelVisibilities((T)entity); setModelAngles((T)entity); - - leftSleeve.copyTransform(leftArm); - rightSleeve.copyTransform(rightArm); - leftPants.copyTransform(leftLeg); - rightPants.copyTransform(rightLeg); - jacket.copyTransform(body); - hat.copyTransform(head); } protected void setModelVisibilities(T state) { @@ -126,6 +117,14 @@ public abstract class AbstractPonyModel extends Clien parts.forEach(part -> part.setVisible(body.visible, state)); } + @SuppressWarnings("unchecked") + public void copyTransforms(BipedEntityModel model) { + super.copyTransforms(model); + if (model instanceof AbstractPonyModel m) { + ((AbstractPonyModel)m).currentState = currentState; + } + } + protected void setModelAngles(T entity) { float pitch = entity.attributes.motionPitch * MathHelper.RADIANS_PER_DEGREE; head.setAngles( @@ -186,7 +185,6 @@ public abstract class AbstractPonyModel extends Clien public void setHeadRotation(float animationProgress, float yaw, float pitch) { head.yaw = yaw * MathHelper.RADIANS_PER_DEGREE; head.pitch = pitch * MathHelper.RADIANS_PER_DEGREE; - hat.copyTransform(head); } /** @@ -286,7 +284,6 @@ public abstract class AbstractPonyModel extends Clien * Takes the same parameters as {@link AbstractPonyModel.setRotationAndAngles} */ protected void rotateLegsSwimming(T state, @Deprecated float move, @Deprecated float swing, @Deprecated float ticks) { - float lerp = state.isInPose(EntityPose.SWIMMING) ? (float)state.attributes.motionLerp : 1; float legLeft = (MathUtil.Angles._90_DEG + MathHelper.sin((state.limbFrequency / 3) + 2 * MathHelper.PI/3) / 2) * lerp; @@ -307,8 +304,8 @@ public abstract class AbstractPonyModel extends Clien protected void rotateLegsOnGround(T state, float move, float swing, float ticks) { float angle = MathHelper.PI * (float) Math.pow(swing, 16); - float baseRotation = move * 0.6662F; // magic number ahoy - float scale = swing / 4; + float baseRotation = state.limbFrequency * 0.6662F; // magic number ahoy + float scale = state.limbAmplitudeMultiplier / 4; float rainboomLegLotation = state.attributes.getMainInterpolator().interpolate( "rainboom_leg_rotation", @@ -415,10 +412,10 @@ public abstract class AbstractPonyModel extends Clien arm.pivotX -= 6 * sigma; arm.pivotZ -= 2; } - if (state.size == SizePreset.TALL) { + if (state.attributes.size == SizePreset.TALL) { arm.pivotY += 1; } - if (state.size == SizePreset.FOAL) { + if (state.attributes.size == SizePreset.FOAL) { arm.pivotY -= 2; } @@ -529,7 +526,9 @@ public abstract class AbstractPonyModel extends Clien @Override public final void setArmAngle(Arm arm, MatrixStack matrices) { super.setArmAngle(arm, matrices); - positionheldItem(currentState, arm, matrices); + if (currentState != null) { + positionheldItem(currentState, arm, matrices); + } } protected void positionheldItem(T state, Arm arm, MatrixStack matrices) { @@ -584,6 +583,6 @@ public abstract class AbstractPonyModel extends Clien neck.hidden = !head.visible; } - PonyTransformation.forSize(state.size).transform(state.attributes, part, stack); + PonyTransformation.forSize(state.attributes.size).transform(state.attributes, part, stack); } } diff --git a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java index f95cdb35..8adf9107 100644 --- a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java @@ -39,7 +39,7 @@ public abstract class ClientPonyModel extends PlayerE } @Override - public ArmPose getArmPoseForSide(S state, Arm side) { + public final ArmPose getArmPoseForSide(S state, Arm side) { return getArmPose(state, side); } diff --git a/src/main/java/com/minelittlepony/client/model/armour/ArmourTexture.java b/src/main/java/com/minelittlepony/client/model/armour/ArmourTexture.java index 32b91abe..e6c28911 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ArmourTexture.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ArmourTexture.java @@ -26,13 +26,9 @@ public record ArmourTexture(Identifier texture, ArmourVariant variant) { return INTERNER.intern(new ArmourTexture(texture, ArmourVariant.NORMAL)); } - public Stream named() { - return Stream.of(legacy(texture().withPath(p -> p.replace("1", "inner").replace("2", "outer"))), this); - } - public Stream ponify() { if (!PonyConfig.getInstance().disablePonifiedArmour.get()) { - return Stream.of(this, modern(ResourceUtil.ponify(texture()))); + return Stream.of(this, modern(texture().withPath(p -> p.replace("humanoid", "ponified")))); } return Stream.of(this); } diff --git a/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureLookup.java b/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureLookup.java index f5e33590..6b9db82e 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureLookup.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureLookup.java @@ -4,5 +4,5 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.equipment.EquipmentModel; public interface ArmourTextureLookup { - ArmourTexture getTexture(ItemStack stack, ArmourLayer layerType, EquipmentModel.Layer layer); + ArmourTexture getTexture(ItemStack stack, EquipmentModel.LayerType layerType, EquipmentModel.Layer layer); } diff --git a/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureResolver.java b/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureResolver.java index bc73356d..fc3fc51c 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureResolver.java +++ b/src/main/java/com/minelittlepony/client/model/armour/ArmourTextureResolver.java @@ -39,12 +39,7 @@ public class ArmourTextureResolver implements ArmourTextureLookup, IdentifiableR private final LoadingCache layerCache = CacheBuilder.newBuilder() .expireAfterAccess(30, TimeUnit.SECONDS) .build(CacheLoader.from(parameters -> { - return Stream.of(ArmourTexture.legacy(parameters.material().textureId())).flatMap(i -> { - if (parameters.layer() == ArmourLayer.OUTER) { - return Stream.of(i, ArmourTexture.legacy(parameters.material().textureId())); - } - return Stream.of(i); - }).flatMap(i -> { + return Stream.of(ArmourTexture.legacy(parameters.textureId())).flatMap(i -> { if (parameters.customModelId() != 0) { return Stream.of(ArmourTexture.legacy(i.texture().withPath(p -> p.replace(".png", parameters.customModelId() + ".png"))), i); } @@ -53,10 +48,7 @@ public class ArmourTextureResolver implements ArmourTextureLookup, IdentifiableR })); private Stream performLookup(ArmourTexture id) { - List options = Stream.of(id) - .flatMap(ArmourTexture::named) - .flatMap(ArmourTexture::ponify) - .toList(); + List options = Stream.of(id).flatMap(ArmourTexture::ponify).toList(); return options.stream().distinct() .filter(ArmourTexture::validate) .findFirst() @@ -84,15 +76,17 @@ public class ArmourTextureResolver implements ArmourTextureLookup, IdentifiableR } @Override - public ArmourTexture getTexture(ItemStack stack, ArmourLayer layer, EquipmentModel.Layer armorLayer) { - return layerCache.getUnchecked(new ArmourParameters(layer, armorLayer, getCustom(stack))); + public ArmourTexture getTexture(ItemStack stack, EquipmentModel.LayerType layerType, EquipmentModel.Layer layer) { + return layerCache.getUnchecked(new ArmourParameters(layer, layerType, getCustom(stack))); } private int getCustom(ItemStack stack) { return stack.getOrDefault(DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelDataComponent.DEFAULT).value(); } - private record ArmourParameters(ArmourLayer layer, EquipmentModel.Layer material, int customModelId) { - + private record ArmourParameters(EquipmentModel.Layer layer, EquipmentModel.LayerType layerType, int customModelId) { + public Identifier textureId() { + return layer.getFullTextureId(layerType); + } } } diff --git a/src/main/java/com/minelittlepony/client/model/armour/PonifiedEquipmentRenderer.java b/src/main/java/com/minelittlepony/client/model/armour/PonifiedEquipmentRenderer.java index 02155b47..a8907e18 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/PonifiedEquipmentRenderer.java +++ b/src/main/java/com/minelittlepony/client/model/armour/PonifiedEquipmentRenderer.java @@ -37,19 +37,21 @@ public class PonifiedEquipmentRenderer extends EquipmentRenderer { EquipmentSlot equipmentSlot, EquipmentModel.LayerType layerType, Identifier modelId, + S entity, Models> models, ItemStack stack, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light ) { - this.render(equipmentSlot, layerType, modelId, models, stack, matrices, vertexConsumers, light, null); + this.render(equipmentSlot, layerType, modelId, entity, models, stack, matrices, vertexConsumers, light, null); } public > void render( EquipmentSlot equipmentSlot, EquipmentModel.LayerType layerType, Identifier modelId, + S entity, Models> models, ItemStack stack, MatrixStack matrices, @@ -72,7 +74,7 @@ public class PonifiedEquipmentRenderer extends EquipmentRenderer { int j = getDyeColor(layer, i); if (j != 0) { ArmourLayer armourLayer = layerType == LayerType.HUMANOID_LEGGINGS ? ArmourLayer.INNER : ArmourLayer.OUTER; - ArmourTexture armorTexture = plugin.getTextureLookup().getTexture(stack, armourLayer, layer); + ArmourTexture armorTexture = plugin.getTextureLookup().getTexture(stack, layerType, layer); Identifier layerTexture = layer.usePlayerTexture() && texture != null ? texture : armorTexture.texture(); @@ -80,9 +82,10 @@ public class PonifiedEquipmentRenderer extends EquipmentRenderer { VertexConsumer armorConsumer = plugin.getArmourConsumer(equipmentSlot, vertexConsumers, layerTexture, layerType); if (armorConsumer != null) { ArmourVariant variant = layer.usePlayerTexture() ? ArmourVariant.NORMAL : armorTexture.variant(); - models.getArmourModel(stack, null, variant).ifPresent(model -> { + models.getArmourModel(stack, armourLayer, variant).ifPresent(model -> { VertexConsumer glintConsumer = hasGlint ? plugin.getGlintConsumer(equipmentSlot, vertexConsumers, layerType) : null; if (model.poseModel(equipmentSlot, armourLayer, models.body())) { + model.setAngles(entity); model.render(matrices, glintConsumer != null ? VertexConsumers.union(plugin.getGlintConsumer(equipmentSlot, vertexConsumers, layerType), armorConsumer) : armorConsumer, light, OverlayTexture.DEFAULT_UV, j); } }); 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 e6cc3a2c..d700272b 100644 --- a/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java +++ b/src/main/java/com/minelittlepony/client/model/armour/PonyArmourModel.java @@ -5,6 +5,7 @@ import net.minecraft.entity.EquipmentSlot; import com.minelittlepony.api.model.PonyModel; import com.minelittlepony.client.model.AbstractPonyModel; +import com.minelittlepony.client.model.ClientPonyModel; import com.minelittlepony.client.render.entity.state.PonyRenderState; public class PonyArmourModel extends AbstractPonyModel { @@ -17,7 +18,7 @@ public class PonyArmourModel extends AbstractPonyMode if (!setVisibilities(slot, layer)) { return false; } - if (mainModel instanceof AbstractPonyModel abs) { + if (mainModel instanceof ClientPonyModel abs) { abs.copyTransforms(this); } return true; diff --git a/src/main/java/com/minelittlepony/client/model/entity/EnderStallionModel.java b/src/main/java/com/minelittlepony/client/model/entity/EnderStallionModel.java index ec336714..23afc413 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/EnderStallionModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/EnderStallionModel.java @@ -1,9 +1,9 @@ package com.minelittlepony.client.model.entity; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; +import com.minelittlepony.api.model.BodyPart; import com.minelittlepony.client.render.entity.EnderStallionRenderer; public class EnderStallionModel extends SkeleponyModel { @@ -36,11 +36,9 @@ public class EnderStallionModel extends SkeleponyModel extends AlicornModel { public SkeleponyModel(ModelPart tree) { super(tree, false); - vestRenderList.clear(); - sleevesRenderList.clear(); } @SuppressWarnings("unchecked") 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 1ad7e2e1..87a1bd43 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 @@ -20,7 +20,7 @@ public class AlicornModel extends UnicornModel imp public void init(ModelView context) { super.init(context); wings = addPart(context.findByName("wings")); - bodyRenderList.add(forPart(this::getWings).checked(() -> currentState.race.hasWings())); + bodyRenderList.add(forPart(this::getWings)); } @Override 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 ca2ef9b2..ef9b3fde 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 @@ -9,6 +9,7 @@ import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.util.RenderList; import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.consume.UseAction; import net.minecraft.registry.Registries; @@ -17,7 +18,7 @@ import net.minecraft.util.*; /** * Used for both unicorns and alicorns since there's no logical way to keep them distinct and not duplicate stuff. */ -public class UnicornModel extends EarthPonyModel implements HornedPonyModel { +public class UnicornModel extends EarthPonyModel { protected final ModelPart unicornArmRight; protected final ModelPart unicornArmLeft; @@ -30,14 +31,24 @@ public class UnicornModel extends EarthPonyModel i unicornArmLeft = tree.getChild("left_cast"); } + public boolean isCasting(T state) { + return state instanceof PlayerEntityRenderState s + && (getArmPose(s, Arm.LEFT) != ArmPose.EMPTY || getArmPose(s, Arm.RIGHT) != ArmPose.EMPTY); + } + + @Override + public float getWobbleAmplitude(T state) { + return isCasting(state) ? 0 : 1; + } + @Override public void init(ModelView context) { super.init(context); horn = addPart(context.findByName("horn")); - headRenderList.add(RenderList.of().add(head::rotate).add(forPart(horn)).checked(() -> currentState.race.hasHorn())); - this.mainRenderList.add(withStage(BodyPart.HEAD, RenderList.of().add(head::rotate).add((stack, vertices, overlay, light, color) -> { - horn.renderMagic(stack, vertices, currentState.attributes.metadata.glowColor()); - })).checked(() -> currentState.hasMagicGlow() && isCasting(currentState))); + headRenderList.add(RenderList.of().add(head::rotate).add(forPart(horn))); + mainRenderList.add(withStage(BodyPart.HEAD, RenderList.of().add(head::rotate).add((stack, vertices, overlay, light, color) -> { + horn.renderMagic(stack, vertices, currentState == null ? 0 : currentState.attributes.metadata.glowColor()); + })).checked(() -> isCasting(currentState))); } @Override @@ -60,7 +71,7 @@ public class UnicornModel extends EarthPonyModel i @Override public ModelPart getArm(Arm side) { - if (currentState.hasMagicGlow() && getArmPoseForSide(currentState, side) != ArmPose.EMPTY && PonyConfig.getInstance().tpsmagic.get()) { + if (currentState != null && currentState.hasMagicGlow() && getArmPoseForSide(currentState, side) != ArmPose.EMPTY && PonyConfig.getInstance().tpsmagic.get()) { return side == Arm.LEFT ? unicornArmLeft : unicornArmRight; } return super.getArm(side); @@ -70,7 +81,7 @@ public class UnicornModel extends EarthPonyModel i protected void positionheldItem(T state, Arm arm, MatrixStack matrices) { super.positionheldItem(state, arm, matrices); - if (!PonyConfig.getInstance().tpsmagic.get() || !currentState.hasMagicGlow()) { + if (!PonyConfig.getInstance().tpsmagic.get() || !state.hasMagicGlow()) { return; } @@ -93,9 +104,9 @@ public class UnicornModel extends EarthPonyModel i float x = 0.3F; float z = -0.4F; - if (state.size == SizePreset.TALL || state.size == SizePreset.YEARLING) { + if (state.attributes.size == SizePreset.TALL || state.attributes.size == SizePreset.YEARLING) { z += 0.05F; - } else if (state.size == SizePreset.FOAL) { + } else if (state.attributes.size == SizePreset.FOAL) { x -= 0.1F; z -= 0.1F; } 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 46c3e99b..b91acb7e 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java @@ -112,7 +112,7 @@ public class PonyTail implements SubModel, MsonModel { } public void setAngles(int index, PonyTail tail, ModelAttributes attributes) { - tree.visible = index >= tail.tailStop; + tree.visible = index < tail.tailStop; shape = tail.shape; horsey = attributes.isHorsey; diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyWings.java b/src/main/java/com/minelittlepony/client/model/part/PonyWings.java index 435983ad..17350867 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyWings.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyWings.java @@ -21,6 +21,8 @@ public class PonyWings implements SubModel, MsonMo protected Wing legacyWing; + private boolean visible; + public PonyWings(ModelPart tree) { } @@ -113,6 +115,10 @@ public class PonyWings implements SubModel, MsonMo } } + @Override + public void setVisible(boolean visible, S state) { + visible = state.race.hasWings(); + } private boolean isBurdened(S state) { return state.getAttributes().isWearing(Wearable.SADDLE_BAGS_BOTH) @@ -122,9 +128,11 @@ public class PonyWings implements SubModel, MsonMo @Override public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlay, int light, int color) { - leftWing.render(stack, vertices, overlay, light, color); - rightWing.render(stack, vertices, overlay, light, color); - legacyWing.render(stack, vertices, overlay, light, color); + if (visible) { + leftWing.render(stack, vertices, overlay, light, color); + rightWing.render(stack, vertices, overlay, light, color); + legacyWing.render(stack, vertices, overlay, light, color); + } } public static class Wing implements 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 db422c78..1c46ad1c 100644 --- a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java +++ b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java @@ -17,6 +17,7 @@ public class UnicornHorn implements SubModel { private final ModelPart glow; protected boolean visible = true; + protected boolean glowing; public UnicornHorn(ModelPart tree) { horn = tree.getChild("bone"); @@ -39,7 +40,7 @@ public class UnicornHorn implements SubModel { @Override public void setVisible(boolean visible, T state) { - horn.visible = this.visible && visible; - glow.visible = this.visible && visible; + horn.visible = this.visible && visible && state.race.hasHorn(); + glow.visible = this.visible && visible && state.hasMagicGlow(); } } diff --git a/src/main/java/com/minelittlepony/client/render/DebugBoundingBoxRenderer.java b/src/main/java/com/minelittlepony/client/render/DebugBoundingBoxRenderer.java index c90c27c7..4e0b2ed9 100644 --- a/src/main/java/com/minelittlepony/client/render/DebugBoundingBoxRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/DebugBoundingBoxRenderer.java @@ -37,7 +37,7 @@ public final class DebugBoundingBoxRenderer { } public static Box getBoundingBox(PonyRenderState state) { - return getBoundingBox(state.x, state.y, state.z, state.size.scaleFactor(), state.width, state.height); + return getBoundingBox(state.x, state.y, state.z, state.attributes.size.scaleFactor(), state.width, state.height); } public static Box getBoundingBox(double x, double y, double z, float scale, float width, float height) { diff --git a/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java b/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java index b293f0b1..c639e5da 100644 --- a/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java +++ b/src/main/java/com/minelittlepony/client/render/EquineRenderManager.java @@ -94,7 +94,7 @@ public class EquineRenderManager< } public void setupTransforms(S state, MatrixStack stack, float animationProgress, float bodyYaw) { - float s = state.size.scaleFactor(); + float s = state.attributes.size.scaleFactor(); stack.scale(s, s, s); if (state instanceof PlayerEntityRenderState && state.attributes.isSitting) { diff --git a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java index 7feaf6fb..db358208 100644 --- a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java @@ -37,8 +37,8 @@ public class LevitatingItemRenderer { * Renders an item with a magical overlay. */ public boolean renderItem(ItemRenderer itemRenderer, @Nullable LivingEntity entity, ItemStack stack, ModelTransformationMode mode, boolean left, - MatrixStack matrix, VertexConsumerProvider renderContext, @Nullable World world, - int lightUv, int overlay, int seed, Operation original) { + MatrixStack matrices, VertexConsumerProvider vertices, @Nullable World world, + int light, int overlay, int seed, Operation original) { if (entity == null || !(mode.isFirstPerson() || mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND @@ -54,18 +54,18 @@ public class LevitatingItemRenderer { var state = context.getAndUpdateRenderState(entity, MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(false)); - matrix.push(); + matrices.push(); boolean doMagic = (mode.isFirstPerson() ? PonyConfig.getInstance().fpsmagic : PonyConfig.getInstance().tpsmagic).get() && state.hasMagicGlow(); if (doMagic && mode.isFirstPerson()) { - setupPerspective(entity, stack, left, matrix); + setupPerspective(entity, stack, left, matrices); } - original.call(entity, stack, mode, left, matrix, renderContext, world, lightUv, overlay, seed); + original.call(itemRenderer, entity, stack, mode, left, matrices, vertices, world, light, overlay, seed); if (doMagic) { - VertexConsumerProvider interceptedContext = getProvider(state.pony, renderContext); + VertexConsumerProvider interceptedContext = getProvider(state.pony, vertices); if (stack.hasGlint()) { stack = stack.copy(); @@ -80,16 +80,16 @@ public class LevitatingItemRenderer { float zDrift = MathHelper.cos((tickDelta + 20) / 20F) * driftStrength; float scale = 1.1F + (MathHelper.sin(tickDelta / 20F) + 1) * driftStrength; - matrix.scale(scale, scale, scale); - matrix.translate(0.015F + xDrift, 0.01F, 0.01F + zDrift); + matrices.scale(scale, scale, scale); + matrices.translate(0.015F + xDrift, 0.01F, 0.01F + zDrift); - original.call(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, seed); - matrix.scale(scale, scale, scale); - matrix.translate(-0.03F - xDrift, -0.02F, -0.02F - zDrift); - original.call(entity, stack, mode, left, matrix, interceptedContext, world, lightUv, OverlayTexture.DEFAULT_UV, seed); + original.call(itemRenderer, entity, stack, mode, left, matrices, interceptedContext, world, light, OverlayTexture.DEFAULT_UV, seed); + matrices.scale(scale, scale, scale); + matrices.translate(-0.03F - xDrift, -0.02F, -0.02F - zDrift); + original.call(itemRenderer, entity, stack, mode, left, matrices, interceptedContext, world, light, OverlayTexture.DEFAULT_UV, seed); } - matrix.pop(); + matrices.pop(); return true; } diff --git a/src/main/java/com/minelittlepony/client/render/blockentity/skull/MobSkull.java b/src/main/java/com/minelittlepony/client/render/blockentity/skull/MobSkull.java index 4778f2fc..8d9eed78 100644 --- a/src/main/java/com/minelittlepony/client/render/blockentity/skull/MobSkull.java +++ b/src/main/java/com/minelittlepony/client/render/blockentity/skull/MobSkull.java @@ -6,6 +6,7 @@ import com.minelittlepony.api.pony.Pony; import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.render.MobRenderers; import com.minelittlepony.client.render.blockentity.skull.PonySkullRenderer.ISkull; +import com.minelittlepony.client.render.entity.state.PonyRenderState; import com.minelittlepony.mson.api.ModelKey; import java.util.function.Supplier; @@ -20,15 +21,17 @@ import net.minecraft.util.math.RotationAxis; import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; -public class MobSkull implements ISkull { +public class MobSkull implements ISkull { private final Identifier texture; private final MobRenderers type; private final Supplier> ponyHead; + private final Supplier state; - MobSkull(Identifier texture, MobRenderers type, ModelKey> modelKey) { + MobSkull(Identifier texture, MobRenderers type, ModelKey> modelKey, Supplier state) { this.texture = texture; this.type = type; + this.state = Suppliers.memoize(state::get); this.ponyHead = Suppliers.memoize(modelKey::createModel); } @@ -44,6 +47,11 @@ public class MobSkull implements ISkull { @Override public boolean bindPony(Pony pony) { + S state = this.state.get(); + state.pony = pony; + state.race = pony.race(); + state.attributes.size = pony.size(); + state.attributes.metadata = pony.metadata(); return true; } @@ -51,11 +59,12 @@ public class MobSkull implements ISkull { public void setAngles(float yaw, float animationProgress) { Vector3f v = new Vector3f(0, -2, 1.99F); v.rotate(RotationAxis.POSITIVE_Y.rotationDegrees(yaw)); + ponyHead.get().setVisible(true); + ponyHead.get().setAngles(state.get()); ModelPart head = ponyHead.get().getHead(); head.pivotX = v.x; head.pivotY = v.y; head.pivotZ = v.z; - ponyHead.get().setVisible(true); ponyHead.get().setHeadRotation(animationProgress, yaw, 0); } diff --git a/src/main/java/com/minelittlepony/client/render/blockentity/skull/PlayerPonySkull.java b/src/main/java/com/minelittlepony/client/render/blockentity/skull/PlayerPonySkull.java index c7c0b8c6..9ece08af 100644 --- a/src/main/java/com/minelittlepony/client/render/blockentity/skull/PlayerPonySkull.java +++ b/src/main/java/com/minelittlepony/client/render/blockentity/skull/PlayerPonySkull.java @@ -83,9 +83,6 @@ public class PlayerPonySkull implements ISkull { stack.push(); ponyHead.headRenderList.accept(stack, vertices, light, overlay, color); stack.pop(); - stack.push(); - ponyHead.helmetRenderList.accept(stack, vertices, light, overlay, color); - stack.pop(); if (renderingEars) { stack.push(); stack.scale(1.3333334f, 1.3333334f, 1.3333334f); diff --git a/src/main/java/com/minelittlepony/client/render/blockentity/skull/PonySkullRenderer.java b/src/main/java/com/minelittlepony/client/render/blockentity/skull/PonySkullRenderer.java index aa72283c..823cbd7d 100644 --- a/src/main/java/com/minelittlepony/client/render/blockentity/skull/PonySkullRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/blockentity/skull/PonySkullRenderer.java @@ -6,6 +6,7 @@ import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.armour.ArmourRendererPlugin; import com.minelittlepony.client.render.MobRenderers; import com.minelittlepony.client.render.entity.*; +import com.minelittlepony.client.render.entity.state.PonyRenderState; import net.minecraft.block.AbstractSkullBlock; import net.minecraft.block.SkullBlock; @@ -51,10 +52,10 @@ public class PonySkullRenderer { public void reload() { skulls = Util.make(new HashMap<>(), skullMap -> { - skullMap.put(SkullBlock.Type.SKELETON, new MobSkull(SkeleponyRenderer.SKELETON, MobRenderers.SKELETON, ModelType.SKELETON)); - skullMap.put(SkullBlock.Type.WITHER_SKELETON, new MobSkull(SkeleponyRenderer.WITHER, MobRenderers.SKELETON, ModelType.SKELETON)); - skullMap.put(SkullBlock.Type.ZOMBIE, new MobSkull(ZomponyRenderer.ZOMBIE, MobRenderers.ZOMBIE, ModelType.ZOMBIE)); - skullMap.put(SkullBlock.Type.PIGLIN, new MobSkull(PonyPiglinRenderer.PIGLIN, MobRenderers.PIGLIN, ModelType.PIGLIN)); + skullMap.put(SkullBlock.Type.SKELETON, new MobSkull<>(SkeleponyRenderer.SKELETON, MobRenderers.SKELETON, ModelType.SKELETON, SkeleponyRenderer.State::new)); + skullMap.put(SkullBlock.Type.WITHER_SKELETON, new MobSkull<>(SkeleponyRenderer.WITHER, MobRenderers.SKELETON, ModelType.SKELETON, SkeleponyRenderer.State::new)); + skullMap.put(SkullBlock.Type.ZOMBIE, new MobSkull<>(ZomponyRenderer.ZOMBIE, MobRenderers.ZOMBIE, ModelType.ZOMBIE, PonyRenderState::new)); + skullMap.put(SkullBlock.Type.PIGLIN, new MobSkull<>(PonyPiglinRenderer.PIGLIN, MobRenderers.PIGLIN, ModelType.PIGLIN, PonyPiglinRenderer.State::new)); skullMap.put(SkullBlock.Type.PLAYER, new PlayerPonySkull()); }); headModels = SkullBlockEntityRenderer.getModels(MinecraftClient.getInstance().getEntityModelLoader()); diff --git a/src/main/java/com/minelittlepony/client/render/entity/AbstractPonyRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/AbstractPonyRenderer.java index 737371e4..49a97b0b 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/AbstractPonyRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/AbstractPonyRenderer.java @@ -116,7 +116,7 @@ public abstract class AbstractPonyRenderer< @Override public void scale(S state, MatrixStack stack) { - shadowRadius = state.size.shadowSize(); + shadowRadius = state.attributes.size.shadowSize(); if (state.baby) { shadowRadius *= 3; // undo vanilla shadow scaling diff --git a/src/main/java/com/minelittlepony/client/render/entity/PlayerPonyRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/PlayerPonyRenderer.java index a997cf16..5ac3358f 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/PlayerPonyRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/PlayerPonyRenderer.java @@ -73,7 +73,7 @@ public class PlayerPonyRenderer public Vec3d getPositionOffset(PlayerEntityRenderState state) { Vec3d offset = super.getPositionOffset(state); - return offset.add(state.baseScale * ((PlayerPonyRenderState)state).yOffset).multiply(((PonyRenderState)state).size.scaleFactor()); + return offset.add(state.baseScale * ((PlayerPonyRenderState)state).yOffset).multiply(((PonyRenderState)state).attributes.size.scaleFactor()); } @Override @@ -102,7 +102,7 @@ public class PlayerPonyRenderer @Override public void render(PlayerEntityRenderState state, MatrixStack stack, VertexConsumerProvider vertices, int light) { // EntityModelFeatures: We have to force it to use our models otherwise EMF overrides it and breaks pony rendering - shadowRadius = ((PlayerPonyRenderState)state).size.shadowSize(); + shadowRadius = ((PlayerPonyRenderState)state).attributes.size.shadowSize(); super.render(state, stack, vertices, light); DebugBoundingBoxRenderer.render((PlayerPonyRenderState)state, stack, vertices); diff --git a/src/main/java/com/minelittlepony/client/render/entity/PonyPiglinRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/PonyPiglinRenderer.java index 36b3d619..26d1f6a2 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/PonyPiglinRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/PonyPiglinRenderer.java @@ -45,6 +45,6 @@ public class PonyPiglinRenderer extends PonyRenderer> void renderArmor( Models> models, MatrixStack matrices, - VertexConsumerProvider vertices, int light, S entity, - float limbDistance, float limbAngle, - EquipmentSlot armorSlot, ArmourLayer layer, PonifiedEquipmentRenderer equipmentRenderer) { + VertexConsumerProvider vertices, int light, S entity, + float limbDistance, float limbAngle, + EquipmentSlot armorSlot, ArmourLayer layer, PonifiedEquipmentRenderer equipmentRenderer) { ArmourRendererPlugin plugin = ArmourRendererPlugin.INSTANCE.get(); @@ -65,7 +65,7 @@ public class ArmourFeature< ? EquipmentModel.LayerType.HUMANOID_LEGGINGS : EquipmentModel.LayerType.HUMANOID; Identifier modelId = equippableComponent.model().orElseThrow(); - equipmentRenderer.render(armorSlot, layerType, modelId, models, stack, matrices, vertices, light); + equipmentRenderer.render(armorSlot, layerType, modelId, entity, models, stack, matrices, vertices, light); } } diff --git a/src/main/java/com/minelittlepony/client/render/entity/state/PonyRenderState.java b/src/main/java/com/minelittlepony/client/render/entity/state/PonyRenderState.java index 74b5b255..b0d61786 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/state/PonyRenderState.java +++ b/src/main/java/com/minelittlepony/client/render/entity/state/PonyRenderState.java @@ -13,7 +13,7 @@ import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.events.PonyModelPrepareCallback; import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.PonyModel; -import com.minelittlepony.api.pony.Pony; +import com.minelittlepony.api.pony.*; import com.minelittlepony.api.pony.meta.*; import com.minelittlepony.client.transform.PonyPosture; @@ -31,15 +31,14 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode public boolean onGround; public boolean isTechnoblade; - public Pony pony; - public Size size; - public Race race; + public Pony pony = Pony.getManager().getPony(DefaultPonySkinHelper.STEVE); + public Race race = Race.HUMAN; public void updateState(LivingEntity entity, PonyModel model, Pony pony, ModelAttributes.Mode mode) { this.pony = pony; attributes.updateLivingState(entity, pony, mode); attributes.checkRainboom(entity, model, age); - size = baby ? SizePreset.FOAL : PonyConfig.getEffectiveSize(attributes.metadata.size()); + baby = attributes.size == SizePreset.FOAL; race = PonyConfig.getEffectiveRace(attributes.metadata.race()); vehicleOffset = hasVehicle ? entity.getVehicle().getEyeHeight(pose) : 0; riderOffset = getRiderYOffset(); @@ -94,7 +93,7 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode * Gets the y-offset applied to entities riding this one. */ protected float getRiderYOffset() { - return switch ((SizePreset)size) { + return switch ((SizePreset)attributes.size) { case NORMAL -> 0.4F; default -> 0.25F; }; @@ -112,7 +111,7 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode float y = -(height + 0.5F); // Then we add our own offsets. - y += attributes.visualHeight * size.scaleFactor() + 0.25F; + y += attributes.visualHeight * attributes.size.scaleFactor() + 0.25F; y += vehicleOffset; if (isInSneakingPose) { diff --git a/src/main/java/com/minelittlepony/client/util/render/NativeUtil.java b/src/main/java/com/minelittlepony/client/util/render/NativeUtil.java index 551f9ae5..5cf5e33b 100644 --- a/src/main/java/com/minelittlepony/client/util/render/NativeUtil.java +++ b/src/main/java/com/minelittlepony/client/util/render/NativeUtil.java @@ -114,7 +114,7 @@ public class NativeUtil { Resource res = mc.getResourceManager().getResource(resource).orElse(null); if (res != null) { - try (InputStream inputStream = res.getInputStream()){ + try (InputStream inputStream = res.getInputStream()) { consumer.accept(NativeImage.read(inputStream)::getColorArgb); return; } diff --git a/src/main/java/com/minelittlepony/util/ResourceUtil.java b/src/main/java/com/minelittlepony/util/ResourceUtil.java index 957b3593..23dd549e 100644 --- a/src/main/java/com/minelittlepony/util/ResourceUtil.java +++ b/src/main/java/com/minelittlepony/util/ResourceUtil.java @@ -3,8 +3,6 @@ package com.minelittlepony.util; import net.minecraft.client.MinecraftClient; import net.minecraft.util.Identifier; -import com.minelittlepony.client.MineLittlePony; - import java.util.Optional; public final class ResourceUtil { @@ -30,16 +28,4 @@ public final class ResourceUtil { public static Optional verifyTexture(Identifier texture) { return textureExists(texture) ? Optional.of(texture) : Optional.empty(); } - - public static Identifier ponify(Identifier texture) { - String path = texture.getPath(); - if (path.endsWith("_pony.png")) { - return texture; - } - if (Identifier.DEFAULT_NAMESPACE.contentEquals(texture.getNamespace())) { - return MineLittlePony.id(path.replace(".png", "_pony.png")); // it's in the vanilla namespace, we provide these. - } - - return texture.withPath(p -> p.replace(".png", "_pony.png")); - } } diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/chainmail_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/chainmail.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/chainmail_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/chainmail.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/diamond_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/diamond.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/diamond_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/diamond.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/gold_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/gold.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/gold_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/gold.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/iron_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/iron.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/iron_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/iron.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/leather.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/leather.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_inner_overlay_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/leather_overlay.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_inner_overlay_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/leather_overlay.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/netherite_layer_inner_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified/netherite.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/netherite_layer_inner_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified/netherite.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/chainmail_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/chainmail.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/chainmail_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/chainmail.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/diamond_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/diamond.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/diamond_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/diamond.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/gold_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/gold.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/gold_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/gold.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/iron_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/iron.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/iron_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/iron.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/leather.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/leather.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_outer_overlay_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/leather_overlay.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/leather_layer_outer_overlay_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/leather_overlay.png diff --git a/src/main/resources/assets/minelittlepony/textures/models/armor/netherite_layer_outer_pony.png b/src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/netherite.png similarity index 100% rename from src/main/resources/assets/minelittlepony/textures/models/armor/netherite_layer_outer_pony.png rename to src/main/resources/assets/minecraft/textures/entity/equipment/ponified_leggings/netherite.png diff --git a/src/main/resources/assets/minelittlepony/models/entity/allay.json b/src/main/resources/assets/minelittlepony/models/entity/allay.json index e80b96bf..57a1937c 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/allay.json +++ b/src/main/resources/assets/minelittlepony/models/entity/allay.json @@ -22,7 +22,6 @@ }, "hat": { "texture": { "u": 40, "v": 27 }, - "pivot": [0, 1, -4], "children": { "hat_parts": { "pivot": [0, 2, 0], diff --git a/src/main/resources/assets/minelittlepony/models/entity/armor/inner_pony_armor.json b/src/main/resources/assets/minelittlepony/models/entity/armor/inner_pony_armor.json index 74c00db1..1e6129af 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/armor/inner_pony_armor.json +++ b/src/main/resources/assets/minelittlepony/models/entity/armor/inner_pony_armor.json @@ -5,7 +5,12 @@ "texture": {"u": 16, "v": 8}, "cubes": [ {"from": [-4, 4, -2], "size": [8, 8, 16]} - ] + ], + "children": { + "jacket": { + "visible": false + } + } }, "right_leg": { "pivot": ["#arm_rotation_x_neg", 0, 0], @@ -15,7 +20,12 @@ "from": [ "#arm_x_neg", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "right_pants": { + "visible": false + } + } }, "left_leg": { "pivot": ["#arm_rotation_x", 0, 0], @@ -26,7 +36,12 @@ "from": [ "#arm_x", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "left_pants": { + "visible": false + } + } } } } diff --git a/src/main/resources/assets/minelittlepony/models/entity/armor/inner_vanilla_armor.json b/src/main/resources/assets/minelittlepony/models/entity/armor/inner_vanilla_armor.json index e7c36158..2def03f4 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/armor/inner_vanilla_armor.json +++ b/src/main/resources/assets/minelittlepony/models/entity/armor/inner_vanilla_armor.json @@ -17,7 +17,10 @@ "south": [-4, 4, 10, 8, 8, 32, 23], "up": [ -4, 4, 1, 8, 12, 32, 23], "__comment": "it's a little short, so the butt tends to show. :/" - } + }, + "jacket": { + "visible": false + } } }, "head": { @@ -25,7 +28,17 @@ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 }, { "from": [-4, -8, -1], "size": [ 2, 2, 2], "texture": {"u": 0, "v": 0}, "dilate": -0.0125 }, { "from": [ 2, -8, -1], "size": [ 2, 2, 2], "texture": {"u": 0, "v": 4}, "dilate": -0.0125 } - ] + ], + "children": { + "hat": { + "texture": { "u": 32, "v": 0 }, + "dilate": ["#head_elongation", "#head_elongation", 0], + "pivot": [ 0, "#head_pivot_y", 0 ], + "cubes": [ + { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } + ] + } + } }, "right_arm": { "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 0], @@ -35,7 +48,12 @@ "from": [ "#arm_x_neg", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "right_sleeve": { + "visible": false + } + } }, "left_arm": { "pivot": ["#arm_rotation_x", "#arm_rotation_y", 0], @@ -46,7 +64,12 @@ "from": [ "#arm_x", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "left_sleeve": { + "visible": false + } + } }, "right_leg": { "pivot": ["#arm_rotation_x_neg", 0, 0], @@ -56,7 +79,12 @@ "from": [ "#arm_x_neg", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "right_pants": { + "visible": false + } + } }, "left_leg": { "pivot": ["#arm_rotation_x", 0, 0], @@ -67,7 +95,12 @@ "from": [ "#arm_x", 4, "#arm_z"], "size": [ "#arm_width", "#arm_length", "#arm_depth" ] } - ] + ], + "children": { + "left_pants": { + "visible": false + } + } } } } diff --git a/src/main/resources/assets/minelittlepony/models/entity/armor/outer_pony_armor.json b/src/main/resources/assets/minelittlepony/models/entity/armor/outer_pony_armor.json index d87dc3da..5cd12468 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/armor/outer_pony_armor.json +++ b/src/main/resources/assets/minelittlepony/models/entity/armor/outer_pony_armor.json @@ -7,7 +7,12 @@ "dilate": 0.41, "cubes": [ {"from": [-4, 4, -2], "size": [8, 8, 16]} - ] + ], + "children": { + "jacket": { + "visible": false + } + } } } } diff --git a/src/main/resources/assets/minelittlepony/models/entity/armour_stand.json b/src/main/resources/assets/minelittlepony/models/entity/armour_stand.json index f9bf9284..6e197bbd 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/armour_stand.json +++ b/src/main/resources/assets/minelittlepony/models/entity/armour_stand.json @@ -8,7 +8,6 @@ ], "children": { "hat": { - "pivot": [ 0, 5, 0 ], "cubes": [ { "from": [ -1, -7, -1 ], "size": [ 2, 7, 2 ], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/enderman.json b/src/main/resources/assets/minelittlepony/models/entity/enderman.json index 74a57953..b902b5f9 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/enderman.json +++ b/src/main/resources/assets/minelittlepony/models/entity/enderman.json @@ -29,7 +29,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "visible": false, - "pivot": [0, 0, -2], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": -0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/bat_pony.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/bat_pony.json index 534f4871..91b078e7 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/bat_pony.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/bat_pony.json @@ -29,7 +29,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/gryphon.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/gryphon.json index 72df2899..368e9661 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/gryphon.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/gryphon.json @@ -50,7 +50,6 @@ } }, "left_sleeve": { - "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "visible": false, "texture": { "u": 48, "v": 48 }, "cubes": [ @@ -108,7 +107,11 @@ "visible": false, "texture": { "u": 40, "v": 32 }, "cubes": [ - { "from": [-3, -2, -2], "size": [ 4, 12, 4], "dilate": [0.25, 0.25, 0.25] } + { + "from": [ "#arm_x_neg", 4, "#arm_z"], + "size": [ "#arm_width", "#arm_length", "#arm_depth" ], + "dilate": 0.25 + } ] } } diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/hippogriff.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/hippogriff.json index 940e8c5c..2c16d353 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/hippogriff.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/hippogriff.json @@ -77,7 +77,6 @@ } }, "left_sleeve": { - "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "visible": false, "texture": { "u": 48, "v": 48 }, "cubes": [ @@ -115,6 +114,17 @@ "height": "#fore_arm_length", "depth": "#arm_depth" } + }, + "right_sleeve": { + "visible": false, + "texture": { "u": 40, "v": 32 }, + "cubes": [ + { + "from": [ "#arm_x_neg", 4, "#arm_z"], + "size": [ "#arm_width", "#arm_length", "#arm_depth" ], + "dilate": 0.25 + } + ] } } }, @@ -143,6 +153,17 @@ "height": "#fore_leg_length", "depth": "#arm_depth" } + }, + "left_pants": { + "visible": false, + "texture": { "u": 0, "v": 48 }, + "cubes": [ + { + "from": [ "#arm_x", 4, "#arm_z"], + "size": [ "#arm_width", "#arm_length", "#arm_depth" ], + "dilate": 0.25 + } + ] } } }, @@ -172,11 +193,15 @@ "depth": "#arm_depth" } }, - "right_sleeve": { + "right_pants": { "visible": false, - "texture": { "u": 40, "v": 32 }, + "texture": { "u": 0, "v": 32 }, "cubes": [ - { "from": [-3, -2, -2], "size": [ 4, 12, 4], "dilate": [0.25, 0.25, 0.25] } + { + "from": [ "#arm_x_neg", 4, "#arm_z"], + "size": [ "#arm_width", "#arm_length", "#arm_depth" ], + "dilate": 0.25 + } ] } } diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/kirin.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/kirin.json index 3735db7c..02abd187 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/kirin.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/kirin.json @@ -38,7 +38,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/reformed_changeling.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/reformed_changeling.json index 32d84076..057af503 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/reformed_changeling.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/reformed_changeling.json @@ -31,7 +31,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/sea_pony.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/sea_pony.json index 6cb31ecd..f2aa9526 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/sea_pony.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/sea_pony.json @@ -56,7 +56,6 @@ ], "children": { "right_sleeve": { - "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"], "rotate": [-80, 29, 0], "visible": false, "texture": { "u": 40, "v": 32 }, @@ -82,7 +81,6 @@ ], "children": { "left_sleeve": { - "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "rotate": [-80, -29, 0], "visible": false, "texture": { "u": 48, "v": 48 }, diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/unicorn.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/unicorn.json index d5a06ccc..c2a2ad8d 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/unicorn.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/unicorn.json @@ -26,7 +26,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/races/steve/zebra.json b/src/main/resources/assets/minelittlepony/models/entity/races/steve/zebra.json index 3036a2f9..1fb77366 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/races/steve/zebra.json +++ b/src/main/resources/assets/minelittlepony/models/entity/races/steve/zebra.json @@ -28,7 +28,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ] diff --git a/src/main/resources/assets/minelittlepony/models/entity/steve_pony.json b/src/main/resources/assets/minelittlepony/models/entity/steve_pony.json index 9be871d6..b82ec4ea 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/steve_pony.json +++ b/src/main/resources/assets/minelittlepony/models/entity/steve_pony.json @@ -278,7 +278,6 @@ ], "children": { "right_sleeve": { - "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"], "visible": false, "texture": { "u": 40, "v": 32 }, "cubes": [ @@ -302,7 +301,6 @@ ], "children": { "left_sleeve": { - "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "visible": false, "texture": { "u": 48, "v": 48 }, "cubes": [ @@ -326,7 +324,6 @@ ], "children": { "right_pants": { - "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11], "visible": false, "texture": { "u": 0, "v": 32 }, "cubes": [ @@ -350,7 +347,6 @@ ], "children": { "left_pants": { - "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11], "visible": false, "texture": { "u": 0, "v": 48 }, "cubes": [ diff --git a/src/main/resources/assets/minelittlepony/models/entity/villager.json b/src/main/resources/assets/minelittlepony/models/entity/villager.json index 30d0e498..271a70f6 100644 --- a/src/main/resources/assets/minelittlepony/models/entity/villager.json +++ b/src/main/resources/assets/minelittlepony/models/entity/villager.json @@ -26,7 +26,6 @@ "hat": { "texture": { "u": 32, "v": 0 }, "dilate": ["#head_elongation", "#head_elongation", 0], - "pivot": [ 0, "#head_pivot_y", 0 ], "cubes": [ { "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 } ]