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.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerPosition;
import net.minecraft.util.hit.HitResult;
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.
* This is to prevent issues caused by the server updating our pitch whenever the player leaves a portal.
*/
public static float transformIncomingServerCameraAngle(float serverPitch) {
if (MathHelper.approximatelyEquals(serverPitch, lastComputedPitch)) {
return lastOriginalPitch;
public static PlayerPosition transformIncomingServerCameraAngle(PlayerPosition change) {
if (MathHelper.approximatelyEquals(change.pitch(), lastComputedPitch)) {
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.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.minelittlepony.api.pony.Pony;
@ -13,7 +12,7 @@ import net.minecraft.client.render.Camera;
@Mixin(Camera.class)
abstract class MixinCamera {
@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) {
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.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.UUID;
@Mixin(DefaultSkinHelper.class)
abstract class MixinDefaultSkinHelper {
@ -23,7 +20,7 @@ abstract class MixinDefaultSkinHelper {
}
@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;
}
}

View file

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

View file

@ -70,6 +70,7 @@ public class SkeleponyRenderer<T extends AbstractSkeletonEntity> extends PonyRen
public boolean isAttacking;
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();
if (entity.getUuid().getLeastSignificantBits() % 3 == 0) {
race = Race.EARTH;

View file

@ -35,7 +35,10 @@ public class CapeFeature extends CapeFeatureRenderer {
ArmourRendererPlugin plugin = ArmourRendererPlugin.INSTANCE.get();
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) {
return;
}

View file

@ -39,6 +39,8 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode
this.pony = pony;
attributes.updateLivingState(entity, pony, mode);
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;
riderOffset = getRiderYOffset();
nameplateYOffset = getNamePlateYOffset(entity);
@ -57,8 +59,6 @@ public class PonyRenderState extends PlayerEntityRenderState implements PonyMode
|| entity instanceof ZombifiedPiglinEntity
) && 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);
PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(attributes, model, ModelAttributes.Mode.OTHER);

View file

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

View file

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

View file

@ -25,6 +25,14 @@
"locals": {
"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" },
"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": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 0],
"texture": { "u": 0, "v": 20 },
@ -82,7 +82,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],
@ -92,7 +97,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", "#arm_rotation_y", 11],
@ -102,7 +112,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", "#arm_rotation_y", 11],
@ -112,7 +127,12 @@
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
],
"children": {
"left_pants": {
"visible": false
}
}
},
"tail": {
"type": "mson:slot",

View file

@ -48,6 +48,14 @@
"texture": {"w": 128, "h": 64},
"implementation": "com.minelittlepony.client.model.part.UnicornHorn",
"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 }
]
}
}
},

View file

@ -25,6 +25,14 @@
"locals": {
"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 }
]
}
}
},

View file

@ -48,6 +48,18 @@
"height": 1,
"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,
"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": {
"implementation": "com.minelittlepony.client.model.part.PonyEars",
"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",
"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",
"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,6 +34,14 @@
},
"data": "minelittlepony:components/horn",
"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 }
]
}
}
},

View file

