From bb5b525f66bded43e4d9686a98767111ee4b911b Mon Sep 17 00:00:00 2001 From: stfwi Date: Fri, 7 Jun 2019 21:55:04 +0200 Subject: [PATCH] Added registry name wildcard matching based opt-out config. Fixed issue #30. --- 1.12/gradle.properties | 2 +- 1.12/meta/update.json | 3 +- 1.12/readme.md | 4 + .../engineersdecor/ModEngineersDecor.java | 1 + .../wile/engineersdecor/blocks/ModBlocks.java | 3 +- .../wile/engineersdecor/detail/ModConfig.java | 117 +++++++++++++++--- .../clinker_brick_stained_texture0.png | Bin 764 -> 737 bytes .../clinker_brick_stained_texture1.png | Bin 743 -> 748 bytes .../clinker_brick_stained_texture2.png | Bin 749 -> 740 bytes .../clinker_brick_stained_texture3.png | Bin 746 -> 738 bytes .../clinker_brick_stained_texture4.png | Bin 746 -> 756 bytes .../clinker_brick_stained_texture5.png | Bin 756 -> 738 bytes .../clinker_brick_stained_texture6.png | Bin 758 -> 748 bytes .../clinker_brick_stained_texture7.png | Bin 743 -> 734 bytes meta/update.json | 3 +- 15 files changed, 112 insertions(+), 21 deletions(-) diff --git a/1.12/gradle.properties b/1.12/gradle.properties index 0c49c36..43126e0 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.12.2 version_forge=14.23.5.2768 version_jei=4.10.0.198 -version_engineersdecor=1.0.8-b1 +version_engineersdecor=1.0.8-b2 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index c320396..7d4a67f 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.8-b2": "[F] Config opt-out fixed (thx IronPiston for the report #30).\n[A] Added opt-out config for detailed including/excluding of features (using registry name wildcard matching).", "1.0.8-b1": "[A] Added \"Factory area\" sign.\n[M] Electrical furnace recipe changed (hoppers to conveyors).\n[A] Opt-out config options added.\n[F] Lang file fixes for en_us (Angela, PR#29).", "1.0.7": "[R] Release based on v1.0.7-b2. Release-to-release changes: * Factory dropper added. * Defense system warning sign added. * Warning sign backgrounds adapted. * Standalone recipes added. * Lang files updated.\n[A] Added standalone recipes for signs, factory dropper, and electrical furnace.\n[M] Adapted \"Caution\" sign backgrounds to the yellow defense system warning background.", "1.0.7-b2": "[A] Added Defense System Warning sign (design by J. Carver).\n[M] Factory dropper non-experimental now. GUI click area tuning. \"Fast drop\" symbol replaced from arrow to dog icon (thx overchoice for that icon).\n[M] Lang files updated.", @@ -42,6 +43,6 @@ }, "promos": { "1.12.2-recommended": "1.0.7", - "1.12.2-latest": "1.0.8-b1" + "1.12.2-latest": "1.0.8-b2" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index 6048e63..c8ed268 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Revision history + - v1.0.8-b2 [F] Config opt-out fixed (thx IronPiston for the report #30). + [A] Added opt-out config for detailed including/excluding + of features (using registry name wildcard matching). + - v1.0.8-b1 [A] Added "Factory area" sign. [M] Electrical furnace recipe changed (hoppers to conveyors). [A] Opt-out config options added. diff --git a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java index 141bd39..87a9e35 100644 --- a/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java +++ b/1.12/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -97,6 +97,7 @@ public class ModEngineersDecor proxy.preInit(event); MinecraftForge.EVENT_BUS.register(new PlayerEventHandler()); Networking.init(); + ModConfig.onPreInit(); } @Mod.EventHandler diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java index d9a4d01..bf05ea3 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/ModBlocks.java @@ -435,7 +435,8 @@ public class ModBlocks ++num_block_registrations_skipped_noie; continue; } - if((woor) && (ModConfig.isOptedOut((Block)e)) && (e!=SIGN_MODLOGO)) { + if((woor) && (e != SIGN_MODLOGO) && (ModConfig.isOptedOut((Block)e))) { + ModEngineersDecor.logger.info("Registration opt-out: " + ((Block) e).getRegistryName().getPath()); ++num_block_registrations_skipped; continue; } diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index 1cf5e69..9b2c77d 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -20,6 +20,7 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import javax.annotation.Nullable; +import java.util.ArrayList; @Config(modid = ModEngineersDecor.MODID) @Config.LangKey("engineersdecor.config.title") @@ -30,6 +31,26 @@ public class ModConfig public static final SettingsOptouts optout = new SettingsOptouts(); public static final class SettingsOptouts { + @Config.Comment({"Opt-out any block by its registry name ('*' wildcard matching, " + + "comma separated list, whitespaces ignored. You must match the whole name, " + + "means maybe add '*' also at the begin and end. Example: '*wood*,*steel*' " + + "excludes everything that has 'wood' or 'steel' in the registry name. " + + "The matching result is also traced in the log file. " + }) + @Config.Name("Pattern excludes") + @Config.RequiresMcRestart + public String excludes = ""; + + @Config.Comment({"Prevent blocks from being opt'ed by registry name ('*' wildcard matching, " + + "comma separated list, whitespaces ignored. Evaluated before all other opt-out checks. " + + "You must match the whole name, means maybe add '*' also at the begin and end. Example: " + + "'*wood*,*steel*' includes everything that has 'wood' or 'steel' in the registry name." + + "The matching result is also traced in the log file." + }) + @Config.Name("Pattern includes") + @Config.RequiresMcRestart + public String includes = ""; + @Config.Comment({"Disable clinker bricks and derived blocks."}) @Config.Name("Without clinker bricks") @Config.RequiresMcRestart @@ -80,7 +101,7 @@ public class ModConfig @Config.RequiresMcRestart public boolean without_electrical_furnace = false; - @Config.Comment({"Disable treated wood table, stool, windowsill, pole, etc."}) + @Config.Comment({"Disable treated wood table, stool, windowsill, etc."}) @Config.Name("Without tr. wood furniture") @Config.RequiresMcRestart public boolean without_treated_wood_furniture = false; @@ -145,6 +166,16 @@ public class ModConfig @Config.Name("Without slab slices") @Config.RequiresMcRestart public boolean without_halfslabs = false; + + @Config.Comment({"Disable poles of any material."}) + @Config.Name("Without poles") + @Config.RequiresMcRestart + public boolean without_poles = false; + + @Config.Comment({"Disable horizontal supports like the double-T support."}) + @Config.Name("Without h. supports") + @Config.RequiresMcRestart + public boolean without_hsupports = false; } @Config.Comment({ @@ -290,9 +321,16 @@ public class ModConfig } @SuppressWarnings("unused") - public static final void onPostInit(FMLPostInitializationEvent event) + public static final void onPreInit() { apply(); } + @SuppressWarnings("unused") + public static final void onPostInit(FMLPostInitializationEvent event) + { for(Block e:ModBlocks.getRegisteredBlocks()) ModConfig.isOptedOut(e, true); } + + private static final ArrayList includes_ = new ArrayList(); + private static final ArrayList excludes_ = new ArrayList(); + public static final boolean isWithoutOptOutRegistration() { return (zmisc!=null) && (zmisc.without_optout_registration); } @@ -300,37 +338,62 @@ public class ModConfig { return (zmisc==null) || (zmisc.without_recipes); } public static final boolean isOptedOut(final @Nullable Block block) + { return isOptedOut(block, false); } + + public static final boolean isOptedOut(final @Nullable Block block, boolean with_log_details) { if((block == null) || (optout==null)) return true; if(block == ModBlocks.SIGN_MODLOGO) return true; if((!zmisc.with_experimental) && (block instanceof ModAuxiliaries.IExperimentalFeature)) return true; final String rn = block.getRegistryName().getPath(); - if(optout.without_clinker_bricks && rn.startsWith("clinker_brick_")) return true; + // Force-include/exclude pattern matching + try { + for(String e:includes_) { + if(rn.matches(e)) { + if(with_log_details) ModEngineersDecor.logger.info("Optout force include: " + rn); + return false; + } + } + for(String e:excludes_) { + if(rn.matches(e)) { + if(with_log_details) ModEngineersDecor.logger.info("Optout force exclude: " + rn); + return true; + } + } + } catch(Throwable ex) { + ModEngineersDecor.logger.error("optout include pattern failed, disabling."); + includes_.clear(); + excludes_.clear(); + } + // Early non-opt out type based evaluation + if(block instanceof BlockDecorCraftingTable) return optout.without_crafting_table; + if(block instanceof BlockDecorFurnaceElectrical) return optout.without_electrical_furnace; + if((block instanceof BlockDecorFurnace) && (!(block instanceof BlockDecorFurnaceElectrical))) return optout.without_lab_furnace; + if(block instanceof BlockDecorPassiveFluidAccumulator) return optout.without_passive_fluid_accumulator; + if(block instanceof BlockDecorWasteIncinerator) return optout.without_waste_incinerator; + if(block instanceof BlockDecorDropper) return optout.without_factory_dropper; + if(block instanceof BlockDecorHalfSlab) return optout.without_halfslabs; + if(block instanceof BlockDecorLadder) return optout.without_ladders; + if(block instanceof BlockDecorWindow) return optout.without_windows; + if(block instanceof BlockDecorPipeValve) return optout.without_valves; + if(block instanceof BlockDecorHorizontalSupport) return optout.without_hsupports; + // Type based evaluation where later filters may match, too + if(optout.without_stairs && (block instanceof BlockDecorStairs)) return true; + if(optout.without_walls && (block instanceof BlockDecorWall)) return true; + if(optout.without_poles && (block instanceof BlockDecorStraightPole)) return true; + // String matching based evaluation + if(optout.without_clinker_bricks && (rn.startsWith("clinker_brick_")) || (rn.startsWith("clinker_brick_stained_"))) return true; if(optout.without_slag_bricks && rn.startsWith("slag_brick_")) return true; if(optout.without_rebar_concrete && rn.startsWith("rebar_concrete")) return true; if(optout.without_ie_concrete_wall && rn.startsWith("concrete_wall")) return true; if(optout.without_panzer_glass && rn.startsWith("panzerglass_")) return true; - if(optout.without_crafting_table && (block instanceof BlockDecorCraftingTable)) return true; - if(optout.without_lab_furnace && ((block instanceof BlockDecorFurnace)) && (!(block instanceof BlockDecorFurnaceElectrical))) return true; - if(optout.without_electrical_furnace && (block instanceof BlockDecorFurnaceElectrical)) return true; - if(optout.without_passive_fluid_accumulator && (block instanceof BlockDecorPassiveFluidAccumulator)) return true; - if(optout.without_waste_incinerator && (block instanceof BlockDecorWasteIncinerator)) return true; - if(optout.without_factory_dropper && (block instanceof BlockDecorDropper)) return true; - if(optout.without_halfslabs && (block instanceof BlockDecorHalfSlab)) return true; - if(optout.without_windows && rn.endsWith("_window")) return true; if(optout.without_light_sources && rn.endsWith("_light")) return true; - if(optout.without_ladders && (block instanceof BlockDecorLadder)) return true; if(optout.without_sign_plates && rn.startsWith("sign_")) return true; - if(optout.without_walls && rn.endsWith("_wall")) return true; - if(optout.without_stairs && rn.endsWith("_stairs")) return true; - if(optout.without_valves && rn.contains("_pipe_valve")) return true; if(optout.without_treated_wood_furniture) { if(block instanceof BlockDecorChair) return true; - if(rn.equals("treated_wood_pole")) return true; if(rn.equals("treated_wood_table")) return true; if(rn.equals("treated_wood_stool")) return true; if(rn.equals("treated_wood_windowsill")) return true; - if(rn.equals("treated_wood_window")) return true; } return false; } @@ -351,6 +414,26 @@ public class ModConfig BlockDecorCraftingTable.on_config(optout.without_crafting_table_history, false, tweaks.with_crafting_quickmove_buttons); BlockDecorPipeValve.on_config(tweaks.pipevalve_max_flowrate, tweaks.pipevalve_redstone_slope); BlockDecorFurnaceElectrical.BTileEntity.on_config(tweaks.e_furnace_speed_percent, tweaks.e_furnace_power_consumption); + { + optout.includes = optout.includes.toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", ""); + if(!optout.includes.isEmpty()) ModEngineersDecor.logger.info("Pattern includes: '" + optout.includes + "'"); + String[] incl = optout.includes.split(","); + includes_.clear(); + for(int i=0; i< incl.length; ++i) { + incl[i] = incl[i].replaceAll("[*]", ".*?"); + if(!incl[i].isEmpty()) includes_.add(incl[i]); + } + } + { + optout.excludes = optout.excludes.toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", ""); + if(!optout.excludes.isEmpty()) ModEngineersDecor.logger.info("Pattern excludes: '" + optout.excludes + "'"); + String[] excl = optout.excludes.split(","); + excludes_.clear(); + for(int i=0; i< excl.length; ++i) { + excl[i] = excl[i].replaceAll("[*]", ".*?"); + if(!excl[i].isEmpty()) excludes_.add(excl[i]); + } + } } } diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture0.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture0.png index 9edb948eaaf7604ff2fd21d4bed1b823102589d6..25fac1a422b9b8e1a4865288741d1ee05c2cc283 100644 GIT binary patch delta 674 zcmV;T0$u(51>psdOMih$L_t(I%PrGOYn@dTfZ=zoz4v!HCzl!&oheESrLBRYr~?&o zUMM*A_jY2Tqc~_Ch?5{8X-;y^ciDTb<)Hq97am@D`Sf8VtDKGl>G3)3&o}I*g)Sv( zGb|kUz&!Z;r(byg$1AEk6(K~?UV^nbcgsRbncAEHZs(Qz+JA^pS_GuTI1Ehg?AHeF zM62X###l0a&X^l+j)tN*A&{k!e5I5Db7!MMHxvL=l*|{82vv^G&bYj~Vtn)jSyyyk zNUGR!V7nO^H(T!ad*tC$ioogdF|{>v_s=^D@bB9O;oOB#!;yf`zWI)u*B4A4R8^We z~@GKVU4gxmIx+m2*Sag zq6t+n6bT4(77ubt6dVr_YluL}nSA>7bNW(HRdUL#%SsTK86f2I=ST=kt$g(0got1m z1`dabsWq~^yWsXPkwtj${g2#Tydi+*fe^HSK^0Y@e1G}_*RNl(4@Xr$h|RT;x}IiE zNdoysvC4&VKa{W2Os=`56Q-gH~;_u07*qo IM6N<$f_Q{LDgXcg delta 701 zcmV;u0z&=a1^fk&OMje6L_t(I%Pr8qid|I{z~SFod+&4Zzc^y-tV9v5thAU~w9`V< zM1qADl0xteEQNrO-a?dAAwft2f}Kww7J?cC4Th-Wn3>$Ucb~KOTFW9n!3Upw^7>&| z-Lo79Ubt|HpRa$(qdMUM+d9+TaEBo$Uc3AeKYaB$BEpQ2%YQ(Y-l%g&L|AXu9PcW# zIc`pmU^9%IwT5W|U<$CgF%B7@D%#8#OQv~HYo&L?x?=&$QkeQgv^^Vj+@0u+#gOm_ zhMbTuKKnGngIqG}^_t#0|NMP~nV~sz`rtmf6qc(M&ph`$b+@DUjt7Ve`S;s5XsxlI z8r=;;X#^U=D}NU+@%?w-()JSzP5dar=IQg;*$yN){P1IPYn|;hqat{~-VGJSaN68( z5*9)=rzGX%!Cxd*fu`C zfVqJPS%f6Q%NH*4+npQi>&&8L?zT=oKC46-@LIv4nbW#q1QCz`NkBl!nIwXTvu_On zR0v|KAi=-)@1d$BRXhL>P_S@Z1r?>X&NvRZJ0Qrlt5@RByFXE<#`>xA44VzxM_WV$ zRYg@hNL_t(I%RQ4ji(XX}K-b>qoO{35%*4^Cjh&<$As9raun+`` z6ek9xTnco_}T{pw>WCh*CJ&?^(>4 zs*wn2l{~F0XMIm~I1Wb$p-+VYFwYC-&ZcBUpwAik=JQYE_49Mqb!BZv zR%MwcJc4_#p0iF9&77`e_WJ`8&T$;s^gWyHhCKaz#dCpbMiQYbh0%i~!u=0F;*YEE zSCkMK&u-$C1 zW>hokvas828K#Ms*GIOe2lDvrDc9x%aC-5Oe}4astbfXlKo&@<;Et+t|KWQKzh3e8 zFcCmf$Tw@H(}b#`k{FhiUCET3n3|Kg3utECjw4cyh@ex5fV|6z)q?A3qKqS1g`0UH zsosG}Ig3OK=(>*Ed8Q91NyY-?yRW{8WnCG@33Eq9=u1IWxfupFeNQe0H)Frw^UBGA z&2~#l%71aVCBJy~6B5qcoY9;fqa|fq3U6FI;`xtHaC00uYzlumOrqHBz=Ox1kZUtE zoQ!j-P+jPA!4dkBDa|l~-kq1Xm4?uTGpvnLGC7xwx5_>h%!4ihiNHK4rMsKP9VKvg zGO&73R1s0~Tkl_TydKc3bX|wHhN#k&Lci^K`zGVZSZnMK2izKFhN@C)g@FG6I9Phm T(T;bh00000NkvXXu0mjfnc_@n delta 680 zcmV;Z0$2U)1?L5jOMiz+L_t(I%RQ1mizHPPN6&rlRdrW)&#s1RXtXP6Vqj#TncxP> z3L+bu_yr7vi3DLm*ibM~WKdW%5KY8rLnG0|NK6%GcV@b}s@|V_uR)LgKEXMMpM3cG zE3SEA-E}@y(ZL(<3%c zOg$A4VEyiWet&uNHEPbYn>Ff2pArc$H(t7TpQO#0=7rK4#RY8{91I7*9Mp`fdBH>& z)QA#5Af!mh%S=(FA*eezs5^qt#e~SQNsNJY41mzwh#_FA$l1dO4ls@*<219s+|#dm zaA!RXfKy9B&8a1`Ua$FYw_mt}oWAz5&qbM=a_8>b{D1!acT_W?2&zgK1GOn4!tFQi z^7rGPIpo4BMmmA?&$wWA#CCPm49rn6rrKC(z=2|lHf1UmHz%cIqrmmsB!HSSq(oI? zsfxhS*BZ&4-FAoOOlJ)<0|fc(<5LI7rO{d=#lSqz44dJ9*Hzy$PBWX$hIyLVooo?= z&9El@^?%ckJQ*ik0wG3Dq7y_YX1w^;d;I$C8Ko+QGq_O^;gOMiq(L_t(I%Po`3idqoLg0?N_Q6oA1$I2ok$EKW?;ZU z6yNv_et?5aoICTA#6S`U5`>@=KS0C~L}MqNu6yg=d(Ph5LFEtDVzK1w_pSzYrkZp0 zi?4Wi?>0~S0aVE%csL$HR^|1ZAM?lE+aOR8mN}Di7(+9LT7Nm;^$fKELYPwpRD>Wf zRa$M#Ze)aJ&g@Q(2m+WKtXBT(M+7KI=|nJ96vfQ2*2pOl0pURlkne7N6Z1UN4|^6} zhpJ+&()RbAbzF=iT~g+0rkT-NBmZ;%Cxqa9Khs;#%t2t46Ib4Tm&d>V z%Ae+hHB^KyC4Ug5D~Z=`+$0avOl`(Kpcx>72#mE+TVQfR0|@4)Av8%uRA|r9)Fwx%^VRS3An?nAAQ23J3lg1 z<8qgIlry=XDj;|S?t!$1Szyoex(Dj<}c`0ayS5 zqF@ntz-qB%vPwybE-4_$_ut+MMCkW>j*gERb~`S1JHmscN+}t6PMC6LyFKCQ`7??N zr4;htKY!n4oGUJghY_SUv0W{ZoT+bKfpOMi_?L_t(I%T1F#t6gOjgrBwEwa@pFn0wVCm3Atm5JAu`g`kEY zTw@UhE&LHyB8Wf1!p_13L2X2Bf>_wth@~J}3g+WN?#DTMpLf4&EsJvtr=DSEU`9T? z_EP$8z$3Z()-C?}?rR>LZ75nO0$K$3WY!s1-+q@rzP*DWRDXn`ib-pn4;3rQYQ5rY zR~bDS+XxCW3P}=L05};cWYRLZG@qd@ob_}<@5#f5$DH<+073*oFf+_LhFaNdHmC}L z0K%q@$Y-B?lmZO99rO7dfMMIy4?S86;m+aVAsNByu{FbX%jxMk$sYF4-5+Re zG)F~2z*KntwSOD@`SbVu?Lm4YGx3C?h1IO%+3QEx$#!5ED>a4c0TL*RngY<*hG$>^ z31l+w43DH(!RDP(v#><55)es^zyT|T*~B1{MW@u}%&joAVA>h8=?uGa?RBnP^w|zQ zrbc9N`SD9ERx4h3^Cq>{y`u`t<$}#-3qUc&?)`F?p?^A_!E-l``0e%=L?$3aIEkPl zGPxBztFFU}VkiBM3{ZjjbdI=Fn-dqQ;=(y1@#Y*X7d+~BobGlkI>X4s zijpKxKJ^5n2YDeB0Z}0mQUq0{dP7y1Spfw3{L_yUpqq4DJ~&|4_uRk#fd8X4CxOLs z!D_i=+kf|LH(TbjDfaJAKeDZrkiyOb^U8WUA++$!8%O;9&24H+f<%C|Dcx#~NATj! zTiCtxp7aI+9(&Se?3vhp`>KVc0{ia|25f~hci(3OHmP((265P{B& zh(HYr5SbKYKjl~6d5`1cM>HSlCLKhA3KQ!<;V0==uj6AQfi_l_%LNhpCwO!I15O}d UKhpPwy8r+H07*qoM6N<$f)e&ka{vGU diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture3.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture3.png index 89dfa2363f253b685d72151ea3fb44f753089e3e..1f173300321334a7dffbd645e41e3441299ef3e4 100644 GIT binary patch delta 675 zcmV;U0$ly-1>yyeOMik%L_t(I%Po^Vi(OR|K-b>qocrL#$T}3DwaI@_`|rFCKTcF+wXY( z_!nMI2l`UTB6v6+LRRJO=U;O5_%{%!2t&?fS|!|>&A6EktbgY8DHG;Y0Tm$#OqJG* z)s2kM%vs&Zb8D;)E(vRmmxmJql%#Ybm@0~5X1EzSB_bd^XaVxW!|x-fguCMrbfrTh zSeAux90+&LFD@9mj{WI`gj1K5W=3sBKK%8RZBFc$%E5wW4gzCNTzqiJzt8^UA9KPQ zDngeMh|-nB=6}79$n&ydRha{t0V0UNsW#TyI4zADhDNaKGDJ{v!UN`YArCoG12#!G zX^;bIKoy}c1xdnI3PTo}8DmMT))@Ojzul0x@84rH4s6De{WReY5WMxq>r{7Md-WRx zp*ADJ*=$D+(~)^T5hCRJ_cN}|Ng}**|5IN4{wwCe3x5xqJ6V+^;0|wo@ikXJ|HQEx zV^%g@M?S2TEJ_PUG+}FHu|Na>*5;HXG!KsR%=tJ{{m5L6q!kqckHEv&-PtiWBdK5k z1c-t~-~nUbvsfjk#8?s_$d8X6#%35uC3ENOjN>%1pC-bCq)I6nLH>up`NbK><4n<8 z#eDtr34enMnle`rq_%J|4oJ?_cQ3hl@&`+EJV1acfoyiv)_D8DSLErmvIq>N;sHs8 z>vUDp91s)PqB0TFmOsABHq zcRqW-GOuVB`o2da5KZ)5L6dTJ?-Q&UaBH{QZ5%Ok)>cWP{0F#pa619RFbewUCg)KAn{| zi8u(8%3JUj1VOMD5e6G$5MjIr>wuML5u2pQB$;#eK6`&ZYgx=KJUsIC{g2(&1vK!% zrw{n|@>fn`pgU}0U@nE$9e3y6qpx^+@dF}4L5L|6r8U;lsDEmhJ5zV|%Mt5F2ueUW znlX&0OoxemGkR;}6sfflTkqr)S*lS=A&XEE#vx%2IR&&C(L3|;NU4>aBJR!*Bl6RC z-?*Fe^6H9l91#%|07pZ_dPh{54imfEwAUr$H&%ZiH7%qeunm@piG-kn45q~386LN{Ckt`KuX z#}wFZ61O%P$BDpkU8!c|7|VpTYhp^c8Lb=d z-2a4H3VGNNg0L=FN5K7XN@a}t#2y|EZX5k!Q$U!3#j z#gCX7DFmLyK)jk3%$&Iy`|CY(Gis@{0Hr&%8zQh92F#32iX4`eV{4do6gN^(P$#8C zRAoCP(7@V_>fi{k)xawIBlS&bk&v1b1gy3)|h6 z-Z~nTvVRudy1gU*{rh9C4--pwj;(`r1UMZsAAa_bzyA1*wHei%AYkrnPe+0X?|yzp zeDP+_ekmx>+%b2e2<5oo4r?@L@k}B>F2&#$*25k!=rdSkFGh1x4QXO{U0Dx?rO-EAqQ&?IZa+^J5e->%9u(C=KL_tK-8Jl4Ay?gFCckjK{vUsnY)f`O5l&{{p?d!5I4Ffms zeaIg_{m9|e2|-99fIBG!lE9tMzvRy!9wGvZI-6l2wOUa#PJg|znE-z`V5kn-UNEAW7{o*rk zt+SgZhM`bm;&_}n-|s19;CP$~AyQJJY(~0vO3s)&wRPnF%^N=DLPbW>U^q#(Th z!AGP;jjo0-EB)Gq+KsdAaE+_{x2%L9V1~QX>Ov2~<>5fsj05IQiHWgf+##nx61f`I zo$XMVQX=4F5xOY?gb+yQZ@$C2thm514!j&AF)n9@oY`!*oIm)K-a3xpc6IZMivy>6 bqP5Qd@S%cP;Q!Ak00000NkvXXu0mjfmq}0t delta 683 zcmV;c0#yC<1?mNmOMi+cAt1a$uo49WqN0T_g^m6O3kfJTijBmO+>dk4K6~%AES`}03&tFC%7<^f z=53i7QsRXh@AA`UpYrfHlR_YfFqc9f1327x{{w#g>I+nbihq#0o+!1jtQ7zRiUA_5 zt0dpsWz^H_oGbfW$ki|)rHBHef*73j0W|{^nm788Xtg2tF77(O;c&zSj{6h4 zXSPh!ggJ;CDMiM!4M7DnL;kOLe*HS}ugh-%DSQ={Bt+~!ufVYaU%sq z)EUNsvl!{4VkVe5E>O&=fHkK!V=jif1M<|tykxq*BQFc{H1RY-*L66s*>17c2r)2E zGn=!K_<#5P?>Oa*N#Nm}*#tN(g~Ph?`t3XXe)%n!({MT!6sPqgwHdG6e24gWtypaw z^Td)X2fy-hz8wK*X3TlT1*!@Plw1iaENdnX!@zOPTpN1Elz5yAZce9q^#u{S6iEWD zHOw3X0#{SYy^FiPEGwlIx~>B=P^C|a&2C4|nIyWdm_u1Js>*)92VlFq#(xg;Y>oH| Rm?r=L002ovPDHLkV1h#HMu-3a diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture5.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture5.png index da1056c024b266b0739cdb5f7b788593da153c14..68f5af520dcaf1f051b6f7646809851f0d74f02f 100644 GIT binary patch delta 675 zcmV;U0$ly{1>yyeOMik%L_t(I%Po<+iljvpfWLFMROx`0!hW~s z)*Ww7N=~X36M>{k4XCwIPzFt;q715}BzVBm8;9eFcxP2IQ)?tub2JxD2mDmMS|8_A64&FS6|Q2+wCzWJ1=-+#w(sSGKx zoh#Xlby8L)s``cf1=^o z^MW2nY(Fj3Pt!ThBb!Nm7Fs{goU+OWAGw)XHmdu;~cHB2#%^sa2EOY zt1tCv&774a729AsD#v!6&#FNa0q9Lpl>MCPA{aVF zEyfwFw;0t90s@FJ1Y^mqVywYihgbm>oU@23AWW^{tfAG0d+GLj9FNEIHK3%zVmY9_ zQ(NQ3*WV=N%;_{?g#UH@`ZcVxxW6CVV;eJ5ZM^)(TYvm||1Q=Db7`n5OYblOyOg=S z^C5r!^dqGd<{|KVskrTFW|taWmDAybitu#GG*w1t+06-nU@b!!5QJ1aTTKXH(2lbL z2Es59Q)U?)Rs?+p(g0mM^E5NpiVu$7&phPoFFw;4CrYh2?*t5im8o_90fG^hs}-$x zUcLPeZeJRuHFnd?lq&)R?`XBM*{pE_u@u^~7q$j^IADx0=ZqPK0e42g!daHV17Jn) z-eVAgcZ|+52x#wgJ?{pL_t(I%O%pwiXBxHfZ>0wy=qt0Ieif{L=b`_L4v3l6+BjWS}!A`UXB&1ZgFiICbVMY0#+M?Ma_HwJ&Qq$TNJOJh*c^Qm+g{=H}f`IRE7* z!kr#44T;to)q|xuuiyWar@#Kpl!PUMJd9W^h2~C;iXzky%741D*3N$-XnL+_|4(Ve7lv2^sWXFS^%jimBl4)ZS=4s1YPfBwjoa5%QpH z=b3RxBnd=dP(gnD{<~O~g=INVN@X)o{CjytZH;-J*vu2B$0zKruTg}E;N+!KdaX?J zgnawn?SH7fQhFfCh*r2b6o!;|?fsAV^S8&SJD~}HoRoRHWf0+wFTTY7URDgpdncvF zS{v@p(w+6Na=EM=4T(_&5W07EyB*uX*e`qRWHWQvUo#HIJQy*Klpd(Ut2bWZYBM43 zBoUGb1UP~Kt#$0y-FqCCf|`(XMkA1vm~zH}cP793nqC`$U`a7c)LN;n5dr@L80Bs8 ThdF{P00000NkvXXu0mjfI5tV- delta 695 zcmV;o0!aPr1@;AyOMjM0L_t(I%Pr8qizHPPhT->|d#kE@riYnrVNHw_O$p@Lj!X$(8OTZW!s+V>b_O?$2kUV^u5^!k9>UV zRc})Q4LtMqZT`A{k0B_{VG#p|oT<&(<;n}U@9_Kg-*VbTGJitsdZN_Alq*dQbK|-g z`|S=lM^zAn<sc5Vx*LaK(ESNE43NTjm=@gYGJe4l5!?? z0duF10r~usk9^#XOw+{ri8TO01pp0^)ya|v4WY3G&9gZ!07~DzWY8gn9*vbS|gj`KoI3vV9jxyDHmLX zXoiV`3b__E)d~XDpdvU*wMIpl(?kJEgDwUXM@6V+s0t+);47>D5bDip3ubrIQv6FMF>%m4_|uTb8Ey9d4KNKn>_sGCln~=SZlZl?$8J2 z#XFb$`qdZ5quS_WB-UCv?IN=|Q6p1nC~!4r%mD}0<6d1|^EhQLhK}5fK00wVL`0M( z4N+lpm~nSjiykvWRF5(mz##;|a1JUTVm3QCck00-`xgHs-z{JN4t?_7dRVw zT!gtA0(7zCd@=BNx5v%t{?~L-f(Y(@G?=DLX)uMp@4*aI8M+Qb$a$vbf;qHWh+V{* d9ih+8_zxezjr`~C+y4Ln002ovPDHLkV1jn3M_K>? diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture7.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/clinker_brick/clinker_brick_stained_texture7.png index f9196e707fce5a9d5c3a23bf6478b3fc824fb219..8b6ab7edb2e7a9e7a6ffd1c45adf6cfaf59bdf83 100644 GIT binary patch delta 671 zcmV;Q0$}~;1>OaaOMiYzL_t(I%Po<+s$EqSK*yYOt+gNLL~h`r$V+1QxC4Pt8}Xdxt6$W6}K&$Z^XxcPy>U<~=@y?3M4MoEc#A3o;a->(4h zfMkNVMr}b7xO@487gtXS01*y-Pnwq%5k;iowNeA-Z6_j75q}cU2xRCHpuVB^Noear zI`)})b4-z z7zW0nC#A$t3iGnk_Z^lK^7VuJA>o+FjRjz;oVQB<;33POf6%F63a71NW{jqo!tF;N zk-RmMDSLCa=6@hUjYjpL^B`K#)S1`DR2#nTY$bDdD7-qINSzARg8&?%Iq=5f&c$v1 zG2y)Ic)+nF#!~PIT!f)y(!(#mqSZ!((>!=}{hF>Xs0gQN=HC04m?cydZw(P>?yTDm zBBZ~5`I%*J^f~eN2OsnI^JlEhId%n;08xrSNyeSaPk;FDw`c6Nky7~qSU|ey3)R6?Zq|qp277Ht1PBZz)0fQ9brco4 zoLJVKloRsP58s8vO~k!9*_6}yOv#yT-x<1&!{NZX?+oL}zHN+s&pb^W#*y^m>M8Dx zK+&98mwyQr!OVE)@>5J-FiwW~yDQ0wLs0w3B49U24Jks1bbcJGu0TIDz+X(lY3-_OV z#_2TS0?WLBJE$`DJ=Gf*j~-*Hxg delta 680 zcmV;Z0$2Us1?L5jOMiz+L_t(I%T1HJs$EqShQBf9Tyw2;cFx{Wh=mbB>{6sntq3+k zK%yeV_pq|DOqIeXkW+{#8X{u4fDd35NTc8lo5bL8-R5Nsi+xc4`Y-;geE9ke|7)62 z4ZQN&oBaCl0RZNZf@0RF<|KjZ@7?By&(1(VLtr-y#F8^}u78B!Y9iOI&d0sG}=0ZR8xEW|* zoo7lZEbE2}|6+gG^WxR3#9!`z&eJ)w*2cA)xA^|6Pk&jevFkgAsJI+GiwM_l-r}ck zzh>GpONjh#jreq0c`~gu1aHRWlYy}ss55O9940qX2(;P|1UF~#LQ)~(#$oK)%;<-K z7y{LtVonMHQ6UP5D5{Eiqe~rY&Vc@xK`xapCGxtltPB4~>N*T~;mQ@JX=2?rmU-d% z=MKc*zJK|WC-Z_!plYCP3o1g2k(b|iiyt4{1A~h5GaxwHk2Eu0eg8J`S+3;TnDWBf z97Q-uk)<>MnmJ3(xBv(WX!#peVa=Jil*;*9EaMNW2?*m9w O0000