From 06d54a634cafe52583eb3cd6d9f40dcfcf6295cc Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 1 Dec 2020 10:43:38 +0300 Subject: [PATCH] WIP: custom armor model --- .../item/model/CrystaliteArmorProvider.java | 14 +++++++ .../item/model/CrystaliteBootsModel.java | 4 +- .../item/model/CrystaliteChestplateModel.java | 37 +++++++++++++----- .../item/model/CrystaliteHelmetModel.java | 2 +- .../item/model/CrystaliteLeggingsModel.java | 21 +++++++--- .../model/armor/crystalite_layer_1.png | Bin 1743 -> 2064 bytes .../model/armor/crystalite_layer_2.png | Bin 489 -> 641 bytes 7 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index 5ff51bab..b687d78a 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -47,6 +47,20 @@ public class CrystaliteArmorProvider implements ModelProvider, TextureProvider { case HEAD: { return HELMET_MODEL; } + case CHEST: { + + if (entity instanceof AbstractClientPlayerEntity && + ((AbstractClientPlayerEntity) entity).getModel().equals("slim")) { + return CHEST_MODEL_SLIM; + } + return CHEST_MODEL; + } + case LEGS: { + return LEGGINGS_MODEL; + } + case FEET: { + return BOOTS_MODEL; + } default: { return defaultModel; } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java index a8efad9f..89b62764 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java @@ -15,8 +15,8 @@ public class CrystaliteBootsModel extends BipedEntityModel { public ModelPart rightBoot; public CrystaliteBootsModel(float scale) { - super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 32); - this.leftBoot = new ModelPart(this, 0, 16); + super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 48); + this.leftBoot = new ModelPart(this, 0, 32); this.leftBoot.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); this.leftBoot.setPivot(1.9F, 12.0F, 0.0F); this.rightBoot = new ModelPart(this, 0, 16); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index f94600e4..0c801afb 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -7,31 +7,37 @@ import com.google.common.collect.Lists; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; +import net.minecraft.util.Arm; public class CrystaliteChestplateModel extends BipedEntityModel { public ModelPart leftShoulder; public ModelPart rightShoulder; + private boolean thinArms; public CrystaliteChestplateModel(float scale, boolean thinArms) { - super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 32); + super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 48); + this.thinArms = thinArms; this.torso = new ModelPart(this, 16, 16); - this.torso.addCuboid(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); + this.torso.addCuboid(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F); this.torso.setPivot(0.0F, 0.0F, 0.0F); if (thinArms) { - this.leftShoulder = new ModelPart(this, 40, 16); - this.leftShoulder.addCuboid(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.25F); + this.leftShoulder = new ModelPart(this, 41, 32); + this.leftShoulder.addCuboid(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.3F); this.leftShoulder.setPivot(5.0F, 2.5F, 0.0F); - this.rightShoulder = new ModelPart(this, 40, 16); - this.rightShoulder.addCuboid(-2.0F, -2.0F, -12.0F, 3.0F, 12.0F, 4.0F, scale + 0.25F); + this.leftShoulder.mirror = true; + this.rightShoulder = new ModelPart(this, 41, 16); + this.rightShoulder.addCuboid(-2.0F, -2.5F, -12.0F, 3.0F, 12.0F, 4.0F, scale + 0.3F); this.rightShoulder.setPivot(-5.0F, 2.5F, 10.0F); } else { - this.leftShoulder = new ModelPart(this, 40, 16); - this.leftShoulder.addCuboid(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); + this.leftShoulder = new ModelPart(this, 40, 32); + this.leftShoulder.addCuboid(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.4F); this.leftShoulder.setPivot(5.0F, 2.0F, 0.0F); + this.leftShoulder.mirror = true; this.rightShoulder = new ModelPart(this, 40, 16); - this.rightShoulder.addCuboid(-3.0F, -2.0F, -12.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); + this.rightShoulder.addCuboid(-3.0F, -2.5F, -12.1F, 4.0F, 12.0F, 4.0F, scale + 0.4F); this.rightShoulder.setPivot(-5.0F, 2.0F, 10.0F); } } @@ -52,4 +58,17 @@ public class CrystaliteChestplateModel extends BipedEntityModel { this.leftShoulder.copyPositionAndRotation(leftArm); this.rightShoulder.copyPositionAndRotation(rightArm); } + + @Override + public void setArmAngle(Arm arm, MatrixStack matrices) { + ModelPart modelPart = this.getArm(arm); + if (this.thinArms) { + float f = 0.5F * (float)(arm == Arm.RIGHT ? 1 : -1); + modelPart.pivotX += f; + modelPart.rotate(matrices); + modelPart.pivotX -= f; + } else { + modelPart.rotate(matrices); + } + } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java index 0dab4cf0..b4a9acfe 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java @@ -16,7 +16,7 @@ import net.minecraft.entity.LivingEntity; public class CrystaliteHelmetModel extends BipedEntityModel { public CrystaliteHelmetModel(float scale) { - super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 32); + super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 48); this.helmet = new ModelPart(this, 0, 0); this.helmet.addCuboid(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, scale + 0.5F); this.helmet.setPivot(0.0F, 0.0F, 0.0F); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java index cd771aec..7b19e079 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java @@ -11,14 +11,19 @@ import net.minecraft.entity.LivingEntity; public class CrystaliteLeggingsModel extends BipedEntityModel { + public ModelPart jacket; + public CrystaliteLeggingsModel(float scale) { - super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 32); + super(RenderLayer::getEntityTranslucent, scale, 0.0F, 64, 48); + this.jacket = new ModelPart(this, 16, 16); + this.jacket.addCuboid(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); + this.jacket.setPivot(0.0F, 0.0F, 0.0F); + this.leftLeg = new ModelPart(this, 0, 32); + this.leftLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); + this.leftLeg.setPivot(1.9F, 12.0F, 0.0F); this.rightLeg = new ModelPart(this, 0, 16); this.rightLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); this.rightLeg.setPivot(-1.9F, 12.0F, 0.0F); - this.leftLeg = new ModelPart(this, 0, 16); - this.leftLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); - this.leftLeg.setPivot(1.9F, 12.0F, 0.0F); } @Override @@ -28,6 +33,12 @@ public class CrystaliteLeggingsModel extends BipedEntityModel { @Override protected Iterable getBodyParts() { - return Lists.newArrayList(rightLeg, leftLeg); + return Lists.newArrayList(jacket, rightLeg, leftLeg); + } + + @Override + public void setAngles(LivingEntity livingEntity, float f, float g, float h, float i, float j) { + super.setAngles(livingEntity, f, g, h, i, j); + this.jacket.copyPositionAndRotation(torso); } } diff --git a/src/main/resources/assets/betterend/textures/model/armor/crystalite_layer_1.png b/src/main/resources/assets/betterend/textures/model/armor/crystalite_layer_1.png index d5f6b20d4a9a6e9115694e193e684fa5eb593e72..5718461c73da4d78598244f1ef6c0a5c4fa5dc60 100644 GIT binary patch literal 2064 zcmV+r2=DiaP)6B<~$LNfjk?FKEHfhyqCyniwq>fYDPFp{iGX2od z$xLEwr=3p22h-?`(VCa0qP3bd6N0>GU_zlnkhg-ojDT(wim>diu%~nG-OIk*Wfu~` zh5yXX-gExXIeVVxoco;Tc~&77_U;x@B~F*bo+FN-PHSmL4pWqpO3~=uKwo7Ayn4bU zx-bm@6uoyL(74(N>+?-A^AXcFz@*|my{7JkZvc7R&tKG^`}>>b?C5A$E-OsWf4stdYmp!G5w z_#UV(`11wR*y%$2^~|is5sDIhdi?~1-}99f+%%&|T|sK#Q72)*WdKl%oiLs{IY?f_Ew z!kCR0kB_o$*h$T`Ug&CrM>e2jE(f9N%E(VvCPfiqgm{f30zM$@j&B;OCAT4q!IpkL z_~mA$FWt-OKb#UZi$}@b_l(k!?uC=T6Kr}E8ahF-=>v^9A}JVtmBxW@(G4J#$A7oi z)M<}}|d2p*OO>ot!Fhn(Lqi~+x)A2d|Ts-n9| zrr0&v7a=wXHb#iS!VEK&++4%72q8i@&{%l*f~V?_H^jOIO{~cPFBj<@LxVd1(w|IY z<`T{)5Z9NuXj?o&)6x-M`t6#i>xpH6*tvjIyrCg(V*h0>*mTm)mPN}E1aMiQqV*b?Pd$v&?!}p`P}mOx zms`nhKKO4vk^EdRW>ycF3P%p>9|KvLA%@YE4^}!{{>WiXKKNr?v9~LoSn|N}2sqqU zIzMhBXQhKLu1II8Tjh3zpI^J=W7(ixuGP^UdZ988()Wp8Wcd{sV1N^>fGE>wblds^+5ctPW zsx^80y7f?FnGB_q*S!u=3``F=XSx8QiwClO_WvBIrt^1KPJ zH8x4jHJsrryN>Q=M7c+usKz&HW8#Eh(C+2azCKE5WY^I>8ecDJbpCanzuh-rT532< zC%{uZAog!7;Jd3fF;UuTj_ap_k^D$Uc>W?wJywd3dRRG@2yR>Ge+a>e5_+<<+?}Y& zuW%=VC-Ckn2+ner_rUWaaoJ{_2AnEz#bk?VaIxr(A2yV;gV1;DTvp%2UUk~8PcT(5(ACd<8aX-E>^ePP= z)6>gP%K)B7b$NUL0IqIbc8_=_suz!igE2;1Y&oG#zek1P3|h*#xoK=T2?PVDKz zGTt~m&NxXtUsy^wZ)zLLN7&uGsy%U?bmY9uKu6*T(%#wg*O-yj?3EcDikqH-tX z4jC1j8MGq>N|UdRvBOds8PrUXIYz7@+^0-4b~ae}^N2q_T}+i7#!LPmyDBV?qfxCf zj&Y>6e-|V25fJZn0t2Q+#(Od;l>Bt9Y0#Xatsl;pgWU_=t)RGo2}p25V<+@y1^BL3u(&{(0E-(wx&9eW zK;3(SJ>P*&CueJ`1gwqfL}nXyw+&ZoKiEBBbwGj-8rwkeg2h6r+s572K3NU|)d7kR z8Vo-6(oOXMEW_G6rKl6o=89PlnC*~v^rK&VuKATWq7PTK{Qg&kdWtLm#%`)dDSHR5 zG(vkjCSIn)VeR=0Q$2v}weZ?8-Gi>l#l%Nw&u3V)NYB_w`K(2L>)_kF0_|`8m@Xptv3)O3FIpH2#PT##s@~e_(hHSp*Mc1T)j6@!T7*?y^3h=y?}2e zh(HmFSW2tJwv?goBGXc)?Myq5cAGtCrk&2S1Y2wW$;q7Avw!wFd#%0Bf33AgAsyDO z5h*1;*pXhx42CwTrERRFBGXQVXJCA+YCpXBZk*`sbO2EC)#u}1>VAZ>(m0tvA|~yC zF~i&1rTX&s>` zsnzQd5S!<#_A~m{!zkZ?XPp`TUP<07W_JIrgcUn}VOLW<{BNM4lUaOqW_OtaL?~A%D4>vz@ zuW}&!ZrJvc;JQ+%cYXa3Dj#s0Frs1g`#ZjelOk1f3GEZ5nsX3?o#9Wj9YCL9wT5j5UA$@IlKCYjuHLlGkJ zhQ%&CcEQQUXByH)Kw1ZUvi_WCvwJyV_fl^k;(yyGOH*r{Vt7{|x@;pjvph6iG{A<9 z^HQ!SodeSL0`msVT$@!uiN`|l(8;*pryEuuEd0MpX|{vGs@4mBdfHMr$77-UXD@v% zP8K?>alcPH{J;~Cc?yc$nN#n8?t>@!#pWZ=VIi10nx+Sb`WUPhxGY}g&9z+cBhzv~ zT7LyH9Y!ECLw-)^OI+HF&H`bXXvE1&z1=Rva21%qZ-jkK4dmQZLYK`;t7DjtPaQ$r zSj;Z_5ZFD?Tn$SXfprKBL$I$Jo_Ravww>R3Kr(Es)UODN3MV)wWPG&IvGN-$L-NsA zB*l&#a>HUUT>%+>l@m1$EGU@EqTDS0OqUIp(h34L1INMYSF!pv7FWQz zQ)jXJRC0VO`&Z{fTMq;^5JtqM<PL?f?6=|mFn>t5V;EO&Coa2}me2Nr%?mv(U~qw95EKs_cP3fz zIDQ)rAgcM1MEL0!T-I-A%Vs}I-4<|LC;o>J-6)|qOAFjKK6x3++*S(v$J3j91$MH7 zJ)^r(2%-?6+u6bCh7K})Dvp50KvO3)cfp7SgbC^!;iqPp1ix$Ch>$EBkbf-O&_Hf^ zF&(yHS{xpBw$vb&7PH$l*7_HwWekF#v7L9*#7D`n(~Ggz+dr^Q)A$(df9w=Nm$ zG~?#9wG*uE!F+W;PUlhbT)nh+=(20XLl=~Mm2Ih~8-j< zlsrVa>)+J8yAM&@!;$Q*2~*`%KnuMCuLH}$98j@@S+?Qvv)BU~Spki`tMgE{R721R z1`}doIm*HJ^fVJOKEdv0wyvUB-n>{j(MeKP8W4j iW^$UH>E{F?0KWpTddCbzf=OBc00006w5M4T_|3 zWo~Y6cV`yOdTe0l-q-BDdBg6$H^14Lc?g0a2!bF8f*=TjAb-$aj96<&o$JGUk?#o! zofgHDNBa6^!EyOU#fj(kt@yt2!g2eCtAM4Yfe73Xrsnz744gPl%C`L%FQomASAp}? z5}~KSkx@8sF#hVicBvCEHxIvl#w~O6Odb2c;qz~Mw(U>ZB`2h{0?(fIqF8@C!_b!+ zqZ4rGZj(0mQ-6NDf7z)pT+?#yN_uE*2V8^U1sMCj3)}D5rB{F=F`~h#Gb~;o=Q9!0 z^+}-Sj<`n(&{H6};c2a~`|7N|Z*(PZ`F+|Tg&j$&wSQzpx8$`?kEOTEDnY7G7FoWm zwxqA%Wj5Xj*_)ru+A0zI_QtAEA8nFjV|;n~7fk=zReuV&Gp(1#@yojH<^*i7>NfMg zPywr?snO2Uf6Elm59aV>P(hegLhT!{Ml)~!0_i`y_5JC8fEr;V>CK!e{?)%=1-K7a zb%3NCPo8!AB#5G7O9nyk*Vp$=_7sqMK$k2@dWNe2sR!h&2W0(6O2oj|1H#U_n+!(T z&3CZzEpE1LzbC;foO%FzjuKrtN3i@HUS4v~|Gw7)Sg#ViUWWHSpt{pN|NCAKp!EQ5 ze1zXkSpBL49<+J@^-sVySj{;9dsYvq^v?H&ymrZncY^<04-f>Qv;cnq=n5k1*Ofp1 P00000NkvXXu0mjf5s^0W delta 476 zcmV<20VDo_1?dBj7k?lK1^@s6qMd$(00057Nkl!heRil@A!cJzt9=kFI{G111JZQAl!zCTYn}+zc-&85lUOePS^E$jyK*kHH`E zDF6hJV${;5gnwZ{M<&B#w(krFtrsycFo14u8>UW$RE=d75V5Wfh6Zk4h*cP@ya0I^6ljv73?!+iTMD26 zz&lScaQF~I1FV+VybVGl#U`ohX$dF~T}K<#G60mHVM&^pJ_RB5v`hgE3=9Ba1;@Pi SN7?8A0000