@ -27,6 +27,14 @@
"horn": {
"data": "minelittlepony:components/horn",
"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": {
"pivot": [-2, -6, -2],

View file

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

View file

@ -22,6 +22,14 @@
"locals": {
"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" }
}

View file

@ -24,6 +24,14 @@
"locals": {
"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": {
"texture": {"u": 56, "v": 32},

View file

@ -44,8 +44,6 @@
"data": "minelittlepony:components/ears",
"locals": {
"ear_shortening": "#global_ear_shortening"
}
}
}
},
"hat": {
@ -55,6 +53,8 @@
"cubes": [
{ "from": [-4, -6, -6], "size": [ 8, 8, 8], "dilate": 0.5 }
]
}
}
},
"body": {
"texture": { "u": 24, "v": 0 },
@ -173,32 +173,6 @@
"position": [ -1, 10, 10 ], "size": [ 6, 2 ]
}
]
}
}
},
"neck": {
"type": "mson:planar",
"dilate": [ -0.3, "#neck_dilate_y", "#neck_dilate_z" ],
"texture": { "u": 0, "v": 16 },
"rotate": [9, 0, 0],
"north": [-2, 1.199998, -2.8, 4, 4],
"south": [-2, 1.199998, 1.2, 4, 4],
"east": [ 2, 1.199998, -2.8, 4, 4],
"west": [-2, 1.199998, -2.8, 4, 4],
"children": {
"mane": {
"type": "mson:planar",
"visible": false,
"pivot": [0, -2.9, 1.5],
"dilate": [ -0.8, 2, 0 ],
"texture": { "u": 32, "v": 0 },
"rotate": [0, 0, 0],
"north": [-2, 1.199998, -2.8, 4, 4],
"south": [-2, 1.199998, 1.2, 4, 4],
"east": [ 2, 1.199998, -2.8, 4, 4],
"west": [-2, 1.199998, -2.8, 4, 4]
}
}
},
"jacket": {
"texture": { "u": 24, "v": 0 },
@ -260,6 +234,32 @@
]
}
}
}
}
},
"neck": {
"type": "mson:planar",
"dilate": [ -0.3, "#neck_dilate_y", "#neck_dilate_z" ],
"texture": { "u": 0, "v": 16 },
"rotate": [9, 0, 0],
"north": [-2, 1.199998, -2.8, 4, 4],
"south": [-2, 1.199998, 1.2, 4, 4],
"east": [ 2, 1.199998, -2.8, 4, 4],
"west": [-2, 1.199998, -2.8, 4, 4],
"children": {
"mane": {
"type": "mson:planar",
"visible": false,
"pivot": [0, -2.9, 1.5],
"dilate": [ -0.8, 2, 0 ],
"texture": { "u": 32, "v": 0 },
"rotate": [0, 0, 0],
"north": [-2, 1.199998, -2.8, 4, 4],
"south": [-2, 1.199998, 1.2, 4, 4],
"east": [ 2, 1.199998, -2.8, 4, 4],
"west": [-2, 1.199998, -2.8, 4, 4]
}
}
},
"tail": {
"type": "mson:slot",
@ -275,38 +275,8 @@
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
},
"left_arm": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"texture": { "u": 32, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
},
"right_leg": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"texture": { "u": 0, "v": 16 },
"cubes": [
{
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
},
"left_leg": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 11],
"texture": { "u": 16, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
]
},
],
"children": {
"right_sleeve": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
@ -318,7 +288,19 @@
"dilate": 0.25
}
]
}
}
},
"left_arm": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"texture": { "u": 32, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
],
"children": {
"left_sleeve": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", "#arm_rotation_z"],
"visible": false,
@ -330,7 +312,19 @@
"dilate": 0.25
}
]
}
}
},
"right_leg": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"texture": { "u": 0, "v": 16 },
"cubes": [
{
"from": [ "#arm_x_neg", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
],
"children": {
"right_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false,
@ -342,7 +336,19 @@
"dilate": 0.25
}
]
}
}
},
"left_leg": {
"pivot": ["#arm_rotation_x", "#arm_rotation_y", 11],
"texture": { "u": 16, "v": 48 },
"cubes": [
{
"from": [ "#arm_x", 4, "#arm_z"],
"size": [ "#arm_width", "#arm_length", "#arm_depth" ]
}
],
"children": {
"left_pants": {
"pivot": ["#arm_rotation_x_neg", "#arm_rotation_y", 11],
"visible": false,
@ -355,5 +361,7 @@
}
]
}
}
}
}
}

View file

@ -10,6 +10,12 @@
{ "from": [-2, -3, -4.5], "size": [ 4, 2, 2], "texture": { "v": 12 } }
],
"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": {
"texture": { "u": 18 },
"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": {
"cubes": [
{ "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 } }
],
"children": {
"jacket": {
"visible": false
},
"spines": {
"texture": { "u": 8, "v": 12 },
"pivot": [-1, 0, 0],
@ -135,7 +138,12 @@
"cubes": [
{ "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 } }
]
],
"children": {
"right_sleeve": {
"visible": false
}
}
},
"left_arm": {
"pivot": [5, 3, 0],
@ -144,7 +152,12 @@
"cubes": [
{ "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 } }
]
],
"children": {
"left_sleeve": {
"visible": false
}
}
},
"right_leg": {
"pivot": [-1.9, 3, 0],
@ -152,7 +165,12 @@
"cubes": [
{ "from": [-2, 0, -2], "size": [ 3, 4, 3], "texture": { "v": 28 } },
{ "from": [-2, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } }
]
],
"children": {
"right_pants": {
"visible": false
}
}
},
"left_leg": {
"pivot": [1.9, 3, 0],
@ -161,7 +179,12 @@
"cubes": [
{ "from": [-1, 0, -2], "size": [ 3, 4, 3 ], "texture": { "v": 28 } },
{ "from": [-1, 4, -3], "size": [ 3, 1, 4], "texture": { "v": 35 } }
]
],
"children": {
"left_pants": {
"visible": false
}
}
}
}
}

View file

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