Update models and fix crashes

This commit is contained in:
Sollace 2024-12-11 21:29:28 +01:00
parent a71615d0a1
commit a02fad8732
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
23 changed files with 447 additions and 261 deletions

View file

@ -2,6 +2,7 @@ package com.minelittlepony.client;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerPosition;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
@ -20,11 +21,11 @@ public class HorseCam {
* Restores the previous camera (unadjusted) angle for the client when the server sends an update. * Restores the previous camera (unadjusted) angle for the client when the server sends an update.
* This is to prevent issues caused by the server updating our pitch whenever the player leaves a portal. * This is to prevent issues caused by the server updating our pitch whenever the player leaves a portal.
*/ */
public static float transformIncomingServerCameraAngle(float serverPitch) { public static PlayerPosition transformIncomingServerCameraAngle(PlayerPosition change) {
if (MathHelper.approximatelyEquals(serverPitch, lastComputedPitch)) { if (MathHelper.approximatelyEquals(change.pitch(), lastComputedPitch)) {
return lastOriginalPitch; return new PlayerPosition(change.position(), change.deltaMovement(), change.yaw(), lastOriginalPitch);
} }
return serverPitch; return change;
} }
/** /**

View file

@ -2,7 +2,6 @@ package com.minelittlepony.client.mixin;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
@ -13,7 +12,7 @@ import net.minecraft.client.render.Camera;
@Mixin(Camera.class) @Mixin(Camera.class)
abstract class MixinCamera { abstract class MixinCamera {
@ModifyReturnValue(method = "clipToSpace(F)F", at = @At("RETURN")) @ModifyReturnValue(method = "clipToSpace(F)F", at = @At("RETURN"))
private float redirectCameraDistance(float value, float initial, CallbackInfoReturnable<Float> info) { private float redirectCameraDistance(float value) {
if (MinecraftClient.getInstance().player != null) { if (MinecraftClient.getInstance().player != null) {
Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player); Pony pony = Pony.getManager().getPony(MinecraftClient.getInstance().player);

View file

@ -11,9 +11,6 @@ import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.UUID;
@Mixin(DefaultSkinHelper.class) @Mixin(DefaultSkinHelper.class)
abstract class MixinDefaultSkinHelper { abstract class MixinDefaultSkinHelper {
@ -23,7 +20,7 @@ abstract class MixinDefaultSkinHelper {
} }
@ModifyReturnValue(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", at = @At("RETURN")) @ModifyReturnValue(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", at = @At("RETURN"))
private static SkinTextures onGetTexture(SkinTextures returnValue, UUID uuid, CallbackInfoReturnable<SkinTextures> cir) { private static SkinTextures onGetTexture(SkinTextures returnValue) {
return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.getTextures(returnValue) : returnValue; return PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES ? DefaultPonySkinHelper.getTextures(returnValue) : returnValue;
} }
} }

View file

@ -4,6 +4,7 @@ import com.minelittlepony.client.HorseCam;
import java.util.Set; import java.util.Set;
import net.minecraft.entity.player.PlayerPosition;
import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.listener.ClientPlayPacketListener;
import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket; import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
@ -17,15 +18,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(PlayerPositionLookS2CPacket.class) @Mixin(PlayerPositionLookS2CPacket.class)
abstract class MixinPlayerPositionLookS2CPacket implements Packet<ClientPlayPacketListener> { abstract class MixinPlayerPositionLookS2CPacket implements Packet<ClientPlayPacketListener> {
@Shadow @Mutable @Shadow @Mutable
private @Final float pitch; private @Final PlayerPosition change;
@Shadow @Shadow
private @Final Set<PositionFlag> flags; private @Final Set<PositionFlag> relatives;
@Inject(method = "apply(Lnet/minecraft/network/listener/ClientPlayPacketListener;)V", @Inject(method = "apply(Lnet/minecraft/network/listener/ClientPlayPacketListener;)V",
at = @At("HEAD")) at = @At("HEAD"))
private void onApply(ClientPlayPacketListener clientPlayPacketListener, CallbackInfo info) { private void onApply(ClientPlayPacketListener clientPlayPacketListener, CallbackInfo info) {
if (!flags.contains(PositionFlag.Y_ROT)) { if (!relatives.contains(PositionFlag.Y_ROT)) {
pitch = HorseCam.transformIncomingServerCameraAngle(pitch); change = HorseCam.transformIncomingServerCameraAngle(change);
} }
} }
} }

View file

@ -70,6 +70,7 @@ public class SkeleponyRenderer<T extends AbstractSkeletonEntity> extends PonyRen
public boolean isAttacking; public boolean isAttacking;
public void updateState(LivingEntity entity, PonyModel<?> model, Pony pony, ModelAttributes.Mode mode) { public void updateState(LivingEntity entity, PonyModel<?> model, Pony pony, ModelAttributes.Mode mode) {
super.updateState(entity, model, pony, mode);
isAttacking = entity instanceof HostileEntity h && h.isAttacking(); isAttacking = entity instanceof HostileEntity h && h.isAttacking();
if (entity.getUuid().getLeastSignificantBits() % 3 == 0) { if (entity.getUuid().getLeastSignificantBits() % 3 == 0) {
race = Race.EARTH; race = Race.EARTH;

View file

@ -35,7 +35,10 @@ public class CapeFeature extends CapeFeatureRenderer {
ArmourRendererPlugin plugin = ArmourRendererPlugin.INSTANCE.get(); ArmourRendererPlugin plugin = ArmourRendererPlugin.INSTANCE.get();
Identifier capeTexture = player.skinTextures.capeTexture(); Identifier capeTexture = player.skinTextures.capeTexture();
VertexConsumer buffer = plugin.getCapeConsumer(player, vertices, player.skinTextures.capeTexture()); if (capeTexture == null) {
return;
}
VertexConsumer buffer = plugin.getCapeConsumer(player, vertices, capeTexture);
if (buffer == null) { if (buffer == null) {
return; return;
} }

View file

@ -39,6 +39,8 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode
this.pony = pony; this.pony = pony;
attributes.updateLivingState(entity, pony, mode); attributes.updateLivingState(entity, pony, mode);
attributes.checkRainboom(entity, model, age); attributes.checkRainboom(entity, model, age);
size = baby ? SizePreset.FOAL : PonyConfig.getEffectiveSize(attributes.metadata.size());
race = PonyConfig.getEffectiveRace(attributes.metadata.race());
vehicleOffset = hasVehicle ? entity.getVehicle().getEyeHeight(pose) : 0; vehicleOffset = hasVehicle ? entity.getVehicle().getEyeHeight(pose) : 0;
riderOffset = getRiderYOffset(); riderOffset = getRiderYOffset();
nameplateYOffset = getNamePlateYOffset(entity); nameplateYOffset = getNamePlateYOffset(entity);
@ -57,8 +59,6 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode
|| entity instanceof ZombifiedPiglinEntity || entity instanceof ZombifiedPiglinEntity
) && entity.hasCustomName() && entity.getCustomName().getString().equalsIgnoreCase("technoblade") ) && entity.hasCustomName() && entity.getCustomName().getString().equalsIgnoreCase("technoblade")
); );
size = baby ? SizePreset.FOAL : PonyConfig.getEffectiveSize(attributes.metadata.size());
race = PonyConfig.getEffectiveRace(attributes.metadata.race());
PonyPosture.of(attributes).updateState(entity, this); PonyPosture.of(attributes).updateState(entity, this);
PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(attributes, model, ModelAttributes.Mode.OTHER); PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(attributes, model, ModelAttributes.Mode.OTHER);

View file

@ -3,19 +3,6 @@
"texture": { "texture": {
"w": 64, "h": 64 "w": 64, "h": 64
}, },
"skeleton": {
"body": {
"neck": {
"head": {}
},
"left_arm": {},
"right_arm": {},
"left_leg": {},
"right_leg": {},
"left_wing": {},
"right_wing": {}
}
},
"data": { "data": {
"head": { "head": {
"pivot": [0, 1, -4], "pivot": [0, 1, -4],
@ -32,19 +19,19 @@
{"from": [ 1, -11, -3], "size": [1, 6, 1], "texture": {"u": 28, "v": 2} }, {"from": [ 1, -11, -3], "size": [1, 6, 1], "texture": {"u": 28, "v": 2} },
{"from": [-2, -11, -3], "size": [1, 6, 1], "texture": {"u": 24, "v": 2} } {"from": [-2, -11, -3], "size": [1, 6, 1], "texture": {"u": 24, "v": 2} }
] ]
} },
} "hat": {
}, "texture": { "u": 40, "v": 27 },
"hat": { "pivot": [0, 1, -4],
"texture": { "u": 40, "v": 27 }, "children": {
"pivot": [0, 1, -4], "hat_parts": {
"children": { "pivot": [0, 2, 0],
"hat_parts": { "cubes": [
"pivot": [0, 2, 0], {"from": [-3, -8, -3], "size": [6, 6, 6], "dilate": 0.2 }
"cubes": [ ]
{"from": [-3, -8, -3], "size": [6, 6, 6], "dilate": 0.2 } }
] }
} }
} }
}, },
"neck": { "neck": {
@ -63,6 +50,9 @@
{"from": [0, 0, 0], "size": [6, 7, 14] } {"from": [0, 0, 0], "size": [6, 7, 14] }
], ],
"children": { "children": {
"jacket": {
"visible": false
},
"tail": { "tail": {
"texture": {"u": 40, "v": 7 }, "texture": {"u": 40, "v": 7 },
"pivot": [3, 0, 13], "pivot": [3, 0, 13],
@ -88,7 +78,12 @@
"texture": { "u": 36, "v": 12 }, "texture": { "u": 36, "v": 12 },
"cubes": [ "cubes": [
{ "from": [0, 0, 0], "size": [ 2, 12, 2] } { "from": [0, 0, 0], "size": [ 2, 12, 2] }
] ],
"children": {
"right_sleeve": {
"visible": false
}
}
}, },
"left_arm": { "left_arm": {
"pivot": [1, 8, -5], "pivot": [1, 8, -5],
@ -96,14 +91,24 @@
"mirror": true, "mirror": true,
"cubes": [ "cubes": [
{ "from": [0, 0, 0], "size": [ 2, 12, 2] } { "from": [0, 0, 0], "size": [ 2, 12, 2] }
] ],
"children": {
"left_sleeve": {
"visible": false
}
}
}, },
"right_leg": { "right_leg": {
"pivot": [-3, 12, 3], "pivot": [-3, 12, 3],
"texture": { "u": 0, "v": 12 }, "texture": { "u": 0, "v": 12 },
"cubes": [ "cubes": [
{ "from": [0, 0, 0], "size": [ 2, 12, 2] } { "from": [0, 0, 0], "size": [ 2, 12, 2] }
] ],
"children": {
"right_pants": {
"visible": false
}
}
}, },
"left_leg": { "left_leg": {
"pivot": [1, 12, 3], "pivot": [1, 12, 3],
@ -111,7 +116,12 @@
"mirror": true, "mirror": true,
"cubes": [ "cubes": [
{ "from": [0, 0, 0], "size": [ 2, 12, 2] } { "from": [0, 0, 0], "size": [ 2, 12, 2] }
] ],
"children": {
"left_pants": {
"visible": false
}
}
}, },
"left_wing": { "left_wing": {
"pivot": [2, 3, 1], "pivot": [2, 3, 1],

View file

@ -5,48 +5,75 @@
"pivot": [ 0, 5, 0 ], "pivot": [ 0, 5, 0 ],
"cubes": [ "cubes": [
{ "from": [ -1, -7, -1 ], "size": [ 2, 7, 2 ] } { "from": [ -1, -7, -1 ], "size": [ 2, 7, 2 ] }
] ],
}, "children": {
"hat": { "hat": {
"pivot": [ 0, 5, 0 ], "pivot": [ 0, 5, 0 ],
"cubes": [ "cubes": [
{ "from": [ -1, -7, -1 ], "size": [ 2, 7, 2 ], "dilate": 0.5 } { "from": [ -1, -7, -1 ], "size": [ 2, 7, 2 ], "dilate": 0.5 }
] ]
}
}
}, },
"body": { "body": {
"texture": { "u": 0, "v": 48 }, "texture": { "u": 0, "v": 48 },
"pivot": [ 0, 0, 1 ], "pivot": [ 0, 0, 1 ],
"cubes": [ "cubes": [
{ "from": [ -4, 10, -1 ], "size": [ 8, 2, 2 ] } { "from": [ -4, 10, -1 ], "size": [ 8, 2, 2 ] }
] ],
"children": {
"jacket": {
"visible": false
}
}
}, },
"right_arm": { "right_arm": {
"texture": { "u": 8 }, "texture": { "u": 8 },
"pivot": [ -1.9, 12, 1 ], "pivot": [ -1.9, 12, 1 ],
"cubes": [ "cubes": [
{ "from": [ -1, 0, -1 ], "size": [ 2, 11, 2 ] } { "from": [ -1, 0, -1 ], "size": [ 2, 11, 2 ] }
] ],
"children": {
"right_sleeve": {
"visible": false
}
}
}, },
"left_arm": { "left_arm": {
"texture": { "u": 40, "v": 16 }, "texture": { "u": 40, "v": 16 },
"pivot": [ 1.9, 12, 1 ], "pivot": [ 1.9, 12, 1 ],
"cubes": [ "cubes": [
{ "from": [ -1, 0, -1 ], "size": [ 2, 11, 2 ] } { "from": [ -1, 0, -1 ], "size": [ 2, 11, 2 ] }
] ],
"children": {
"left_sleeve": {
"visible": false
}
}
}, },
"right_leg": { "right_leg": {
"texture": { "u": 8 }, "texture": { "u": 8 },
"pivot": [ -1.9, 12, 10 ], "pivot": [ -1.9, 12, 10 ],
"cubes": [ "cubes": [
{ "from": [ -1, 0, -1 ], "size": [2, 11, 2 ] } { "from": [ -1, 0, -1 ], "size": [2, 11, 2 ] }
] ],
"children": {
"right_pants": {
"visible": false
}
}
}, },
"left_leg": { "left_leg": {
"texture": { "u": 40, "v": 16 }, "texture": { "u": 40, "v": 16 },
"pivot": [ 1.9, 12, 10 ], "pivot": [ 1.9, 12, 10 ],
"cubes": [ "cubes": [
{ "from": [ -1, 0, -1 ], "size": [2, 11, 2 ] } { "from": [ -1, 0, -1 ], "size": [2, 11, 2 ] }
] ],
"children": {
"left_pants": {
"visible": false
}
}
}, },
"right_body_stick": { "right_body_stick": {
"texture": { "u": 16 }, "texture": { "u": 16 },

View file

@ -25,6 +25,14 @@
"locals": { "locals": {
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
},
"hat": {
"texture": { "u": 32, "v": 0 },
"visible": false,
"pivot": [0, 0, -2],
"cubes": [
{ "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": -0.5 }
]
}, },
"horn": { "data": "minelittlepony:components/horn", "implementation": "com.minelittlepony.client.model.part.UnicornHorn" }, "horn": { "data": "minelittlepony:components/horn", "implementation": "com.minelittlepony.client.model.part.UnicornHorn" },
"left_horn": { "left_horn": {
@ -66,14 +74,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 }
]
},
"right_arm": { "right_arm": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 0], "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 0],
"texture": { "u": 0, "v": 20 }, "texture": { "u": 0, "v": 20 },
@ -82,7 +82,12 @@
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"right_sleeve": {
"visible": false
}
}
}, },
"left_arm": { "left_arm": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 0], "pivot": ["#arm_rotation_x", "#arm_rotation_y", 0],
@ -92,7 +97,12 @@
"from": [ "#arm_x", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"left_sleeve": {
"visible": false
}
}
}, },
"right_leg": { "right_leg": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11], "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
@ -102,7 +112,12 @@
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"right_pants": {
"visible": false
}
}
}, },
"left_leg": { "left_leg": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 11], "pivot": ["#arm_rotation_x", "#arm_rotation_y", 11],
@ -112,7 +127,12 @@
"from": [ "#arm_x", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"left_pants": {
"visible": false
}
}
}, },
"tail": { "tail": {
"type": "mson:slot", "type": "mson:slot",

View file

@ -48,7 +48,15 @@
"texture": {"w": 128, "h": 64}, "texture": {"w": 128, "h": 64},
"implementation": "com.minelittlepony.client.model.part.UnicornHorn", "implementation": "com.minelittlepony.client.model.part.UnicornHorn",
"data": "minelittlepony:components/horn" "data": "minelittlepony:components/horn"
} },
"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 }
]
}
} }
}, },
"wings": { "wings": {

View file

@ -25,7 +25,15 @@
"locals": { "locals": {
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
} },
"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 }
]
}
} }
}, },
"wings": { "wings": {

View file

@ -48,6 +48,18 @@
"height": 1, "height": 1,
"depth": "#arm_depth" "depth": "#arm_depth"
} }
},
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
} }
} }
}, },
@ -91,6 +103,13 @@
"height": 1, "height": 1,
"depth": "#arm_depth" "depth": "#arm_depth"
} }
},
"right_sleeve": {
"visible": false,
"texture": { "u": 40, "v": 32 },
"cubes": [
{ "from": [-3, -2, -2], "size": [ 4, 12, 4], "dilate": [0.25, 0.25, 0.25] }
]
} }
} }
} }

View file

@ -35,6 +35,14 @@
"ears": { "ears": {
"implementation": "com.minelittlepony.client.model.part.PonyEars", "implementation": "com.minelittlepony.client.model.part.PonyEars",
"data": "minelittlepony:components/ears" "data": "minelittlepony:components/ears"
},
"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 }
]
} }
} }
}, },
@ -67,6 +75,18 @@
"height": "#fore_arm_length", "height": "#fore_arm_length",
"depth": "#arm_depth" "depth": "#arm_depth"
} }
},
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
} }
} }
}, },
@ -151,6 +171,13 @@
"height": "#fore_leg_length", "height": "#fore_leg_length",
"depth": "#arm_depth" "depth": "#arm_depth"
} }
},
"right_sleeve": {
"visible": false,
"texture": { "u": 40, "v": 32 },
"cubes": [
{ "from": [-3, -2, -2], "size": [ 4, 12, 4], "dilate": [0.25, 0.25, 0.25] }
]
} }
} }
} }

View file

@ -34,7 +34,15 @@
}, },
"data": "minelittlepony:components/horn", "data": "minelittlepony:components/horn",
"implementation": "com.minelittlepony.client.model.part.UnicornHorn" "implementation": "com.minelittlepony.client.model.part.UnicornHorn"
} },
"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 }
]
}
} }
}, },
"neck": { "neck": {

View file

@ -28,6 +28,14 @@
"data": "minelittlepony:components/horn", "data": "minelittlepony:components/horn",
"implementation": "com.minelittlepony.client.model.part.UnicornHorn" "implementation": "com.minelittlepony.client.model.part.UnicornHorn"
}, },
"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_antler": { "right_antler": {
"pivot": [-2, -6, -2], "pivot": [-2, -6, -2],
"rotate": [0, 0, 120], "rotate": [0, 0, 120],

View file

@ -33,17 +33,17 @@
} }
], ],
"children": { "children": {
"tail_stub": {} "tail_stub": {},
"jacket": {
"texture": { "u": 24, "v": 0 },
"visible": false,
"dilate": 0.25,
"cubes": [
{ "from": [-4, 4, -2], "size": [ 8, 8, 4 ], "texture": { "u": 16, "v": 32 }, "dilate": 0.25 }
]
}
} }
}, },
"jacket": {
"texture": { "u": 24, "v": 0 },
"visible": false,
"dilate": 0.25,
"cubes": [
{ "from": [-4, 4, -2], "size": [ 8, 8, 4 ], "texture": { "u": 16, "v": 32 }, "dilate": 0.25 }
]
},
"right_arm": { "right_arm": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"], "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"],
"rotate": [-80, 29, 0], "rotate": [-80, 29, 0],
@ -53,7 +53,22 @@
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"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 },
"cubes": [
{
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
}
}
}, },
"left_arm": { "left_arm": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
@ -64,55 +79,34 @@
"from": [ "#arm_x", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"rotate": [-80, -29, 0],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
}
}
}, },
"right_leg": { "right_leg": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false, "visible": false,
"texture": { "u": 0, "v": 16 }, "children": {
"cubes": [ "right_pants": {}
{ }
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
}, },
"left_leg": { "left_leg": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 11],
"visible": false, "visible": false,
"texture": { "u": 16, "v": 48 }, "children": {
"cubes": [ "left_pants": {}
{ }
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
},
"right_sleeve": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"],
"rotate": [-80, 29, 0],
"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
}
]
},
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"rotate": [-80, -29, 0],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
}, },
"tail": { "tail": {
"implementation": "com.minelittlepony.client.model.part.SeaponyTail", "implementation": "com.minelittlepony.client.model.part.SeaponyTail",

View file

@ -23,6 +23,14 @@
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
}, },
"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 }
]
},
"horn": { "data": "minelittlepony:components/horn", "implementation": "com.minelittlepony.client.model.part.UnicornHorn" } "horn": { "data": "minelittlepony:components/horn", "implementation": "com.minelittlepony.client.model.part.UnicornHorn" }
} }
}, },

View file

@ -25,6 +25,14 @@
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
}, },
"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 }
]
},
"bristles": { "bristles": {
"texture": {"u": 56, "v": 32}, "texture": {"u": 56, "v": 32},
"rotate": [17, 0, 0], "rotate": [17, 0, 0],

View file

@ -45,17 +45,17 @@
"locals": { "locals": {
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
} },
"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 }
]
}
} }
}, },
"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 }
]
},
"body": { "body": {
"texture": { "u": 24, "v": 0 }, "texture": { "u": 24, "v": 0 },
"cubes": [ "cubes": [
@ -173,7 +173,68 @@
"position": [ -1, 10, 10 ], "size": [ 6, 2 ] "position": [ -1, 10, 10 ], "size": [ 6, 2 ]
} }
] ]
} },
"jacket": {
"texture": { "u": 24, "v": 0 },
"visible": false,
"dilate": 0.25,
"cubes": [
{ "from": [-4, 4, -2], "size": [ 8, 8, 4 ], "texture": { "u": 16, "v": 32 }, "dilate": 0.25 }
],
"children": {
"left_side": {
"type": "mson:planar",
"__comment": [
"body sides a", "body sides b", "qt mark a", "qt mark b",
"stomach a", "stomach b",
"back"
],
"east": [
[ 4, 4, 2, 8, 4, 12, 32 ],
[ 4, 8, 2, 8, 4, 12, 48 ],
[ 4, 4, 10, 4, 4, 0, 32 ],
[ 4, 8, 10, 4, 4, 0, 48 ]
],
"down": [
[ -4, 12, 2, 8, 4, 28, 48 ],
[ -4, 12, 6, 8, 4, 44, 48 ]
],
"up": [
[ -4, 4, 2, 8, 12, 32, 36 ]
]
},
"right_side": {
"type": "mson:planar",
"__comment": [
"body sides a", "body sides b", "qt mark a", "qt mark b"
],
"west": [
[ -4, 4, 2, 8, 4, 12, 32, true, false ],
[ -4, 8, 2, 8, 4, 12, 48, true, false ],
[ -4, 4, 10, 4, 4, 0, 32, true, false ],
[ -4, 8, 10, 4, 4, 0, 48, true, false ]
]
},
"butt": {
"pivot": [8, 8, 0],
"rotate": [0, 0, 90],
"type": "mson:planar",
"south": [
[ -4, 4, 14, 8, 4, 36, 32 ],
[ -4, 8, 14, 8, 4, 36, 32, false, true ]
]
},
"butt_buttom": {
"pivot": [-2, 11.9999, 14],
"rotate": [0, 90, 0],
"type": "mson:planar",
"down": [
[ 0, 0, 2, 4, 4, 36, 32 ],
[ 0, 0, -2, 4, 4, 36, 32, false, true ]
]
}
}
}
} }
}, },
"neck": { "neck": {
@ -200,67 +261,6 @@
} }
} }
}, },
"jacket": {
"texture": { "u": 24, "v": 0 },
"visible": false,
"dilate": 0.25,
"cubes": [
{ "from": [-4, 4, -2], "size": [ 8, 8, 4 ], "texture": { "u": 16, "v": 32 }, "dilate": 0.25 }
],
"children": {
"left_side": {
"type": "mson:planar",
"__comment": [
"body sides a", "body sides b", "qt mark a", "qt mark b",
"stomach a", "stomach b",
"back"
],
"east": [
[ 4, 4, 2, 8, 4, 12, 32 ],
[ 4, 8, 2, 8, 4, 12, 48 ],
[ 4, 4, 10, 4, 4, 0, 32 ],
[ 4, 8, 10, 4, 4, 0, 48 ]
],
"down": [
[ -4, 12, 2, 8, 4, 28, 48 ],
[ -4, 12, 6, 8, 4, 44, 48 ]
],
"up": [
[ -4, 4, 2, 8, 12, 32, 36 ]
]
},
"right_side": {
"type": "mson:planar",
"__comment": [
"body sides a", "body sides b", "qt mark a", "qt mark b"
],
"west": [
[ -4, 4, 2, 8, 4, 12, 32, true, false ],
[ -4, 8, 2, 8, 4, 12, 48, true, false ],
[ -4, 4, 10, 4, 4, 0, 32, true, false ],
[ -4, 8, 10, 4, 4, 0, 48, true, false ]
]
},
"butt": {
"pivot": [8, 8, 0],
"rotate": [0, 0, 90],
"type": "mson:planar",
"south": [
[ -4, 4, 14, 8, 4, 36, 32 ],
[ -4, 8, 14, 8, 4, 36, 32, false, true ]
]
},
"butt_buttom": {
"pivot": [-2, 11.9999, 14],
"rotate": [0, 90, 0],
"type": "mson:planar",
"down": [
[ 0, 0, 2, 4, 4, 36, 32 ],
[ 0, 0, -2, 4, 4, 36, 32, false, true ]
]
}
}
},
"tail": { "tail": {
"type": "mson:slot", "type": "mson:slot",
"name": "tail", "name": "tail",
@ -275,7 +275,21 @@
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"right_sleeve": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"],
"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
}
]
}
}
}, },
"left_arm": { "left_arm": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"], "pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
@ -285,7 +299,21 @@
"from": [ "#arm_x", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
}
}
}, },
"right_leg": { "right_leg": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11], "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
@ -295,7 +323,21 @@
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
"children": {
"right_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false,
"texture": { "u": 0, "v": 32 },
"cubes": [
{
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
}
}
}, },
"left_leg": { "left_leg": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 11], "pivot": ["#arm_rotation_x", "#arm_rotation_y", 11],
@ -305,55 +347,21 @@
"from": [ "#arm_x", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ] "size": [ "#arm_width", "#arm_length", "#arm_depth" ]
} }
] ],
}, "children": {
"right_sleeve": { "left_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"], "pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false, "visible": false,
"texture": { "u": 40, "v": 32 }, "texture": { "u": 0, "v": 48 },
"cubes": [ "cubes": [
{ {
"from": [ "#arm_x_neg", 4, "#arm_z"], "from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ], "size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25 "dilate": 0.25
} }
] ]
}, }
"left_sleeve": { }
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
"texture": { "u": 48, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
},
"right_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false,
"texture": { "u": 0, "v": 32 },
"cubes": [
{
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
},
"left_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false,
"texture": { "u": 0, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ],
"dilate": 0.25
}
]
} }
} }
} }

View file

@ -10,6 +10,12 @@
{ "from": [-2, -3, -4.5], "size": [ 4, 2, 2], "texture": { "v": 12 } } { "from": [-2, -3, -4.5], "size": [ 4, 2, 2], "texture": { "v": 12 } }
], ],
"children": { "children": {
"hat": {
"texture": { "u": 24, "v": 0 },
"cubes": [
{ "from": [-3, -7, -3], "size": [ 6, 6, 6], "dilate": [0.5, 0.5, 0.5] }
]
},
"left_ear": { "left_ear": {
"texture": { "u": 18 }, "texture": { "u": 18 },
"pivot": [2.5, -4, 0], "pivot": [2.5, -4, 0],
@ -58,12 +64,6 @@
} }
} }
}, },
"hat": {
"texture": { "u": 24, "v": 0 },
"cubes": [
{ "from": [-3, -7, -3], "size": [ 6, 6, 6], "dilate": [0.5, 0.5, 0.5] }
]
},
"body": { "body": {
"cubes": [ "cubes": [
{ "from": [-2, -1, -2], "size": [ 4, 2, 3], "texture": { "v": 21 } }, { "from": [-2, -1, -2], "size": [ 4, 2, 3], "texture": { "v": 21 } },
@ -71,6 +71,9 @@
{ "from": [-4, 5, -3], "size": [ 8, 8, 8], "texture": { "v": 35 } } { "from": [-4, 5, -3], "size": [ 8, 8, 8], "texture": { "v": 35 } }
], ],
"children": { "children": {
"jacket": {
"visible": false
},
"spines": { "spines": {
"texture": { "u": 8, "v": 12 }, "texture": { "u": 8, "v": 12 },
"pivot": [-1, 0, 0], "pivot": [-1, 0, 0],
@ -135,7 +138,12 @@
"cubes": [ "cubes": [
{ "from": [-1, -2, -2], "size": [ 3, 3, 3], "texture": { "v": 12 }, "dilate": -0.25 }, { "from": [-1, -2, -2], "size": [ 3, 3, 3], "texture": { "v": 12 }, "dilate": -0.25 },
{ "from": [-0.5, 0.75, -1.5], "size": [ 2, 6, 2], "texture": { "v": 18 } } { "from": [-0.5, 0.75, -1.5], "size": [ 2, 6, 2], "texture": { "v": 18 } }
] ],
"children": {
"right_sleeve": {
"visible": false
}
}
}, },
"left_arm": { "left_arm": {
"pivot": [5, 3, 0], "pivot": [5, 3, 0],
@ -144,7 +152,12 @@
"cubes": [ "cubes": [
{ "from": [-2, -2, -2], "size": [ 3, 3, 3], "texture": { "v": 12 }, "dilate": -0.25 }, { "from": [-2, -2, -2], "size": [ 3, 3, 3], "texture": { "v": 12 }, "dilate": -0.25 },
{ "from": [-1.5, 0.75, -1.5], "size": [ 2, 6, 2], "texture": { "v": 18 } } { "from": [-1.5, 0.75, -1.5], "size": [ 2, 6, 2], "texture": { "v": 18 } }
] ],
"children": {
"left_sleeve": {
"visible": false
}
}
}, },
"right_leg": { "right_leg": {
"pivot": [-1.9, 3, 0], "pivot": [-1.9, 3, 0],
@ -152,7 +165,12 @@
"cubes": [ "cubes": [
{ "from": [-2, 0, -2], "size": [ 3, 4, 3], "texture": { "v": 28 } }, { "from": [-2, 0, -2], "size": [ 3, 4, 3], "texture": { "v": 28 } },
{ "from": [-2, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } } { "from": [-2, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } }
] ],
"children": {
"right_pants": {
"visible": false
}
}
}, },
"left_leg": { "left_leg": {
"pivot": [1.9, 3, 0], "pivot": [1.9, 3, 0],
@ -161,7 +179,12 @@
"cubes": [ "cubes": [
{ "from": [-1, 0, -2], "size": [ 3, 4, 3 ], "texture": { "v": 28 } }, { "from": [-1, 0, -2], "size": [ 3, 4, 3 ], "texture": { "v": 28 } },
{ "from": [-1, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } } { "from": [-1, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } }
] ],
"children": {
"left_pants": {
"visible": false
}
}
} }
} }
} }

View file

@ -8,7 +8,7 @@
{"from": [-4, -4, -4], "size": [8, 5, 8] } {"from": [-4, -4, -4], "size": [8, 5, 8] }
], ],
"children": { "children": {
"lips": { "lips": {
"pivot": [0, 0, 4], "pivot": [0, 0, 4],
"rotate": [0, 0, 0], "rotate": [0, 0, 0],
"cubes": [ "cubes": [

View file

@ -23,6 +23,14 @@
"ear_shortening": "#global_ear_shortening" "ear_shortening": "#global_ear_shortening"
} }
}, },
"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 }
]
},
"bat_ears": { "bat_ears": {
"type": "mson:slot", "type": "mson:slot",
"name": "bat_ears", "name": "bat_ears",