From 454b8ec01dad345f62fbab70f48939cc14fa16c8 Mon Sep 17 00:00:00 2001 From: Motschen Date: Fri, 1 Oct 2021 19:56:53 +0200 Subject: [PATCH] MidnightLib 0.2.6 - Code cleanup & compression - MidnightHats is now more performant and has new types of special hats - Compress assets - Reduce filesize heavily --- gradle.properties | 2 +- .../midnightdust/core/MidnightLibClient.java | 19 +++++- .../hats/bunny/BunnyEarsFeatureRenderer.java | 44 ++++++-------- .../ChristmasHatFeatureRenderer.java | 37 +++++------- .../hats/tater/TinyPotatoFeatureRenderer.java | 39 +++++-------- .../eu/midnightdust/hats/web/HatLoader.java | 6 +- .../hats/witch/WitchHatFeatureRenderer.java | 54 ++++++++---------- .../hats/witch/WitchHatModel.java | 9 +-- .../midnightdust/lib/config/AutoModMenu.java | 1 - .../lib/config/MidnightConfig.java | 7 ++- .../resources/assets/midnightlib/icon.png | Bin 7792 -> 4707 bytes .../textures/gui/midnightlib_button.png | Bin 7340 -> 6603 bytes .../midnightlib/textures/hats/christmas.png | Bin 1676 -> 619 bytes .../midnightlib/textures/hats/donator.png | Bin 629 -> 319 bytes .../midnightlib/textures/hats/friend.png | Bin 621 -> 319 bytes .../midnightlib/textures/hats/pride.png | Bin 1075 -> 497 bytes .../midnightlib/textures/hats/social.png | Bin 622 -> 320 bytes .../midnightlib/textures/hats/tater.png | Bin 639 -> 378 bytes src/main/resources/fabric.mod.json | 2 +- 19 files changed, 98 insertions(+), 122 deletions(-) diff --git a/gradle.properties b/gradle.properties index 1bd21c4..86f9edf 100755 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.11.3 # Mod Properties - mod_version = 0.2.5 + mod_version = 0.2.6 maven_group = eu.midnightdust archives_base_name = midnightlib diff --git a/src/main/java/eu/midnightdust/core/MidnightLibClient.java b/src/main/java/eu/midnightdust/core/MidnightLibClient.java index 145e5e6..7edc302 100755 --- a/src/main/java/eu/midnightdust/core/MidnightLibClient.java +++ b/src/main/java/eu/midnightdust/core/MidnightLibClient.java @@ -10,10 +10,13 @@ import eu.midnightdust.lib.config.MidnightConfig; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry; +import java.util.Calendar; + @SuppressWarnings({"deprecation", "UnstableApiUsage"}) public class MidnightLibClient implements ClientModInitializer { public static final String MOD_ID = "midnightlib"; + public static Event EVENT = Event.NONE; @Override public void onInitializeClient() { @@ -24,8 +27,18 @@ public class MidnightLibClient implements ClientModInitializer { EntityModelLayerRegistry.registerModelLayer(ChristmasHatFeatureRenderer.CHRISTMAS_HAT_MODEL_LAYER, ChristmasHatFeatureRenderer::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(TinyPotatoFeatureRenderer.TINY_POTATO_MODEL_LAYER, TinyPotatoFeatureRenderer::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(WitchHatFeatureRenderer.WITCH_HAT_MODEL_LAYER, WitchHatFeatureRenderer::getTexturedModelData); - if (MidnightLibConfig.special_hats) { - HatLoader.init(); - } + if (MidnightLibConfig.special_hats) HatLoader.init(); + if (MidnightLibConfig.event_hats) EVENT = getEvent(); + } + private Event getEvent() { + if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.APRIL && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) <= 4) return Event.EASTER; + if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.OCTOBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) >= 30) return Event.HALLOWEEN; + if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.DECEMBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 10) return Event.FABRIC; + if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.DECEMBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) >= 23 && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) <= 26) return Event.CHRISTMAS; + return Event.NONE; + } + + public enum Event { + NONE, EASTER, HALLOWEEN, FABRIC, CHRISTMAS } } diff --git a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java index 7cecc3e..4006ff8 100755 --- a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java +++ b/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java @@ -6,7 +6,6 @@ import eu.midnightdust.hats.web.HatLoader; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; @@ -19,7 +18,6 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; -import java.util.Calendar; import java.util.UUID; @Environment(EnvType.CLIENT) @@ -42,32 +40,24 @@ public class BunnyEarsFeatureRenderer= 23 && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) <= 26) { - if (MidnightLibConfig.event_hats) { - hat_type = CHRISTMAS; - } - else hat_type = DEACTIVATED; - }else { - hat_type = DEACTIVATED; - } - } else { - hat_type = DEACTIVATED; - } + UUID uuid = livingEntity.getUuid(); + Identifier hat_type = getHat(); - if (!(hat_type == DEACTIVATED) && !HatLoader.PLAYER_HATS.containsKey(abstractClientPlayerEntity.getUuid()) && !abstractClientPlayerEntity.getUuid().equals(MOTSCHEN)) { - matrixStack.push(); + if (!(hat_type == DEACTIVATED) && !HatLoader.PLAYER_HATS.containsKey(uuid) && !uuid.equals(MOTSCHEN)) { + matrixStack.push(); - ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); - this.christmasHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); + ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); + VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); + this.christmasHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - matrixStack.pop(); - } + matrixStack.pop(); } } + private Identifier getHat() { + if (MidnightLibConfig.event_hats && MidnightLibClient.EVENT.equals(MidnightLibClient.Event.CHRISTMAS)) + return CHRISTMAS; + return DEACTIVATED; + } } diff --git a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java index 9fca390..651149c 100755 --- a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java +++ b/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java @@ -6,7 +6,6 @@ import eu.midnightdust.hats.web.HatLoader; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; @@ -22,7 +21,6 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; -import java.util.Calendar; import java.util.UUID; @Environment(EnvType.CLIENT) @@ -45,31 +43,24 @@ public class TinyPotatoFeatureRenderer>(){}.getType(); public static Map PLAYER_HATS; + private static final Gson GSON = new GsonBuilder().create(); + public static void init() { CompletableFuture.supplyAsync(() -> { diff --git a/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java index 736ccfe..3326e78 100755 --- a/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java +++ b/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java @@ -6,7 +6,6 @@ import eu.midnightdust.hats.web.HatLoader; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; @@ -22,7 +21,6 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.LivingEntity; import net.minecraft.util.Identifier; -import java.util.Calendar; import java.util.UUID; @Environment(EnvType.CLIENT) @@ -51,38 +49,32 @@ public class WitchHatFeatureRenderer= 30) { - if (MidnightLibConfig.event_hats) { - hat_type = WITCH; - } - } + if (!(hat_type == DEACTIVATED)) { + matrixStack.push(); - if (!(hat_type == DEACTIVATED)) { - matrixStack.push(); + ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); + VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); + this.witchHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); - this.witchHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - - matrixStack.pop(); - } - } + matrixStack.pop(); } } + private Identifier getHat(UUID uuid) { + if (uuid.equals(MOTSCHEN)) { + return MOTSCHEN_SKIN; + } else if (HatLoader.PLAYER_HATS.containsKey(uuid)) { + if (HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("contributer")) return CONTRIBUTER_SKIN; + else if (HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("friend")) return FRIEND_SKIN; + else if (HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("donator")) return DONATOR_SKIN; + else if (HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("social")) return SOCIAL_SKIN; + else if (HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("pride")) return PRIDE_SKIN; + } else if (MidnightLibClient.EVENT.equals(MidnightLibClient.Event.HALLOWEEN)) { + if (MidnightLibConfig.event_hats) { + return WITCH; + } + } + return DEACTIVATED; + } } diff --git a/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java b/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java index 526424e..251c011 100755 --- a/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java +++ b/src/main/java/eu/midnightdust/hats/witch/WitchHatModel.java @@ -8,23 +8,20 @@ import net.minecraft.entity.LivingEntity; public class WitchHatModel extends SinglePartEntityModel { private final ModelPart headwear; - private final ModelPart bone; - private final ModelPart bone2; - private final ModelPart bone3; public WitchHatModel(ModelPart root) { headwear = root; root.setPivot(5.0F, -9.0F, -5.0F); - bone = headwear.getChild("bone"); + ModelPart bone = headwear.getChild("bone"); bone.setPivot(-8.5F, -0.1F, 1.5F); setRotationAngle(bone, -0.0524F, 0.0F, 0.0349F); - bone2 = bone.getChild("bone2"); + ModelPart bone2 = bone.getChild("bone2"); bone2.setPivot(1.5F, -4.0F, 1.5F); setRotationAngle(bone2, -0.1222F, 0.0F, 0.0698F); - bone3 = bone2.getChild("bone3"); + ModelPart bone3 = bone2.getChild("bone3"); bone3.setPivot(1.5F, -4.0F, 1.5F); setRotationAngle(bone3, -0.2618F, 0.0F, 0.1047F); } diff --git a/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java b/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java index 49f8815..ab576cc 100755 --- a/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java +++ b/src/main/java/eu/midnightdust/lib/config/AutoModMenu.java @@ -1,6 +1,5 @@ package eu.midnightdust.lib.config; -import com.google.common.collect.ImmutableMap; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; import eu.midnightdust.core.config.MidnightLibConfig; diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index e9a981c..a1baeeb 100755 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -39,9 +39,11 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Pattern; -/* MidnightConfig v1.0.5 +/* MidnightConfig v1.0.6 Single class config library - feel free to copy! Changelog: + - 1.0.6: + - Abstract & Allow super ticks - 1.0.5: - Custom lang keys - Transparent list background when in game @@ -66,7 +68,7 @@ import java.util.regex.Pattern; * Credits to Minenash */ @SuppressWarnings("unchecked") -public class MidnightConfig { +public abstract class MidnightConfig { public static boolean useTooltipForTitle = true; // Render title as tooltip or as simple text private static final Pattern INTEGER_ONLY = Pattern.compile("(-?[0-9]*)"); @@ -213,6 +215,7 @@ public class MidnightConfig { // Real Time config update // @Override public void tick() { + super.tick(); for (EntryInfo info : entries) try { info.field.set(null, info.value); } catch (IllegalAccessException ignored) {} diff --git a/src/main/resources/assets/midnightlib/icon.png b/src/main/resources/assets/midnightlib/icon.png index b194da54490162878f53569dbe89d2fa40a01876..ddc1a4936668d37eeb0b40db4b70b7b9b6f93bc2 100755 GIT binary patch literal 4707 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 JxlR!g`5%ZrYf}IK literal 7792 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 Eg1qlXjQ{`u diff --git a/src/main/resources/assets/midnightlib/textures/hats/christmas.png b/src/main/resources/assets/midnightlib/textures/hats/christmas.png index 07ac65dbafd99f6cfe2fa25e4c383ed33667273c..7e092c3f7c24a1d2d7686f1663ff0859b86cf822 100755 GIT binary patch delta 586 zcmV-Q0=4~&4eJDu86^V%005o0f$RVP00d`2O+f$vv5yP=|* z<>mAA_14?m>Fn(6@9*~a_uAj!(%9LPAt0|UB`sJ3aR2}S0d!JMQvg8b*k%9#0iQ`k zK~z}7?NiH+oCkp3{HZ zI`_V~NTB$XJU3w3LCZ5OekVG=C*O3pU8z>`_{2X7)ZyF6-lnYm7~Oy3e;Wj%Ge-!A z0X!fqLsu2|13=)b=0FT_+h|34RUr^?WD%gqoKJ2E zTq6ezw8i!B0ElD^M&Nz8m)_gRk-x-YvgX={`%#ES{tcp$f6YNU@}D_42LSOOFB?NA zzX2EAwncdkE}pAMH0u!|$#Xc*fD|HE2fUI9@&tF!Gr&e YFWUYZ42_TsE&u=k07*qoM6N<$f~39}EC2ui delta 1638 zcmV-s2ATQm1dI)k85ITq0063Kaozv`00DDSM?wIu&K&8HArp~76n_RGNkl&7jYMsw!Wd8hvox98BfbRKufj41Z&}9DqniiFh1z_sDQ@ zYzx;&YG-Ha`Oemsy3#R|DHwq$V;h)rEIhZdx}vU^=ZpE=ayft+z+Zl~SdcMj%}CP$ zcR~9If2y@pl@fP0H)Mo;jdn+pFqllB;Y^wN^V{Xk<#GV%&49{jqY0t2C1cy_J|j$u z(@;kF#r^^5Eq}#a4!U4TtJ{UqMWq46<@sDDvs?~<>PP8xO5$c5`R+p#`lPWGU}!8B z6W72YMsw!8AYi#n_`-#tP~3B z{<+)7OJlOSQj!U(L+z}g7-5nXbLYQ$@_4x%&}g@#RDUvgMg3mimE(F{vRG3CxTc|x zcJCv~rb-3oJ<}o!N3j&npI^EvfHD@PVL+qPnMD|47KgaG=mRbr9;O0~4nThoH1|AT z+P$8vl}ak_=g*@YE`|d@Q;2z_#3~HOvJUF9Sz)fSkzqpf z$lkpjReud`>bzsyH|nU^pD$lUNknF6tE@^}tJ77HDzC4p+&)E)hcJL*M`Nh^r25_R zrWlC$tHUF?$@BQ!tOG8t@5N6KccWY)rhd`7H<37YXA_2c)(@vLL1B#JSsb?lR7nG` zv*RK^ygayiFJ^$~eU$+$xKYEdi($Hvk*n4lFB0d3~LopB#byH2$(FS_FKMhSx~}J_jM-AVV47!M^W) z|9|6uRR(ClCrgKqP61xIuZ{ctU?Mp<0<*rV_f3>Msz0rx@l^IwAunG(ex$BV%nQ}i z`s{~&B7AfTD8t8UOpt8SR1W&<^}ZZ{?o@uZzx+PLl;~J#H89m04a@`$oTJm@xHKA1->L$Oj@U0x9z;Hp8G#cE zHrfz0#`6@0b8fc~WeXf1BFZ6dY@}z7Xdo>Zcs?iS5TY}nBO*z$HsX05??IMG5lo^+ zeEasJZJ_^@{6G=e4Y#0u|D4Np<3xCluT(h0EVLVeIi`018a^Y6qJuNXgRy$HNQnLV^;2d2JcS8eENI?xhcW_Fw)6i+I>aV2gTdzhBGRM^ zBjGzGkQ7Zimz82QGaG`w`R)14Lkoh~&wIPd0oSFl4+rsp#Z*xz@e(`_SQCMwV~Oi| z5@OBwut%VCx?n>RbolyZht8;X)bkv3REp zRzTqf@|DWZ9A`pM1b2&$JVyDuZFt84pRZ~c(%Ir{_tYg?ZG<^ zID(-qlsFpC+&)D`V98^OGZk(du0)V(PJ_2G-kGqzGT`Wn1_&J>D}e_OaDNOap?@cu zs0u8Z%dQCqYdA~ReYChwE^^$1(&u3M&C6SE|MUiRpx;^`Euw{nv#to6@V{~&SlpkX+a-MW& zgi~-1quoXgSIrFC;6BPDSwm4m)3af}{f{3S8X6iJ8X6iJ8X6iJ8X6iJ8X6iJ8X6iJ k8X6iJ8X6iJ3kQ*Z0CS37_C-aRdH?_b07*qoM6N<$f)mO9n*aa+ diff --git a/src/main/resources/assets/midnightlib/textures/hats/donator.png b/src/main/resources/assets/midnightlib/textures/hats/donator.png index 6498afc1659f0ee80997cc95c82f35848430d008..ec5288356bfa6321ca499b60c89af18f3c6eb620 100755 GIT binary patch delta 284 zcmey$vY%;!gc=Jo0|SHS`l3i6#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%*%;(;`IzF z0X`wF?gc(_a&o-f92#nBf`WopR#t(=+@ao%7rYtTy&3-JFc`~oE;+(~2&BCv$S;_| z;n|HeAZNO#i(^Q{;kQ%vayA$UxV8ESh-4Qw3v3Y2XLT2xb3`)dZopzQuXlV?L{5F5 zWzw&|Q+`q^P#Xh-|A$7a1Dw~QvI7fTrqss;oSq`}R5^x4`k`D>-=8koshZz}SQ=M& z>#oQbSbc*#eh1$iCreJJ{f6h9>kp`yOy*_}Jl!*C?x&r)KcgLYD(zC)*y^bgTe~DWM4f=6+ye literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!3HFEH|A#nDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5hd`K7RKu%*fq{w3)5S5QBJS;-jajz~M2;bUS?9gRj~(h%wBI}NL?Bmetcc^Uj6Uo!ds0O$W+CPch|e0s;-}Ui|Lf@|9x*i zU)ji^nR``i!tc|7v-<7dc&z$>LG+O%+bcIem;T*(FKn^ohrA!Uc5#31JXv`1 z*yE4qv>$wV+WkXh`p0iNkA8U{dHzG-^ZWf@u6|RS?74nj!>#BAf1IED+Vy{5KdrE| zT*&-r=Hk>9S@9a|8Ta!V-R;kOdvIH>Op|wqnpV2QPiea?Q@?BKIGth-sy}h@*gbxi zU3Cc;x9*ki_>#M7`%#{ND(&YEbw)Q{hk0CGtT^LWK=$hw?=L;x@&}kEU|^5SA2z4y VTUI<(Z2tlh^K|udS?83{1OP7N7!Uve diff --git a/src/main/resources/assets/midnightlib/textures/hats/friend.png b/src/main/resources/assets/midnightlib/textures/hats/friend.png index 5e6686a154892d843a5e68a1df61a3d07107ccca..80d49961abf7340aa927a0914cad01324ad9ffe7 100755 GIT binary patch delta 284 zcmaFMvY%;!gc=Jo0|SHS`l3i6#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%*%;(;`IzF z0X`wF?gc(_a&mlJTpDU>f`WopR#pLW>OkT13{q{1CPpHX|Cvm_?f>)`q`f4_FPOpM z*^M+HXS%10V@Sl|w^R0VHW&!FwfYE%WEVCIY!J_9br+m-8v}#?heoRdoY$hV0}EWH)W-#!o+9;BIfh00p@cPQE!#mYh!e4fUMs52%<-=4KB(-7{(Kr=7Y#qaAlD?NZs;>Zviq>#vlE eBL_RfpIM?OIrM7sxHr59+2!f#=d#Wzp$PzDIAHJq literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!3HFEH|A#nDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5hd`K7RKu%*fq{w1)5S5QBJS;-jb4WnBw8QZi!Ka%^km6} zz!;Xof*0>(E6mTuO|52EKjI2VyXx=FgEB#hpTE8wlG>c89WoyBly!}r%c~=<~?`{}*`U{deh7R*`#5H^t}P^%UX@zf|zghAaGS=E_u!{P+`W z8JF`K<@cX?^I*1YnIZ2EqoQ<&Z{l&=rhYfqaXOWsRDUAy=plZWS9J-2+gs&3OmbI+ zALR+CI{oZ`+w#p9)(WhacQ*L8Ff80Wbcu2=N1u7$yV*0000)9cou4V8?*aV8$YsX*)&q{H+uzS_u0Ka?aCKkfZroxW<2PaUT6dl??@v>I zH{)(&)6bBq5n>$2H}X?eqA`P%wD4jC3M!LegitD5VU1KnMrec`#>@4}h1IX?@9|H&tC9e4aA{|hhx0000slu#0|WC3PZ!6KinzCP{PQn62pr8d_x)MSsJM=! z@WE*XJMKpZmWodhh_Uz-Y4IU+!h>Ui2U%S%nIzt?iZi;~c12IC)aHHq+I!auWzNpN z`BAO?+Ul#Tx_pwQ#3U023{SiDC28KjxAMGyd>)rs``Y~fv1`_n{5LE%Ldb9vnMC8np|yc z-Mg|QvvkUH=LNeNIj*G3ezx(8N?yR3RvtO`S;FbVvkh5xNjE6WEH&7fD!lH0*v#0B z$XCu>b7CH8HY}U|p>2Z{Pm0vR&3`)AcP+fInLXm9u>6koeJoAi4^BHvM$EIS#h&gIo_BKimpfv0D9p`0KuT(z977%jf6qeSYcwn;&L7<}O&zagY1e z$>(qG{k)hpf8un(Up>ElK0JIk^_|4)^vlz=R z?w|3xs?&QuKRcZtdhh@FprpR8C+6?vZ|88Yx8qHkf4|kww&CFXKY7PzRYqNZdc(L( zs^LuXgu~KiA5AoG%3OY!Q?P5(Wrmb}no);tv7|^d>R;BHxuo0R+XU|E49spXr;ASX zb$E92#xw@U4+c$p6=pZQQLad<<8NjcmnvBHQZ>QJjEV7m=FRFXyH_((r~R0jqyEEu zp`rI}r772||5VSewykUX&3|R{`m0&l<^EF~nao^gg-QiCWq**n_xM?Jqhx@r{jEPY zI!j~MrJ7lmR3F+JANN|mnY;VOe*QgwjWn2N$?!Da5fxa^$kVmnIa7{ZzJHH>+y46w z1%X>@^7z8tGr#xUFJACHKL1tytbNz7=(mL)`hRNYa)#elz77{8*frl=e$;(S!Xo{E z3hTZNmkk&l&tEpbaXI87`@7={HWr*?NSUjappX&5&>)z+_}HxNKm9hCB=9tNGCY^l z^Z&L>{mN$Zw{98IXa4AY+pB4|yXj2!{VImj^7Z{IC7(s5Ex&JeO0FTz!s-J1u5V2n zH|90f{Ci&={M!3pUi0(40!|!?EhvOx*s53jZjtUW)#?(Dff=2_)78&qol`;+0P!Nx A0RR91 diff --git a/src/main/resources/assets/midnightlib/textures/hats/social.png b/src/main/resources/assets/midnightlib/textures/hats/social.png index 9bd9e66f2ca215e15cbf98f7cb3f9f8fbb98a854..b0a052b92528b8ffd183e6cc0dd7d960d5b719b4 100755 GIT binary patch delta 285 zcmaFIa)4=qgc=Jo0|SHS`l3i6#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%*%;(;`IzF z0X`wF?gc(_a&lbUJZkD{f`WopR#qxj4(`7G`tcb&<=ql$nyT}*xJu-xfwY$d`2{mL zJiCzwIw!`arxHA9p`jF&~^fng2U c5o;J3l#BJ^6!#lu0v*ZV>FVdQ&MBb@0PlcST>t<8 literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!3HFEH|A#nDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F52SJ!|$HeTn3=B-no-U3d6>)Fxob`H~AaV4gd926WTT?sE zD8zEqot2Gf-C4PO`h(}|I+~7#t__Zf=#)FUa-*lt!9BMBX?Gmn-1bCjA9p{qtteC2iH0C01MY z7TkXy9^GJcdCltNYkT9S|K8nkM{)w+-h*c!yzQube|}Q5!>;H1&1>bX#T1vWy~A|t z?Y6kRGwk~3{$1|y(DuQ?n_S+HC!X84?$!CPo4C$4EbTqJVc-Afmg2sb-j=1uF}}UJ z^~3k?i9dF37GHPX@6f@IffD!lzFhrOwKs0**_P~o=o(#Ve^_bBAOAP}mZxU?ZuGdyud~YR zJM+X{zF#-ZVD!p=Df8oE)Xdjm9aq~GC4L8Jul~5}i-oQ|FfqV@zM>7|!sVM^#+{uZ P2NLsi^>bP0l+XkKs-G5R diff --git a/src/main/resources/assets/midnightlib/textures/hats/tater.png b/src/main/resources/assets/midnightlib/textures/hats/tater.png index fc4f63dfd56858c240b99e0a0cdc96fba13aa9ca..169af8f150849fa23452891686a6dce155793a1c 100755 GIT binary patch delta 344 zcmV-e0jK`|1o{Gy7$yV*0001iRAZYL3jD`RJ0Mw9**prUootNI4l+uof)EACnIA9(?r34RAkH$*uK3n@cF(*Fb%{E8HDc`ObP0idCn0B9T7TnC6QkUp?c4j_Xk qSs*Gv0xn>1}0000* delta 594 zcmV-Y0t73-N$SLS(;IC zR?ud%;fP!l(tXS}5GQ{zrD;k($EIA_AgmfRX4b)9diw7hk`R`t#4b#*x)fh#WDImQ9n z@ArJ2n!4fUrF3IrGrGipJDH=txDH1+9Ej40sOyMNuRo3Y`TMJTdT6~@zxnuKfGfNk z5xcJAM^sf6)pgCTp~D2O%$FC>oO)=zOMm<`(01*Zh+{@K}-Se+iE{CvDq~LoWtP>GFS*{B$ALKV!BIbdT13Yr*7tEdt4PJ=8PR zD~!E30~nb9c`1M6+vMc<4Cu!vz|_f&`3wNpJ9Qa53HsaV57jlhN9Mpc*VsLrN5{kP zUog5-=v;KWCb;H4-HE*@w278fV=$FtvdTms#HzaMq`u gfSB=ZcmjxS0e*r