From 7d4c7ede88f1d03eda3db4797ac02fe1bfdca49e Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 29 Apr 2018 18:00:26 +0200 Subject: [PATCH] Fixed various leg alignment issues (may break resourcepacks) May Break Resourcepacks: To fix, just rescale skeleton legs to 2x2 pixels width keeping the original positions. --- .../model/AbstractPonyModel.java | 38 +++++++-------- .../model/armour/ModelPonyArmor.java | 18 ++++--- .../model/player/ModelEarthPony.java | 20 ++------ .../model/ponies/ModelSkeletonPony.java | 44 ++++-------------- .../entity/skeleton/skeleton_pony.png | Bin 952 -> 1656 bytes .../entity/skeleton/skeleton_wither_pony.png | Bin 993 -> 1689 bytes .../textures/entity/skeleton/stray_pony.png | Bin 1727 -> 1753 bytes 7 files changed, 44 insertions(+), 76 deletions(-) diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 37a75d72..b56de29a 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -126,7 +126,9 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { animateWears(); - snout.setGender(metadata.getGender()); + if (snout != null) { + snout.setGender(metadata.getGender()); + } } protected void adjustBodyRiding() { @@ -243,17 +245,15 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { float spread = getLegSpread(); bipedRightArm.rotationPointZ = spread + sin; - bipedLeftArm.rotationPointZ = spread - sin; - float legOutset = getLegOutset(); - float rpxl = cos + 1 - legOutset; - float rpxr = legOutset - cos - 1; + float legRPX = cos - getLegOutset(); - bipedRightArm.rotationPointX = rpxr; - bipedRightLeg.rotationPointX = rpxr; - bipedLeftArm.rotationPointX = rpxl; - bipedLeftLeg.rotationPointX = rpxl; + bipedRightArm.rotationPointX = -legRPX; + bipedRightLeg.rotationPointX = -legRPX; + + bipedLeftArm.rotationPointX = legRPX; + bipedLeftLeg.rotationPointX = legRPX; bipedRightArm.rotateAngleY += bipedBody.rotateAngleY; bipedLeftArm.rotateAngleY += bipedBody.rotateAngleY; @@ -536,15 +536,15 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { float rarmX = getLegRotationX(); float rarmY = getArmRotationY(); - float armX = THIRDP_ARM_CENTRE_X - 2; + float armX = THIRDP_ARM_CENTRE_X; float armY = THIRDP_ARM_CENTRE_Y - 6; - float armZ = THIRDP_ARM_CENTRE_Z - 2; + float armZ = BODY_CENTRE_Z / 2 - 1 - armDepth; bipedLeftArm .addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch); - bipedRightArm.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch); + bipedRightArm.addBox(armX - armWidth, armY, armZ, armWidth, 12, armDepth, stretch); bipedLeftLeg .addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch); - bipedRightLeg.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch); + bipedRightLeg.addBox(armX - armWidth, armY, armZ, armWidth, 12, armDepth, stretch); bipedLeftArm .setRotationPoint( rarmX, yOffset + rarmY, 0); bipedRightArm.setRotationPoint(-rarmX, yOffset + rarmY, 0); @@ -554,22 +554,22 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { if (bipedLeftArmwear != null) { bipedLeftArmwear.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); - bipedLeftArmwear.setRotationPoint(3, yOffset + rarmY, 0); + bipedLeftArmwear.setRotationPoint(rarmX, yOffset + rarmY, 0); } if (bipedRightArmwear != null) { - bipedRightArmwear.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); - bipedRightArmwear.setRotationPoint(-3, yOffset + rarmY, 0); + bipedRightArmwear.addBox(armX - armWidth, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); + bipedRightArmwear.setRotationPoint(-rarmX, yOffset + rarmY, 0); } if (bipedLeftLegwear != null) { bipedLeftLegwear.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); - bipedRightLegwear.setRotationPoint(3, yOffset, 0); + bipedRightLegwear.setRotationPoint(rarmX, yOffset, 0); } if (bipedRightLegwear != null) { - bipedRightLegwear.addBox(armX, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); - bipedRightLegwear.setRotationPoint(-3, yOffset, 0); + bipedRightLegwear.addBox(armX - armWidth, armY, armZ, armWidth, 12, armDepth, stretch + 0.25f); + bipedRightLegwear.setRotationPoint(-rarmX, yOffset, 0); } } diff --git a/src/main/java/com/minelittlepony/model/armour/ModelPonyArmor.java b/src/main/java/com/minelittlepony/model/armour/ModelPonyArmor.java index 7804a868..00f7e753 100644 --- a/src/main/java/com/minelittlepony/model/armour/ModelPonyArmor.java +++ b/src/main/java/com/minelittlepony/model/armour/ModelPonyArmor.java @@ -175,12 +175,18 @@ public class ModelPonyArmor extends ModelMobPony { protected void initLegPositions(float yOffset, float stretch) { super.initLegPositions(yOffset, stretch); - leftLegging.offset(THIRDP_ARM_CENTRE_X, THIRDP_ARM_CENTRE_Y, THIRDP_ARM_CENTRE_Z) - .around(3, yOffset, 0) - .box(-2, -6, -2, 4, 12, 4, stretch); - rightLegging.offset(THIRDP_ARM_CENTRE_X, THIRDP_ARM_CENTRE_Y, THIRDP_ARM_CENTRE_Z) - .around(-3, yOffset, 0) - .flipX().box(-2, -6, -2, 4, 12, 4, stretch); + float rarmX = getLegRotationX(); + + float armX = THIRDP_ARM_CENTRE_X; + float armY = THIRDP_ARM_CENTRE_Y; + float armZ = THIRDP_ARM_CENTRE_Z; + + leftLegging.offset(armX + 2, armY, armZ) + .around(rarmX, yOffset, 0) + .box(-2, -6, -2, 4, 12, 4, stretch); + rightLegging.offset(armX - 2, armY, armZ) + .around(-rarmX, yOffset, 0) + .flipX().box(-2, -6, -2, 4, 12, 4, stretch); } protected void syncLegs() { diff --git a/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java b/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java index 92804b3b..f66d83c9 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java +++ b/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java @@ -20,7 +20,9 @@ public class ModelEarthPony extends AbstractPonyModel { public void setRotationAngles(float move, float swing, float age, float headYaw, float headPitch, float scale, Entity entity) { super.setRotationAngles(move, swing, age, headYaw, headPitch, scale, entity); - bipedCape.rotationPointY = isSneak ? 2 : isRiding ? -4 : 0; + if (bipedCape != null) { + bipedCape.rotationPointY = isSneak ? 2 : isRiding ? -4 : 0; + } } protected float getLegOutset() { @@ -40,15 +42,6 @@ public class ModelEarthPony extends AbstractPonyModel { return smallArms ? 8.5f : super.getArmRotationY(); } - protected void adjustLegs(float move, float swing, float tick) { - super.adjustLegs(move, swing, tick); - // Push the front legs back apart if we're a thin pony - if (smallArms) { - bipedLeftArm.rotationPointX++; - bipedLeftLeg.rotationPointX++; - } - } - protected void initHeadTextures() { super.initHeadTextures(); bipedCape = new PonyRenderer(this, 0, 0).size(64, 32); @@ -59,13 +52,6 @@ public class ModelEarthPony extends AbstractPonyModel { bipedCape.addBox(-5.0F, 0.0F, -1.0F, 10, 16, 1, stretch); } - protected void initLegPositions(float yOffset, float stretch) { - super.initLegPositions(yOffset, stretch); - if (smallArms) { - - } - } - @Override public void renderCape(float scale) { bipedCape.render(scale); diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelSkeletonPony.java b/src/main/java/com/minelittlepony/model/ponies/ModelSkeletonPony.java index db2ed133..586ccfa6 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelSkeletonPony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelSkeletonPony.java @@ -1,12 +1,9 @@ package com.minelittlepony.model.ponies; -import static net.minecraft.client.renderer.GlStateManager.*; - import com.minelittlepony.model.ModelMobPony; import com.minelittlepony.model.armour.ModelSkeletonPonyArmor; import com.minelittlepony.model.armour.PonyArmor; -import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.AbstractSkeleton; import net.minecraft.init.Items; @@ -51,40 +48,19 @@ public class ModelSkeletonPony extends ModelMobPony { } } - // TODO: HACK It would be better to just change the size of the legs. - private void renderScaledArm(ModelRenderer arm, float x, float y, float z) { - scale(x, y, z); - x /= 1.5f; - z /= 1.5f; - arm.rotateAngleX /= x; - arm.rotateAngleY /= y; - arm.rotateAngleZ /= z; - arm.render(scale); - arm.rotateAngleX *= x; - arm.rotateAngleY *= y; - arm.rotateAngleZ *= z; + protected int getArmWidth() { + return 2; } - @Override - protected void renderLegs() { - pushMatrix(); - translate(0.05F, -0.21F, 0); - renderScaledArm(bipedLeftArm, 0.5F, 1.15F, 0.5F); - popMatrix(); + protected int getArmDepth() { + return 2; + } - pushMatrix(); - translate(-0.05F, -0.21F, 0); - renderScaledArm(bipedRightArm, 0.5F, 1.2F, 0.5F); - popMatrix(); + protected float getLegRotationX() { + return 3; + } - pushMatrix(); - translate(0.05F, -0.21F, 0.35F); - renderScaledArm(bipedLeftLeg, 0.5F, 1.2F, 0.5F); - popMatrix(); - - pushMatrix(); - translate(-0.05F, -0.21F, 0.35F); - renderScaledArm(bipedRightLeg, 0.5F, 1.15F, 0.5F); - popMatrix(); + protected float getArmRotationY() { + return 8; } } diff --git a/src/main/resources/assets/minelittlepony/textures/entity/skeleton/skeleton_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/skeleton/skeleton_pony.png index 843cb75883f14d3d6bf0c43c7b84af433fe90884..c9ea7d7bcb535ed8acea29a584b2e2c6bfd339e2 100644 GIT binary patch delta 1640 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 FV1g{>z%u{< diff --git a/src/main/resources/assets/minelittlepony/textures/entity/skeleton/skeleton_wither_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/skeleton/skeleton_wither_pony.png index 88f51bfab3c24362e15b475131ef301152fba2be..46efb341ac1401934d71fc74e843fc1bb8740fa9 100644 GIT binary patch delta 1674 zcmV;526g%22bm3!BYy^9Nklc}UD8;hqhaS|!+#aG8mNFl^HNslI7kh4|geg5!i~njnNY6gxjVLoSy?a%IKQHWrIr=^;#x z5aN10m(Tki7m2t4I4nFG4gmn)?(9GmMG649Tn+%xZnvSRs_Tt(U8ntiAM1qR#57@= z=9NdzG)>>*LVrB~05X{jWv+U7cqlXs193&cgKT!{?%iGw!-;X$QmLs?cszXg5ChA? zy2nW0wb2IvajRIQvMgg@Styswls)|2+qbAys{)(%0KnQYm*%}eQB{YLcyxO`PX!u= z;d@-T0S1-@07$3P)06qlO~(jydp)?d<1w%-3@i(>EPuORV=m1T;Oup;<3bIPPNyMB z658!Hj*gB10OP^nl7epSX4#s3W;@9|#jW#8C&6~ReTmh7fAz|tDC;=i&d;s=!k$~_ zP1E!|E*b&=6bc1u+xE1xgb)lzBS&OV6a^$$&)9v-|s^dMF@fbF&4vU zIK*f)f~u;JWf>noenhEMLL!lXZQB?O2H4x%!+%btg5y>TmSsVbBuKIh`{Dwl(Fmd_ zB9Ta7d~q?28Z3_(SQduEA=XkU-|2BH9>6-kmP&zAip1*bSIdYZ;(~xb-n>C3lbLpS zl@Ppt{Ti7}2DNGxzwYjWQi}d?h+e0IPPdD0r-RX8fPTLZYZ5kDh*VS+imD==PG5^h z7Jp^{0I+QvrxQ0nZndDQDhMG^C&p;CS}2uD`1jK%06?i!!rtB<0N|+EM5oh%X_`|{ z;Ng}>c!koXOaTD+;ptNv69g!$t5{oKha^cz$}()*Ml2SCQLp3OpMT<;$B(g+O5yKX z4drqf=}ZP=+lC;DI6pl_EFQ2_ckUNy@TJx3{-1t?*A*Lb0xvqT0oeE2|9sBAiZ4c0e*`SuTK#8&W9bXMJ|>EUDqkg&fJb(9>BtyqN` zjs51^?NlmsBcFFH#)9-4Se6h_Q-Aa~04stLLg04vG61XZnWjlS&N~XL{CT$$oEIKs zv+&c85aMfqAX1#$1Gs`G?e==S!KQ{_zrC&{S5_R!5Mz3tFvIHid4E4R3d~cH@hXn8 z&T-+&(-5;^^GmaN>6~rbzWRCTajh`Olhswpi*-a+6vv{*tK)9fURhBbd4IvrFJ90i z!?@%De)@$inuzlXvKk=Y@z4AF0vlz%6SZnpV21Hq{{Hj+{nQJttB2PoFbaev!G>W_ zMO81cIZuLabDJ%Y`24`FU66jENziTU>MDs49|h(uYHSsY4p}z$`DqcPUswag=Pf<6 zxfiCQ!}0-kj|bT-OQ$irjDHT&8k%UOTu!&wo%o5%|hoSou4X2i#YLHh|yXU9Li6Vdd`x z3Hn_RdX0^}W;d^VSP~4)0YSU7L8EvTj=0kXxN45SEcx3ofDpz*Za_YY0%7nU{k4+n UIl&Pl00000NkvXXt^-0~f|+qCn*aa+ delta 972 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 delta 1712 zcmV;h22c6f4ZjVLBYyw}VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_ z000McNliru;0Ff=2nNtl1_S^A224prK~#9!?ORQ36Gs&OHvZYQll6M3iH!(SZ)s1c zaHLe+Dp9GN5~%`lKuI|{RS&J2q)pYdC6y3DAvc0h65K>!JaB5Fg zRY49Wb>e?^$KLhy;LI}qSv$`9Cy4znlefFGp7-Yc&3hZ+r+fG42PaPo*v93R6>1m; zJ~?-;>RKw3fvP9~fK(;}0GN-*t!L~ox3olSukrIPudL8!^FKa&w&ia)!NBE<7wayT z3=>y=_>uC=kAK8s7z_kjGS>(ru^0eA5~YUsnLzEvZo>Qf{rhzi4oG6v?l15%Os}tQ;Km|=}ICdKY0I;xpjb6CAOnH?fMS@f&W9>pg(<}y5MZric zW|;)Tp#ujHkOHnoa-!5jAZ4vaNI)l-9ciHdiNlL&wPkWH)xz z2P8H&FcKYx$K%0f`i0u@yR7L15jBiVE{9|)4Z}1Li$u`M=4)-=E^25xK|m54j$Ic( zYEeM9-r5PWGek)lE>TD?lcRREW)fO5)H?0LtsvjsjkoK!G2Y(G6zyD zK@$DgOlP3!8YEG|P%sFyY$7OC9GmF#;lET0CBv+|SP(EhIUzXBBf2hth2?9MX#fBW z1%n_(0?{u*4arDlb1xiLNJcCYLCG-j_md};P=6I2Mk<@L=H#D0w**jeoPKMUnO*Z9 zzTZL^;BDRK^}sBfFw8R2xhxXNBmm&<+8U0$`34S;jzW=TMAR_uuB~AtI*ddziF7Ut z!z{xroA7x(b$*1;Bla2w3YrE<^g|8F5d9)_QUs+GVL1dvmT`A&4YyZsVt(N}JlovF zKY#1%`24GR++Mwj8!I=U$TGrm2$WLjq-bf5B>Jm%dnb8BKj5u+=^}Je+>ZYx1Vj;` z!64+pK>)z1v2n~ze})H-9s>Zr`Em}Y#>N2vuPF+0g#t*CKqCYNt#O>^^N41lwC6s6 zIYCMELnlRq4GaZ?n4X*v&X11^*?b-vAqa>f z1_J>k(-j*&JUWV0HU~ivkj>|DetcY*o}3VdfG@w(l)6KW)3E1seGQ#pC&3tGM``8+yIt6D6a{#&*sl??og4Tn50=fgUThc! zyk4(0b_$(ZUzHQ=23ShW#y#r;T7T8#T7l2&dHb)m_1b%k=AXN|x=IV0R%I?u*VoGQ zECDb^Y7Z=}XdW5v+@OSHi@CX_C0cuLr)YOQ?H;%+0kFKC9dma|1HgJB0aa1(@6&aQ zxlA@^`}gaIMyvx8pAR(CfZeXIRleb6l429ur5kC15|W{WWJ@D>=9`7h^?yX7?pmkU zS0{kl14+AdZDFJtn2*PWkG{P? z8T0(JwKczpx(^4VQP|ZDcYm|K9VbG3A)_5SS18nZT7LH%(T&1prC_pUyU^XPucZK3 zO^*~y+c~wbEt>Bk?j~(!no=pnS39nY*RNBj>uV{1+6UXEor16YYI?QJihdE@UZ1xY z&4*^-6F z%wFB@3DoxSTh$Pq&Tkh3uet_wyd;*+Wvh0KeH&ny<(|xUHK5l%z-j;9DV%