From 6e16364491b5a400cb0f041af90824be3c10fe30 Mon Sep 17 00:00:00 2001 From: GearShocky Date: Wed, 3 Jan 2024 09:57:03 +0600 Subject: [PATCH 01/37] Laboratory rebuild WIP + decorative computer model --- .../block/decorative/computer_terminal.json | 57 +++++++++++ .../block/decorative/computer_base.png | Bin 0 -> 367 bytes .../block/decorative/computer_screen.png | Bin 0 -> 343 bytes .../center/bottom/lab_elevator_bottom_a.nbt | Bin 33630 -> 0 bytes .../center/bottom/lab_elevator_bottom_b.nbt | Bin 48741 -> 0 bytes .../laboratory/center/lab_arena_0.nbt | Bin 0 -> 39625 bytes .../center/top/lab_elevator_top_a.nbt | Bin 23208 -> 0 bytes .../center/top/lab_elevator_top_b.nbt | Bin 33083 -> 0 bytes .../laboratory/corridors/corridor_a.nbt | Bin 1219 -> 0 bytes .../laboratory/corridors/corridor_b.nbt | Bin 1248 -> 0 bytes .../laboratory/corridors/corridor_c.nbt | Bin 3425 -> 0 bytes .../laboratory/corridors/corridor_cross.nbt | Bin 1634 -> 0 bytes .../corridors/corridor_storage_a.nbt | Bin 2447 -> 0 bytes .../laboratory/corridors/corridor_t.nbt | Bin 1411 -> 0 bytes .../laboratory/corridors/corridor_turn_a.nbt | Bin 1575 -> 0 bytes .../corridors/corridor_turn_a_room.nbt | Bin 1946 -> 0 bytes .../structures/laboratory/main/corridor_0.nbt | Bin 0 -> 2259 bytes .../structures/laboratory/main/corridor_1.nbt | Bin 0 -> 2591 bytes .../laboratory/main/corridor_turn_0.nbt | Bin 0 -> 2747 bytes .../laboratory/main/corrior_t_0.nbt | Bin 0 -> 5205 bytes .../laboratory/main/generator_room_0.nbt | Bin 0 -> 23687 bytes .../laboratory/main/portal_room_0.nbt | Bin 0 -> 20273 bytes .../laboratory/rooms/corridor_cross.nbt | Bin 1634 -> 0 bytes .../laboratory/rooms/corridor_t.nbt | Bin 1411 -> 0 bytes .../laboratory/rooms/corridor_turn_a.nbt | Bin 1575 -> 0 bytes .../laboratory/rooms/corridor_turn_a_room.nbt | Bin 1946 -> 0 bytes .../laboratory/rooms/generator_room.nbt | Bin 14762 -> 0 bytes .../laboratory/rooms/lab_chamber_a.nbt | Bin 5340 -> 0 bytes .../laboratory/rooms/lab_chamber_b.nbt | Bin 12079 -> 0 bytes .../structures/laboratory/rooms/mech_bay.nbt | Bin 28990 -> 0 bytes .../structures/laboratory/rooms/misc_a.nbt | Bin 5935 -> 0 bytes .../structures/laboratory/rooms/office_a.nbt | Bin 22690 -> 0 bytes .../worldgen/structure/laboratory.json | 4 +- .../worldgen/structure_set/laboratory.json | 4 +- .../{corridor_end.json => center.json} | 6 +- .../laboratory/center_bottom.json | 24 ----- .../template_pool/laboratory/center_top.json | 24 ----- .../template_pool/laboratory/corridors.json | 78 -------------- .../template_pool/laboratory/main.json | 60 +++++++++++ .../template_pool/laboratory/rooms.json | 96 ------------------ 40 files changed, 124 insertions(+), 229 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen.png delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_b.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/lab_arena_0.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/top/lab_elevator_top_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/top/lab_elevator_top_b.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_b.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_c.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_cross.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_storage_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_t.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a_room.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_1.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_turn_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corrior_t_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/generator_room_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/portal_room_0.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_cross.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_t.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a_room.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/generator_room.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_b.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/mech_bay.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/misc_a.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/office_a.nbt rename src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/{corridor_end.json => center.json} (64%) delete mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_bottom.json delete mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_top.json delete mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridors.json create mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json delete mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/rooms.json diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json b/src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json new file mode 100644 index 000000000..b0330d376 --- /dev/null +++ b/src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json @@ -0,0 +1,57 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "overdrive_that_matters:block/decorative/computer_base", + "1": "overdrive_that_matters:block/decorative/computer_screen", + "particle": "overdrive_that_matters:block/decorative/computer_base" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 2, 15], + "faces": { + "north": {"uv": [0, 7, 7, 8], "texture": "#0"}, + "east": {"uv": [0, 7, 7, 8], "texture": "#0"}, + "south": {"uv": [0, 7, 7, 8], "texture": "#0"}, + "west": {"uv": [0, 7, 7, 8], "texture": "#0"}, + "up": {"uv": [0, 8, 7, 15], "texture": "#0"}, + "down": {"uv": [0, 0, 7, 7], "texture": "#0"} + } + }, + { + "from": [1, 2, 5], + "to": [15, 5, 15], + "faces": { + "north": {"uv": [7, 5, 14, 6.5], "texture": "#0"}, + "east": {"uv": [8.5, 6.5, 13.5, 8], "texture": "#0"}, + "south": {"uv": [7, 8, 14, 9.5], "texture": "#0"}, + "west": {"uv": [7.5, 6.5, 12.5, 8], "texture": "#0"}, + "up": {"uv": [7, 0, 14, 5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [2, 5, 4], + "to": [14, 15, 14], + "faces": { + "north": {"uv": [0, 5, 6, 10], "texture": "#1"}, + "east": {"uv": [6, 5, 11, 10], "texture": "#1"}, + "south": {"uv": [6, 0, 12, 5], "texture": "#1"}, + "west": {"uv": [6, 5, 11, 10], "texture": "#1"}, + "up": {"uv": [0, 0, 6, 5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0, 10, 6, 15], "rotation": 180, "texture": "#1"} + } + }, + { + "from": [3, 8, 14], + "to": [13, 14, 15], + "faces": { + "east": {"uv": [10.5, 10, 11, 13], "texture": "#1"}, + "south": {"uv": [6, 10, 11, 13], "texture": "#1"}, + "west": {"uv": [6, 10, 6.5, 13], "texture": "#1"}, + "up": {"uv": [6, 10, 11, 10.5], "texture": "#1"}, + "down": {"uv": [6, 12.5, 11, 13], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base.png new file mode 100644 index 0000000000000000000000000000000000000000..14b19ef360e48aa24830511686ee6dddc2a87c86 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?ST)zs9|DqC`!`n9#SO-)UUii+y%>&3*xV)LtjN>)vJ{R>EOl?3?( z|AzsFO=on@14TItJR*x382Ao@Fyrz36)8Z$Bc3jfAr}5`Co&2hGT>loRLS`NKe7MG zl7-hkGV2A;ZPN|V5)C!o{Nw0S_5+F8Yn2&TmI!lseAg2+=t>Zo5bv~~<2~2%3#}_z zTTe_5Yu$VFkm*eb!te*j-dU^|*`1kyV{1 zHajGyf9;pEWKI=2t{$9G+t=tQWyfY~)H);Lao_rH7oFN4UuBZ-b3VBs!Q#9@$fTaD yhqmoGpRN^{*}PoZeD%sdt*syaYumRxu3$W;ET*B~dPE-R9|liXKbLh*2~7Y~CXKoP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..4c05be6a9eacb11942d14403b99caca02450aca1 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbU8)vQf|NnpQitV{g{b`jgw{PE$&94#@6AK9mNk~Wls?w7=Zv~{d zOM?7@fhwVZ!ONfV6Hu75z$3Dlfr0NZ2s0kfUy%Y7T;b{B7-Hdnc0wTEAq4@}?K(@R z{FcALI4^9~l1{^8KQlOuIX9$j)A42qYvSFkbf$?(=>3L=dht3kjz4rNtR8VYev!EQ zc-K0^Q}dh7nQXYC=;1kU0dLpw4YSxw>zFqs?6bX~thMQbxZ@Pow3f%kJug*vD05Fs zaV%bSg6VR0v$Z0(^Mud)-q#dOYc)Jzp5|B_?x>&g@UP(IhToyKdzXA;s}p=-|5Qoi aDO=la$v;b3mZbsR%;4$j=d#Wzp$Py15QT97 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_a.nbt deleted file mode 100644 index 601f6bc12e365f1664fb75279d196f8ed316ddb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33630 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 o#x!TrMMAuV}tc2FoG_` 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

QqM8`H%~=Yy55SQSNjwcxW^w#kcNw!0@8U~ ztP-l$C7tkNB!2rTmpk|$S;&!gMeP>e7P|~9MqD*Rk$yAQy?0Qd^v}C2>&P59^sl}= zSJ&Rr7x`{GsR^lyD^7{R(f;Df9#5X_Y zj@ll)D63>DTQkJc8(;IEsNKeo|E%we$-Uemw%@$Wqvsj>)|f8s>mNR^$X7J<4v+oV z)GxW9*gPSW3GKJ=tjy~UMT&3c8Oz&cLpQ^xe!jX~IV%08T_AK$n)va^bMlVbq<5FT zayj9&Dc854pL#1=G_fv2Dq@fJ4xKriN#AJSA5h>oW<(#p-a65gw0!Kf(o)N7Ia|HD zvTKelz25TRu&h!rToHRd$}KzFZcRo^fWmjnP(s;MZ(dtkh8J54OJy^MR+GVi#(eTIFPpfc~}3~JJb6zWs}`#%?{itvsf zBW0gGQT!SA_-9s(zwoyoOq55teJXBu4mdf{+w1s`66L|Q`AatjB$j`D<)?xa?g{q+ z>Ohpw6=h#V($!X}n9g&HeTh0z`nht=N_mCxHh%HXBA;G9{g3uz^#hDOiC2C)+;a11 zz?e+9(e>7qG?`bzKeFweGQ29htnvbGaN|y;jh-JIJUX@Xa9Y_!fa#ysuw@$4&e&df8*tkBeiE z9T6YRF8$V$Dh~X9omCOz=bv|!@V8R0+!RU$0StNT4*N#0weky1aN^=F&=Kl;G`1Nz)>=Kufz diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_b.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/bottom/lab_elevator_bottom_b.nbt deleted file mode 100644 index fc8c36686de6206c593df4ffa7031636f2e300f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48741 zcmeFa3tZG?_CH>^>8~ZFD_|mQ>z13zWgn7xQoOA3a^EfAIP!FvvE8r5G}4`M_%3qPEQB<=<5O{VzU` z{Lhj5Tz#&G%m1+LzJ}l(A@3JGvG>HETkG9}^PW7quBrS&@x;jXn7Ekh#gjKC$0adnXS$_)JVrDz6Fl?VB76n;fiDN@SC1rWpviJQ{>4ExKIG=dbP$)EiU)Cn{*EO1oBoM@=?(_{puEL@qSEp? zzHhwsb9|it(}!>3uf!+eSK`C@b@=rDO5@Y}D~(U@uQWbIwJ;l_|L~FCWUNq}8vi(b zP~6b}_<#E757U##lH|)-*23LQYq`JDar(lq(Kb!rUFwNuOCI=-ABtq73l3*GCoU;} z6?T&EE>)G-y#Jp+MsM|W8lV2pA8})$+fx1i^GD6(ufr$d*0028{8!@hD~(UW1hr>K z{Myg@%Qk43Fn{#N{2_qp6n>%lGd@t~BW<}_m&xWl&*J!|8|q26`}>+T4kpEvT80_+ z_nh)JYm}b4xUzBh)J3yK<*79*8~aYJF>6#L$&Xl?8uquGiuX)L5Tw|-I*zk^dGA9U0F0(e|fcqA^+qWvD|QZzbHu# z0xKJf^&}Tgjn`UoR&r|u#Rg)loC(K<>n72G17WWli^GGaZp9mo#kRN&t-oFy5xC9t zE*DPuXYKbk=sxNP>nl&R3cU|UzMETD@#^3`E}V!@+waYp=s$J6RG2}qkOvsp?*MzD z@Xt=lrXSLT`cs|u4`~$< zy_$D!L(igSK1*7lU@+1}A>Up7Ag0{XT`!`>(poQ~$}(CnqRvuZj~(&=4i`aXu}NI{ zw=5^S>-jn4IoZa7$#1+32tAdLOZ*?Q%jxYs5!`2@O*P4ZT6=()8Gk-;E|r zsAk@EHI`E2jy%JLfuxdH{{mm5e7cOOl|@$b{fDgXYOtTTdC2NS(`UZvvCXfy>9M7! zJZdaAT5xAwR{FH+xd=|?Pt(vM$6Q9I#QG1|__)og>LSR?+aFMnW0e0?po>ctFJLI~ z!xF_cL+nnrqE|GkX9@fTa zuJZnr5}rS6)M{lz;`{ZTf+I$X#RhDL(*Xq{R=dP#FviJlK~Ag*+b*pno9`iDXNxDR zpJ(|QHncbQ1q_4yva%@4<2V+il-PN2hffA<(>Gwp9WlDFv%b@0Wy9!Z78RB4#E~16 z*4lltQ*(F-9L!=(Tm-p?v-zzND^l$^fde*=^0OVRq?sSG1-y*dSL#bd0w=pempdgv zIoU27?9y^YuC4;MMmDZ=T(M5T9>|#ACP|OY`LlFQPWBtG64w2$rU3&s^V*V)2G=^- z1^v^0`R1XBdm6?>r$6J^uS}JMhi9gx^u>D`FJKFcPj|`&Ek~8la}(-DS}s@GTNDjS z^os@?J7ql9s4|F~Fu9m5hS}{fKJl&Du$BiP(X?Emir!A%(HYecYKC|JmwA_7GouA9&5O<)#%(o|CMR)fB%iVa*DyR$svQB?Z*7x)mD4^ zR{M5jlnlm}d|70e(pT+myuigKmB!+1xN+P>qibp(4F!-fN~895p4EbMl#r7FEbd}P zt}&lH&kBBcwK$V1!QnI{Ch}cV54PXiFR$E@5Kz0a5q>V-r`m=k=%~N&utagWYz2SA z;ALrm&t|%~2P{1eLASN?gzIrQsGOsZmYG`~H@Dnd2xlbUH1+^{@E%FZ%{BcU_2G$L z#v)n0jXMzQ55QwFHHcGmK(BctmZ_fUgGm*e(k~=cc%>_nVm#9MNhPaxMi zN)qjxow!n~z!t%1h5?)R25U59G_fSga&JgJ<2F>zql9-IUdp~9v4P(yxCJj|$_`mD zb+}~IdfFN(oc=~`#>uZRD;a)aMT@(}ZEX`j!j3y+biua1v-hcn(N|cpkfo?d>y`}|_b^M#~VHk?O zNk?-=u9L8YCjkFcWqe=(kG1z&eqw`bj<{10l=DnNTe8?NVHXMdICGbN_9pdpi@O?# zu|zNIXCvX#5V$mF!uL&SXL5bGy*cCUoKyNXuaHH1i(#o8HYDqi#)SK%k11Ye4~VUI z=hg||&Rl}nAh9JpG&2KWenog7N|rh(vY1;zqN>zUb-Oq+Fx!C8H6)gHe1n)k_;$4@ zoA5PMpJhlMSCO=VhX+YfCt=?`KcS9ppoN&R&IWZ8G&vq>qI`hcqBOb06aY zMQxW?r=PW68aJ`N>kGKT#pl8|uh{2`K<)R%NxAWV^)c+1CBc?`Iu6u__nN2f%oXPg z>ZDo2&-0>FBq!I@MGLbiakfd7GaDP(;$z!Tqzn$Xcb`m^H@@k_v%slo&rEN2Rw3j8dOU^UQsTI8{)^F%FvFMHPOc~nYXDm8>d9|qlU;gFlWY@ps0B6Qfx+UN zJA9})g9x-!CEHb_kN(5x7o#U@RyWh|q9`id*lBp7swYl9Z|Y>%^39I0=dGmGf9tcm z+Spq9e+IgX4LVYD3lg#fZFPO|!C`L!zdf>tSrI60owhU$*qv!j^r=Zs?=H?CJmtFR zFy^>t>@mmf73Rvm^A8_R?+(geEIqQC$FG;KfdL;|-Q03{wHR{Lt!^fxo)N;h#BG&! z&7b;>^hxhto6oajl_hUVRfZ)8*A+hN7L2 zsjqR36?iLPs|p=$T_?CpWTBBMmtug#ZKj74WUtC~=0?qql2NRb}9BdKKY)S9}Y zNFPX zw-h|sGm2up4?&mR8Pl8?2ycg#`Pns}wgMs_o*TH_;g>c~SLu5UeNqSGbB90!kXB7n zy4njpT%3w%v8*mOlTAeHls-jCkRVL>@}_A_ExG2B(JpKtlbgjxyL?t5*89_9Vsb+} zMjJA~zAus*Rfte^b@MsZzz3@a-WLOp(MC^}u5P|iAI^xLL81@F({;5qIUT!R3pCBG z9m7PX?=W`ZdH&$@R%HvkIwEVn#8TUaJrGuF?64eD*8vOZ#O7d!(xRmBL2|=EW|Gnn)j63KYQp%_d)`;giHv|2T9b z?nq=>oJXdh?{d7!54&r-&arLWT+J^O6O?-I%^BSsBEAQt%A((mseL6)xZnhy)O7DG ztkIi`P@)S6lHFA&T1~bM`)r0>qvps(Oi>k1%pZqw50!fhnG>&u%J_hQ2YmDqm^*sm zWGbkz$`;tpDx~qdUHQyHMmaRZ3*p!8I@w{F86xqe7Wl5tN-Rq5Xuuc5Wzv9e9*plb zON}U7-3%|@k<#aFks1M=fG;Rd>APs28d1Kw8M7_s$BP!Jk|V1Z<&3_Vr*C@4*2w#O z#4lYWE0!%s#Q|D4!rcELm0(O>91x-VKW-HmrjHeQD&ybHP55X`evgjg?&Y~W3(GR+ z*Btyd2lGBptUb|c|KjZ{WC-?@Io}wLxk~JW+cz;Mdj%BYV{VBO8ul?4>{w;a&p?od zR{MXYcQ1z){(&9Ldz}hnux=A$7KmpNwD4D%-a`9^vZn7p-M= z9^Qy)ke({@HTNC7syemdWac|aCkx*}>E$w=izpMr{x|%4EgF-P9y4EiOf#;YyM ztUYSR0>d*gOq+wlzVnb-NvaJ@og4W{@?)0Bor&Op8WHkD4T}wmBg=La=GTY#fLH8w z&yJLiO5f`CrpslaC@S4ic%eR|2SP<%_l!o7S9N>O<+2gO;>fxkg^KzRyOq8$!-`eb z@WJCpR*U%cHV(iJzwYUr(h=)f-QIG!tQX=dRj1RJ%j{SB4$=u&eX0{sEX&sWV0K9u z8tb~-MbQ~K%ris?kTAq5OS8)vE#bG?kEVC?Cq@@<^$#{x+=`iK1mwD8JOem=A~_s$ zCtrY-^=L^NPb6q;fvXq|Pf&hawU00Odk~+ng1#awcCcxj(=aqo;Qm4#1mjs+Jfy9$xob>_SvZM)hGet6)L(`6ouvTn6EjELLbfoEUjhe4k zo0vkf@+rBZUh# zq}f`{%IB3Wh$~Q}jjqY}6&p}ut=Fts-g7y=$Up=m=jGSSz0I0MvElX|DUu4`Oo8-r zd?<=aSMv_k%P+2M7Da{Im!rrhQ!sovegsA3t9ex@LaoGbdl`!SG6hOFW4M4Lt4+C0 zL30nM;YfEg6T`9{-b`?P2vMO$sw6QyQ{Q2A^Yx&=>m#q^ohi`7*mjr3j8jVlmy8s~ zP>4R&O?o${NG6w1#&JS|8+4+89XuK1H0+R;s}wOI%49s_!+2>{l15;K2WDqn7km2!nlbhN4dwLJ`-WWyP-`Y zQ&lO)X;=b%m|&F&9CAkG(D6x4;ZP#{-JAlUySipwpk9OK2(WCbm$67h{ zX2)ZD`zesuG;;=9;!_ZnSz`b4Mi-3_C^wM5a34G68`&r`7)fdla~=--!=E8K%P zQT2E#9%Jrjkdv6UF=D9x3y~3&ykBl?JF#$CqV4X%Jd{hEYtLm(Gwf?pFS1u%{=41&*%Vic%4fh^NA|l!ex#|Nm+b+zhy)FGdhm! ze{oC7bR6;{J2>0S*t3oS#UIK(VI60VD8GhIPhCgCVs?nGL#CETC6(&eDdAAQPPu*z zFsGL9F}Re?9Fq7NQ-_Z?55(;)>t!9Ed5qdF;wn?;vFrLybc$D7-sU!z->H2}HM3@k zi}1}NUHz3S-e#(hH+nd*ksxUo7!3v?b<{An*hR=MViMF$Za94`afc?gqsm*WQ^s== zWz)H^ob7ir>EgL*vG2)ywI`>a-HAN&_vh1eRa~)PDiJp%vz?oU8;X8-E^x)K%#BKc1%@KL&$Pnh-ILBUb+DpkTNo<%iRBQ(9y0LO>vFcJALy44k z-TKp=V&uHzp5^Me)v5Cupo`$?!*kU}d}8yEt)-D-(ftjz^LCbe|Lyl#L#^;{xk2x@ zPU+{*zerf@A{fq{5>@!r=2i|O~0_)u&XO-esoue{9G%!aq&(TF*jXYIox7Y_x3XD2eG+lplQBJhAYajsc|Q>; z24`W@bWqAXkLA`lq&F$1H`E!HooKZ>JJ5|_l{0ZNGOOkj%2Y(wAWN50Z&QcW-?@5u zwRd&g$;=kf!Uy%giOjzxKvo0LPfhY7_Vg^`y51D-5X<#9@Z7DmF zQ-z0oN6Yyk4pw_>3Pbp=?PbUt);Nd_#QHhg_ec7O5$uMBH@l}q)MCnSyPR2UAc`+r zEyAkT&!Sl#8{TYG#Zl!ltg&u&%|5J2fOJOom}8YA|3{@c*T=Adz>(!&nmb)xI#7v# zD!zQRNKtPi1d+t>W*O-FWlBz8&O{D#pi+$KqBU~Zs49xYK7# zG2zV)kow%^)qV#2j7cBAG4aDbe(@aX)Ih(i?D=>wWzys~E*#mFv43m-eBNu?*ssj3 zTem&oTHU&5awZI3Y{OdbGp4al!zt|;Zg0be=EZE$ctE(lg`r5Y{ko@xVX-v$x@R$> zUOE{fot$v~c^-n-7)eiS?YHH1Sy&2LjJ@gX?;q@kL}&^k$n&f+3uIW<@qv)uZCKcQ z0uOSf1@(DYd9O?BNDK`2J4U&O&ycbhsEDV;1ps<%5jQvJ%QhP}?nn%7t|(#ZPG*6z z%*i%&Ll!IHyk=xw1k3V}v#8yw9_OT7(S=rIE~dzR+Nw=1P<1zAOHzgKJCP4rtQU!V znqi>;QKPP3^$_RWxFyvrx3DCu@vClEm{zwdPsV#xwuB;4tOHb#8){r8g78dd6T zM!zWS@EIBF%wI<0jXh9P&tj>{bTuP--S@l1>z=0Q6o1tT%WRTRCPxCy-mDp`K=h=# z8IcLTNVBRGUA0ms)%Rq~miiZww+~ z>+D75+)a7H7RosCDC3CQK1>Hs)h1t%(EU7Ar=?xVAdrWqyD}ngUrIIS{zCACZgM(r z43=eML^0AbbP%#CIE@|IQK+vvrKNO`R9RRM%i}#W^{GN8E2^21cdQyy$8d`YvvNHI ztvW_5Rl9Dw57{AaKvk_8ru}jc^0@-u`PgyW|C25>>`zN7iI{jJyg6NHfTwVBw*OG( zR|7uk` z$W)vDE#V!oR28?1hv-R`)-QFEnwx$*aiiZk+!SYt8}mEGM}?G=$nivn&ZujFMQRjPBFp^I?e;mSIXR>X?@_)jX{mB;w2w&lQsM6XGW#1^cjY3v?B zqn|+o3|;)8E3;XQVoUYDu{O-EVY!v)7&EtMCg|k1%3jY?MQo|?ZP^{lTcz_*8`lF> zc9<0s$`3Jj1taNWsjq6$Dx4y)KM!TTE^SLChSy?1)kT>0nAYFeXgR!Ft*LZ4!w)fH z+SsV=UWAY9cdP%}m>oOVw4;5rMpp(e3>dKWDVxuFE{=5^y9RrXcIC^t)lm#+*O>y_j#3|_CQJ)7pb;p2teK+$Yxlv~r;u1#ap+YIjTK^C z=2oAcyMt#qD*&5&TsEa)NYBQq_H1bnzpMQh?Z3;p@f1cMLyu!`L@tId^BfKS*$QLY zsW9{AB`CmEZ|IC_f7jISiUTef|E^5Up49ZSw{)3B#pjq6x4#Ihz#~@Z`dMqYY2)ck zd_-juD?WCML0obHs2jY`Grys)gkzbtgO~?wP)c_c1!>w|PafN91HRR*Ktqk*_%WxXEB* z;ELoO1&WN4>PH)HY&1IO5opsiZ(8S*{Ms{sBc(^#})PL)_YuJDg49t=8PDo zZP0V-u`oGkkY4Gx#?h?ToWZyr-wf!$k9{6EVmM0<&W-yEeXp8c*W)U7cy5oT)o=#$C2_9El z;~C`2)QGCp&BK>hN8<)1*z19f0C=7NavKtEskehne8V&)*wG(QtKXvC`!}Get>_u$ z$jcj4J?RPzx3@;oCgw?3D2l39^Dd~K zbcKf7N2AD#dD1n4qPo>Q1@;-C8U9#RpRMZ{s&}2J3AD($Azl^7+RG`1#z_2;(BSD0 zTHTjpZ`vO8kW+$vf#476WAPrm7cHgoBf%`5mpv3tD*rA5jpXS&=)7TCITpWz)Q`94 z$D8BcJ2S_`RK^5J5?Kn5aRuYXj1GvH(S~rpj{eoEEZ`xA_e+d87R=~R75qy2_XOjI zRJ;>EV0uR-jvwQf#vdyCl>}ME2vW>+LgH>lkPxO{{8YpA*smps86!xTN)W~=UiV@I z5vqE`;8zi3V~SiXle-6h7(-9RRZk+P)~R@Zqkv=CuKoVT&aRt+mQ&S!>3Fq8@TZ2( z(qcdFi4sv7|0G_{n0_xpy{&o1v#*$`-Ok$JxDna8mt=R2KRAm_UFF+9jWH1#AN*OY zD`v7rY9U{QT`yjE10OEviR*8pw^=k@Fgf~f&DL<$1H*28htcu0 z(aJP>3q^hx^A<|{JIq@s_9y5q6s7q;wO)f^Dv8Z|v}s~xUxAlX25j!vtccVLG-dDx z^$LdpI4M&Lu&5IG%!(dmgX^XPMPN#8n-EE6KmD3kU`Ur?1~UMy;(z9kq{k+{q_v`= z%Q_!sd8b(K2 zG1wEQe-3L0-=D*}<*I4i#4U-f>TL#X`<~YM+ckdU)(Je3!HC3POh3!t{i9Cw&cxNe z23Pw~)oG+t!pF-7rg-@xH{KiXWZekI>se>{80y;rFT#uUUqu(X$iIZ`UhT^hvG%6r zXY*a{i(tUF2m1M-_wE>b8goMW6B!DGs?-z9QlAE-06J9{vl!q4!j=H*mY;GRC%b4@bt90|v zJl}G>eu&q9z+-+Mc--&Gyuj!hm5ZC9*V+a{Hvn%R$zo1Cd_cAUH^y{hlNXD%R#I-` z29o6xl)&R@SMb<)I5G9Kt8b2K0c(NR6X|B+OLW1F zXV3*#w@??HGo}@)g%x1z*{2Bd2{9R@Ia^3`_T^@CXlhzv;Q~FZb|O7|hV<|peDv*s z;|k15cZ{ut$@%gpGUWeMhLz)N!Q>zBxQTFl)G_GX{!WR**;DZ~JE${scIa(^@H6Oa z5L^5+Pk6C3x4IFd!u^>i_&itNKn#Av&paWH`YAm!S0|ay{<-}_-P=xDdk6iavJSQF zq(bN0ls%u3*&xusu*0obxTu`KzFZg{ZYn+D1Y$B^ldv)ivK+<|asnDzRAlk$^AtlQ7qkRZk%b4G zVrW7ha7r-hDV07li7*m&DX~)Y&FX^)B)EP+*_bKqXKNA^5rM&6#rP@e_5YB;aVmZx zr(`oaejTsw{jkH=a^bKM%p?b6Vy=-t$zj}__MGwqK)L(A5v>{M2e7p;ISD_Jq4iH? z7&n_?s@>$lm5n7MLF5dkrd-z^p&1qg8f#+aWBMe)v=!(7fECx=-ikwKTd^vRAzwp0 zI)*8Z(RdV=H><3(!|7;h=>m%Z{HHFx!Jg0;CtS(@}HQhd$c~5?( z=J2pk{PB9|VmCQ~RVupvN5n2FRW|*p46px0hCK603MlT>)KvbJ3DaPtX-6$Nzf>Ud zUz?u_@#Z=&&VOy59NFN1ZC=YAP5yso^Hu+y=P8)IjloXG5Ay%c^S|souU?q_ccQ=3 ztcWVI_}LSE-G7b#zefMx;Qs%m;2vMFK9@N0cEFGPn)K|iB=S$;CE~hWG1q&>WBj*0 zx%sCZ_Ga9sg|m)Eu^zkhUL2(vW}HVQH~uYI!2UT0zWPMRU|Rt59VmPXDqD6*^f2>M z>Ff^z`XW)T`t+anZe3Duc5#-)@`mB29tr`(V}dpdT?<7J+~s(NPAvWkq(%Y?ea%=YH}0olSTjswe@ zzQL*5xiE~^)j1|?g~aFrkFR>yGYT6Li}B^kcT4QYk9@275}okAGo8`*utu}~#7$WK z0Gqd)HQHsQdh(q_&yyQk0K; zptn0xfE7itHNIFCWDFu@_{GnF2ghDXk-rMBlJ+C$F10!@_#}fJSnKH>Rsz} zwQA7r3|*csPmw(UG`xziS6swgj%9v;$_dR>ZXXnYT6hZqg(jx~h#l(rjBlyBYp965 z-(|6AfaSC$GatZkLYWC|v>{8xy)@YTo6usOh}8hn}dYCK2@ zILF5}w3j6wKjmt2JoZtSn9hNPPFMZ&tu6N^<0T+hlc)MsAg(%MllI;vR6YgdN-qt62B;aJ*qDwj;CoLN0AYS9YAtR=tu2;RODAw` z!Nf_|MI~eS8t9n;Q|t)N$7lgq;n(^IKzUE)9NppO;8#6WZ$m$4+5uqTjEz~?G*EWJ zsJrMm1kxp^phmyu%W?;8@6cVTz5 zR3GA@inZ$GuH+KX3ZLF|v8lo!ULDHAAeJt{9c#wP(>DEVS6lZ<*Jf;O7-~?RQXLLp zvvgM*?4Y>_Rp(qp>QL|xqn4aRQ7)x_CbdSG%zkoBZnbLd3=4D0HHbn#^r7Xbe35^STzj ztMkY;4rt=J@5{#cJ>EWkat+UcgOAsW1b)tq2a;l{=(|Sparp&!k1aHiPp3&l;^qB` z;Xe9$k}oZt@wMBDaeTn);#MkkgcIC`qlT?IR`5LsmC`Rdun)fg-_j6tC^)NGqcQW? zJZnp>ljg%4v%o+S8%7pi3@1mP8p05z&rrA9;>g+lby=^_JGO?sVu8;Tfjhf!SuFPy zr=R_*L-m0UfuWH?eh(YpsKNv{B$?mPua6@q`|(#LqTw$@sw=IinNd7dP(A${F^|n0 zE`p@P71#;(LhHp7tr3q0hvH4;2cVKt?_C(zSo6O$Ep)Oo{H(vB>Lr2d3j8#Oefj2W z!F!VfXD*s^6Xu_o`Zh|d#5&lFJs@9#PasIgcYB^okDYKV+~Q=%IY^%{sM`>NPc8@# zm&He3E5qB*VY9#H5OfzqZu+E&EE**h*Zp|-zVu&7ESE1}K-sykK??=0xoAaD9<{>C zjarehVwH7~g&kVrw0Hj!qXW}Ndh}6q%jdji9QY*MQH{psimtSdpKOiT4ktj`!5jk> zcJL9>i`noTv7ye;9=q}&TModIFkDR(ibh)tPPazH1-JWe(>^S)m|28F65p=0UXIVf z(lPp)<#U7TL%K3&e`I>BflJf#T+QKRwN()O~5LK}wJ9b#Hp!$xfUP8JLeQV#N~L= zT`~14S!={SA$Wbv=3V}(TlkP`>?_~k#i6B#vLE&c`Od!tFOy}S(7X^tpT55^?_{T) zAzS9n?TKJT3F_%4?srCBV%3ozJIcoEZa9X+XaPH5^D%s&H1l75PPfF)jgpMF#+x1b zmu+g#Oxs|HW3M~)7Oig{wA+n{fZsGtY6T=Sa6@`k6iS+2zo$L+hyj8?m|r08u1QX zVB_>DWTLw6CIg4_%NFn^ub=UF-;ll7m%C*L>yu0MxN#9!Q=lkXVk#1_PN$UIZ_)5f zwb8ln0`UJ=!MXC#ALSL~aV~gMTi#@lpJSLE05gs~i?gzkzQXyJj&b>0*FcJ{PPSTo z#)vZe1UUv4pXbZ*deZC@nH=|9GC9Y$$>f$%fSUavg{^{J_RTyiNu)n2sV8^l>NXWf zPDYY(&efhxA7^z$@~)r$^KUx8y)W}mFB}cDjac(~)cl~gLR~7(n&rLt!Xw5HY`**D z(woCA7M=R{nMgO)y}aim??>HAw*6KAt=Qt|VNS8Vhv;47^JjTRHlOWvU~T`))0}`S zyEaao`Rc*K@elSa^OQflZ2hqt%LCOIvZ&@y2-S>Gy$JO

8A8u7`kn^a;n*ty^Ad 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 YVZ5`QDqf=AGUG<`dtr~~|Ll(c1;6~++W-In diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/top/lab_elevator_top_b.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/top/lab_elevator_top_b.nbt deleted file mode 100644 index ebef98b25e99d1b533c28cbb1e7003a111d394ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33083 zcmeHwdt8%8*8lRdTi$-Ug>~I3tw6f9Ep4p=TD1Zp+q%WIwo=+E8!RK~h18N+CiFQ9=kwNb)=9$%TYV#b*Eb_5Ex= zk6$t~XU@!=Ip@ronI|bJ^S^&b{HJGj1|N8q`sK!;#$CM5xeEsaufDkb-Dh`D7X0Je zM_aYGUs?9olBkA9{_7J@>Y23Hb$16BUYpwy(sJYPqZg&ay5WA2UZvMHGK9(^;u+w;m)pq|X{v;pQF=`(DT%I4FWb+V$z4eLb&s6p8AJD+ zC-<`9iDB5tKxS(XWVZHzG+7TMw8ETH2Y!WpR25~G{8pN3S52ySxF5+g%rWP%YTT1W z8JA&9#t(Q&ZbY_~H59~VQN?cDCUWo3H}tPw80I}9?`u2hr_=AFs`gIfQKfF5z$z*? zh3~D*8P`Va&H=_BdmCR{60vr=PoCqs8QkeU_frq<&pAA;hvPsDdGdaOEXE4l#nn33 zXQQ+}-LhlG;%L2o-nntDW-M; z;l!$j9Li+c^)Lp<(1owt7{AR4K_S_ZMtfiT&dT&{W?E`wUXcU(5pn9KP?}X zmWY&@fll`$j)Zyj|234EyhkZi?7@uI<&`{2mb2nd9{%Jyjb_x8Y0M!i0gYvn;L#PW z(@E;iW}M|WOcy{J(KCox2TUT&gJ%xQ zsp%DevQO@Z%;W^`7H7rXxYJ(!4SjD#wq~^)y>yn8s3+f=!EMqu)U%eCuc^*e) zfIeE9b9}|;7p(w$l7MYWe}pzW;u!;3P`<#wvnVsLR1(oDEw@Pe$+7Tr6#?K5#uC&0 z^qZ(Out=Z3Eqft}{cs@6tZ?xIi6!qy9N_hD4dD;YGm24H?gmm0VU~v|mEsxfZNhq# zG>c@+oNdgRBx&HG;fol#(-ram@yRi2pGg`xS6yw|G71Qu(BQ9#(1cxd5Djqw8e#|< zVntjiDtaZ7CDorekzF1#o6XBY8*^U;Hn#c*(C5Ak^xjmYC;W-*4$zkZ{n?nWz@LcT z1b z$8jJ_aUd~kFs=ZbK;|%=_##!|&j5B$qQmoq( z=+PI^x~kk+@!10Zs#BR`Nf0a)t~{DW0M+<+EN2>@ehZcQ{N%j;=U$Y9^d1VTDjRRj z1&L)Rigo!-%?d$J5J*%=xwfjDSG2s~6 zMgr}7Ri`AZejr&-uRog|$5LrHGhx2K4^0ywE}1Ur7~OBM(vP%W#JyzoC{8`gb-_1$$Vby*X9RV;9r(4il3e9^D!@mb2$Mk>APrQr!bUWi57MUmtc1YL;?fe#3KW3 z-%ZH<3UgOsZZ_m%zyRBqmoPwipE&jq!0`e`7i5esV5hJanHD0`U|@=eE{n9u+rjH> zM6Yuhz0M(w65LmT*Macm6$oF*f`$_(G|72cRDoQCgWQ%q23-z&0!vpdV_E^Uxh)&o zG=@q6Cd}tjTbY=p6s?xV+N&>Ghx{ASfG?w|9zs)P ztgsCE(I~;M6kZNn zTgoOc!(~VRO4yP~y(EkE3HS7h+c))+`dYm(GhNTgcF>1;IO%wyZljDUILVY9_3A$c zM*~sBsiE+$Up}0%Tpi%5_XG;>>il3|ySM@}7Wjv7Ga+Y^WR8No2uh8I1Xpo`JUt)| zW2Q$s#`3pV2@eU}t`mm@i}7e}GjZVN#vZ`UaL6KDgQL)6Tt!1WhOz$Q7Q-Py)NFRq z(eXsEBp*XJLGY?TYZSf()(C|2kXsOP;~2QPi@$;yg*x0eyouQC@bhrbLDskx8T{mE> zb6o-*>v6XN3t`|mJ6W2!Q>&g}6bcu8;734|@$Xp9G(P0XVsIX&Tg&5jTc$0Bl6ND9Av zI42&QM|))3`G$hcj3o3V#zYoX=*C4VO+JaQesZ?FqgI%-qozRP!mTc?E0E3ilBBHS ztGoV;$rCrkP7eGA``#8ixhhSyv&PreQ{ccC+V^(Y$u)NDZ8r^Djq=^fql~(Hlr8Ahd@nzq4x*WZw-wU_;_ik={yr7jft|}V z0ro5WE29;^t})85YAj=1W5o4?4&z{|CelknzLjGk-$0Ld@s!L2)T8=c2UX6BXW*RN z40yfSAJh-dgVRb}qb^&PsF>%`E3l8Eg_3(^_Pt^0s7Pw-KCBQvxpb&Eq441Zn45}*0`}+W<`dc_Y zFasaY63!a|5|}Rk@rpqH8a<-5YK_&B+otQRhq-q2p_h@tNWiY;9o5yPt-A z!v}C5I$a>HP8n_+{rs!8fCHT-fZL4vK*vG#%r2Zh5QeAMW`aMv|cDv(uy`-#CMJ9Jok9&RmiSR8GSeXqg}UlK{Fsq_hN z6XeczFgh_SSI6_cVCDDF)vyWJexM5CVO~VU_3G%7(S6`JD}BS;lt*$DRnJAyV)jx+!4a5LI`A{>d%NxA zeQB!Hn$%_Cd5$?^`(BBiT$-lRra@b4Y`DT6S{iK9GEg|h76{Nw^0r2_Hnwr!W+q=x zE`d|~V8IgTs^t3fpb_K_I6s0}hS`JhzGQm85$=ljnz$Bv4Fx$t{F|L8I7+QrPYjX_9Qu-dx}duY`^p8o&s1n zi|tmta2A(%j=ZXmu08Zf|DQ#WuXompQ%JTL)Fa4`r00EWy7NG5H3IqCy^{5!Xr zAa^s7W5~D0yOP%~MXV*BR=c1}5eDcqE(dPq0(>7Y73HsZN>uuHw)VN;MWL$<>wEgm=0i2$aoC=Ea6kLsI0L4zxp4+q*?SY z8(uiUk;AHy-=u&Dh~^3df^)VzF&of2p_^c->foQiYM~XhVBIXVW~hUf&HK1ej54^Z z;loz0jLyKbV{f7CQ@DmN63xx<>R->}HQwTQ3zb5;KAx_r7nVhbx}<`S3={W2Y?pK| zK2!@n>boG`h(5XQtW!P&@T9fTPjQ=Gfh9m%d%oeU2YYi?V3XH+ zkTAz0Nh1_4yHMl-g+PuBtpB8L55bDoe-t;%tKHTMg}^2m*gzW+VB>S4C9C|~2k zR;I+WB8TXlfmmjj>>BMrv!+TN3e{7fy7EdbQf;Y&3NR*_@})Um$-JQJ(1|MI{RXHE zLWRl!So!~76`*tIj+b!MEMn9%anwY|alYxCi3oG5OgX$?25~ox^@=|XZw<_6*ViZ} z9~4u{nPditBp2h9s`pTwi7$B|1=t+qR>FIJbA$}P+m#VRdEyl(K=Sg@J)j3EdHU4T z8`leCco&8>9C?RFbrV^B8)o>`5pNHt>L#408h`+MsOwl!(eCCU0sNxA6bUGOKl&aeTMIazL74BJAo!lBCK!0VL&++<7m# z+NCnj1Coukk|gh4WF+jnsqlq5;&h=L=<}RH1xT9=v~HDo93YTDG69l61kySwgMC$b zL|eR;z8!lI(I&W&qgb>wO3U9*rNl-~l8is?C3%ZSg5D?lF{y$K5n~7RUy(YZy;-ii zpi(XK*N3Ve4Ri0khTCvzb%Q|)YUP`-)fNa9YCCR`q!jvh`=+Au)m>x{`u*fC2n!|P zdy_+TxAky(-*r~Ui&*Oz2~XSR1Jq?qe1y7NHx+ev#9vf5mBRc8QX&nKXcoeN;&n-+ zft!ldWxL2~Z;@kl6Gf(iA)ZMWvN>|;P06TSce_?nmUCDPk8_WTCDLo_Drq&Tz9Zf& z#~j$EmuHZi25vO~=f0bgRBy-zMG!->XLgvl)4o^Ck?UsbyG{w^FfVyfCa)EOVB@RZ zQgdS*!p2@A9lhI>;b4BNv{}jGT*&b9evF1x;%+HJCl<@qBWX#AHIKvQ`VXrkwLUi5HKdio3ImuGk-Z)*k`?tY}X9_Pez z#1Ee$G4m7>KZ^`W{ce7w8}MOsA8@9w!piHga#JgLG#OjxpGM*(NX$i=q&3QW9ktrM zRHb`VCo2csOdFB#7ZiJdIFe7(c5lvVUL<{NeF`)0!?2s}6kYhxTlt!q?C5pip2#iz zFwUdHL%KUh*J5kM*xKo9(A7nS*uxLwohU?)TKb_iYnsuW*rT`du}AB$M<$wkeK#i% z6AW(=f--ZqsLUY*HA(9{*Bj<;u7!0JdPpJBN8f|-?I6atml)qF9N+cOf90BnWTN$Q zSFV_BR7Be&s;N4fojzey2I&M$)lrs{QC=3KB1A$bgH?=^siAf0O%%Slr$D1sMa%49 zcN*OubYU23SN{v#@X_HXinQHM#L$tEb}vp&08CDREDL97e2c_H8I*D|SsRpc5?LFR zauS9Hr8G^ig_;H`Vkgrc#d5^l|pHRw-tYLkJTS-E4>H&^$s+ z;?fJ?PbO$&@@aAvWio{@*pXl=4db~?H3aXehLAdyg-Xz4O{N?%4n`w0X`1wMY-2EC zU0t_fX#C+>IJA<|3&RjH!>9QnV0q``z!uwnJkRh$wVm4sgv?Voy`L4qo6MlY*Zq-p z4$^LolNxIN8B;5<=JUov)`y-D8Tc}_VT2Y#u2uhPC(V<&I0lZ)--LOZ$APR^+vO^7vZRLwiu z>3s-u*|<3BgJ1C|ddz#{>9u6sNUvQR=33bs2}vy^8IS~4n7rr&+lUdd+R2&b z_Zp=ew-Z`sCTsv^vjy&Vz*ALi!+=&;2+FT42iN1r!lh8jM+cNw2Hvl0kr1>>_E?-@ z&8SiqVR;vpcU3?+UG_!FNDo>SIThB6stgX6-@|gvW1SbzpiztdfQxFP9jrs@kTk61 z^kvEjp~pUdfJ)lcufaOSd+!Hq>Ag57o*Nj2cH8Tid7Q|69v9V=Cp#|^s>}-b0UVKd zCT_=6zwcy;V(5~uc_Uvqu)Em16g1)D_uC+09oBP7wdQ2 zJEnhi*Hs3{l;RXBXF;(5ip5YYfnt~&y*CttPtwO7%jOdlPZ8qnzHBo zd1v6;9%}OW(S6Obui^Dkdcb^M#8Apd@D7;hJ$R=~o41Z$e@EFmD5>9VBvf7J2%K_y zg7^YDEvW`x4nYo`<;bB8Ig~B{4i)jpp%6K23jq#^5_l1v7n}{(&PGDMTJ;2XbRU&M zFaScD+uwjt{yQLKIUEF@zG*-zw)+|OsZLJ=&!pc0Pl5gSoFLwIai5+1b{aM5fNJ}_ zct1CIn+l`VZ2R86v?TaqpPQ%15rsm#w0s$CuzleR2eeDwI?bpyzP>;PUrW-Y@*C|T z80XSw)fKS*0N-xPQE;D*s&bgarH4Y!Y%huU4Zb>Q#uQ1B(_n#M@#PjcWmuVa=}zq1 zgRev-J;n9iPbH42-~s@T|3BnUD|?9Qm-G}{Fo^7q1eh35#444Y;ahU%ue$lOGT_SQ zj{G1Td(zzA9s4d=W={MpFUiXhL(2kk-(dQQzlQC&*w>KPMy)I0?x9A*S4E!jXN6s( z*4>fkduKY+=xd0)D6BCrU;Mw$w6$vmk9w&K3i4(~6i1$Rxl}OW89i~4lgMvKHx=B8 zZM^ak)33Ck0Hk34SP^eaFQ$Nhm^&~exDai1QN|h{40j1KRdnP5_ArpvolXlgrF}? z#RW2`ZtB@QL4ZTj0njga0x54ygoYKSVgr#0>3-iEN6RdK{Yvb3P_MNV#@J`MFx|JI zfOyW9e&yRR9yF&-#Rei1GJMR&uz`DpB$l!C1K z0@FXx4#kN-aY4)4VqfPcuiiriwUaFSYZTeN4pm2?`p*2%WJK%*WpE6fy*>}#YFZEw z`EV9yLG7=3bnq1uC>^`Pg82QiI=F%fbp_`L8#+FGcev9|u1lj%L(uN(bHvfS|!^n)e%8)<#^@ZWy^koiF9YdlWg-|V&roEy}2 z`njui1y%}22zoFG^X*M8e(NVMj2W1vv5kFhe#iD zxAwwE`sq5zrMwqWJnxwRpqdE8L_16Oec$pc!Qiz0E1m%*v4*IgWrhdx4c`%Ne*)h1 zhYrCBX~+!F`Ghy%Z9fWwqXFG9-F&N5DV-!xl#?$IU+QarJ&+zz{PCBgb(-+=Q zFBfEwLq;~})0o5WelB*Feg&M`S0S5hWa9zOu{jjUtAN};4=h6Z3^z;TTAN0)%2GmdX9<`-N79$>hq$L0ry;)z4S`H?xm)LEHFrR@d_0pKvkc|E z5ykd%jlLC1(TIK(7>&rs6O70Vzdk-Hc85+GA(nPz69h}-qnXWl{1qD)`==}D=J^MEL74ksh=Pc>(AfeM z{WY-Q)WfO+T9A)g0E4t=gYG%_!^j<(VEV4kFhEe3k8qZ+2_44rwUv8-1c&S3Pw_BJ zHZkMl0K91X?oTZsX4|mEOpeXzl%HU-p&u5Y9*%-JMD1!5x$dDd5}%IJcJ9tmBsxUE z+h^@XpBh0TbF3@i`TU8i8~7VvU19Il-hq<00vU?G>i}#X7@E1g(H`{km*>K0I!r(x zz8%!zr=)neb&{ldbU}JFT|FDjT)!fT&H&RT^1-SlZ$%c*g)dGuA2?TrtNp1Tm1mu|KHit|KC|Q#G@ltS0_(Z&0_zp0fOXbCl61R} zHRhwkcp1LZQ%pU@Z`j2B$I-0js88YTg{#jb&0vSj9S`^WYBHUrPhHN;>3M@$lJ)cC zF#IVLSV6tm9!8$^tVhI=*9fi`RM3XZl~Vu*3#`D`b=M4b z)$_11g8HWqO#uT~URp!dWP= zg8EVv%<|_9g82q#VhwypU{n5^FcWJJ!#YErhszbjthNMnP;(o86B2LM&$ltptrSgk1{PRzPUk`o@ zhFp?!POXOhuQ5MC&%Fs6^Ic|h$xm8A<_f5}09b%fCjoTDpj>01?!{T3kF!2az*(P# zvu=Wz7+4Rmt#ONbI|-@GU~vY*-oFsKU_;H(2TcGYVzNGnkHp*)tpFeVRX!ed|;lYrq|iLG4@Jgh*iLLLk& z9)Cd|6T!%X?2p2>1a%McXt3hpiaaKQkq7M`z{3jEaa@?FjL*l;!Tfy=VKg`q3@X$d z`V}}PE1*?h2N%5N%Gf~~yK@yZGzl1HcoXHlyi3+VuRH!sP(V~5NnTBzs7ZQ zd=l550lO5IalfG=gS55N4yWX_1qkFZ-u7Vjmv_Lp`WGG3M4K zWlOCTMGAv1ejtQ(!fIcVYdVv&7MHVh9S-M#AjIK>YzEz#CZO&V!AqcKpv9thIgiqv zCQRs9sqLLew7C;Xn>(T1KE4yMWSz$yl_fx&cpf&faLEF*V*yzX;H-pj!(#%9LuB#h z`PNVfUTI9s69gGx`xsKkkKsY{I-wIDHg|$nj!yo8x;sV!;R-XM&;t78XkkKlPkFk4 zCbt>BFk%K?7nqk7(+4Ec@l>=~z);8dPQa0^aNRgCPB`4%LDLpMr@+w!@H2xNm$}X3 z0N+_Pn*3OQHVcwu^K5G67{XY|_5sNWzJ!6U&bGObVMu9~)HFU#5N4>p%rB-G zJ)Z(>R1MQb16zbOXI&Wd%>(9YHakR;X_BW1WVX$n@Uz_!5t~ArykQvbvaME{2P7f5v<~mo z((x|YI?OOc9md57PuwwLF$0e@@&xdMgD@i)79nCK8UuKherz$CxVqv|m2Dn9%jVhC zCD|P8@bEC+wz*J_j}peO;udlwBsxKu@S+kc@}F33nyV77J9_z2q0?lG7r}m#rR^a$ z352#y+$rp^S=`w+M+EJJ(I}`|7XvHfu#07dnV(?=|6iWT+{mgvu85xykXBo zr<6bBp2@H}Df1?*PQ+ekvL()9(>yfE1)58^3y1GN zJuY7)jx6rLH=NtIw!ychrAy#VXXcWlu(d+KU-CX~36d7PNZyE%_80_Xatz+ZBm$fq zZhg@b1bBS73SV#;19wc0fjuS>@T_UKB~-gWMF05DDLgn6PfDt(^bQXtdA2Wwb|@N! z$j!5T0sK!V+80zOikl_oSGs%P#m2oB(A2UUh@NW`oOYJ}SrYx8p>#=xg8QQX@ryWG zgp_}&um6Qj-k{yG54#iaPYWR9#)7;7Z`jRH7>;k;n86i4A;8s5v*WiGpiYLXorE;p zxSC-J9ffU%;S@+Bpx8B479i#@cYC*&3C{4#ms)33){~J=g+P}qnk|{uhd$~C!;J~H{=(`>dwg7bl zs`*8@iJC58fWHCndQ70NgoBc;KV6wN;QoHe77OSL!@%6CU#4V7N&son;lshPb(=h! zWs$5Et2-|e!h|{LfLW5l3=YFo;xtr2d!f*850LdF#aglKO;GhQGD6goF`2%gh!IYd zRwiy;KPiNDahiZDpVbss+dgIaws!)LWUS}#my;7EaoqM!;H|Q4ov5(A6L`>WTPKKj z9xT;?xQ4d;LAafsV@?ZSM%0E{fZ{&9j3`xJF+;yN99^F^C}KVReQLl!5KzBe!!5w@ z(t|zv2LzqIeW0+kaGuu}_g1IwmEJg!^3Kqb+VCG5e|Pjl@rxd`O}nfA^2TmQ^-Dke zdH#-1X8mE`fjNKC%6h&l-WdE{llbeIyr2F&TX{V?mh<)%&m-6D;Kci*KY-Dn{~vH1 z>uRABh1huBxA0Yh064wiTPDuBzZ^hu0pCd8V3oZL`qk=!tQ>*W;tXI_UI(l~B9fk3 zB(_Mf7kuZd-SiXuj^bXpAw6-%E0$;hY1->y>`g5>%YfBVVAT(ozL@Cs-G5YWF8Lca z@-#Mbu&1x#B7D_hH@0ogj{gkW_Pz{l=Wc{9u099DSOs=^_A4L*R%40QcaNNL${>%+ z@#>!s%oRs~OEO*K zZyS_wm%@z{apYG7-%$$`u9KxBMJD?%qM`D%BfPE66pl~z_C>bXTn-Uj|osTin_C#$-jvw3eM-j z@Ze`ZCGgvSM6P+XQxD5}^k7fcb<_jjjuYH3voiDpb=fHFzCv5&+<``G)!Im_b?X36?oQC=*U`5*kto%xV6_TOT zFei{N1)YX9%~*4jutKL{#aFu>q&QV`ldvM3hGiFr*eC=X-6YLfcXkRPWZ5bN66&Ir zSbn)fsEbxIqb~$qv=YlN&kE|ImCV$As7jV%dBy+ntuR@i;LI(@2|kHRa2>_8#jqxu z6VCA^J$=z=(OgR!%!XyS1C$^aSv4W6Xk>+CXwl{bvSK-b5UgpeS{Tm?g(?gc`a zs<}y65e8}5MRgAf0Y>-BJvXx={Gv%Bgb;#k6+)P;LRif^&5JpPqLJ zz43nLRb`{JIYFTv3{O1wldCWFZbG9}m6*}kqLn#RT)m#>+p(psyJODx+U>`s5vA94 z_oO|C+_olETs@T1t!>C}saM~OSV;1t<}Pq5&1|TU&B~Wn-5==RU{i8`rjTg5W6-}QnlN5`cd(*8|cT6Ai0h+D2~$(cs|dRLij%laGjOP9VK z&u~AUu031PF(c>G{pX^W1cK8 zfA_X^ss_o`D8`Y(wnn-3Pnj1fq2zAawq2K+Zx8Ka@Ykq$Te{!qE=*Ohxw&iR$>sW)D@@_1^0{H9sy54QbQ< zx2ATr2dV1VkD{G#R!DE(-6XrAcy#e-ML<|VD@U~D1CIhm=EtK~kI(;kmAGYdkbL0U znd8C`b(89H1VfslNssh;Jgz07yzgRbqx&^oTvU6i7`6*GtLdO4m6my@RSoYV|%8Eq#^7YST&!elZ^(0&viSXVS z+WBOjkXxUuZBMES?Jo7M*tRQ|e#|SZa}VWm4(FIYpX%EOFIpbQsv0Phn|g7=4Bl<~ z_Z69)e{J+=&(7-&3F<#IyyidaO*vFOaqf?u|Cbjl72R8vdRymqo_eYIF}rVfb)H}M zGu!UG<9GGFZjt+MkIX&P<2Zf#@|-z#Acxmyt-;cRiV|nBqK8Z4czd1+U_%$yTljqDb9>#Mu%(Uz z8};LnT46-mj6(;eupN_>$WPE>-fUX9xY*?5kNdZ7$DVD12e$lbGPe{FtZ5++b?sO^F$68&`@hGePoa@!JdO zNP)c27)fsNRph{57+<*KT6m;A%i(vLYvh{}zl&VsKe(Zq3mDQ7_CEXd!zGs)7%Xip zWIHB3diDI##RD02VDz z@@wn3DtCuXNRD8;ytPT@u+fZlqE95I9V}U^aC`&LvTWAut*3xNX_*T2=bUAH*Nb4h z48DUKb&T7m|K#C0ZM53iK<6|tWT&M*+fY%P9$5wq#A&IZI6!8m0nGqvNr;#h+@2kY z;LSXI+SCwifEmyL0qN65#T~t=ma&^p8S0#VIV-d;G1Bk)nj)UlMZ40bCPz%WY`S`D z6v#nX4TC!+3}h29dFY(Zmwk7%cl*X^uaaLJ*Z3;Zws5cPuBbmZxZ#Sd?}uv~zxa{j{Uv281351hB3&wg&}9h)!7)+X_M zPi`mgf0Ldi|EPUid|BAH@1Oo&|6lutzxa2|X|-*a7j_>@K2_tpTd)7^|My?kudmx{ za68z#IJ|C^oGX7P2S?C<5tpFef)PkX`NztPg?ZTi6r^2W~cZ34^G zzB!wlpYQ)`WbgLJO?~$C{^jrfon3OWujt$Q<#m?V_P+T)=g`X8=k_PAIm%lrBENk3 z(^dI$w|3XrbnNFp|2Xyh`xm9TZQm+(efYn3!ONN%i)(&aJyO5T6Ypnt_o45MUwJWl zS@P48yD-S%535*>hXUj6-HC^#HYR2J3UB{<^rOq;%+;sY zAAkAQ^YE3=^UD2IR?AnV<=ES%KkC_KoR+<+^2hS+$7XyE)OX)3b9-&(Z%w|!7wN@y zxxU5Lzy99;d~U|0)oVAZ+b3Umn(AxoF8=$vV7AY~1TWTPQJ>PIB9hC(&Ro`*(c6^C zx-6nFB5j7#!6{tFv}Sl6yu!6C&_J5?GMCTF0uHw#tf=DT>ZXY@SW%cZ-{pPH6R$ZN zT&m)5i{d}%@mf(L)0RbfZF|C!uL3<=3{7)>CeZT)fwj!(p{6X83! z;p+rTmc!S8I(ee`XF40?*rxFD?$eT(=IkxglxVr-h$4cSxU_(y?I}oo(Fu@b3Q)U@ zQTwy0$(Cz6oDFo^MGJxQ8lM6#FSd=Yc z=qWr1fQ$`Mg*&#{ZT>32Q|+G!4A*b-4gmxD&CNDo;NGa3Q5SbF1#3ipV0QZiLeFmb z&rVdaPXMC=m8Z`i1s?RMI{-pIckVf_DRGitqE}wizO{0H_=MyL_RD*lWDZ-+cqjTq z;@ZKI^$N!~@GYxm&5le32FW}lpiljS+p}$9JeBqb5z}WLKK)aK=e5ykMTu*v!0>u) zR2;FVE;V)=FpRFHf+7K#nFcgS&lqUXbf7`82p-Us`z~N93!stCGHXtsQRKV!wB)?j z@eO**tHUhYN-ghhK4rM(^vijneTlJt-`8B*bP8lR*o@_T*LR(P^T6f<)54n5Iv|_C ztoO3-dgkUOXTR#No3SXfS>CmIy&#BQ!5 zJniton!n$6_aFZIW?uAV7x8z$SL|7L#(nGSj-3DVxz+`5h@NrwWba?2y6t~zHs3id z|J?e&X>prG+lyrnKi=5;=Xtz2-*^6vyZPTuK6oMD$hp5Z=H2&g<;S^yIkWAR-pd~= zbFA*&Jo&b#L57dat71QYdb`qo&+dIGi{2Xv+kOp>*}eL`==5Jk3F&3^Z1t}W|Gcjf zoqSwzmR8$w)sVAuZ}VT?yOQr;<)ZLUVzcu~j$dy5pC5MV^Fx`Zk8gL(FG>GVbNgkB zxgAfpusHkvn9om~YhJ8-RyRGU^3NOjn-$r4b>$cTZjE_Z+41v{_-FllU*;K2(PCf# E0E&xM5dZ)H diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_c.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_c.nbt deleted file mode 100644 index fab573f1cdf32f916314cbfa617adad3831b753c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3425 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 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_cross.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_cross.nbt deleted file mode 100644 index 08a382cc9b045dee6b56a085143cfbab100e89d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmah|c~BE)6z7Ttq(V89iXyF3WdK zw3VAB_UJLzpeim`f;q!0q{zE)w5#f}UGg`Jv2MvtZ&%qJu^3ms^R{^jD_QZiigL9_ z9!9RgP@0nB1SjK}jW>4t9qVav$jKeOt#k;q2lk}g_4me4q0@VhqPUSju$aip7g6ry zDfKARSRRlQw<+hQ4jO{bg`Q&8D-)D6;6vmY3q#P1Di;HD#Mg#_Zn@vJnx;RrLpk^X z!D-vU@GHpX_L#3O!}`-}+!ZiiBM8myGG6Isc-zxZ48dCWex8B4S}+(PZuZWvme>sH8<~ zt7WXyVzn!mch+h;u;PA?F5IzK>C1_^Eb)9a4zifr#RvYU__IIsCl}cbI8s206lt6= zSGlG$`ADwdmkM08eBHLO>(o1*IP0 z9Pz&3a;iNuQ4sRs=c)x=%HyC=5^vL!A|d_e_MPbuO;8TDK;N1+A$&sLzpdqQ!J+r} z7!`-!2QY%oYVH?4M3g!9u<=E0ctiaNHXHs`Y;xaWDdl zM;r`8Pj$oSRyEIIbf>trE^2^Jji8d#Si>)zK)|CSd>oLWVl>iNW*_uePee6>e&7qN zVTa-bke_KAa~iei?Vh5i8aXz4U0^#I*m8M1XfycHQ zg2>Na-lFoGVT?peM#U%sl$>R2^5_{P4D$*yZN?(U4z8O-AKtV=(uk6?Bs60y?8e&m zQJeqS`n+cA^Oo^TV`uNFerml5l}8N-CqUWEpB-VGFlq4WK+^C(6{`x6Mu=wBUzf~s zNu{eI8K_XnxaBt#+#I`cZXex}7Al)8s=z&i9$ zaA%04YyYe)NTVvR#eSb9Z7Q0MR`|TTM(XVJj(Azo;^h_QjU{#A3qHQqA75LNhSYPM!=NW4_|`97~OWp&B?t2O?} z$$s}(%#fxeDvZuE5vhJ(wDya{=gZ1%XTi}GzvcO3{m<$y%~;QlW?e5;?}OOoG11Af O8vPOX?A92pj?TYZh%}r4 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_storage_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_storage_a.nbt deleted file mode 100644 index 12c1a048112ce4aab17a0af2fac1b69e56aa5dfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2447 zcmZ`)3sh5A7Df50n4qYAMZm@2rvl1@2n6|LDT+f2GL#^Se3Hokf&@%xqJ;8M5T>gE zYpD`6!YCskXha1{U_e5gL}^K_28A3l|9XWVEb|qQd&*1JUNZ zb)0j8jRtvUzESWa5aGVD_3m|Z4K$eB%V1E&07xw;HxmxExQh0xO9Y{CN zX(8Kts={CYG?@cP)?l24I6};#rCIXQbh36U>7acEYIOaUj!Wd&!L}Jb#+#iuZKNxL z0fRfvoKtXtVu3OJB$@AM9lV3Sm%{CZwz!B6tyiWesa?ZJt22C7ZpLwrz;?;xe;5jH zXOO!El`lyLnXsK3biQH7{~0WdTN@pK?dS@qrY4=N#z8fnpmSi!JxNwWkP6PskKS~} zFt0$k$=jpDHwu#vA?~x80#!Nqp0M9|PXplWUs(ZIJgldkB9HWfovj%5#Gx zw4pk5dpm*slGK^P4LRIYHifVD%m~oZVl8xwN0dJa(+MlR8KE}jrvfbUmuHiR;;YS8 z;NZ1moX;_WvfRKq;5UIC|BA!@cy``;<@FpIc)yq&{&%AI;o#8f;+^{=?Lh^i_}W~V z2Y?axLAY5rdj2DD@n*v1%FZWCfjguKb%M4?Xb%))wx(#A)=V$pcT|{wFX@ZdE8e-? z6oUip03j&Ye1<~s4pB=EjZWcKqx~p_MO)dlFDcw#p=b(Q*ZT$~_FZ~_nlovkS1fgK z3KoRgYcRpl<|6&5NccMe+CJYMoL-XDAkbtp zI#vrZNw83@Se$RnBiqFpbw{`#X$f{yj`l|DR9l`3DDvrK8D-tbCUvolyi?u<00kiv z`+)pZR**ARP?=LbL~Sz$(udlqGveT1lM^h4k9xuloBB+J8bY z-zf}@HM&_7OEgmdTTL*5#MuD1Va;z%B)&cZHjv8D_~N_~5@RnC3eMW%=#k#MBcUtc zmmzzU++te$nC@U3Pak4#qgw~Z4?M^T<)5{6p+EQLAq6zm(Ps45Y%iVGDV9nm+}3`@ z9=i02MY#{jr5kxO@=$o(tKi3f4MqnAIQuCvZEJR^5{SUw2`eajhk5|utb?Nl968x(JP)xORSSpmL39VvPuY)nR`O`wnX&5Fy#1 zg37p7J3=C2OP&E;d2lYI60tTwGw-3@qENl-IT+q~82!f2*c;J(9TMH&{@9gY-FRe>v!DPO!EktDB3v0D>*QO?JK`!k^E zY+rPL=J;rg-R^1LQ4HmaNglPrpBk3=@^5m9;%B**aaVoum3sKZ;hdiOSaWsi+mcsx z^}~$g_)Zx`=0Bbyt5&q?v&?R*E0#?w)XH41RlN8MUXu7C{{c;Xlv(M`cu_)ml$l)& zQ;~m@FvaV}N+_#d-x|^)M+zSo#1_uto~Z^uo26ESH{2^SOL#)PUSj=5oc3r|quDw= zUUk4Kwa3F;6jU46@Zp)cFMXX5=JIZ;i>Gk8`3pkzU<+l!uH)G=RM|+$a`jY{%x^07 zk*uEl5`)~mFhk6@-}e^TJsakabWuwK#H_Wcv?tY;VpSzUyG}E`?Oez9loQ>o`DYTR z_WDnO_RViigQj;HZ$61RGuf39;j87R5&G87#wh+t>1RtWC)M_N&UBdd)O7df_M}A2 zm{h8RSJd}ag~<}cB{#B%l~kO?hUDqJmT`1RudM#K;iZ-1Q>RZd5oBy+`mJWmp&lPe zOld?zctInJ%lq$4ikz_Fw|jQ-H+LV7ZzP*K&%UUSNmr)r{yMXYD*7R3#>+$A+fS5< zTYns`6ANPo`dbW__tezY6UGRa;xtMH)FM<{rj6!~#xXoe2ZDvrGd~F?FtbAJ6W-69 zni;?n*j`$=?=O+=-^{4{Z;L0Z>fJA^DwFZyFUsX3J+V-YR&u$p=$9aw3o_n9jjQu{ z_E=Dp(A=0@)~rq2iC~AZ!j5aD@)E!7q}@s_Bc^u?Wma4nQ#*Oo>A-A3YN{{fIYoK9 ODtR#Ol4G=v&i?>Bp|MB+ diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_t.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_t.nbt deleted file mode 100644 index 416a652ec546a5e3f63d873ff5ebba298457c2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1411 zcmb2|=3oGW|4(Q8=HGS`aczHcrejj{g8D`B-AuXLZ=NsNCDU@smK$ zR3yD?Y*>Je-En|tY|5mB5StqYI zn0ep{Q!q!5_zVSuzyvd(kbKO&jJbyiwRd|ylh?7K}CtO{3O1E8-BCC=H}TQzu_-S zqJ3Zl&dc17uSxH7!fY*<#}#n2oz*G^5kQM(hi-#A^m|nQ z*(`;52RB68#?x906)k#91sw!pXu z1cuwaed?UrK57O#4~Q^5W>w?x5t-3@U<%u0?z#gJU=;JKQ@iIWI|TKu`Ds}#B5|4@ zgtB2uH0sv;{OA-P_u@2nE$hNCfh-^)lI5B>_srf}`)$WI^hE7*k4lbk)4gxF&d@7f zXYsW6kFH5f3p}GJF)bNPc(-3K>ak=w3?h;(S&nb&v$VM`EHSM#2N;8Ek|D(23)97a zeR7I-Tp`*L1teOd0zt&h*X7gNS!X&M=O9cWi@A%)d1$y@9`yDtG*u zc}NOwBGBxDmmi{lW`PYv5YMyY5F8+D)4n|*pKv*?Rk#8qG_G_xt*zL4?VRY{T&>uO z`{uDlPcLlGExmnh>F3ze6?eD)ZLiuPKa2mXoo#4l{feMf?H})6_}>0E_I~Nt*jMeH zcHe4W?~7l!T=nd)l9L|v#YQd1`1?lp|DL`)ZB@T= z-O{7SUamj>>!0t%qfXi1^u6bQ+f}^VzWrYW|L671Q`Tk7eo`YfZ~109`Bl4@RhRtR zSO4;ycD?)g*ZbD;9XI}eUwGG=cB!AApDWj0(W=R++xfuP-lWug?v-Wpzuo!jTy-mc x&EK>sZyq22_w&EZ{*|i@Z?=oSd$wIGwBDEZocoUTb!GpVF5N$MaJMl70{~_8x7Yvx diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a.nbt deleted file mode 100644 index 597e48a176de3628a2cd4e586ba0d6617802a7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1575 zcmZ`%eKgZ+94{=4i<>UHsnj{T$YMpeu(+E#9htWyGppEWC}~CHHJQfkAjNIo@>+Sx z+cqO>VXkXC;o4m8khc@9VP49bm)P9j(kcuE#^gl&{S zgF{ucTQPe`G`Na?lp1G2Csnu)(&+%BB;%mkJW-{)>gL4eN`7r*V><@u>2QFd0f28? z6Zw{q%0L*JhpQ@R#T-9X{54LbMY|wB=Ye>ezw{wlQL_ntgprQi+nDzMC0(QBOZUYD-1Hu4JfG{#3Y+^L_!fIcp0%T*q9xz~+ z|6_w|AkgFrA67^0gFRtK;(c%fb_5APVw$H9X>j$<-`jTwnQzkPh|D+Ydx^}4_FW^2 z16Qr?DUdeyO-Q}Jz=x|NF<1U;INqAG$?0q-ZP~W3zEdP!pPdJcE~xVaM&PsKZKJB* zdr0{CL?A<5LVTKz))N!4isqyy5xpRhABLHVN})w-A$jhT)?mPKk;#W$>< zdUsk~x|08jGG{?GHT=pg+S=An7p?~O=E-1d4~rlW!c0vJCZTsQN{W5}RT~BEN0_N& zz4;x;-Ea+D4)cY5OFOme+-TvLA11)OunX|5K7bjL0cSVk@ANj z3>xD!u3Zp9n<2<=;Ribb5_%SZOR$irT2Pw03hPSQ)ER<^XYH?|NN&9AU`!5Lhe4v& z>afZ}?To1n6K(Nj;?rWu}HjV7zoTKG9_36CL>-igztM71W!t zh7PgbH4~rr2#bkB(+$;ilJnu^BhO^X(T#?=+R~e`PdT#Uo!sbSO$Hz3)D|(TrrBT> zUy>d-_I&>6WW@#hGrG&~%U0MP5l6M1z3Nw8(_-U-N^KmZu;$9#3QW&1i)gn#7bl5) z>O)WQKLQs#8t6TJ9ZIw;UFR)a<4!GTzSPaU>v`6d>+5Ro>nvW5^O0H@fG7B=p8asc z#oG9uMq(bf?ArRVGlsjhWcUewa>IPGY=9xXxW3Sb`gm;I>p(`NN$L)35r< QX5=6a(%wSHcFUH304W(6%K!iX diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a_room.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridors/corridor_turn_a_room.nbt deleted file mode 100644 index 70bf367247e8abdbfce879d589f922fb01b02743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1946 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_1.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..309cc93e930be24226972bd9d7058a76836831ad GIT binary patch literal 2591 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 PP&Mv1zx(&^l$8DtK`6`u literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_turn_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_turn_0.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7d5c1d8cdca287c576b39c73e803b423ca979c16 GIT binary patch literal 2747 zcmZvc30P9;8h|xNtvG3RM}^e9ERuyW~X z)YK8>DU;j^8^tv>q;(QhKLK=J($yWhv$1Z|M~uJd;jnJpK;=9mF3@u z;hd&W!y~B1(7Jg~M~I=y5NWJwxNv>FIY|xCd0Dr|+ti}Ry1ceTau7R$>&FGUQu+Ll zzG^v>_$%!f-`@>Q>mT+FzL}r@Wp2+Y7hgt{b4-WN=8J>!{Rxw=rbN5V=fzf7mwIhJ zCor?_O%i9RI@D$RhdQ7`T*Xg(=jDC#6;9aRSHGq4FbR7dBGXR+L74YuNz8`Q&*El6 z0?mz=g_RIsfQ7&k3lNI{OCpuxA*RretY_Oqt!Dq-o^G~|AzKfOZ$@^yfM|M_0Wb~` zr~g!xBoKVH8%kd{*l~BQV_RqHLO~c-L#Y!Tiq+uF1F)yyG2wDIwEVgZID^*~!C)-g?~xpiQt46OR<7 zJ+;pd(;85xn*oeryrT)Ly1{%k-XNmmN=*@fwng5+5r^6w2ATN{ z0%I?#^5)eTGEHC{cX|k52ra>hl=BdmlN959B_IkFjr5G zjL^gpj4T~C*kZOpWOW6#iIqxhY0WYX3PK5!?N|wNfDT1?Vf+arPwf$p+cEwTx9+tA z*Q9?~nzOcE#~q87CQ()n8Eqn}ej&QlV4mzt@Qr_Do=k!NOP9)F=XRzK6#$B31Bc2E z4y6*i2qIQioB#>=D=zgQZi$Y4`i|mi9JBkJ=15Csq^QGM#EHm}D;`Ay5Z5m2I zb1Ial*|7}sMq*5-i;`=`_W2j0Hi=S+?J+6RE2l#@h;H{HJSfjD=Z`2xC5iT&C_5Y| zeZuq+yu7R)^bh##Wtv#Gc>vQ)OGhKEMIA6gI>3a1TVY^hftj`FbeQc96V@1NuE72{qK=$*Z;z)BnZchMf}?sl zHKSXgINhY*r2Cbbq;Cj%8f7sWyk1RZ(0R4LOpj8>%+0lxK_I!MxLOr9>EQkQ!E*=`bhS&a9j1p(~0d)M@xKCJQvO!+y#WD4W+(llg>AGngS-+ebizNMR8Rg{2FLm4_^gUyaABtwekKz z6Yo<`ijsWOb&7YNfchqnal9DNT>F(6r{|!D6Z%)2T60ULK8pRr{f&9|wtD)cKoQng zYQhC`QW^b8nPJyb7z5(czmzP4&qJwOKTy6NXj}EA2$&8{pJq;Xb>PY|FD<<>rVT`nfC^_z)>4(o6UCJELVX&Uam@dPdtbKVWr>g&#zd- zL@RpdqwTG1*vcVWX?13-`qT0tBF5s}DOC*3CSM&n{3=b4kVeA$!Qqo%d(bpJ~FLJG`MMJCc0!b&9Q&D9Wz0cV#gZzKO~*{(SwaHl@;0f4R)% z{qwD}U%@GlpscXQFYjJwL9z81Ik_g~_>@Idif8W5URNA#r!L$D-IXrD-`a8)(sdB5 z4EuT_D+sP{V3|UsNLk$8A3V_NuCU|53C749B8HW_%1;eDd*HF#6K?zs2rd)8{kiT+ zyo#zB!#szhimbeqM_R@|zhOAB^Uz1a|3g~tf$Z29$W9#o=awx~HTo&6`mYbv#NB{e z#^-5_!gXxR6V16`a6!ecJFX`m8YYOp*Q*UH8x07VcP*$Cx*Nx#AC6M>Yx~{nbMMuj zifwbp*Z0JSo$KU06<5StC)cXQ>`lpj*W=(IsZpDq(Y6(q`d{oAE*0C1Q%^mpLTT|Q zYMMq9L+qGdTKfH|{Jw?os@GI%BA8tx^m3-5OdbBEkT=!OIu{x({2*!_-K8y1RP;f*D&-DFIi8xOdIs{L!9`YY?+i2(&SX#B_hK3B znY`vRbs!@*V2X2qDh#&JF-vtXtCwhvnrmg;+H3Q+M2)%_7j=1Bf5Fcvmkw2C$k#&8 zyDEQQ6y7^=#0O6>dj(H-45zBtZrk(w=N6HP3nCDMNM9t^QN zn;Nq5X>g`7t4Q{$r@u?EBX(}!HV_}H>m4sUWy?THow^_$pRI$XHrFT4=vf8T-h1teAUEE^-xl@|N>wG&t&7Glh=J?uIPu((T!%?#`#N}I58X5QgCwwS7iD_CwC&-rSV)5K{YcniRfi>eOt0em|}@i zR!UHr{?IL9)hiAlQ}Rzti+x*&75j%!st)V?$uUAjR@Q;ze$*BQYaw;`~OqK@k1ny|0rJ|Z~DKorlsMNapI3khCe=)RR1xGUb%O@ z@WYgOY2Gyd+Gzep;Y9K4s?>pxc##(j70Gl=VxhNi&O|LA|5Uh`P8GyfW`C_{Z#9tK zTKUibQeHBl>`dBrcAb^Wgaf|<8o+>G^0g&1kJX^veN`861gfK}dq&V{-!9KiEGOb> zNY25dSlJaE_cEl!{8t>iBc5q0Bo>iH#W`gKRxWsxhL+Dn_u!!nOtp-hh2%e9hF?`P zxmH-5o{`*cRA=Yy*Jb;ekeICJeFy2vegvMW7jZpxr6FH%qO*0p-L0B7CT-)~&K7I< z%7%3j)A3oR!d54E=%y|cVhcnpapQXq?fFx=CIGqKI=#G6Uv@?LgDcwir%zC7?8CN^ zdfcO69ZsOvGO9qY(dMjG!;aCST~l8~+`0q!$gK4ctd&AeJ91xh$PK*wGYY}r)qze& z{As?Yf7j$W-Nq0n{N0i?5i}!zcf$$)E>G6QL0tqXhi)V?jeoVB6T;le-w)(EtO(p} zKy{XU6}VZq(ccL;o=SJ*eGkD#_hekcJ#tIW!FO+*>R3jY)I->C3U>K*QU3#*x(9C( z&~nO}w;!6=$|qU`K;=IJ^=Z(j7dOM3x0|+&_~kjLi6WdP#!F9{SPM8bs1w^3SSss5 zv%7zuv!&cppx6Py=7$(arq46ZG=b0gGY?l;mjI-c@}+^HKqXAPb!3ev#+PA=!o+82 z96(U{Ft)aN`E||gUrJ4g7k!t$MWb>ciB1YOv`(EnyNRwb{nT1;s3`)UgEb#$H<2}G za9(bsls|fgPNqTsYW5sj>)cp`145CLvLZbM5FhN63K?2^dS3IKXbdnU0HKMWyE`rA z&0yCVac6q1bMXWqSrbMOEQt%8jyB?kWszCnZ)q@C&Wi{v4Y9{8yU1@-peDVS%)sctr8Z z4P`SYP&XH31MIH`y6x(S75}&yM*IRI2AD%;U1QgY1?Fws&Qb4wV#|N7Pv~%TH5<@q z@8mj&ojL4k(okd|>d?c#T8ZDon;==C%^O-wL>`+jp&lGd@L|xb(09XtVSE{PMDUED zmDaA8aYy3lj>0Q6m#@V)>_>}?WWxr8bA}OXJz$SYG(I7)+ z&cMnl{lUO^T=8WbWu?~gHFm(_Xb83}Y&ahGQ;i+T%Ef%jG#*Fs$%I3&hMb%6xLlu1 zd&ohMQ%x=U!a_0=3ZWZt+Vzw` z8P(r*cY+Y6*yY4kHFo}1O(!Ar3$S#~O&tW@Dh1*J8z{{H)xeR*&Y^Soy?;F`b4mJ2 z@Cz+yw*$D!^Z{{=J z!KZeef7{jL&zdCxpO*h^XG3XC?6-4nWcg$wA#@OrI^HPX%>JSt$iRk6xLi$w1D#Te zS##uQgw&W3?0C&`gg&1$R(Zs9$pW0`L-+k*8 ze^7q&#@F%XbxSsYAdKI;9wn*!&NUg_YU2#pz~+p-OJL>66nFmtRlMv1h!nx<>pbXO zB4=)WjI~H|_b@ob1NJF2=G(dV1+6}BjFRYWGWj=cA?56oS(0-?zB;eJj8SN8$&0W- z6neQ)Bx2H)tfvmpz4zg=q*mPj`X+0`p75=t^zj2ushFW@$iR0E;rFaMFKYHOFx7n1 zgBylCzvTsB&YmQsaQD`lK3tVy>(hnb|A_zaphb2_S}H`0Nt%FiKz1L{MX@`o(;+3@ zb#_v}%t&|>OLIT0Lx~Md*gFi^&o{3{H<2J%JU>h%;M4Tf_lURV3c0!(_HyQJ0pVO4F5#jrqfB1Ha}0UF-lN>{RQ%|n<2vg z8bki5GzbA7@o-IIwXQ?)+WrJj&|3M#%n?ETx*shljP#x0OAO3a6M9}*TTt)|l}9)H ziu(}JBxn9{ORE0>8DiYs--AC;w&6Np8cToAY<&EF3m{1C@}3l$_?jEVZ$NeX!{fwy zlt2o2E*h-}&{byulCfPVIP_hTWo`t;uzNR1pGBVI<6|@`@W>w%q}T}d7qOdr)E+`< z_ZQs~RUR;6<7c`18XO=8!3-G+tz^+wK;1-w6-}rZ323szZ zrYtr|`inIK8*~t;9PDygQjMp-l>pLUqu1%2RF4G(oGcpDqjn=NXOX%j6CHF>B5l%8!mi zDTEy$<48#ri8SaDaKL1{)GseFx94u+Gu%DJ12>a9hT!GGWqTtkCwjTH5m^L=7=0?& zaRL&c8DDauwSac<_v=yVCIPuU&RoI9DXOmbJTlM&z&x;wu)4+*bTgEdU`UzWoNSii zY#8DH23N=a*=yzS!SFk3Wt1&)nalyadhbxyy5VCqsF-woYi* z`G=%VE~Q$qX37+_rM@80C&^6ssEt0GQ!Ri@nd*A`_XVva9wRe%joRq3bE^g4kDl<) zo4EEC?hX@~WsFGEK}*>Li-r?J6ED?n8TrlMoNhA)?kNGo{qG45KN@gdwDEYXPlFOR z`b~ERh_TS4AjUL)1VK640@7^(q5&}i^zzXbJ$89D8l+XIcS}rb9`h=2H~Il;OQ9wzJjRjB*z-=r_emyr zM=qX)H>+<*zrQ!Pd=c?yKkIieOdS{p^?_QAp3w1bRzC&|Vl@m70D-ZBq>2&^Un31) zO|;3q#u*C9aZS$Up)`7L)$F8c4jcjp96kpcZn|0_K~O%jlSrFSTK~R9hqMUZ=C>HZ zrXOSe*Lcs&B5cg(-!8{KI?X5iNKer5d)JGm^)fjLgPu??YkN%q~H*fJ6 zlPIl~7j$K5!r^T%NEd^~NCR^JpZbfUvvXIM5zT{=X>S%r5s?=Ro(^lm2c&{mU*h|A z3|Z{wNKHh&?I!kOhbWMv3$dg{nXnk3`C@>Y@#P(_DzuGeJ_R}$g=|=F1Tefa-;-n| z7}cSqz)Z20Df<}IX@MZNWhUId*Bh;_?H?JLQjIh-ixpfWddmT?SO-K!wB76lLIf$U zf~^X#@NzXujVpCxva7m!v)NT%n?pyr_5Go8*NCa{@CtI(>*)lclI?vgjHlqT&{hAm z#o6^zqV3p~GcTgp$wl^6r_>{oxak+KN5-b`RYMGJLL@yXH{gYOFi4ry+pA8F>Me+! zzCT_yZ8jEb5v=I#&FJO|y9X!7=)xD$FzAfr$#~WGJ4%t6Oz!jq-H7Sci($`>wXhO| zu-&AA?A_*sn8>pI73En{m((~VdG^t%&0({uF_|d3m^Hyt2zaOpl~Sz~`FJMJs>790 zgwib6)RN<=voW!r1ywGiM!&5|!yt7lxzn0Ywj*+g+j1JClVFPhL+s8&s_W#jK z>VBOns83B>$%WafTHVBC`Y5qUqMl9=}eA?|h5EvaqW*sh_@G1cUh zS~+vO@aokt#q?G9Kw!vgH2&MdV_j literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/generator_room_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/generator_room_0.nbt new file mode 100644 index 0000000000000000000000000000000000000000..d402a4b12995772b1c2415c045b6a38d55e523fa GIT binary patch literal 23687 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/portal_room_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/portal_room_0.nbt new file mode 100644 index 0000000000000000000000000000000000000000..9f602edbde12fb68d88b30415fa3f8777126be02 GIT binary patch literal 20273 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 DgIZ@a literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_cross.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_cross.nbt deleted file mode 100644 index 08a382cc9b045dee6b56a085143cfbab100e89d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmah|c~BE)6z7Ttq(V89iXyF3WdK zw3VAB_UJLzpeim`f;q!0q{zE)w5#f}UGg`Jv2MvtZ&%qJu^3ms^R{^jD_QZiigL9_ z9!9RgP@0nB1SjK}jW>4t9qVav$jKeOt#k;q2lk}g_4me4q0@VhqPUSju$aip7g6ry zDfKARSRRlQw<+hQ4jO{bg`Q&8D-)D6;6vmY3q#P1Di;HD#Mg#_Zn@vJnx;RrLpk^X z!D-vU@GHpX_L#3O!}`-}+!ZiiBM8myGG6Isc-zxZ48dCWex8B4S}+(PZuZWvme>sH8<~ zt7WXyVzn!mch+h;u;PA?F5IzK>C1_^Eb)9a4zifr#RvYU__IIsCl}cbI8s206lt6= zSGlG$`ADwdmkM08eBHLO>(o1*IP0 z9Pz&3a;iNuQ4sRs=c)x=%HyC=5^vL!A|d_e_MPbuO;8TDK;N1+A$&sLzpdqQ!J+r} z7!`-!2QY%oYVH?4M3g!9u<=E0ctiaNHXHs`Y;xaWDdl zM;r`8Pj$oSRyEIIbf>trE^2^Jji8d#Si>)zK)|CSd>oLWVl>iNW*_uePee6>e&7qN zVTa-bke_KAa~iei?Vh5i8aXz4U0^#I*m8M1XfycHQ zg2>Na-lFoGVT?peM#U%sl$>R2^5_{P4D$*yZN?(U4z8O-AKtV=(uk6?Bs60y?8e&m zQJeqS`n+cA^Oo^TV`uNFerml5l}8N-CqUWEpB-VGFlq4WK+^C(6{`x6Mu=wBUzf~s zNu{eI8K_XnxaBt#+#I`cZXex}7Al)8s=z&i9$ zaA%04YyYe)NTVvR#eSb9Z7Q0MR`|TTM(XVJj(Azo;^h_QjU{#A3qHQqA75LNhSYPM!=NW4_|`97~OWp&B?t2O?} z$$s}(%#fxeDvZuE5vhJ(wDya{=gZ1%XTi}GzvcO3{m<$y%~;QlW?e5;?}OOoG11Af O8vPOX?A92pj?TYZh%}r4 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_t.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_t.nbt deleted file mode 100644 index 416a652ec546a5e3f63d873ff5ebba298457c2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1411 zcmb2|=3oGW|4(Q8=HGS`aczHcrejj{g8D`B-AuXLZ=NsNCDU@smK$ zR3yD?Y*>Je-En|tY|5mB5StqYI zn0ep{Q!q!5_zVSuzyvd(kbKO&jJbyiwRd|ylh?7K}CtO{3O1E8-BCC=H}TQzu_-S zqJ3Zl&dc17uSxH7!fY*<#}#n2oz*G^5kQM(hi-#A^m|nQ z*(`;52RB68#?x906)k#91sw!pXu z1cuwaed?UrK57O#4~Q^5W>w?x5t-3@U<%u0?z#gJU=;JKQ@iIWI|TKu`Ds}#B5|4@ zgtB2uH0sv;{OA-P_u@2nE$hNCfh-^)lI5B>_srf}`)$WI^hE7*k4lbk)4gxF&d@7f zXYsW6kFH5f3p}GJF)bNPc(-3K>ak=w3?h;(S&nb&v$VM`EHSM#2N;8Ek|D(23)97a zeR7I-Tp`*L1teOd0zt&h*X7gNS!X&M=O9cWi@A%)d1$y@9`yDtG*u zc}NOwBGBxDmmi{lW`PYv5YMyY5F8+D)4n|*pKv*?Rk#8qG_G_xt*zL4?VRY{T&>uO z`{uDlPcLlGExmnh>F3ze6?eD)ZLiuPKa2mXoo#4l{feMf?H})6_}>0E_I~Nt*jMeH zcHe4W?~7l!T=nd)l9L|v#YQd1`1?lp|DL`)ZB@T= z-O{7SUamj>>!0t%qfXi1^u6bQ+f}^VzWrYW|L671Q`Tk7eo`YfZ~109`Bl4@RhRtR zSO4;ycD?)g*ZbD;9XI}eUwGG=cB!AApDWj0(W=R++xfuP-lWug?v-Wpzuo!jTy-mc x&EK>sZyq22_w&EZ{*|i@Z?=oSd$wIGwBDEZocoUTb!GpVF5N$MaJMl70{~_8x7Yvx diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a.nbt deleted file mode 100644 index 597e48a176de3628a2cd4e586ba0d6617802a7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1575 zcmZ`%eKgZ+94{=4i<>UHsnj{T$YMpeu(+E#9htWyGppEWC}~CHHJQfkAjNIo@>+Sx z+cqO>VXkXC;o4m8khc@9VP49bm)P9j(kcuE#^gl&{S zgF{ucTQPe`G`Na?lp1G2Csnu)(&+%BB;%mkJW-{)>gL4eN`7r*V><@u>2QFd0f28? z6Zw{q%0L*JhpQ@R#T-9X{54LbMY|wB=Ye>ezw{wlQL_ntgprQi+nDzMC0(QBOZUYD-1Hu4JfG{#3Y+^L_!fIcp0%T*q9xz~+ z|6_w|AkgFrA67^0gFRtK;(c%fb_5APVw$H9X>j$<-`jTwnQzkPh|D+Ydx^}4_FW^2 z16Qr?DUdeyO-Q}Jz=x|NF<1U;INqAG$?0q-ZP~W3zEdP!pPdJcE~xVaM&PsKZKJB* zdr0{CL?A<5LVTKz))N!4isqyy5xpRhABLHVN})w-A$jhT)?mPKk;#W$>< zdUsk~x|08jGG{?GHT=pg+S=An7p?~O=E-1d4~rlW!c0vJCZTsQN{W5}RT~BEN0_N& zz4;x;-Ea+D4)cY5OFOme+-TvLA11)OunX|5K7bjL0cSVk@ANj z3>xD!u3Zp9n<2<=;Ribb5_%SZOR$irT2Pw03hPSQ)ER<^XYH?|NN&9AU`!5Lhe4v& z>afZ}?To1n6K(Nj;?rWu}HjV7zoTKG9_36CL>-igztM71W!t zh7PgbH4~rr2#bkB(+$;ilJnu^BhO^X(T#?=+R~e`PdT#Uo!sbSO$Hz3)D|(TrrBT> zUy>d-_I&>6WW@#hGrG&~%U0MP5l6M1z3Nw8(_-U-N^KmZu;$9#3QW&1i)gn#7bl5) z>O)WQKLQs#8t6TJ9ZIw;UFR)a<4!GTzSPaU>v`6d>+5Ro>nvW5^O0H@fG7B=p8asc z#oG9uMq(bf?ArRVGlsjhWcUewa>IPGY=9xXxW3Sb`gm;I>p(`NN$L)35r< QX5=6a(%wSHcFUH304W(6%K!iX diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a_room.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/corridor_turn_a_room.nbt deleted file mode 100644 index 70bf367247e8abdbfce879d589f922fb01b02743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1946 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 Q$4#%b=za0+)dlnZKaYGS-v9sr diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_a.nbt deleted file mode 100644 index ee620bbd44fcc38ccce00199bdc0885fff6d72d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5340 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 KKQz2y!+!wO3dkk^ diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_b.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/lab_chamber_b.nbt deleted file mode 100644 index 0ed7535603849b3a98ce6ba75a2bca35f9c198ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12079 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 T(VF7v%j&(ab7S~QN?ZO1$-t4} diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/office_a.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/rooms/office_a.nbt deleted file mode 100644 index 1cc37bf40ec6179fa5bc5dfd5c64347bd07653c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22690 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 diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json index b669b3896..af63b6142 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json @@ -5,7 +5,7 @@ "size": 7, "project_start_to_heightmap": "WORLD_SURFACE_WG", "start_height": { - "absolute": 0 + "absolute": -13 }, "spawn_overrides": { "monster": { @@ -21,7 +21,7 @@ } }, "start_jigsaw_name": "overdrive_that_matters:laboratory_anchor", - "start_pool": "overdrive_that_matters:laboratory/center_top", + "start_pool": "overdrive_that_matters:laboratory/center", "step": "underground_decoration", "terrain_adaption": "bury", "use_expansion_hack": false diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/structure_set/laboratory.json b/src/main/resources/data/overdrive_that_matters/worldgen/structure_set/laboratory.json index e041083cd..17eec2b53 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/structure_set/laboratory.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/structure_set/laboratory.json @@ -1,9 +1,9 @@ { "placement": { "type": "minecraft:random_spread", - "salt": 20083232, + "salt": 20803232, "separation": 8, - "spacing": 500 + "spacing": 24 }, "structures": [ { diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridor_end.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json similarity index 64% rename from src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridor_end.json rename to src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json index 939445bf8..1fb6ab9f4 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridor_end.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json @@ -1,15 +1,15 @@ { - "name": "overdrive_that_matters:corridor_end", + "name": "overdrive_that_matters:center_top", "fallback": "minecraft:empty", "elements": [ { "element": { "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridor_end", + "location": "overdrive_that_matters:laboratory/center/lab_arena_0", "processors": "minecraft:empty", "projection": "rigid" }, "weight": 1 - } + } ] } \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_bottom.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_bottom.json deleted file mode 100644 index 3069ccc25..000000000 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_bottom.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "overdrive_that_matters:center_bottom", - "fallback": "minecraft:empty", - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/center/bottom/lab_elevator_bottom_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/center/bottom/lab_elevator_bottom_b", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_top.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_top.json deleted file mode 100644 index 1772c4330..000000000 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center_top.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "overdrive_that_matters:center_top", - "fallback": "minecraft:empty", - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/center/top/lab_elevator_top_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/center/top/lab_elevator_top_b", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridors.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridors.json deleted file mode 100644 index 1d817f716..000000000 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/corridors.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "overdrive_that_matters:corridors", - "fallback": "minecraft:empty", - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_b", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_c", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_turn_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_turn_a_room", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_t", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_cross", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_storage_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json new file mode 100644 index 000000000..3d5f840e6 --- /dev/null +++ b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json @@ -0,0 +1,60 @@ +{ + "name": "overdrive_that_matters:rooms", + "fallback": "minecraft:empty", + "elements": [ + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/corridor_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 4 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/corridor_1", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 4 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/corridor_turn_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 4 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/corrior_t_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 4 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/generator_room_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 3 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/portal_room_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/rooms.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/rooms.json deleted file mode 100644 index 254ada5b0..000000000 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/rooms.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "name": "overdrive_that_matters:rooms", - "fallback": "minecraft:empty", - "elements": [ - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/lab_chamber_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 4 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/lab_chamber_b", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/generator_room", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_turn_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_turn_a_room", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_t", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/corridors/corridor_cross", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 2 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/mech_bay", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 1 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/misc_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - }, - { - "element": { - "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/rooms/office_a", - "processors": "minecraft:empty", - "projection": "rigid" - }, - "weight": 3 - } - ] -} \ No newline at end of file From e08c81520f28c77434740d268f311786db716e20 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 15:00:50 +0700 Subject: [PATCH 02/37] Actually expose fluid handler of essence storage --- .../mc/otm/block/entity/tech/EssenceStorageBlockEntity.kt | 6 ++++-- .../mc/otm/client/screen/tech/EssenceStorageScreen.kt | 2 +- .../ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EssenceStorageBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EssenceStorageBlockEntity.kt index 5acf1f262..58a1d287c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EssenceStorageBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EssenceStorageBlockEntity.kt @@ -61,6 +61,8 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma ) ) + val fluidConfig = ConfigurableFluidHandler(this) + override fun getTanks(): Int { return 1 } @@ -69,10 +71,10 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma if (tank != 0) return FluidStack.EMPTY - if (experienceStored >= 2_000_000_000L) + if ((experienceStored * XP_TO_LIQUID_RATIO) >= 2_000_000_000L) return FluidStack(MFluids.LIQUID_XP, 2_000_000_000) - return FluidStack(MFluids.LIQUID_XP, experienceStored.toInt()) + return FluidStack(MFluids.LIQUID_XP, (experienceStored * XP_TO_LIQUID_RATIO).toInt()) } override fun getTankCapacity(tank: Int): Int { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt index ae05cd7f8..011dc31de 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt @@ -273,7 +273,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title it.tooltips.add(Enchantments.MENDING.getFullname(1).copy().withStyle(ChatFormatting.GRAY)) } - makeDeviceControls(this, frame, redstoneConfig = menu.redstoneConfig, itemConfig = menu.itemConfig) + makeDeviceControls(this, frame, redstoneConfig = menu.redstoneConfig, itemConfig = menu.itemConfig, fluidConfig = menu.fluidConfig) return frame } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt index e4acd946a..c5f0cc91b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt @@ -14,6 +14,7 @@ import ru.dbotthepony.mc.otm.item.EssenceServoItem import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatterySlot import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback +import ru.dbotthepony.mc.otm.menu.input.FluidConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.ItemConfigPlayerInput import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MMenus @@ -26,6 +27,7 @@ class EssenceStorageMenu @JvmOverloads constructor( val experienceStored by mSynchronizer.ComputedLongField(getter = { tile?.experienceStored ?: 0L }).property val redstoneConfig = EnumInputWithFeedback(this) val itemConfig = ItemConfigPlayerInput(this, tile?.itemConfig) + val fluidConfig = FluidConfigPlayerInput(this, tile?.fluidConfig) val capsuleSlot = object : MatterySlot(tile?.capsuleContainer ?: SimpleContainer(1), 0) { override fun mayPlace(itemStack: ItemStack): Boolean { From 56db45a0d4b561eca8e16bc9adb0f036cbc24917 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 15:03:20 +0700 Subject: [PATCH 03/37] Add liquid xp locale strings --- src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt | 3 +++ src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index ab1f5619f..eb5df26d5 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -435,6 +435,9 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.PAINTER, "Painting Table") add(MBlocks.MATTER_ENTANGLER, "Matter Entangler") + add(MBlocks.LIQUID_XP, "Liquid XP") + add(MItems.LIQUID_XP_BUCKET, "Liquid XP Bucket") + add(MBlocks.FLUID_TANK, "Fluid Tank") add(MBlocks.FLUID_TANK, "named", "Fluid Tank (%s)") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 9fbc08869..56079f143 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -437,6 +437,9 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.PAINTER, "Стол маляра") add(MBlocks.MATTER_ENTANGLER, "Квантовый запутыватель материи") + add(MBlocks.LIQUID_XP, "Жидкий опыт") + add(MItems.LIQUID_XP_BUCKET, "Ведро жидкого опыта") + add(MBlocks.FLUID_TANK, "Жидкостный бак") add(MBlocks.FLUID_TANK, "named", "Жидкостный бак (%s)") From c5ea7648482bd33fe3a136663871698256e7c5ed Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 15:04:27 +0700 Subject: [PATCH 04/37] Shorten configuration titles --- .../kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt | 6 +++--- .../kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index eb5df26d5..64e663807 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -794,9 +794,9 @@ private fun gui(provider: MatteryLanguageProvider) { gui("stored_amount", "Exact amount stored: %s") - gui("sides.item_config", "Item Configuration") - gui("sides.energy_config", "Energy Configuration") - gui("sides.fluid_config", "Fluid Configuration") + gui("sides.item_config", "Item") + gui("sides.energy_config", "Energy") + gui("sides.fluid_config", "Fluid") gui("sides.pull_help", "Hold Shift to cycle pull mode") gui("sides.push_help", "Hold Ctrl to cycle push mode") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 56079f143..435a53e3f 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -796,9 +796,9 @@ private fun gui(provider: MatteryLanguageProvider) { gui("stored_amount", "Точное количество в хранилище: %s шт.") - gui("sides.item_config", "Настройка предметов") - gui("sides.energy_config", "Настройка энергии") - gui("sides.fluid_config", "Настройка жидкости") + gui("sides.item_config", "Предметы") + gui("sides.energy_config", "Энергия") + gui("sides.fluid_config", "Жидкости") gui("sides.pull_help", "Удерживайте Shift для настройки режима забора") gui("sides.push_help", "Удерживайте Ctrl для настройки режима выталкивания") From 565819c3e3d4100ae930cc8bf52fbd1919d80da9 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 15:06:36 +0700 Subject: [PATCH 05/37] Add placeholder textures for liquid xp --- .../ru/dbotthepony/mc/otm/registry/MFluids.kt | 7 ++++--- .../textures/block/liquid_xp_flowing.png | Bin 0 -> 2437 bytes .../textures/block/liquid_xp_still.png | Bin 0 -> 2437 bytes 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_flowing.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_still.png diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MFluids.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MFluids.kt index d42923a95..c879250cc 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MFluids.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MFluids.kt @@ -46,15 +46,16 @@ object MFluids { .descriptionId("block.overdrive_that_matters.liquid_xp") ) { override fun initializeClient(consumer: Consumer) { - val path = ResourceLocation(OverdriveThatMatters.MOD_ID, "block/ph_kitty") + val still = ResourceLocation(OverdriveThatMatters.MOD_ID, "block/liquid_xp_still") + val flowing = ResourceLocation(OverdriveThatMatters.MOD_ID, "block/liquid_xp_flowing") consumer.accept(object : IClientFluidTypeExtensions { override fun getStillTexture(): ResourceLocation { - return path + return still } override fun getFlowingTexture(): ResourceLocation { - return path + return flowing } }) } diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_flowing.png b/src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..d36635b4d3d72a5dd2644f4bd55341d6da866d5b GIT binary patch literal 2437 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 Date: Wed, 3 Jan 2024 15:11:39 +0700 Subject: [PATCH 06/37] Add "none" to BlockRotationFreedom --- .../dbotthepony/mc/otm/core/math/BlockRotationFreedom.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/BlockRotationFreedom.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/BlockRotationFreedom.kt index 8a7328ca5..6cb7926f4 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/BlockRotationFreedom.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/math/BlockRotationFreedom.kt @@ -57,7 +57,9 @@ enum class BlockRotationFreedom(vararg values: BlockRotation) { BlockRotation.SOUTH_DOWN, BlockRotation.WEST_DOWN, BlockRotation.EAST_DOWN, - ); + ), + + NONE(BlockRotation.NORTH); val possibleValues: Collection get() = property.possibleValues val property: EnumProperty = EnumProperty.create("facing", BlockRotation::class.java, *values) @@ -66,14 +68,14 @@ enum class BlockRotationFreedom(vararg values: BlockRotation) { private val twoDirection = EnumMap>(Direction::class.java) init { - for (direction in Direction.values()) { + for (direction in Direction.entries) { oneDirection[direction] = possibleValues.firstOrNull { it.front == direction } ?: possibleValues.first() val second = EnumMap(Direction::class.java) twoDirection[direction] = second - for (direction2 in Direction.values()) { + for (direction2 in Direction.entries) { second[direction2] = possibleValues.firstOrNull { it.front == direction && it.top == direction2 } ?: possibleValues.firstOrNull { it.front == direction } ?: possibleValues.first() From 73773d4c70a1abb3675e4cd42b92f631434f346e Mon Sep 17 00:00:00 2001 From: GearShocky Date: Wed, 3 Jan 2024 16:53:27 +0600 Subject: [PATCH 07/37] tele jigsaw grunt pathic telepathic st'ructure processor jigsaw worldgenjson --- .../laboratory/center/lab_arena_0.nbt | Bin 39625 -> 39446 bytes .../laboratory/center/lab_arena_1.nbt | Bin 0 -> 39610 bytes .../structures/laboratory/corridor_end.nbt | Bin 583 -> 0 bytes .../structures/laboratory/dead_end.nbt | Bin 0 -> 651 bytes .../structures/laboratory/main/corridor_0.nbt | Bin 2259 -> 2232 bytes .../structures/laboratory/main/corridor_1.nbt | Bin 2591 -> 2572 bytes .../laboratory/main/corridor_room_0.nbt | Bin 0 -> 4313 bytes .../laboratory/main/corridor_stairs_0.nbt | Bin 0 -> 4448 bytes .../laboratory/main/generator_room_0.nbt | Bin 23687 -> 23838 bytes .../worldgen/structure/laboratory.json | 1 - .../template_pool/laboratory/center.json | 15 +++++++-- .../laboratory/fallback_pool.json | 15 +++++++++ .../template_pool/laboratory/main.json | 30 ++++++++++++++---- 13 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/center/lab_arena_1.nbt delete mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/corridor_end.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/dead_end.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_room_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_stairs_0.nbt create mode 100644 src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/fallback_pool.json diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/lab_arena_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/center/lab_arena_0.nbt index f3f70d3dd39c0127f41d2c78536b70de031ee0bd..91e1743a4750863c85789cbe91f94eb1a77a1ecb 100644 GIT binary patch delta 5259 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 delta 5441 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 AYXATM literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridor_end.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/corridor_end.nbt deleted file mode 100644 index aef8121d1c9d31374af6349aa2f37dbdc9d70e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583 zcmV-N0=WGjiwFP!00000|BaSGkJB&^g{QI8O7{67{Op9!?R>~hJMWw*)vA=F*B7t#Rvu?8J;D>GxVQ{?1GVf%uHn; zGjbw(N=Gt0ONM87=2F=uBm0<{%AR5bgOLo+lHs|#az^%?kv*leVCZBFos6L)7&?NX zBN;l9q0{e&=Q{b!UU!M<_m)dc#$W`4>EGp4uQ9Wnd6!eY#?SLquM{IDnKcN%r2_K1 zU_C*B!8yHkrU2=6ZQw(=H@HK4ZxkIgsag{mY;Q4yT9v_jQ&PZ4Hz7FqG($(pfI5PY zU&?@JcLCc1Hhb%}QztWTYa6vt@99?CD45wDynFfW&Q`5{C}2q%D??0QGk>e+Be;sp zRimAW_1)>Jh*^Gi$=}a(s0~HaTcc~}(Qh*-p(X9@u~tu~H|1<~AXTA$97?ZeO7|`V zRAilL)x*I?t9`}IOvO(7%3z!(+Qyt3#?@W_!q6D(PLc%(X9*iA;lzh@>c_U4Bs V{X2H(O5n{`_yP)PleQX(zkq~T022FIvqr2~u!-EMr}dE7 zk>h!EemW~0IxfLD;{%nVKJ?vld{1s|WlgjqG3Y17iDWkugAwv#i$bk$~CO3yElbgemjsW_KOew=sU-ZnC zG890D0?06Ba&wq6xj8K92%xXXlrk*!MRYo3OK0T*$Z!ET%92+Fcrn0>0bUI7 z;(!+iyg1+`fcqr?F9CSP^K0sLF~d|ZFbrTg;Kc!*cwUs&obKVdHJ5Z4pu+(j4(P-^ zywq2^ujbZV(qVuO2Xr`~6Zh3pU+G?#TXRW=0XiJe;aQzEakKR`EpDwgo@!^?R&HBW zlQ6PV^v2#Rw{!YlHU1!d(@F1@8?FM>Tw7z*wYM(7y|pd9orkTH0X%-}q&78eZnTkY zb6Un_r-O`>H~vcMpvCl#Uj6>Nt2M2^ zINK{XKCXq9@<{o$KK{#E^AgAZY4-!T^ld9A4Wm^L2OVx$ton0W(k?dE>F~rYy|#vG lW1T-Vcm28eudxaPvH2vu{2GkM61x0BKLOvQ`~T1n0026%I&%O3 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_0.nbt index 8009cc63ac6fc864378aedfeaaf1812698ee6ec6..2aabd60865f14a538785c06b4257926899105ff0 100644 GIT binary patch literal 2232 zcmaJ?dsvcb7RMNGi9?PWn2l_gt)X1}oEq~M&ZAlFhM3`XGDRI>)+sa1ONjTPnRJ?G zpGiYSt92D`<7KT}B@rTJQ?nhfrHHAEriMg{3TW;NI^{fL`~C5L=ltGt&hPxr`+k7Q zG=OQJ6$y)fUUbB)mD+Dr-Jjpp1y6ywM!^jEe>2){zl#{?M;zUa%U86;ZOe8kFclvh zZq4na5C8PpsXy-f`KuRH^`+$V;s+pqa&Kj}e4O@`E%iqN9y>LyvNf zyboSy3sElzu(p16paaWn=yp%vAV$DS4^ z089xZcN)YDJk|Ta{yMmUzm~HOTVF~GtG?^5!Doa_{J&5qPkznpUC3VBP?8P0Zy`P8 zLoZE}suxoscfL3f-$;N?z<;t}ig*cd5}KKvhBfXO;Cbr-4L!r*uI!N{9>g|sbIv^O zykpE*p5W#z-tyz2N2DX8-%CF=N1}6P$^M-gAr44}#QAp)m`VBdKV2a~G3f_v50L2bizeUirB}P}E_{vGQjP7BUlup* zDBSspXXW*>1fKO{RqA8J0-$WQTw}yOcFYK{WVY4dtta@UjyZ;GviGO$o7mVrri#5r ztkwwEJ*;%ESZh=R;B7`Tz`v^ZDxoC1>TZPx1ZvP)Pj~Rvq0a3jeb07~WT|Dkw z+f)?I{qB+JU~ovMaQ>fdmw=iwmVVI`6PQ}2t>g45yatS)k*}CqpnZhV>}h{1dk@=k zOgqqBeqHhqyN2SlEue@f6Lzg*2@8jiTkn)Vipabsv>cT)66m`NpK(t*1fxfF1kqMm zQ$p{~46j%Mn5vJ)1agn|+Dgo_%EN-}b&Dv=_^7yQc%fwPcd~S3J90^g>f`wSbfaMf6nz-F3(B(+285F&nD)@uA=~r)vvxR+pjNB%n(e%d19O2$xs0kzKnOs%}3Pc=i(l zg&YkZGbV(Pef20aqt^UNV}g6(71`bzx}M;T1)`k_S>NLS#wnfMxx_tk&5K$et#h=UaWNJr0 zrE>#ZJN=Vtv#bqFViR8%J-!JMqr+%`2?A3?a6AY_W*R{qy4=AcS}LJ(2f7#jb*M4F z)annW-x?fMz;gZFped2V+bUY>Rka1!{R~C+M&1U^9Zm%uD`24GOru`-_7pz=(ArGk zMKqXX&KuQ|TfrLD*k%}z#9l15`qH807>LJeihwT^d3%0ClSRug(n!GZKuQBlQ(}`w zj1k=?lFP99&5%nDLf^tkCX`A1Qen_5kzq6YW~euEOXG3da(#m{{{T#vai>7CD+&u* z9a)&uII9yPdMY|K4B+l*ntYD~?d!lE{JZ^i<_&O%<={7slaQ-D@u&OV{gsqcWj+mO zQ}8*R&65MmFWb0-(y7@qq(*x1u-#0>%(?F1dFddV`qQWI{K`Bya*;$i$(3*>;?2&xK!ltEN@bXES*tN?n(BHliDYd?Fd^j*}{$EJkHYmpz=CbRy?6 zY(;EK7A{G7w@vU&dTT~WEBQL*IYKz$Q>AK>ee994giS7PkCVQ9Q`?+>s`y{!HUrD| z+HE-M<;gvcmiIZT`7L7m=CXLdDtlRLEvMj=B)O|s);K*q-leRd9U>s-1RhDuhXpyM zcy6EdWi>@@3XHyUg?_skauU@hrCbEpK%eN pr8=ze|IDw(G&;p5joUT%g)Iy3;)Ewenax8kyXTi^gWfRM{{YFjQDy)D literal 2259 zcmaJ=eK?!v8V@E~qG?frt8sR9qf8}557A&(9qc;Qn5I6`NgKMxXi*=D6wxxJ8?DR1 znpWsGr(*F{%gSksBodry&>i0kf>wMdGR@RSI8UOhv#WaEKi>C#e)oOBQ7;wq52PI? zDx!LbjplY!(sL+cy&M{vxL$0vlNnzeMJXOTc6L$fft0%nE= zA~Eo2ku5@M0&)S&aYRRCVq_6I@9=NKJ;P(KbGETRQE6bhFf!yG|H0D#3oT)h2Ctk! zXbO7JYzCW4;lJ~vF0v_!!hMz}!t$AJokpTz-VWUo%o$D-7fs_VM)hC`Zcaj{9HFt} z=-xaR;d4U;%?s=OLFr{f11~Hor0dHt3_NQRi}+^g?E{YgfSDv4-?V~>e&|u_DR)bI zBlAh|0#4&N;rh6Tfezk+aeutYPCyTW`t;R3i=XyxhSTi$#*MM2h=vb7oZ(V4av7c}bDm%`qv)JEe+=c~xR(jg0H7zF; z`Lys9-^tW{U)j`iTbOwZ7mAihrw`yUaG$;-z}!+2t@P5>pnO=+{S_>ieg07o#U9Qq zNA%@Qw%8&9+vCSgUZZB3q6}D^8$F;8TtpU)3?v?Uw{8v9!^r>Axe6uZ3ew zHwBs~2VJt&Cg`$kmJzQH#I0O!s$iXZIDGD1i|xgmFvkPQT_6gQe_G&LN%(m zcO?U$@|RVcyb1yrWOc53vFZraY3J4o!qvClZz5LWHNLHL5gr}YUkgUYNt-kQTG<-K zk65JMs&g3KGP3Hs9`FBkD*livQr~Wnuob$nP4m#7|0V`+6=zY5s$AL*)Npp#B96`l zgHaKgjyg8#N9dl6hOH+DSGY@@^grip*!IpHhRYz4Q%}H-HK5el1zh!H2-w)HRS@m;(=O zMq(JCMY;&7HY_1s{(A-TFUA*l`6wZGLcGvyy?+ZWG6LK`w(j4X>z1^KTZtUoNP_|| zD6UWEkQwPT{9915`?Ywjwu$3PNVX&p{w))kAmmjbKgPKCd&f!bSg+J}t1n2h^Dl?= z-CWk~@YC?Uk3TuW*4st=ClJYWI0eX#o7n=@@#UB5Lm^(xjLTDYX=;5lsn@p%Q=gx~8I+GiJXjj%F+sm!a;-0O3FJ8EtQ#WTrlTa*|qb+2s$=VXtzpBN=nV{f> zn$aprc3g8bOZ-yV_v*(OR!XP%#PYgA(iBshy;_sl8nQgl`9;p5Q^qYrlBrEjlIO@V zlr_1o)}=G?%2CylS8X|N?*xB@y4RrMv;T~r?RK*8`KW=1iSf*qyY!+yo}mjJS`-| z&MtT~#--t7YeE%l%l4RK7y3p%ua_ha40PUK3RaRC$m#6jWY6oz4hPU_)dhQHcf+t* ziDKXruql@?o$nG&-Z%{2Cb_;OM4M~an_$Ua__y{ zXO^cAa_YpJC%Qc?O%H}-=9xb&NZKq6Kaw0mp^N9sS4XM%=pl-V#_{-h1-@s0n(EmI ed(Nq0wHi6+$)aFFC%QJNn-DA?77h)BK>iEi*itS4 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_1.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_1.nbt index 309cc93e930be24226972bd9d7058a76836831ad..5a592b1b69220ed5d9036a5b4ea2e8d86f59340d 100644 GIT binary patch literal 2572 zcmah~eOOXy76;6nGkV{S=W zlUpjN^F$+>X6u-VQi783jFLVRs3nqFeHI2QtCfW=uJ{mG^aYwy;eqwS&(tvO20|4b;x9%sZS z*}T+6XMM~3Jor%eix_EcfZKQe&K^trjD6P|@m=cM-WxVEpGu5vSG|{!D)pVluo{!o zLDGb_B5kG)TNEIEGAyBJuI{y*jL3JEoz3Zxv|SB3Km0H_)?cv}rCcY?N0!+`OwM7H z(nnflqg*9TvQb8H(pMI=HVA?R{1)oQm@f)^q)8~{25Gq^Gu&LuHLo$A8GZelafc`~m@3g27nFepUZe(r~;{3AH047J^LF$g)LHC8E{|;vs4sp*=`> z*WC)$ElsV?=_Vp`dCA5IWE z<*PO?FKOLD#75W+RM?EF*N>{*$gL{nz4ZZk4QX*8Xg+cdrhv@#dmAcfp>C+=L10$O z*xtgxVxFMw-r-yzALh4+(yIW4?#zOK0~yV8N+0p^#$w*7UBbi4oWisR39&H5tmy6R zh(p$-l!rP30BeZ8j1lAvFmU<^G{lqECfjg%3Tg+sb!=9<0Avt#R@G2LT}fdKN5(%c z=SILLIhI?g@X@)(yZ_e{`$po~E z#)9Ns2YvORewT+be3#Xokd@cD!?{~AJ55^R?$s0qmw>Kz5eCVN9eU2HJaipd#+Fit zo-ES56^QIFV8j*?gQj;KdSLL8MIy_bpfFCfZ2^<>XaN`odGR5Fu-#3_NT{n&G0#Mw z)1Q88DCZ_I-aW1wWq#IizZf1-5NQ?Y2Ka1{sWVR$A!_X*<0c|+6G4LjheO0*=&cj2 zb0wdTz~Ct~bzoNb@0Fme6#WQ2_|^M8nB*Hm$W+yTLl`E-atX#%Fi+8^p5hduT8kRA zH^E#1XFUZNrFM_-mvr(q?Kn{LKY9lWA-bQA-{LKV+OXVX_JHtfQ8%%!0}cROe!ujF zmsM2$^rnX)J!a8+w(Lg!aUdp0?*Ac*?s6ISZ;-O`e%I(yaWdyx>CJUJJmajbIMV#Q z`X3*~MH1UL5$^=lEQ0nmtKqAmbHCld6Y;$(I%CwC2CklYrULbPixE+~2)fe5_P^wA zNacakxC9A~EVyU}!Og=7_nj9XEi9-+jBSGwULeUYPlq?f`LbBw((?T!#~b@*CO?Tkbw_u>+?51OW}v zhjSZ`9!Ul34fxie;2tDWeq#i5cV9mknEECHm;x3&Qd1_l|52a|l}LUBW{-_1#a@?) z(7VdJ5OgrhOQm2?@f^nIc2p@)8aS|mggsEeqr-NjM6~of9P0yJBIm*Q#~{cyRW?+; z&^yelMa0yPrtYyJ)}iC5jz7P%ebqoq7a~t01_;6WE!MbSm7wnz8Tr4!7;Op=9_zKo zCQz6Gw*N-OT?pbIrO<#8zGCKB2MU=|TUc=bDFmWn4__DDA%jF< zV}O%1_CSDk4YZD|M1W92* zSE$%n)?TmbCzX~AjO69bD3p%!gQVNp7OiEUr zxB4Y36{DyBqFF2%kz;Kqv%%f$tSItM zHSdkojcRdAiZl~no)WFO&U+$jp18NYF?OWaEGv|388?f0Uf*Q&o9H=1_n}-Fd+A@i z%5cG^Gh(r+tUOtxJ$z0OqOEtnbPkK}Rg|#LR)s89j9M}(Z?-(bJ7!zb+Jrp{!Psi2 zDcqgutzT2F>O$I6{XVp~UYcNOW>pF^(T&x)6Mw4nn8z}9(yp1s0W*(EpX=N$_zQpA zI&`g>>Zo8B{n%UMRd&&$&g?-O#=g$l8awM+($uuJ+R~jnOcDlq`C<3Z3Mc(st6CG6 I96%uc2gR}WtN;K2 literal 2591 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 PP&Mv1zx(&^l$8DtK`6`u diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_room_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_room_0.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f6933f51236e1309afcc0ac33370cf6410f69092 GIT binary patch literal 4313 zcma)830RWZ8g@x5*G9VmEz@$FvZfHj6jXE?%W6s;EXPs|s8PpkR5CPoo62tSU+Yem zG6Vz;p=C%&)n82@P#I!WFKb#DEZF5{_mmza4uSqu$ zNpaK7or@9cVCQ0Le!*7+r5ZC`5nEBYCK&Ie0{wan57OIdNvYNiw4kIiHt`Ig!@4XI z&kBL5{mU>sA=Mb!qvuwhL_|~mI?UIb37yi-F)N!I&ftMT{o9qHzjwW6&Y##?1QcVg z$Lc)Jvm#@pggH~QeC4vKspSxT1(UYvzu80&Y7^=NF=(C}{v`a)+JvMVPC;POGv5uL z^&00+Htx0JS><7B*FcAjSef@f9oFdfZpPH;eop+sX!ZZ0Bm6S2Pl0k1c~Vn%Y1cmq zg8XzycR5K^3WZ5pIYD_pU$PJB9eau>;9{iZ2)B2LqQjV#9ji5c-RS)y2gPW_Qf zhP_zR`k;kOK`_PTvSF`2>kSra6JVqXMyxkZP}|5D-L991Os6x)mA2-`+$sED)7Ryu)Fs24902x=v{(V155&Dh1u>~j8?V4Mc;amUp6Y_w>g^KJ>}nJs z&IH05!H@9f*82EX?t=Pn227DrWDh}b3QZ|{P3mTDbCz{x1wM@;M~(+AW(vxJoa2=p zN1O{7!GgHM;(QgT0N!-qmXH@mX^M4YdR<@Q#tk|Fj5#9{mSjp8pOR7Mzy zWugm12H@@e;_I6H5Iu+!IYyBC6Af<1O_9MfmLmw@L{M7Zd)zf3O^#utPX%ixA z6RLz0a*v0JNFS@U`GU;$c#(M@1Q=yV1sORWhm!zDAqb&y8JuX)JUHCE^Izu0PeKJk z*cB)l5NoX@^R-f7WJ^y6R2P7~11m6H^W2kRvev*pJb>$9scpPm=X2I@;Xl?ch;SIB zrSH28$MnwS3~M%tJU#W_Ij?~W2$})ps||8jo;F{P2yFm;rcOs}8Zq>wV7+=AZ|5xR z9MHP(RY(jug)(FklZdGM`6g5|Z01Uny@e*!-N~4>uE-0^q1t(F0drUzPH5$QF5W6$ zejH`DGiL2l%x%v@15i8 zB`f*1x^6ePeV0aTsV@bDdWkJRRX5iNM63;OD(v#0GddCTXSjsnJ9Y&+MZf+uB}KoI zl4{L#B?~q{!v?Ild*EUOx8(a_%l2nen8T-%cS@V%3Pv7EFf)D&fG>n7)g=>ZQyaA@ z^X)Sm+y+*1Osym2>j({-vF`E#lQ4mNd(t~zr_K8NH5${cR{Am_d6k0ayC{v7bc(-5FqOcgK6l5kDC}qghRQ8GY6i6%)u07 zz8=oJ6sDuog8p2(e!R+``w*N9iUr`5Y4*$9h4cxdfo}f<6rKm)MKj@xwMD5>hsr|{?W$c7x6hG@|CJKWR{gzOZ$RLMa>H z>Ta{g+1jJ%V*f)`q&jDE_)u|l^zNp_wvOxVtQTJ{dT?_?ain)%E(b46y7NQsU)NMU_yzn?Up;)jn#W!oW2B(`1wITJbD(9oPIg;OPrRL&f!{V5+1l7r zmr>Z-dN4wLIPz9jqW`NMRgWefGnxa7v+mS2?^li@)IX5}S|%lm1Y%TCiSIsANtA1S zsCAmi2>G(r)r=EaoG^MX=pNk(n&|a$aVmR#{jzoBsiHIvlk0oEoquc9!|t&52F3n% zG=h_B$!zJlt|EP@L#TDyY$1S`$+((ta zRL$$+e(Mm<^}XwR{S3=<{M)L*5~1DXzr`Fm+YW&c*~;^F-yxH&&-^YTDSPf-sv1an zIveLJ}yAy5ZrN-eqii2h2$9F{&7+ioa$a~4x92+9~4$>{Ile%#9d#@(kR^=APIE`CxsCw1s*QF`i(TLaoEN9AQ rHe{?WT0AgtEqi6*x)hC5m_+lEEgb*ZZ>Pq4V$s0M+(owvb#(p*NvD3w literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_stairs_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/corridor_stairs_0.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f0a1e8f1bb33151110568892078b9ea9db2da679 GIT binary patch literal 4448 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/generator_room_0.nbt b/src/main/resources/data/overdrive_that_matters/structures/laboratory/main/generator_room_0.nbt index d402a4b12995772b1c2415c045b6a38d55e523fa..be574371872e8239983cd12ff27a102f6e9ce6b2 100644 GIT binary patch literal 23838 zcmd6Pd0dlcws5DkWO`NTZ94*$rM>N~Q>&232okpOdOLQeRN4j=*&)@mvZ-l6*3?p^ zEeM@))F>phV+&=CkphB}K#@=dlIchY$`X}AY63)!0SSbB=e%JFo6h(B_4QYIpZ7fH z+0OPn&pGFfQ`T>vApSEB^uB%Ee*ARU`1+Ul7c8Fn;I(&u{rST`o%(CX`|6En-j+tW zRXSe#OZUdFp8E60XFu8a#H%v>uR+g*ohafAeC(^-aQ^#~r$0P-vVG9n&hZ|*;O=k7 z?yeoNx6gO5Pfyhrge!bDZw^eKx~-LRrM}@jhkRlB*q!zwcfPOVdZUNu=Bex5W4^}j z+ybLq^su!uqg!#w_>=E#-|!xv&H9ITWJPkhF{-tvE>hS)dAg`Kq$ftKZ?$dRC_bMpSWjP6 zBzj)l4#%4Z&BO^U1kR2YH~3&Qr`D4^W;r<3;AOk~aMP36CZC>8hHa~j`2G<=YUKKG zEQVc+iV6QhkoMo^K(l)DA}cl4)M%7wYF;(h;bWlkD^;ekQ#O1lNV9*`8t0K?cI9(W zUf7x$P7Qg#vJ|;fq@N4MvTgA(!--{Rnw$_j*YSKt;K(_R1eN+rr>O_z+W5I(Wz>2g z=S%a7hm5#o=>7sI^N-z|$-qW_#N_;+JQL&pH ziHjXQumnLC&ihV%G~J^)a69EBEqmaFMa9wdXXzRe#q6XiJNi<^@u{j= zIxa2TqqVl4+p`3Q<%Hk7)#S|^j~s33IV=qwzqQ27rnUG{d|fOJxfRD2lB&zcW|nsK z(&ny-kZgFE$hr)df%mDPEQ_S$bAe%cRznvk;?W}8?t-Wo_LsBTxLA4oVLmJ9<39!p z$tPX1A5rY8U6WnEdUZAXwYI|F{?g#t>}@qX$Z8VZ&#Gr!<_9)7{&XQ z(R1>)KyA8&&(SCTl0E#!BXnw}Nn=*@w9YN7T}$iS43yg%ZBozb_{S4`IgV6JbF53f zHM>5yX}$>L1N4{7Ek9d1%{Wz63>XGB+cA9 z2`{)kN_zOaD5J^0TQnng*FzWRGhNrd7?X?AK6xJvTxU{_K*F3ga?`IY9=%L!PvASS}e z@%@PPHny#Re^?M=R+d!8gk<$Q(4!9vsv7dG+O9XiyG~7M>upp_9~>f59Id7#XAdWN zk^L>jycV*K`&z4iTG5sJG{r~fCp!|)toNMY5v<__7WkN#4ysTr7BU5H?4Ig6c6g399b{vcX* z`RigwMz*)aHf1Gc)HZ5}a=DBCdGW~gWa2f>F`C+q3yIk|Z#gu>KXk*GhLBRT~qYx$j$N7hBapwy(`D^ksL}ei=_KY}n&A^~N94FK{#nF4CO{epD z@;tLBPF=$J85y5}q3C-b<weU4`fq_5J4T(3OlH7}`cJR)6n=B%!bKk*x~jRj~PtNmxa$3AJtrfuq>n9zdr z5=ozeIDv8MtUly&>tid_pLAZo?#gobC)G2hu)?BbcXJ2pkGjchfs&D3|5_uwY$^rh zUw5{xgX+4fGcr%Y5K+GlreMW~6lfczqJE9-vWlU*XhC`^xyI6@;2sW~%EKn;SmMa4 zHUqw_*6zQX=(wt_|8UYqveIJKmRPmP8oZo1Hc@f0A28BFpMe2`lu^>I(VIi{eZ$9M z`zAaSf-~3DR56A$_N%6>2KQQOMr<#Z_cz8yj$DO**4YE|&&M zB2u=Kx-)9W^UwKMr%=0im5rnMtEx#%=kAOoD!IBn(UN(Hu|F8ifQ<#cJ2mlKd!l=F zlC(>Bb42W>vFo;p7)o-aj~V)I3h6^ay2|tO=#&xby^gek(`CxfCNd^i>~rnbmfe#P z=h|&k(#2g`S23@ElAxgI(*CM@=wE17Xp!_)^g{|>%O61|G&MR*I>DD z#wyml@O_K&dPH79Y>bvlT+qU5B4C0gt@R@l%@Jbqs6Cj4{n_4`^r21vYQC8sYBfTb z!sr7YU3>j>YvhKy7kgZ?+q+~?w`xQ_{m>qpsABb1_Stwj_3)Kzx+~MCk|-B8_;I(E z(Vup41JZPOTujav*+X01ZzG2uzAVmhirP-9+0$Z8VM*c)Ue(C!>K1^i@_VDE5%9rF zp(rhw%$+q7Lpg&b?TUUiyItFQEUAwws^lrlwJ&Xw+U7C*xZ8rI+CDdV(hoW>&1q_G zHBaeHQ~unktxQzJ5{8LdQ^hMNXFAu=)5)wjbwZnUp(M69XS}haw!E9-%c0h=JO@cM zW%Wq~D=xZzb#TkLJX*j|_3SKv8ZgV{QBuIv1q~Uv&{bGgxm5$a#7diBo2-ow60Q9a zss|Fe-9hQy!e?gs84sQAa9&}ZCk$65Y33C(gB62eyp}lY>haN=)mH9t(Kw18>vzCR`?$ZlT2k9l<^z)kW%BCo;?;|2O4`1>f>qVyQRhZDRO|PpnKl{2we~T< zm++2$rbidAv~e_KRh)X?{$MFdn^DaC4J+8iZAy|H{z-BFWUGcM5v5CdTv_>|5&5Z% z77`6OHkPK*bR3u(sBw6^G5<wR5x`^Pv>=$KrzVlL`$}EBmy*LsGbKZO8gy7{k*te zt9#h9#!JGX`iO+(<@u>1mnc?xuAh2IFTl~wvv@U`g@|B8fd|@?B`NFy)4z=i<kq~*7VTH{f#6{1G`-iZO~nOk>dD#R#}x(oj*XnAvfq=| zb7ueMx)$oss;Wnjf4%RX;7$O~MS^zq^+V*YLDHJ;OJj*J*tFcO8H+a9`q=mIGob`l zVLa=`U}i>a`VY{cW&G!x)sC?}oqCOz<1e@G-K-|Vv{CkE{+^%wpdYny>K}v8!jkvB zQ(zUR27}83-Rkr>QdiD^Qw1DbSaJWTRz{Jf9IEDB>3cS?_p$oEf$1q7RKjpHUUw6D z)^H-6_*4lEWLId+&x^HBX9>ps*EYrfGk9>Q?gGM$#r>mG-P%b1T+j~|1Yr4N*$&3W zu6s^?T+(j8(2R3nB+ui&^u9o+8mz$j4v$mK_zx`d7*%GvGuwu|t_ioapcktU2+bMD{1{+le^drNPQ4 zbNUa6J8Hk^Ka@{l#ogZQsC21#hnx4XIx`LSk;^p&?G89;PTu$p>T8#X$DitLJ-6i+ zGoMEpwK*3yR?hqnH5`2CfS=quR$V0AMu)zlD6&mIaMot%s7{mIyd?GoI&YO9H!qO* z7pghOA*S+Lr$?{e@tAJ1Oi|QB7>(Mr*dasn@Uh|RRGW9ZnJMSIGx6Y&YDKDHfjp{X zeO~NYEk2+6gTPyjp3iL=u|8lP??vRn;fZ-k;2o@d0gV^%&yJp}y>c_1yK+Q+2Od`N z5WDdiIxvi2UOZs8D%ZYV<;{TpC3m=u_I-BHbMg?yy`afyn9~Y(@{gOk(nOvYG`1Ht z94hID^wd#5u0=_jeWBzx{x%ON*ZK?AEVzvFSvBP@%VPkh?Nh)|sIA~4(b=(Sf3cS_SZ*S;Q zKSey+3gUal%C*^5qK2-1rVz+upjUbO!vRyH=^FLw1sZ6W#b|OJv%MKU-Cct^=4&v1 z0h|JxBL-b8yHhD$yewo#(e7^8y#ej$DbP zuIFG+x2!o*tmUbdvT|k_{Po6bNKVy#-GI2ik|q3zBCD_FP+RIaaMUVhmMI+l?TA+d z>3vZAJCk7{%qI&a0%!au_Mzw2CfTQ?`Po9WLuIdyl8^x28SR^0Kibq4?d!*tmdn#Q z)PjpVK{=DHw(E9fIUn?<1Eb!okbkV6yqWyYSX=w1UaHHbuxmIU@D0(F-ty==7VqAx zaN|>Y`$xS)VfATW?R=0G4X+}Dkdee|=}3~sdwya$_~HIw);pb1s!Pf!)tR#9K$qVa zN>VE1Y3kGgkbOVySO|ZjZ!|#K9aW-?g?^Y6M2}$~E{;CGS{t)pWDe$8J2p`@wURsf zYVv5(d)aAW4?1B-<6Z+VtjmRZL3^+=Fghv9Sj~()}E_s zM-8|^z;!(b!3q+sKpC=Y$1l~T8&bV4gtuf&97!TyD5ole#~f(NR5hU#S0eKKN!_V+ z&_rIg!+AU2bplUHf#q&pgO!bLc!-Ok=hal?mc|NQy9Pah?XGZN;D(23-WY2eXy_Op zNM5P20=Wb4ZSKor$E|+cqA*_x(3>WYehyzmuYs}U)xrH&i%t@_|Ef~Qk~ef}>?oss z&(k&DlwB5D*rtLcK`Z>YY`(#&P*N^m=m?=X1dq)D*uo-nU`7kt*%0y5yC#g0+Yd{ls*K1#cIR+1RE4gQeef zOk`=n&|?X$!rfGQo*WLz=h}hFlQR#Xr_ZVPyC;#bK5JSIv} z8Yj&!W5h^10O(rH7}7r1%HB@TgMo6dfzYIh`~Ofqo)yj1j_^Wx-dpLrVlJGgyx*kd$v2s+J;;JjFmG|J%jorbWUuroR72!-8 z+!q15xV2S2yybDR2*NeqcDB)QekRPgAh6+JWdcByYmpz<~tf9!IgHF=&HU#nPBv z+bO!*k*lxcq`Y6`v{*1*i`3FhkrEPHd8eUE*UAC$!AI#~!lAvE#3dqbntn3IQYL8G z!~T?N-{!6<;$;AwW-kS7r?9yH1F@!swewKn1tTvH9(>JQJ{WAq?nMEu`5~yA*I$|s zm=_CPz$79KyR4x##mz7p;M{?Yp|33+&go;&ki=--YC}fQo9_x!Z zD$@7)Q6*cy1|~6MZ9U~j;lauC2rck!&bOY*0kNnjoj}2vem=OhMTwEPE(p|4Y{?!b zQL3FTwJR?xWCCtS?HCY+NleyrUALb7bndw_T9%>nh#FA?$j1(Zv+P2pz> z#*&u`G?%1&dp@Ihvxi;k z#-E6Ixhb5rNLm-AQ%no}#QN2R)GWA+sn(a|M-BBji4P{Hn`mwxm|QZ_V+i;^#DZYB;3LU;wMmP!gh6)O%CvV^04tg#*QZPK(d1%h5> zWtp^#TiMj*;hDYY0Z9WgL*Vts0N)Sb9-|y0CrGS_N1FX$>fOX4{pRdYr_9>Z*K{8L zizR`&pG=sJ`z9%mF&+^ZY{Zbd0VxFdk{Vf(@dHea_phq}e#f@kJu*h|8LAS-17@+& zKp)ujlbIbLilD+14%zjJMtqnnF6gtlT^JvaFn=Y?gfc1H;f;o_6uaeeAV~Cy6^Jq~ zb{f8NDeBJ8zF3@-;aQQhFo`A{ncaCfTVVA;HtQvNnS~wQ;U`=5AH{*BjbiFoSXI3J zVRHNt_zNbWy2S*WMwgJpKK`Eyv>mpd{>Nq>(&G^j#&q916wwl}b`t#^tRKPq5i6W9 ze!O;acZ_Qx^_Da$k0N_U#8G_~4z(@-v7vGAX2BrM(56Pw>`9)k=1=eh@(s2ry`REk zDf}+&%L|%El{}w5-8+9lBGGKP6)n(bP+Ri6@NtS)SU2#-a=O_1I#J6}oqWVdra_By z^jDY9!YHnoxC(uZJYpo1RWDILcEXP}|G1G$CLb}Ig;HWhw)w?Es`jxn{x@G#m`!2b*c-t0zDJBS%_*Mo5wyYBNq&^d^XYYqg`!yV8rEHWhNvqP z=Hd3XoCvB?o&_VWcl>POV8xm(*vnjXp^)^=|9eMf^e6h9&%u97ScnPz|I`l+2xLB= z32;s>yRJgvMIc|XCT@NsFai3Jqw|Pw!d#wX6As9+^vrpUP@6P~$g#QVLZRZ39Gk;j zM1QkhW_vbU>b#<9E{_?EXz>`F`GYP?03?~!=L=W=2=qtr{dRulX)BJM!_7OO$i7kXAe)TwB zfP?@}p%8m3){u%(N@tszz{EuU4LoSRTiVr_V|wyTj~hKc4@Z36Ym|4c+K1)^TQE~1 zaxU9jL#SzgFlQ@eZH9=M9P60nvBv8tCnahmB+t`=Uc*vu>*-9RB*KmHR+YzU?XNfT zSGK)E$>q0a9ESUQLa;vsol?(vODm4G+lu$~&a@o+% zdw8c`&Rf+se0VmGWvvC>^{BwEsVh4&Mof02+vZWSaY`!*u%~_7;>4Hb@?ow_b}?T- zzd@GAi*4(~dw)l-{8F&HxvMM+(uCYfZS!_yx38O*M&m|yThn5S(8gfdHg8pSyQO%q z1-g2iYT+R;uLL!=%I;xF%ff9UAzL$mAY=Nw6~GK8lB7#D3?qrnxU++Z+5NV z)I%@$_=4o48B7zn)|azve~`&Fou!jT4xE?qW1h5QhP63x$&{U$%(UA-L;8&=FK0Fd z$+jC3hI}F2^`)7yAjQPT=U3%cygn}GBd=Lj$_uWc~_hnPQxTTLtF zA&(2?r!qv9lggcw4%xA;g%#1I-TJ8g!Qm_8)T@0hX!0uAXpjCsyP>ebmlfK5|KBMv zwe`w@91jSK6&A$d z4pz&F6@HbQhVW@b-B8I`%rJZmNE^KWJV>G@rnp78h9w zQ%VOqxF86pWT5ki)j^0N8Q-vhtU(bJ(?7ZTbRqSrbv7K;v)_kAp!4l;vDM*epsnZ8 zqmV-!CzBAEs&;veAZOD|w0Dc^q>|Myh-L-Y#Nm}SCAUJDNfHOG(k_MDp z$g=Twfj^SWGt&-Fkn|>F9et?YLLBx=B&IeuXJ8kJ??D%eH=&C(8|Xq8id{@SN#ojX z(sERnzXuPDxer#`)JSZrGSd5%Ul#j(b!La3?r=w0REhNm27958<`aR|ilh2nF)V}s z7ItiA5Yay^Mm*`<|u+4b(MACVR6!Me{ z^$AGa8k#n{SjYuF=!TIG@kPLgG*9G1H!eW2z1?+i(8~y!+rR~FE8$C(2ca;<6nrXR z{)aLHyj!{7g9`cl10+@d`MPk9>XnkEfI-S=>HGi!X3DGYyaX+xutioebmLqI-PCcg zn;T}N;XUNuwjBib=t>u|Z0imX0LK!O0L*#L!|flW*!i&- zvNn2&XDK91_U=YbOG-|+1SEFqlhV`Tptm5Tg1iJ=?T|MaW(48Y>XYrj2fuftbo9pH zK{7O1RSHew1KYg{lbiMpQet2BvWnjo&Ae)v7;1JXYh8x(2VbX3VnSt?M`4GuLhZS zNe0YQmIL#=<8j(arNBICFep)Sp9+#hrCQsR_FN*1A4O=>zp}P~m-C%nKsxtO7_;sU z&i5gPR#-I*B(k1xh8|2P@tz}@0;QjyIn2D-8#W5#N~qnL@DREmD55^`M)+g^DPkb2 zK=njf>OGpnCnsFeODxXaZ}tZ);X}bAWi^tTS3eUwoT%RBS8=WDyfdY%z_r<6RSi#a7~kLQaz0y zx1g)~d3^Ve*h8XuA3ni7jw(T++Bamp1&UJW)`96<}fk9T_AP@<827&(#i&z7T2>sL?1i=x+TMB6U;7ayq z>}+i$AaOryjZaa0R=oX3$Xua5^F{_o^=jG5sFLI7Hh#V&aQ?@EaeMEwyD2hupxq_U zpI$1|TVn^l*ntr{m}-JvmjaqTEyVpP_;gAJD337`lt*t3xsT8p=-E^g>X}m~=$Y{x z=$RoC^~|?yCK6W-87)&!GMVgq(nLSjtIncW_5t=+4p2nm{S}$CEee?A@CBTxSg%$v z1pov#ZHodn0dV?=5wPtx)h4Bo`rI2f)|Teg*b#7Xx(%o-^*K0q$o_hPH?A9>4h+z| zzeH2=9!x4AHwu;i1)Tp`oWEl;&j0rn1G?g5dlu)KOUy0#1vzBq0|b_o3rjK&9k!eyA0O(9{=S%O2JFna0@#^-#JDrtqSn#N5O{!_RSrPd_HE((1ivSHE20!5h zUdFa2;KA`w!&gAEOyr2ud0lPLB<*v&`S%~C+(Yh6EG7$T*3v~PzJ z^pS$-nmxGOQ@GqP6vvd^Ada&@IFmvpihg}r($qn6DHe7&0|I8Vg>@Q|AzfwuMpZSb zBtxoj9mTpoJxy>Rm|bi7`aRC4X0p|R86Sa#(i63;*pkdjN6?)8o&BIhlI8$wWmHKf z)38}{T6HS~lZ%o!+t9r8v&X0A_I+e7Ri@Oj8+Mnpp`V z0X^FwCWf?$Ck_kp0+qxy3afBgi|`Q-L@%=vL=QT_ud9hCb^;;@mH8_{PNC{)1cAig z0u2Cs0;o%8!1(4(;Py1vl<1d9{b?a+b_jLa^9yE6L}2GHiGlWMJ_u*A3~)WJ)4Wp7 z%}9qm>d~~vHjm)ap~SDYAb;VI(F8YIl!#}M`HuiA4ZArC%$Qgxwxx9n|SS4ee> z-bs-OcEepHrycGhteDQSs1kZ5fqHFsc~1Kcn}`_rm;nntP9MM)l!v+)gK8!~S!~&h z`%<1dBnE&WpaN8`mc7J9k9cAWxLVDxoDYP(1V)F0V@w4jJqNhYdHe{sX1qHL;=XQd#^7=kaY42$;016C*(_XQSeoeZ^Z7i!&dK>pecAT&&J z9ZV7l-Gqd8l;EXrKN1?&^E+G*@Z=Wq#9I0BPLSVGLaGfY;L+>@KHznjRu^+IS{jI1 z3_uFAN^b|4_MBZ<(pby^aTl6rNr2DuY!2A-{mA^LT1oRxz=VxHA1y0dr<2o9XaPc? zh^UXp&P=vywjE)>l*t9>O<1#CpdFs;>UhX9Elu624U(PK%4AXH+{}qJ;zm4gt!CD8 z{tOt96ahn+{w{1aLj*WmT zsU&BVkf6Zo{p;s~iZ`=a8=~SQQc<7j%ZLCa!&|~pO_p7vmuM^RPaWJZ3WG%O)<#26 z-9(O69seLj_A+c1UxoOw-g0z!sI@MnzM5+_ISvZ?x2$5TE6o9!zd&Xafo7XB)d;We zwb>%lQP-U&6tn?vIRnUMt_^O{4u34TQF|HX8I}x(?Z2Thd#hs16UR4ig4dy$rbNG7;yN@BG>c!` zr-38TSE$ch@dRac1+sglpFn)HKTyeCwFqQ}KZj=mqMe%UjHpbs(!+iR-NB~+6>cY6 z&%>qu{|-WJ*3BeR0QQmSEW^U_w+)w_7X6`FAbD1CD z*7GV_#Fx<`T3xwQ*4JY*+3f&W>a<24KxVd^`9z*!8g4i9Ib(9R&T{H@<4a&fzrv%z z*7L9zz@ov!_$r4&W;WbQl3S@Stt<5{ff#;252Cc?~M)2Rmxm`)%Vb^HD5e%_KyI1+rhWY z^Jw}w@)uPG0ksXyqHg#^7``9aWwCHdK$6F+zB+XnB$+tO1G>p0_wUXe4~KKhf}7mL z_AiOk6$6!m2TD&{p4tnhmr z=pQ&h77pNiRVVzYH0xk}{0)G@oU(ADfJ$gDKCuar$2t1WE<7jl5kZI*`gORHQf$R1 z1R(8%dgaJzfPiN5Q8NJz91QDFT?wFdHAF7(8cE!TKEfpw;kw{Hv@{Tnv3X^!M1JFv zE$;uvQTa}z@<~zol3zpRb4BIjp`PmeI_;x?hI@xv;qw?(W=Oo0SNnqY;C@9o@uB8a zUH?y3^V1JU@rDW45~?%YENz&s8skJx?dbs>BZ4fueu1NkfnCTAc9J!aKX)t(evzo8 z^4?}pEbg(Erqg_hxH*792ikLwp%ryQ+FwVf00K=;0a**aJ0TKWiD3_=Akqv_3GpE> z=X)BsqfwB-EqF_xxj)0*2Z5Ml`^YOi^~O(fqX4}Hz@){_2Cy4Bm(gy3Lj_Xci6=+( z78;dT1P2dz{WJ>-QAU*lXck{y`_LCXITe*!_AoX90eS^);_x#C#1s1k@BDLbc&^Pb z^)}lSP1IXuaQLfRg%&3kJuPufcsgDKhvAa$b3nu1qnorv8DPe0BGLakA2GY0)Yt_U zNVgj46^ulTj|3vtA3-9{06o^gVSYZygf~t6KV!SK*pB-da_BkiYzC;5G&%|WcRM*X z&G_9=AfH1%%sS)nB&k5pU0McI>Q-T;d!RNo5k5pzjiHNK6pmgp1BMbbyTB)tE+Tv~ zg>@4M>P66q@QgBL4fBG}6y!Mz&uoRB{Pesr` zo+OerB2%yOgTGq%d>qKeVXSp&A33ng99+aKf1zJ#X3ANy+40bCLf3L0) zew;v-ffbHs74hDs>VD{<5kBPCKZKjdU7Tn}4SeJeXyAJ4K~H*r#o+iYbg>`6735qr ztAJk$06#hO3Vw1pXkEkM5-VVHtY>a2&4u0CzA#ydeR^WkzFPFUNwCkviZEaLkPf`! z1L)KLJNWcVXcZuD!VBmLy1mXO*ZrU%J^YI~07sRDSS~YIcq4K~?7ExS#iykqUUqFS z!`nV9itOoK@Xe?51tf4I5_m-gq*4F~0t8zzKmZ_REHx9N2GUX`UTPrN09HhX^ef#7 z3ks_`Lu84-TDTvft??@bECymxudN1{?#xrOe^H(acYr*d-iaC?ghKWaVTwWc0-W$Y z?L!pSZxAUHk!FBg!ZT)F4z}3m2T&pXKQU&twG{NKr3_f?y%$+bK^Euk#>-(F#wO@H zUD*fzsc|4f2~KjkyYa5E7q2ZG4EPK=z?*ugEVrHxy+GHFmD7#~ctRIA1f_I{*cPyA z4uqo;_&18oqcuQkjM^0HTaeUFr6D1)zuZ=6h@u(ZZ2j2lwkZXl7RL#2|7gbW)#_5% zCW6brEX@L?klr6q69~lVjY0}$A#pYUai(2gNAZ0P5-T2&>LZbYGr%MY*zeik7vWW@ zz?IZVi16OR6$v~->W*%Y0?BA(JqL1NRdJjHvaz3g86+V?{VGU@rkEn*vz~*G_S4Ic zb0~hgXzu0g$dd4A09QfmD+nMP3iVan|I4O^1Vk6@1fm;)km%7sbQvE)Z+P$FVhAn~ zD|>h2*_wfsGr-&X;S8>eLQodsxgcJBAmQ+)ad#np7*-}>rE&*U&H{7L173ijw4FHU zZp352FIwm)zJMcJTYE^EsOh(J_;`Dr-`VX$IJl`D_CMVj3fMOg*$c4VL3~m}^A12a z^9)FP1$BSx4p3kS9)beDiwc~%&)_ARs(@@Ci1b5%Z{icOYzKC_3uXvsSK>(v-GM9G z0pBko#jt7)g!mdfY(kH?l&#p>8d1ChaD6kt&1-&H2r}W}C@mQ3bfDoVe%J{GJDCAy zdE#E=TY}R2JxcFcl-}GDbTD&NN8wqr1}o#RvhJIGRvIg`x&CN#(@H!p2WV*RFBc{k zfI)Es(8mZWLJ*Y;xU1lc^R#z1`I>%yDIlEIZe6H91D`kJFET~JFERz#AgGSBFWvO< z{5Hh(!HTi>up$?JDa9u)8Ug0>MMxqgsA$@ph~*AU{jiO@rS#>f>R>Xh$8rq=sR*B=E8N0yEbRyyeH5=zyNP zi-_Nl%C&@F$>8OmfsdVkLGaolScbQU4ieFz!U`)`H?hK^Xi#|%evLx5mIf6*r?JHq ztne=+et@dDf`hot2zsM%PMOhVehXVd0zHHZ zP{T_dpoRV40r4GNHbFWNnCKb=i4bJifc%Kx4Y2i)8n7AwS(psad<~;}iuZxx?6*M* z3>#2tY9L(!1-}xWvUaR=$I9OIC?Ye!LvC==soRaxuotro^1eeUILUJEY*9n&YzKbR zT%YL2nd=(|ykH9wIlo671}|VcaI-6ZpGeXODEbSW2WCO39uUmYeTRt!F5h8d!Rx4H zZ}0Y%@^kr75OYdMg}r7S&a-5C5%`4OU=c-s8MwUu(U{2%^jYvy`X^D{z(0e@9t=7nlA&uyj-e4o<8iPu5-R5>2gxoTd@=ek(mJ+{s8v@b&gsSp?b04 zTHsh^G)=xSU!2V~eBOQD?jn8%y0Y4iR^ZB?U@`WKMj+>O1b=y{mV0Iue&h?kh39lH zQN?_k73@#S)mApbhx(h+Mqi05?c3Ek3O_XS$5`n=L`sFFYr-btGhDhV?JvFj(ndqF za6ECuz9)UG(!Yqbjjf$(zvxdYa_SSMO{f_0;RTNN!W5lOoxy%ERm1n4yxo+i5KgJC z@x#;fD)p`cpZcl0_xQeN`RP+ry%*)a#s^bPjLG(iv3TpLD?aJQTQbJOM7B;>>aN*t zJu-E_{o<~8kv`6Kgl!nq7L4Cjohq2p%krdbb!T3>uP20;5^5hdrulkq9v_r-%L|O-=fm}EA4Qgt zUE6Bhue21V8}4Y`jP3D#hT-2l2p{^Vzf)govTme39@fB!R~RQ@GP2BF>@kC{zR1(~ z>#2B!$aq&)`xU@qgQM%!tTyc%<8d9%N2tu0NHR<>A_FVK) zbnyFx`iJ)>*yn7H$zq4g6znN_r>50G-z|UppY)5Xe_*v3|20`!Q()92@_jZK)iuU_ ztoS%ln)c4kUr+J-(kCY;4^Fo3@?~pBc9Akghm02!6-I;TYSCBNvp$dCcWGh>c-kzn z7%fO|v#72*ky+p~xi|5ZiKLP4V45En}kb z2kLC4wcFim%JPR7Jf6t}$(o$n(s%uD@$s4oqkhDYxyGowo5&v@8|Rd}j?3KnKE5Qw z57v^z;FgmiWxTr;PG9({W2d?swF5P+2VUv$%(|}{4i5i&^uhY4Gc`VnX3eQzE*cN2 z-4$g!l}^f0!-&?&(C>cdV)vfo!U+=l(lR6cekV)NV$E&sbO^uDST3` zG4^CAq|)wPqO>aQ*Qtp$Q(Y|m2wVS!{G)S!KEEB>>Yp!&5>CYXwlmv)=KD(9)fr7S zeD?Sk51i`Lj2Gnv;SYGJm6Jlj0fi>%ml?x60XKi{W*{8E$mZp+EiHSzyryveCGY6q_TXdEBTxM)A!l8_-7jIdH2LJ{h58bRd=1^UQKEJ<$taI;JfNAkqNH<+UIe5|LU86 z=~{FAm+yRd?xQu&yIp{O_=6k5@t+5| zhGLXjtz?& z=CY`@IVJvWN|xQwwMHLjUV2Kr2SsW(bU3Wcb|@h%bW!WO)VP?8!IxPZ52tu7bG-4U z=@ zQctbV*!!YYwvNMGmFjroRneNy1&hLGWiO@*hQn5QJKnGt&68!RMLUjAPB~}nwPW6D znw7mTq~K)7*GS&S7A+DA}JkkFY5hDa|JUGL-utlEy zbZIopX!6n7%3;~toZ2%F!o+`Ok8Dad=BLjbB6m|fTkWFq)2GSUs|X)Xauq>hR@S+> zj8I=tmRZtqRc@T@^hmcOb38EP{uXMbU(2*M&QhN8LQm17PX&p4RxuoJI6N&o+`U*7 znr>}FEV+H-UdvOZVan*iyf~|8StIL~Dx99CtfQbE>XlTB6w_#N5kc55t2V#f(j23V`1r?9YEDyWGb8~b4Z$%bz<~BReEH_j-2{0 zXO4*1wbbYK^az4Um0}!UauOOim5+Fb!fV>dO+M13)Xw-!frOR8&SREnmN9b`Q zR>bkYOj|Bkc+mLY-0mrAIPr_QL@H^;0-~tzofLukyGD83-@=By-=v&cm@)VZW_9BZ zSBtEDgUJ-{O3{X_POr{QA8=;TC|bjt>3sE;o&HJO>*31rz$Jlw`4@R(#;;r2b%iCe zaKq!UnDUlunSx7=@?BvP+o42!9@9Dw_4cc~$vit7&A|)wEL*PPVWZDdUZD+B%H)j& zoER)@xcR=GuYP-HveJ9=seCI?L`3ew)^AF@hdvC8s;5-RBJ0&6A19u|hUG<(*=WMU zl$@0fCYQ4*)%Br;-XfQX47$XTlS3U{#~eN+3SOL1xgbXpl zsMVAXU1%0bl((BwrDH^R4;dSM936KrG}kfX0Z}^0p{h>>@gjM`o|tl30^=ir_6p=- zIF+G}yWKKM9YmcAnbP-o%966RE%LMBQJay^rEek_YEEPKH9=uf-{sDinUP-##7mi3 z?jn~B8T8K_Ig6;Hj^Ra|O5%~%B|a;O!--^XwVF!thtvFvnk>(NWRO zi{@@G!7gudCQ>HqySZCpghi$c@KoMRtz0r=zQ8%83uC*PN-Anby-TwklF~W%h5qc^ zjvD50{BLo`sM`iR#rY7m;eZI+$tvmQ65UB&bBaLUB-hxAhU}P{RLoC=MI}=_{2a5% z8Eqs02PSP^`{aojEbc^Sx8L#Wpy}ywPWj+5Z3p3 zdbZzl#95%A%xjn5#`|Y#hW6*?mZ}0fZ`~UACU#_nsr^*sl(YiFnYP zDd?gt?OrmJ2Y*eCI~oFPyAo+T2wu4~-)tJqSq#Ul3v^zW^aYjXLPY9)FLIPrAI70L zT%_|NY?xh%ag?+;yQ)utF<{Rs+jP)CEHhh|aev`Rbd)Afko3GLPeDD>rzXLlqA6^Msy%ZpA>b(GGJ|B>HF5Al8_BLKL!bcb=f@n@FJ%iP%@zg$`>{X=^+-Kl$tXtWT_c1l8G9;s5V7kQLd;O26ey$}aj)2(V? z*zbcz?l^Mn#d6j6{$#>rF4>+MEeaAI>M2(>8Lr4PLP#SrZGZA)QZK*E z*sY+elA6++3<&}OU8TrBo!WJ!-RmlC+k?YE8vopiVzD0U?#Oyklt~UBe!P4r>fr7p z6E6lThC8K94p(6e;{dcka%=S@0+CcZu&9)(2)3%bFJYT5qyEoVW%3?noqvxGWG|DiS#v2g%T}lQsXv+iN_V+9^$gcXo+nQ2N?3EbbcIvZr3hut zyY#BC>E9k*VXBZt<-rOW8@wn+b*sNJFS@(4)9duv4j6R2uRKrT)K#I2Qzrf;TBB+5 zVAyv$2P)Pp^$!kTpl?sT-_)*8Pe?4Y?PAg8d8(%95K@e)B`lf3cKt_;YEaa-Q@xPF z&f)4q#CnP zoN{3*pQ&c=MlR)1u?au&$Qjxw?27>YG)Y=o>;2eUXA6n~c!{5ze+7yS{?7U3Vui8) zkf{BkUK<@9^3r>NGoU${YX>rP0c1$5h|DJ2S1t_{D^y;}J0LX6y2~ex7==AtU#b5o zESnq~rAZLE0AC-9qDxJZ6YE{`qPjct_ybC9UCQJyQ+;X47I1alJSMDQ=l-E>IZRdN z;RiBb(GHBF;FRA~<_akIUpaWU*sEkluPKcIj z`zy;p{=+Gt`=g;%+QSdxa8SLT(BAl1b&OO#kx0MHfSsIYWhPtpa4`~%+$XOs)ifE3 zfR>3if#PPF*b~T0A_~+F2#I8T!5_GDGIzU^dnG&P2%WiG91tm@uzeEgOitBSsN!B3 zp*;F{Odl_8fA|0_)tU6Br1F6~YhfTR4SD&c1K*3$Ah{$j)1+1#au=$6SGGQE%$a6B z4rH#s^6^fpR9gcEVzePtM`!uK?h++T)xeI5uOH!X3qeq224iNmABALFAbE4u(5P>m zDzPcNsQ3Vt9k7S^gGne}UZP1nC{$`D()q0aO0Rb5*3k+t@Mwj9^=fJN`jl-;9_9_C zcrE48xbNu<4@7d#iy29I_YV$Kb`GJuwZ3~sFaWHIP)_`b?rSy-6D?!ad!?YxyWIS9 zh3CbJ56yO~OP;5#$p@owI|pPSaiFqN!e}?tc=I}H!F0q@ilGxh@<@+6+xTrBhdTZ1 z65+4i*bz;4Y$X-ceDjt!E}~(~Y+1!aTuMDFKPLWM<-?XAETv%VR=+`?>BkpQ0`Q98`?+(67TjTp-XqCwqIT6Sn{T5 zbb*^kOl0wi!XYrq3zsm}Uw{kiSD3J4!VNjqu(tfMR3=LmzsMAG3D`RIQg36bU;w0o zbP@KUz$usa@y}2v@QuL&M=0mBT!CM%>G3|7)ojULDtqyjaM!zD&j%`k512Bc1cma} zEtZagD$OOf|4|~zNT43cbO}_v z(FwBX8dg8DTk&$I%6L!=_#m*+TavOw;m}riQRIH=7CRN2`q;ZlW85$HAw$ao;;*K6 z57iBavbls+qou#1((e>*sjfJ*TP0*2Weyu!?ubUCau=Sz@3kyS`jcq1gq(k_DcTt% zDKR5e)v`9XXNW07^OdV%? zTxLW-QYmOt?W8*qyFLl>6qYKf9@=LmOl|#KIIZ^;55(R>2jDc`LxH{CV)I^4@_Z>d zpB||A=m0s5&-%S8sXGr6tz-Bw^=fvw1$hYdF{m33Qt;`~Fh17UAizk}UJ^>A|JBvRO!CEz<%w2Gaw zU?vx@j}J6?__;)B298Dd(pGHknt1<08_aj&{mH$TA|7{O=3kJptmSyrDSwGFN_!p? z4~>J9E=lFXyzfRCeH;wr*=E`iEv-0qA9nwhbSWCp@!$g-*gM)WrDvp|YlfUJpnnBW z%ZsPKfy;QM;xLm_DfystGor%Pt3+)8#{|WA}GT?|}IYT{QF}ll3_K0^JSU z^oi=}yn)(Rrx=T8tCp$YR~igk6J}{*QvJinQMs|Z{MqHJ3nT*9q5Tiyl*?2)aUj?+ zfh+OXAO(@nyp#tM$@z%SDgj+6Nf$`v%owsbl>Cwi92PWj4Fo#?uDwlSmK!Lew@HBt zmg*9@K%yv%h{A29Xw*M9JyGq>}7`{YCPK=4|4Fk+%Koos`) zX5{cep{tz^;#VpP;MAxcvjxRXh8ozW7lS?mXA&;7$*_T)XRo(tf%i!P1(o`iux!R6 za}pJ$8LJEh#T^XeOePI3u%V(IcVMlfXqWO@+9Sf2FlC2xRuwbT6z#DViUplcI;i?HpfuAN6H zm8N;aikWsq_mzE3*0B@qQdxrOQ@*rm+p~umU`w=7#UPiJ>#pt~QHG8LxE;yRKF6F4 z{6YYhFOAwBK-E@{Tz?Y>MR(z?uwi)@s-$c8xPn{wR-;^dgLk886cben5hg0M%O%2@ z>H*5=F2ZGR4)S2=2mJSgF9*tA4GN&bzTWK6w0>u(P1I`6&ADs*&vPnmOB#@4jEoLfiQ>s`s?0P+|ki!*AF6|i(b`n9ds*tC& zJD(F?wBa8R|7S%zddoh8gxBR2lJ5uSTw^APMZMigLOjgr&p)kKV5|@$Jm7u3Z%3^p zU&ROgm7x3$g9`(5NhjSbz-F9NZvO0@K@F6Sz3&0u=|2ss9==LM4rfpPJ$g7pyhpAqh!I|z=@Bf&2-#ecF)mL}4EAOc$h ztF6L`leaCbZa-KejIUZ!KudoMNVuvfCw#b@EIOQU$V~J9QEZpc%6!=sx#Dk>(dw5o zl3W)MF{gaz5C1n;5N2Ee$S2K+-VwonR55;N1G{0=pRL{Kgj|igf_felF_Hcgtc5 z*SjopI&wdG?}kAJW_PA!2<+d_V86;Nv02J={=rf8d(jTNH6q$^EaC?|PKf;!e!&D( zip{V|bXQxE@0O1Rns!I;Eyt!3>4~sah2M*!1CwiTEh@ z0@@uZGn?A+f{>^DgaM^)0C5P+eUJ{Fv_KtQUyCrU^IK5($gfT@=Q;m4PX5-tXxX(1#it33cmUcEUSHiC@W~l z#^r535ma(s1S3A?^2yB3`0Dl8%9G-P2D@+m_YGOlpJ;PlW?JyoI%^)#|4;1%0)Z^Y zGyd`%+?b+#K|?K&kFSogt^}Kqv60WLh;PQ6s%K3EfGWqGkz>heR+RvauZ}~GJt;0| z=zA*1o?t$s6LZTJQ?<&P$MTHMh#Jqpu^9TS0nO;q{_~l$pO;=%HLb<2py9-~PZ8;- z)U+NSU;W)ou3C3wjXv*CmELQfDnVK2kjn$l?2E59J_QE^E(^?j!#K1y?@%WBMgHz7 zILh($gd`q+7B4_T0H>e z5YfSEmkH;LXid5koQ&kHLcq!$^kbBc$lyf(e};;i`kI!Jps`#hRzz47XJk>OLb64k zSCQgH=GEG;V#7vAt*I&T>nK^aL&SZim1iRM{jkpl+#OSwSn$r0h~mL?%%*0vIf@`C z4&zzcEYH|OfH$VjaqDHC%P{U|$ehe8!KBuORB`Ig7I{f{)HbR|F@IDcr&1i$X4YMLe04MCIuqY1-xPG%2TY%R&m&|#+XU1il7_z1=_)JC9 zlY8Ma5bzQ}XjK>{7PEcBeKa_aE3spJF7Uc4Ul#r}qD<3DrPfi$DYS)~mNr zr-X9;3s+Oq4qi0xovbO8X@a%BpFI5dPDRtCNKbRmTGD5M>Ezbg`Y?%Q_4a|A-SpM2 z$u|*ZNSyfvg>nCu4hY#2uPV%mFnMpxkZ{5JGSw5-IC64763AX4k|%oU_7vtn!7|@j z+qcGV)N4=1{p?VC2u)0@y49t&Sp>{T3V5t)npDbi+bZpW2XUuN-Cuye7+jg`X!dT# z;uuwNQ*_Urh%jYMKC}?oR%H$;1eCb+@SwsX}W9 zj=klLSvbN%mN6?k-;HVK9$r^HUFHqGsggzE%9E<8eUMrCmI|s^I0T=Ge zVYSvW9fNy`sjRsT?wGRTQh0k{hO-n-=rmrue~4SKdlp~yY2*-e&l_u z-r0aH&B`X{=9)eb%aiRUZvv-tQiH>kw@ud<6qFgtgTso*|2Uk&w@-m*+ArU7;3;1` z4?yt1nSr9rZ}tE!v-RUnnmS*_$NYfQvl0I6SK57;MK}L3v@|f+7B0Xj-##BN3MyO= z*G*`P59CohKKSdDuQNvY=dl$S1bw6W=yI;2=~d|B0CrLQ4RlfV8T4E8%3BVO-X!oC zyvkE1o#1L@hR<{uY{ONQWlIT(Jpm3O^v@ zY`i}^ynUvR<)<)QS9wYs{?3*l@}{=83dVkaU>mi=?qae%BR{TD9&hKb{Ss%j{X6i~ z!Ywx|Z!0(PNA(`+)Q##O?ziC0qq zdTL?o>kgy0hpzqkNT>QV^^~)}wkrr6Rk4A9EZhvp1`oLHH51sg(cFT&=|g6oZ2TAg z+WR=T*g_zAk~fmPiw`943jmUj9YK;;1!^+*4Y_9{TJOgj8As6NEOBF^Yc(`-PgMTL zXYSsRycxU*q|*1>>kb8DpMybAzE%W2uB`KO0r%&Y(`Uc#R34EEHPZP|!?ggKso`NW z;n>VvK=hAKzh)q{t8NV91|jL*L(*;BikGmrRyWG^3o~+sjX|WXppgmZ5175((_Zt$ z_#f4KDIK|6L3Kw;kiQWft;{0t;(acGJv&tjy|(%Ve{Ez3(1%fs%#%8D45`(0sYp@9KFRUe4_xRNsQ9e`3bz{ zFdXkfC{CFjbRK#MI@cCq=i5uMr32W~)?(SjlV1?a?WKoP;Bq||wo~Sr=p9mlSJK_U ztAt+Um1Z08Dz6GONn3}*R+Iu;>9NSxc!8*1fq!O7dFP>ytyApFm>f>~7C=9)aQ6iQ2mA3*arwy>Yu*6^5b z-+0}@ujBb0`hOSFo?FS72(k+sOwR|b#D~n;Fz22LiCkEZaA- zj~H)df;<(iz~{V1SUwVdvC_K`j4^<~i~(o?g21-DP=Y|9Ez27&LwBz$2KHNUh3foeCQYR>^Qzgtyw z0vijsf|PmTbl+&h3xT?U9YR5Y}mR=27v1jj#a{{g21H2k!LOeqnRMwKQ zG8Zd99cYfOnAK^F6bb6Y-2v)kY({k=cY->ZE`T~2(omiJNV^6mTeouLE!+n5P_3{y(iBu_Q1BxtH3te zZ;)-9kZrFC2p}4%*E_*ZympALQE9x*t4Tq^%dqk2IETY^X~E(C4u`u@fZG2h4)?ua zKWQvLq2@*bSQz@3S|1`9I0Z;LbR(9d{s^k0xV()0zK8v8#C}~`*si0{Xc^qr0tg5i zpiP@!u*3y5OA2oZWSh3YZYoF?4qK;?bl6g{SHo7S_r>=W0n(V`N`@2-DVYh(PRc;#q9U`!C;{XFn!|1Y z!ooxaW&?2Y)hT~14WCszsxQ~+qt)4%1^jYsq&^cHpYh zOlV;P2APU40Rip~K?RFN$dIu1GNas97pa%N*9{D3y0jR^4h&Qp^_gBSyb~$ahVDmh zM_LW$%=RJ4F}{lg-fih<-kAk!>N`qzGUF0NpHrpbgfA<>#{Vm3MIUNyB4~iv*UW zgmt(i%?n&Lv#|f+t20534t!$WKh6TM!Ea0c_z@|j%fuU`+V zQ1eb$g+L-+MCQZNbP$)O`G9qPxXFs@ED0}SR>1p9&e`z76I?WdgNAq?95iSiks$g4 z6#dM$vxpiHaS4EokKp;XLm1QozGSwcK6;=&%8?(FK(=co0D&WNy+lt1|zX!CoC+ z68UQuC)uc-eC2`Wr#d7GQbY_o2j=FV)LER4{?!wg_+!$^biVzymY}q|a53r8sM_@)l(cEyD+OfRaq7IVh zI4Z*iT-NPzy{5fB1w@Kl70P}(hB$C)c^%E$akOL`F5(erJ|KAHW)!->?VA~(=|Y5$;5D+OZs!9ST*6 z$0v)XL6-P4fbcC7i^j09hVvtC0+-_&k@h~U5zrT$eKz45@f6@)TB>QEIM}|mqcNED zZ1mX;o7b65ge+aeb>{DA=8mJ8OM4&Jnb*-GE=P-Ke+}1}O#u1lXgott?VVF`gD z!4h&DE;Md~A>m!cDNxB7?%UvhWpBcx%?1lxTyE0tCNM5o^?b?A{MiB=DeS#rP)ET7 zw|6BDV1!!b;nxIl(HhYDt1<5zre^aKyfSD^1|E^V6^sQnP$HF_$IXR;$lasa9A zU{YmHy?zY!|0n$tst^7IkmS2G267FKEqGv?n#VJx7q_UE6o4;6_>k|yPWA-uWc`sq z?nodh5{7<4H5>&%5D0e^2q|8kn@q6=Y>3OZ9dRX%8DO#g9onaFaXRT}v|O*_3jRCU zctI&-VGHm(RQ_)#jW(u$2kPp2oqeQp=m1LId)U#Rup@`PAbBBQqvX9;rrW$boEl zsC;>-d|H1LjEIZyHW&TGS|$VDGTP>MH-R(SdXfh#j1dkua8j4${t+&4$6k>)yuciP z142yr5L7-8UL-q2g%c&OE8bKE5t37~{FJ7k2!K}r{MKcjG74564_Ekl7GEMdfr{mk zwNizgi_xKjK^R{dD# zjp;2t2~!ldO_RcgDR^H%*r0LAJ&X}pI%J6Ykq{t=X-40S6Plr}3t*pmK0}k`fo7;` zPus*Tcn7~DdIx$_tr3}EeMVh=8Cd@*YQz#G?`|Y->>eQRG*E)>1#6HQkN89tI>?~j zJ6I1KWWbhBkXKW{YR&^vUtvjB)*dSd8;a)Z$PDzl;h`rMy>AWZq8qctLZ_1W22UP% zlg80Q(^rnpuVnPl=!(HZBV-WHufU!p1dSjlj?tzu9P4cyr5?MfIYRNXFKb2 z{z${w4R8y$1H$*Y_|@z2V+9@6=ysOWBSlBhE6yqhiiX7F zx^%r5RAYN6s>TBhw4`pY7(0l@v(L<&t%5`REp&)Oci!7U6ML)Ac8Ki^zV?CjENn9u ztEz+14X?m9y|$ zA;(O$hiZ z{fj{r+)F_fB;QZD|B6WX>md`9T=ADunsU|S$A!OeID9v53NelnT~Phj`Oy;Nugn$Fs3 zURf}OCa??M)+1$bbDk)A0>WMi;Qc^Khu=0Jv1teKDI+2cG%(Rgm$lWk%=56o7mm@> zK^vZuj3eRVNQ{Dn{Er2?H+jk>#h^61OF(I21h`(cV906;s13(eDIKS}8au7p0fXxa zpEj4V_*}mS2m2W!IU&*%F!wb0->p7W$5Yafuqu4{5>hdwNE0{|wY~*j;O2iu{^xCw z59i=QDhNnF?HGuIo$P~FxUGCSfN4)1&3h%#u&a>DIu?vwS_0s7 zesXCGK*Ea{s<#gxS_hVL>=MRoWkoP+MlsAfx%4_-K8H9N@S&yx3nf_SjfK;|jkt|- zKu{>+B?u6&1@Q2+ScmwUA}Ev;quDIS!YSY(AMCUQK^2H6MLgePwrgkKmQUcM8lwm| zIRE(xKH;vgZfpg1K3NaipK1)<4qH(*&x2}0)K2+L5oqf)Xp0>>&5O`!{#P_}X+`KX z55nkQoFNPXZB_XSS)bh}{IVjPc@an;tSy-Gltnnw;-bTcJYewFAP7Mh;isPfAq}VE zg0&OQW36wn))cTsk1L85$c#sVr~}bZH@1LIlxr5p*wzb(9NVDo{oi>6?NWf$&!O z*x3Wglnz-CakVMP0YNo91hoWdG+~JAi@3V?upkQylD^N&*B)Zxx0y1Xm_=khe4fIv z3BS+;uNea>8BxbRN7RkbECi3wF80^{3O@Q&v~fSYvrYfQrI9RKRVKeTZ&#eZcC;M| zstVzQ9rf^ymt)#PoA5eX=7#X1u0m+J#}~feAkfGA@W}q!yX_MYr$R8@3%+xpyvBzs z{n=!Hc0U%_V1e_xwSHUhGZVgN;9YF(H7wXt00l{Fh>uA5vs)0f5=4fjz#aiOh9h#eONdJY|+5$ zEFEosLn*-f1U;)z3Mxui0^iUyL2%gcQD=)bQ8TC8#tvHsQ6jBc#BMMe%!g0j@B>bs z#Rz%W7M~y-XW--{Foo7o zq_@81AVckSLr}xlIO)IPyx!&O77*(8SA6;d)?SDxu82}I1*~%fMF{yF&hi_)HSsA< z-Qh20%PxHfNI+kKmOTdxSy(s)Oh1jiD!zjz^G-mM2?5xT7xaTb6RTh```x7omKmWCsuTyYLoXg4Y1-a zwDHDr;(N+#;l=gX3v~E&6TB*Xzdb4pU*C;$F?}Ko%wKuFE5YMvPCm(noKbpDlYelx zw&5atc}e{I0S@t98lFH!ykNUDP#vfwK7y3qCS>XQ9~j(x^PQKO?x$6${m3~<6Awmu zRE#&U^MjoPYMd*i*dKB4|`aaJtXG?XnBCK>eEu?((pVrZby^z(uw%?*+o5C#<_ zvanz6n|L(tfmHV}EvsDEC^P}4Fo}EQpjsB&CrsA0k+L85cU3WrtzwzbIFTPJG(4&r zsWWsm4fq*N#?kw+zV*iDTTRy#GBQ^)q=`!3rc2UGw-+ZG#HN6e@#16SMxi0@!@kop z*VEj?eNs|@kYgBWJI!qvK5f*w>HclnHS);sR&`2jU!w718+W``$Blc=;OYIdMqHK8 z5CR}psBfty2`6e}lQj>ueWu4*#uka+n6{Qg_D$C4@7H?f8-FHGsB*avie+jT#lY!} z4+px`y%PuDWprvrOooTeak0L{w~28}4WQZ2G}l*Sy-K z913XQjA!>H88PDB zNpr8t?_XTM;CjDaL2z@GnyandTiejx9@|@Q{P~`kd%@vYNA&%YKCYhCsa83UjeEZP zBeQnN_iVB0_Jk^qVN~nN{oG6{o#_BO*1oUaka%!HB~$w*#V32|wJJtKk|{g&93$y* z^ElaL?7JKIgQq%_JKp0N+s8eW-#2kU@%*^dZ}9o9+t<%Y$=s^iuM9pq!=KAc59<9A z^3j+rTjldi_U{bTC;?tGs(y`$?Q;)5N*nA+DnjBU!kt z>JRl5zbo&n*Ziq^x#w<>-Wwqkhu%qk>=u`->p8$S?u_XpH%$EG$32mJImF{$8uvlg z#dmy+H~NZy+U*yaWRjPg`XAPM3b~q*{$j3fAfNMCtdG}?>B{3=z9x@!=GO-JO>FVg z&=z~V(|M1)_k{6EA&+eAl4_Q{CN-ty`z2OsFaD=lB^)=#8_8Pu0#Se=wJ_7LVsVT{ z_(kEPdsq67oAy;IR`~qh^sq4MM^DhFo>~(3v1a?o7V`OQ)2K!<;O3+xS1J_U&c=*v zjY+!lW51*?Mo+hlxz%d=vO1*=OKw!$Wn5nE*PQw&BDzI7_Vu`fk0W=@NmGYQMt;&? zxtVMA?<_TV#XJzkxNb|o5cfxBJ=JuSB+jp0pz}>k93L{^$GVe`au3!ldhA&hde)Ts r+80LY=@ko2iZnZ&Q7X%4nEV(X(Rv3vlCdwW<#YcR_nUVf diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json index af63b6142..193c4560e 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json @@ -3,7 +3,6 @@ "biomes": "#overdrive_that_matters:laboratory", "max_distance_from_center": 100, "size": 7, - "project_start_to_heightmap": "WORLD_SURFACE_WG", "start_height": { "absolute": -13 }, diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json index 1fb6ab9f4..a1755480b 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/center.json @@ -1,6 +1,5 @@ { - "name": "overdrive_that_matters:center_top", - "fallback": "minecraft:empty", + "name": "overdrive_that_matters:center", "elements": [ { "element": { @@ -8,8 +7,18 @@ "location": "overdrive_that_matters:laboratory/center/lab_arena_0", "processors": "minecraft:empty", "projection": "rigid" + }, + "weight": 1 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/center/lab_arena_1", + "processors": "minecraft:empty", + "projection": "rigid" }, "weight": 1 } - ] + ], + "fallback": "minecraft:empty" } \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/fallback_pool.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/fallback_pool.json new file mode 100644 index 000000000..0a49ae437 --- /dev/null +++ b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/fallback_pool.json @@ -0,0 +1,15 @@ +{ +"name": "overdrive_that_matters:lab_fallback", + "elements": [ + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/dead_end", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json index 3d5f840e6..02e63ee92 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/template_pool/laboratory/main.json @@ -1,6 +1,5 @@ { - "name": "overdrive_that_matters:rooms", - "fallback": "minecraft:empty", + "name": "overdrive_that_matters:main", "elements": [ { "element": { @@ -36,12 +35,12 @@ "processors": "minecraft:empty", "projection": "rigid" }, - "weight": 4 + "weight": 3 }, { "element": { "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/main/generator_room_0", + "location": "overdrive_that_matters:laboratory/main/corridor_room_0", "processors": "minecraft:empty", "projection": "rigid" }, @@ -50,11 +49,30 @@ { "element": { "element_type": "minecraft:single_pool_element", - "location": "overdrive_that_matters:laboratory/main/portal_room_0", + "location": "overdrive_that_matters:laboratory/main/corridor_stairs_0", "processors": "minecraft:empty", "projection": "rigid" }, "weight": 2 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/generator_room_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 2 + }, + { + "element": { + "element_type": "minecraft:single_pool_element", + "location": "overdrive_that_matters:laboratory/main/portal_room_0", + "processors": "minecraft:empty", + "projection": "rigid" + }, + "weight": 1 } - ] + ], + "fallback": "overdrive_that_matters:laboratory/fallback_pool" } \ No newline at end of file From cb50ee2c68455e0600d0b207d256775f70f5fb01 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 18:36:06 +0700 Subject: [PATCH 08/37] Colored machines test, update creative menu order update SupplierList/Map impl to use Java's suppliers general code layout improvements --- machine_colorizer.js | 113 ++++++++++++++++++ .../ru/dbotthepony/mc/otm/datagen/DataGen.kt | 2 +- .../advancements/MachineAdvancementsData.kt | 24 +++- .../datagen/{models => blocks}/BlockModels.kt | 6 +- .../mc/otm/datagen/blocks/BlockStates.kt | 2 +- .../mc/otm/datagen/items/ItemModels.kt | 2 +- .../datagen/items/MatteryItemModelProvider.kt | 23 +++- .../mc/otm/datagen/lang/English.kt | 2 +- .../datagen/lang/MatteryLanguageProvider.kt | 2 + .../mc/otm/datagen/lang/Russian.kt | 2 +- .../mc/otm/datagen/loot/LootTables.kt | 10 ++ .../mc/otm/datagen/loot/LootTablesData.kt | 2 +- .../datagen/models/MatteryModelProvider.kt | 17 +++ .../datagen/recipes/CraftingTableRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 2 + .../dbotthepony/mc/otm/datagen/tags/Tags.kt | 2 +- .../mc/otm/block/RotatableMatteryBlock.kt | 1 + .../mc/otm/block/tech/CobblerBlock.kt | 5 +- .../kotlin/ru/dbotthepony/mc/otm/core/Ext.kt | 22 ++++ .../mc/otm/core/collect/SupplierList.kt | 16 +-- .../mc/otm/core/collect/SupplierMap.kt | 11 +- .../ru/dbotthepony/mc/otm/registry/Ext.kt | 47 ++------ .../mc/otm/registry/MBlockColors.kt | 26 ++-- .../mc/otm/registry/MBlockEntities.kt | 7 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 11 +- .../mc/otm/registry/MEntityTypes.kt | 4 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 74 +++++++++--- .../dbotthepony/mc/otm/registry/MRegistry.kt | 21 ++++ .../objects/ColoredDecorativeBlock.kt | 83 +++---------- .../otm/registry/objects/DecorativeBlock.kt | 7 +- .../objects/StripedColoredDecorativeBlock.kt | 23 ++-- .../block/cobblestone_generator/black.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/blue.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/brown.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/cyan.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/gray.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/green.png | Bin 0 -> 699 bytes .../cobblestone_generator/light_blue.png | Bin 0 -> 699 bytes .../cobblestone_generator/light_gray.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/lime.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/magenta.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/orange.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/pink.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/purple.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/red.png | Bin 0 -> 699 bytes .../block/cobblestone_generator/white.png | Bin 0 -> 787 bytes .../block/cobblestone_generator/yellow.png | Bin 0 -> 699 bytes .../block/cobblestone_generator_mask.png | Bin 0 -> 1343 bytes 48 files changed, 378 insertions(+), 193 deletions(-) create mode 100644 machine_colorizer.js rename src/data/kotlin/ru/dbotthepony/mc/otm/datagen/{models => blocks}/BlockModels.kt (62%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator_mask.png diff --git a/machine_colorizer.js b/machine_colorizer.js new file mode 100644 index 000000000..c9a09dc6d --- /dev/null +++ b/machine_colorizer.js @@ -0,0 +1,113 @@ + +// Использует Image Magick для автоматической перекраски текстур + +const fs = require('fs') +const root_main = './src/main/resources/assets/overdrive_that_matters/textures/block/' +const child_process = require('child_process') + +const args = process.argv.slice(2) + +if (args.length != 1) { + console.error('Usage: ') + process.exit(2) +} + +const colors = [ + ['white', [255, 255, 255]], + ['orange', [245, 116, 16]], + ['magenta', [186, 63, 175]], + ['light_blue', [59, 180, 219]], + ['yellow', [252, 199, 36]], + ['lime', [111, 187, 24]], + ['pink', [243, 139, 170]], + ['gray', [62, 66, 70]], + ['light_gray', [140, 140, 131]], + ['cyan', [22, 134, 145]], + ['purple', [116, 38, 169]], + ['blue', [51, 53, 155]], + ['brown', [114, 71, 40]], + ['green', [84, 109, 28]], + ['red', [156, 37, 34]], + ['black', [31, 31, 35]], +] + +process.stderr.setMaxListeners(40) +process.stdout.setMaxListeners(40) + +async function size(path) { + const identify = child_process.spawn('magick', [ + 'identify', + path, + ]) + + identify.stderr.pipe(process.stderr) + + const chunks = [] + identify.stdout.on('data', (a) => chunks.push(a)) + + await new Promise((resolve) => { + identify.on('close', () => resolve()) + }) + + const chunk = chunks[0].toString('utf-8') + const size = chunk.match(/PNG ([0-9]+)x([0-9]+)/) + const width = parseInt(size[1]) + const height = parseInt(size[2]) + + return [width, height] +} + +(async function() { + const textureOverlay = args[0] + const textureColor = textureOverlay + '_mask' + + if (!fs.existsSync(`${root_main}${textureOverlay}.png`)) { + process.stderr.write(`${textureOverlay}.png does not exist\n`) + process.exit(1) + } + + if (!fs.existsSync(`${root_main}${textureColor}.png`)) { + process.stderr.write(`${textureColor}.png does not exist\n`) + process.exit(1) + } + + try { + fs.mkdirSync(`${root_main}/${textureOverlay}`) + } catch(err) { + + } + + const [widthOverlay, heightOverlay] = await size(`${root_main}${textureOverlay}.png`) + const [width, height] = await size(`${root_main}${textureColor}.png`) + + if (widthOverlay != width || heightOverlay != height) { + process.stderr.write(`${textureColor}.png has size of ${width}x${height}, overlay has size of ${widthOverlay}x${heightOverlay}!\n`) + process.exit(3) + } + + for (const color of colors) { + const name = color[0] + const rgb = color[1] + const magick = child_process.spawn('magick', [ + 'convert', + + `${root_main}${textureOverlay}.png`, + + '(', + `${root_main}${textureColor}.png`, + '-size', `${width}x${height}`, + `xc:rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`, + '-channel', 'rgb', + '-compose', 'Multiply', + '-composite', + ')', + + '-compose', 'Over', + '-composite', + + `${root_main}${textureOverlay}/${name}.png`]) + + magick.stdout.pipe(process.stdout) + magick.stderr.pipe(process.stderr) + } +})() diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index 4092fb1ef..f15538f74 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -36,6 +36,7 @@ import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements import ru.dbotthepony.mc.otm.datagen.advancements.addAndroidAdvancements import ru.dbotthepony.mc.otm.datagen.advancements.addMachineAdvancements +import ru.dbotthepony.mc.otm.datagen.blocks.addBlockModels import ru.dbotthepony.mc.otm.datagen.blocks.addBlockStates import ru.dbotthepony.mc.otm.datagen.blocks.addComplexBlockStates import ru.dbotthepony.mc.otm.datagen.items.addItemModels @@ -43,7 +44,6 @@ import ru.dbotthepony.mc.otm.datagen.lang.AddRussianLanguage import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.loot.* import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers -import ru.dbotthepony.mc.otm.datagen.models.addBlockModels import ru.dbotthepony.mc.otm.datagen.recipes.* import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider import ru.dbotthepony.mc.otm.datagen.tags.addTags diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 36cdb7ff2..31380c0b3 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -16,15 +16,23 @@ import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger import java.util.function.Consumer private data class CraftEntry( - val item: Item, + val item: Collection, val englishName: String, val englishSuffix: String? = null, val russianName: String? = null, val russianSuffix: String? = null, ) { + constructor( + item: Item, + englishName: String, + englishSuffix: String? = null, + russianName: String? = null, + russianSuffix: String? = null, + ) : this(listOf(item), englishName, englishSuffix, russianName, russianSuffix) + fun make(serializer: Consumer, parent: AdvancementHolder, translation: MatteryLanguageProvider.MultiBuilder): AdvancementHolder { - val path = item.registryName!!.path + val path = item.first().registryName!!.path val translated = translation.add("$path.desc", "Craft a %s%s") { russian("Создайте %s%s") @@ -37,15 +45,19 @@ private data class CraftEntry( return AdvancementBuilder() .parent(parent) .display( - itemStack = ItemStack(item), + itemStack = ItemStack(item.first()), title = translation.add(path, englishName) { if (russianName != null) { russian(russianName) } }, - description = TranslatableComponent(translated.contents.key, item.description, translatedSuffix), + description = TranslatableComponent(translated.contents.key, item.first().description, translatedSuffix), ) - .addCriterion("has_machine", criterion(item)) + .also { + for ((i, item) in item.withIndex()) { + it.addCriterion(i.toString(), criterion(item)) + } + } .save(serializer, modLocation("machines/$path")) } } @@ -171,7 +183,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter charger.make(serializer, it, translation) } - CraftEntry(MItems.COBBLESTONE_GENERATOR, "Cobblestone: Infinity + 1", + CraftEntry(MItems.COBBLESTONE_GENERATOR.values, "Cobblestone: Infinity + 1", russianName = "Булыжник: бесконечность + 1", russianSuffix = "Смотрите, чтоб он не просыпался во все сундуки", englishSuffix = "Watch for not to spill it over all your chests").make(serializer, press, translation) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt similarity index 62% rename from src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt rename to src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 52418774b..315bc0f59 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -1,6 +1,6 @@ -package ru.dbotthepony.mc.otm.datagen.models +package ru.dbotthepony.mc.otm.datagen.blocks -import net.minecraft.resources.ResourceLocation +import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider import ru.dbotthepony.mc.otm.registry.MBlocks fun addBlockModels(provider: MatteryBlockModelProvider) { @@ -9,5 +9,7 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK) resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK) + + coloredMachine(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 6412255fd..6aba587d5 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -106,7 +106,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.MATTER_RECYCLER) provider.block(MBlocks.MATTER_RECONSTRUCTOR) provider.block(MBlocks.ENERGY_SERVO) - provider.block(MBlocks.COBBLESTONE_GENERATOR) + provider.block(MBlocks.COBBLESTONE_GENERATOR.values) provider.block(MBlocks.ESSENCE_STORAGE) provider.exec { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 4598b73c2..6bb6f9915 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -183,7 +183,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.TWIN_PLATE_PRESS, "twin_plate_press_idle") provider.block(MItems.STORAGE_POWER_SUPPLIER, "storage_power_supplier") provider.block(MItems.MATTER_RECYCLER, "matter_recycler_working") - provider.block(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") + provider.allColoredBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") provider.block(MItems.STORAGE_BUS) provider.block(MItems.STORAGE_IMPORTER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt index ceeb59adf..e90c8448c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt @@ -4,9 +4,9 @@ import net.minecraft.data.models.ItemModelGenerators import net.minecraft.resources.ResourceLocation import net.minecraft.server.packs.PackType import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraftforge.client.model.generators.ItemModelProvider -import net.minecraftforge.client.model.generators.ModelBuilder import net.minecraftforge.data.event.GatherDataEvent import org.apache.logging.log4j.LogManager import ru.dbotthepony.mc.otm.core.registryName @@ -30,6 +30,27 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event fun block(item: Item) = exec { withExistingParent(item.registryName!!.path, modLocation("block/${item.registryName!!.path}")) } fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, modLocation("block/$path")) } + + fun allColoredBlock(items: Map, path: String) { + block(items[DyeColor.BLACK]!!, path + "_black") + block(items[DyeColor.BLUE]!!, path + "_blue") + block(items[DyeColor.BROWN]!!, path + "_brown") + block(items[DyeColor.CYAN]!!, path + "_cyan") + block(items[DyeColor.GRAY]!!, path + "_gray") + block(items[DyeColor.GREEN]!!, path + "_green") + block(items[DyeColor.LIGHT_BLUE]!!, path + "_light_blue") + block(items[DyeColor.LIGHT_GRAY]!!, path + "_light_gray") + block(items[DyeColor.LIME]!!, path + "_lime") + block(items[DyeColor.MAGENTA]!!, path + "_magenta") + block(items[DyeColor.ORANGE]!!, path + "_orange") + block(items[DyeColor.PINK]!!, path + "_pink") + block(items[DyeColor.PURPLE]!!, path + "_purple") + block(items[DyeColor.RED]!!, path + "_red") + block(items[DyeColor.WHITE]!!, path + "_white") + block(items[DyeColor.YELLOW]!!, path + "_yellow") + block(items[null]!!, path) + } + fun blocks(vararg items: Item) = items.forEach(this::block) fun blocks(items: Collection) = items.forEach(this::block) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 64e663807..50e35e437 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -424,7 +424,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.MATTER_BOTTLER, "Matter Bottler") add(MBlocks.DRIVE_VIEWER, "Drive Viewer") add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point") - add(MBlocks.COBBLESTONE_GENERATOR, "Cobblestone Generator") + addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Cobblestone Generator") add(MBlocks.INFINITE_WATER_SOURCE, "Infinite Water Source") add(MBlocks.ESSENCE_STORAGE, "Essence Storage") add(MBlocks.ESSENCE_STORAGE, "desc", "Allows to store and retrieve experience levels") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt index 9da3b9f2a..2718b807b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt @@ -81,8 +81,10 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { fun add(key: String, value: String) = slave.add(key, value) fun add(key: Block, value: String) = slave.add(key, value) + fun addBlock(key: Collection, value: String) = key.forEach { add(it, value) } fun add(key: Block, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value) fun add(key: Item, value: String) = slave.add(key, value) + fun addItem(key: Collection, value: String) = key.forEach { add(it, value) } fun add(key: Item, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value) fun add(key: ItemStack, value: String) = slave.add(key, value) fun add(key: Enchantment, value: String) = slave.add(key, value) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 435a53e3f..69395a069 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -426,7 +426,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.MATTER_BOTTLER, "Бутилировщик материи") add(MBlocks.DRIVE_VIEWER, "Просмотрщик дисков конденсации") add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени") - add(MBlocks.COBBLESTONE_GENERATOR, "Генератор булыжника") + addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника") add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды") add(MBlocks.ESSENCE_STORAGE, "Хранилище эссенции") add(MBlocks.ESSENCE_STORAGE, "desc", "Позволяет хранить очки опыта") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt index e7c9a96e5..8b9c8dea4 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt @@ -141,4 +141,14 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator.packOut }) } } + + fun tile(blocks: Collection, vararg filterTags: String) { + for (block in blocks) { + singleLootPool(LootContextParamSets.BLOCK, block.lootTable) { + add(LootItem.lootTableItem(block).also { + it.apply(CopyTileNbtFunction(filterTags.stream())) + }) + } + } + } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index afea9c71a..f78f65f44 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -130,7 +130,7 @@ fun addLootTables(lootTables: LootTables) { lootPool { item(Items.BLACK_DYE) { setCount(64) } } } - lootTables.tile(MBlocks.COBBLESTONE_GENERATOR) + lootTables.tile(MBlocks.COBBLESTONE_GENERATOR.values) lootTables.tile(MBlocks.ESSENCE_STORAGE) lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR) lootTables.tile(MBlocks.FLUID_TANK) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index f2cdb8a5e..246b82385 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.datagen.models +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.block.Block import net.minecraftforge.client.model.generators.BlockModelProvider import net.minecraftforge.data.event.GatherDataEvent @@ -96,4 +97,20 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } } + + fun coloredMachine(blocks: Map, textureKeys: Collection) { + val base = blocks[null]!!.registryName!! + + for ((color, block) in blocks.entries) { + if (color == null) continue + + exec { + val model = withExistingParent(block.registryName!!.path, base) + + for (key in textureKeys) { + model.texture(key, modLocation("block/${base.path}/${color.name.lowercase()}")) + } + } + } + } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index a7db8cd40..c9e89a661 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -362,7 +362,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .build(consumer) // генератор коблы - MatteryRecipe(MItems.COBBLESTONE_GENERATOR, category = machinesCategory) + MatteryRecipe(MItems.COBBLESTONE_GENERATOR[null]!!, category = machinesCategory) .row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.TRITANIUM_PICKAXE, MItemTags.HARDENED_GLASS_COLORLESS) .row(Items.LAVA_BUCKET, Items.HOPPER, Items.WATER_BUCKET) .rowB(Tags.Items.CHESTS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index f43737eca..4294b3830 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -271,6 +271,8 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, MItems.TRITANIUM_DOOR[null]!!, MItems.TRITANIUM_DOOR) generate(consumer, MItems.TRITANIUM_TRAPDOOR[null]!!, MItems.TRITANIUM_TRAPDOOR) + generate(consumer, MItems.COBBLESTONE_GENERATOR[null]!!, MItems.COBBLESTONE_GENERATOR) + generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items) generate(consumer, MItems.CARGO_CRATE_MINECARTS[null]!!, MItems.CARGO_CRATE_MINECARTS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index e70e7c839..e0e173231 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -218,7 +218,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.ENGINE, MBlocks.HOLO_SIGN, - MBlocks.COBBLESTONE_GENERATOR, + *MBlocks.COBBLESTONE_GENERATOR.values.toTypedArray(), MBlocks.ESSENCE_STORAGE, MBlocks.MATTER_RECONSTRUCTOR, MBlocks.FLUID_TANK, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt index 602ec1b99..9843a2acb 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt @@ -47,6 +47,7 @@ abstract class RotatableMatteryBlock(properties: Properties = DEFAULT_PROPERTIES } BlockRotationFreedom.FULL -> TODO("Can't rotate with four rotation freedom yet") + BlockRotationFreedom.NONE -> defaultBlockState() } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt index 5da695907..41b222bee 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.tech import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.EntityBlock @@ -8,6 +9,8 @@ import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntityTicker import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.material.MapColor +import net.minecraft.world.level.material.PushReaction import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock @@ -16,7 +19,7 @@ import ru.dbotthepony.mc.otm.block.entity.tech.CobblerBlockEntity import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.shapes.BlockShapes -class CobblerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class CobblerBlock(val color: DyeColor?) : RotatableMatteryBlock(Properties.of().mapColor(color?.mapColor ?: MapColor.METAL).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(25.0f)), EntityBlock { override fun newBlockEntity(pPos: BlockPos, pState: BlockState): BlockEntity { return CobblerBlockEntity(pPos, pState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/Ext.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/Ext.kt index bc23bfbce..6e5a286b9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/Ext.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/Ext.kt @@ -64,6 +64,28 @@ fun FriendlyByteBuf.writeBigInteger(value: BigInteger) { fun FriendlyByteBuf.readBigInteger(byteLimit: Int = 128) = BigInteger(readByteArray(byteLimit)) +fun Map<*, V>.asLambdaSupplierArray(): Array<() -> V> { + val result = arrayOfNulls<() -> V>(size) + var i = 0 + + for (k in keys) { + result[i++] = { this[k] ?: throw ConcurrentModificationException("Key $k is no longer present in map $this") } + } + + return result as Array<() -> V> +} + +fun Map<*, V>.asSupplierArray(): Array> { + val result = arrayOfNulls>(size) + var i = 0 + + for (k in keys) { + result[i++] = { this[k] ?: throw ConcurrentModificationException("Key $k is no longer present in map $this") } + } + + return result as Array> +} + operator fun IItemHandler.get(index: Int): ItemStack = getStackInSlot(index) operator fun JsonObject.set(s: String, value: JsonElement) = add(s, value) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierList.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierList.kt index 82c637fcf..e45cb685b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierList.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierList.kt @@ -4,26 +4,22 @@ import java.util.function.Supplier import java.util.stream.Stream class SupplierList : AbstractList { - private val getters: Array<() -> T> + private val getters: Array> - constructor(vararg getters: () -> T) : super() { - this.getters = Array(getters.size) { getters[it] } - } - - constructor(getters: Collection<() -> T>) : super() { + constructor(getters: Collection>) : super() { val iterator = getters.iterator() this.getters = Array(getters.size) { iterator.next() } } - constructor(getters: Stream<() -> T>) : super() { + constructor(getters: Stream>) : super() { this.getters = getters.toArray(::arrayOfNulls) } constructor(vararg getters: Supplier) : super() { - this.getters = Array(getters.size) { getters[it]::get } + this.getters = Array(getters.size) { getters[it] } } - constructor(size: Int, provider: (Int) -> () -> T) { + constructor(size: Int, provider: (Int) -> Supplier) { this.getters = Array(size, provider) } @@ -31,6 +27,6 @@ class SupplierList : AbstractList { get() = getters.size override fun get(index: Int): T { - return getters[index].invoke() + return getters[index].get() } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierMap.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierMap.kt index da61f08b2..7211301a9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierMap.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/SupplierMap.kt @@ -1,20 +1,21 @@ package ru.dbotthepony.mc.otm.core.collect import com.google.common.collect.ImmutableSet +import java.util.function.Supplier import java.util.stream.Stream class SupplierMap : AbstractMap { override val entries: Set> - constructor(vararg mValues: Pair T>) : super() { + constructor(vararg mValues: Pair>) : super() { entries = ImmutableSet.copyOf(mValues.map { Entry(it.first, it.second) }) } - constructor(mValues: Collection T>>) : super() { + constructor(mValues: Collection>>) : super() { entries = ImmutableSet.copyOf(mValues.map { Entry(it.first, it.second) }) } - constructor(mValues: Stream T>>) : super() { + constructor(mValues: Stream>>) : super() { entries = mValues.map { Entry(it.first, it.second) }.collect(ImmutableSet.toImmutableSet()) } @@ -24,9 +25,9 @@ class SupplierMap : AbstractMap { private inner class Entry( override val key: K, - private val getter: () -> T + private val getter: Supplier ) : Map.Entry { override val value: T - get() = getter.invoke() + get() = getter.get() } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/Ext.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/Ext.kt index 38286bbda..9b3ff14b8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/Ext.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/Ext.kt @@ -1,56 +1,25 @@ package ru.dbotthepony.mc.otm.registry -import com.mojang.serialization.Lifecycle -import net.minecraft.core.Holder -import net.minecraft.core.Registry -import net.minecraft.core.WritableRegistry -import net.minecraft.resources.ResourceKey -import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.DyeColor import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.RegistryObject -import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.core.collect.SupplierMap +import java.util.function.Supplier import kotlin.reflect.KProperty operator fun RegistryObject.getValue(thisRef: Any, property: KProperty<*>): T { return get() } -private fun DeferredRegister.doColored(prefix: String, factory: (color: DyeColor, name: String) -> T): MutableCollection T>> { - return mutableListOf( - DyeColor.BLACK to register(prefix + "_black") { factory.invoke(DyeColor.BLACK, prefix + "_black") }::get, - DyeColor.BLUE to register(prefix + "_blue") { factory.invoke(DyeColor.BLUE, prefix + "_blue") }::get, - DyeColor.BROWN to register(prefix + "_brown") { factory.invoke(DyeColor.BROWN, prefix + "_brown") }::get, - DyeColor.CYAN to register(prefix + "_cyan") { factory.invoke(DyeColor.CYAN, prefix + "_cyan") }::get, - DyeColor.GRAY to register(prefix + "_gray") { factory.invoke(DyeColor.GRAY, prefix + "_gray") }::get, - DyeColor.GREEN to register(prefix + "_green") { factory.invoke(DyeColor.GREEN, prefix + "_green") }::get, - DyeColor.LIGHT_BLUE to register(prefix + "_light_blue") { factory.invoke(DyeColor.LIGHT_BLUE, prefix + "_light_blue") }::get, - DyeColor.LIGHT_GRAY to register(prefix + "_light_gray") { factory.invoke(DyeColor.LIGHT_GRAY, prefix + "_light_gray") }::get, - DyeColor.LIME to register(prefix + "_lime") { factory.invoke(DyeColor.LIME, prefix + "_lime") }::get, - DyeColor.MAGENTA to register(prefix + "_magenta") { factory.invoke(DyeColor.MAGENTA, prefix + "_magenta") }::get, - DyeColor.ORANGE to register(prefix + "_orange") { factory.invoke(DyeColor.ORANGE, prefix + "_orange") }::get, - DyeColor.PINK to register(prefix + "_pink") { factory.invoke(DyeColor.PINK, prefix + "_pink") }::get, - DyeColor.PURPLE to register(prefix + "_purple") { factory.invoke(DyeColor.PURPLE, prefix + "_purple") }::get, - DyeColor.RED to register(prefix + "_red") { factory.invoke(DyeColor.RED, prefix + "_red") }::get, - DyeColor.WHITE to register(prefix + "_white") { factory.invoke(DyeColor.WHITE, prefix + "_white") }::get, - DyeColor.YELLOW to register(prefix + "_yellow") { factory.invoke(DyeColor.YELLOW, prefix + "_yellow") }::get, - ) +internal fun DeferredRegister.colored(prefix: String, factory: (color: DyeColor, name: String) -> R): Map { + return SupplierMap(MRegistry.DYE_ORDER.map { it to register(prefix + "_" + it.name.lowercase()) { factory.invoke(it, prefix + "_" + it.name.lowercase()) } }) } -internal fun DeferredRegister.colored(prefix: String, factory: (color: DyeColor, name: String) -> T): Map { - return SupplierMap(doColored(prefix, factory)) -} +internal fun DeferredRegister.coloredWithBase(prefix: String, factory: (color: DyeColor?, name: String) -> R): Map { + val values = ArrayList>>() -@Suppress("unchecked_cast") -internal fun DeferredRegister.allColored(prefix: String, factory: (color: DyeColor?, name: String) -> T): Map { - return SupplierMap(doColored(prefix, factory).also { (it as MutableCollection T>>).add((null as DyeColor?) to register(prefix) { factory.invoke(null, prefix) }::get) }) -} + values.add(null to register(prefix) { factory.invoke(null, prefix) }) + MRegistry.DYE_ORDER.forEach { values.add(it to register(prefix + "_" + it.name.lowercase()) { factory.invoke(it, prefix + "_" + it.name.lowercase()) }) } -internal fun Registry.register(key: String, value: T): Holder { - return this.register(ResourceLocation(OverdriveThatMatters.MOD_ID, key), value) -} - -internal fun Registry.register(key: ResourceLocation, value: T): Holder { - return (this as WritableRegistry).register(ResourceKey.create(key(), key), value, Lifecycle.stable()) + return SupplierMap(values) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockColors.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockColors.kt index 85900d227..907ed0940 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockColors.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockColors.kt @@ -12,20 +12,24 @@ object MBlockColors { private const val DEFAULT_WATER_TINT: Int = 0x3F76E4 private fun registerBlockColors(event: RegisterColorHandlersEvent.Block) { - event.register({ state: BlockState, light: BlockAndTintGetter?, pos: BlockPos?, index: Int -> - if (index == 0) { - if (light == null || pos == null) - DEFAULT_WATER_TINT - else - BiomeColors.getAverageWaterColor(light, pos) - } else -1 - }, MBlocks.COBBLESTONE_GENERATOR) + for (it in MBlocks.COBBLESTONE_GENERATOR.values) { + event.register({ state: BlockState, light: BlockAndTintGetter?, pos: BlockPos?, index: Int -> + if (index == 0) { + if (light == null || pos == null) + DEFAULT_WATER_TINT + else + BiomeColors.getAverageWaterColor(light, pos) + } else -1 + }, it) + } } private fun registerItemColors(event: RegisterColorHandlersEvent.Item) { - event.register({ stack: ItemStack, index: Int -> - if (index == 0) DEFAULT_WATER_TINT else -1 - }, MBlocks.COBBLESTONE_GENERATOR) + for (it in MBlocks.COBBLESTONE_GENERATOR.values) { + event.register({ stack: ItemStack, index: Int -> + if (index == 0) DEFAULT_WATER_TINT else -1 + }, it) + } } internal fun register(bus: IEventBus) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index 9036fc742..f345eb9ca 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -31,6 +31,7 @@ import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity import ru.dbotthepony.mc.otm.client.render.blockentity.* import ru.dbotthepony.mc.otm.config.CablesConfig +import ru.dbotthepony.mc.otm.core.asSupplierArray import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.core.getValue import java.util.function.Supplier @@ -56,7 +57,7 @@ object MBlockEntities { val MATTER_BOTTLER by register(MNames.MATTER_BOTTLER, ::MatterBottlerBlockEntity, MBlocks::MATTER_BOTTLER) val DRIVE_VIEWER by register(MNames.DRIVE_VIEWER, ::DriveViewerBlockEntity, MBlocks::DRIVE_VIEWER) val BLACK_HOLE by register(MNames.BLACK_HOLE, ::BlackHoleBlockEntity, MBlocks::BLACK_HOLE) - val CARGO_CRATE by registry.register(MNames.CARGO_CRATE) { BlockEntityType.Builder.of(::CargoCrateBlockEntity, *MRegistry.CARGO_CRATES.blocks.values.toTypedArray()).build(null) } + val CARGO_CRATE by register(MNames.CARGO_CRATE, ::CargoCrateBlockEntity, *MRegistry.CARGO_CRATES.blocks.asSupplierArray()) val DRIVE_RACK by register(MNames.DRIVE_RACK, ::DriveRackBlockEntity, MBlocks::DRIVE_RACK) val ITEM_MONITOR by register(MNames.ITEM_MONITOR, ::ItemMonitorBlockEntity, MBlocks::ITEM_MONITOR) val ENERGY_COUNTER by register(MNames.ENERGY_COUNTER, ::EnergyCounterBlockEntity, MBlocks::ENERGY_COUNTER) @@ -66,7 +67,7 @@ object MBlockEntities { val GRAVITATION_STABILIZER by register(MNames.GRAVITATION_STABILIZER, ::GravitationStabilizerBlockEntity, MBlocks::GRAVITATION_STABILIZER) val MATTER_RECYCLER by register(MNames.MATTER_RECYCLER, ::MatterRecyclerBlockEntity, MBlocks::MATTER_RECYCLER) val ENERGY_SERVO by register(MNames.ENERGY_SERVO, ::EnergyServoBlockEntity, MBlocks::ENERGY_SERVO) - val COBBLESTONE_GENERATOR by register(MNames.COBBLESTONE_GENERATOR, ::CobblerBlockEntity, MBlocks::COBBLESTONE_GENERATOR) + val COBBLESTONE_GENERATOR by register(MNames.COBBLESTONE_GENERATOR, ::CobblerBlockEntity, *MBlocks.COBBLESTONE_GENERATOR.asSupplierArray()) val ESSENCE_STORAGE by register(MNames.ESSENCE_STORAGE, ::EssenceStorageBlockEntity, MBlocks::ESSENCE_STORAGE) val MATTER_RECONSTRUCTOR by register(MNames.MATTER_RECONSTRUCTOR, ::MatterReconstructorBlockEntity, MBlocks::MATTER_RECONSTRUCTOR) val FLUID_TANK by register(MNames.FLUID_TANK, ::FluidTankBlockEntity, MBlocks::FLUID_TANK) @@ -81,7 +82,7 @@ object MBlockEntities { val ENERGY_CABLES: Map> = SupplierMap(CablesConfig.E.entries.map { conf -> var selfFeed: Supplier> = Supplier { TODO() } selfFeed = register("${conf.name.lowercase()}_energy_cable", { a, b -> SimpleEnergyCableBlockEntity(selfFeed.get(), a, b, conf) }) as Supplier> - conf to selfFeed::get + conf to selfFeed }) val POWERED_FURNACE: BlockEntityType by registry.register(MNames.POWERED_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_FURNACE.newBlockEntity(a, b) }, MBlocks.POWERED_FURNACE).build(null) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index f258d76cd..634a71f79 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -84,6 +84,7 @@ import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.shapes.BlockShapes +import java.util.function.Supplier object MBlocks { private val registry = DeferredRegister.create(ForgeRegistries.BLOCKS, OverdriveThatMatters.MOD_ID) @@ -112,7 +113,7 @@ object MBlocks { val POWERED_SMOKER: PoweredFurnaceBlock by registry.register(MNames.POWERED_SMOKER) { PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } val MATTER_RECYCLER: Block by registry.register(MNames.MATTER_RECYCLER) { MatterRecyclerBlock() } val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } - val COBBLESTONE_GENERATOR: Block by registry.register(MNames.COBBLESTONE_GENERATOR) { CobblerBlock() } + val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } val INFINITE_WATER_SOURCE: Block by registry.register(MNames.INFINITE_WATER_SOURCE) { InfiniteWaterSourceBlock() } val ESSENCE_STORAGE: EssenceStorageBlock by registry.register(MNames.ESSENCE_STORAGE) { EssenceStorageBlock() } val MATTER_RECONSTRUCTOR: MatterReconstructorBlock by registry.register(MNames.MATTER_RECONSTRUCTOR) { MatterReconstructorBlock() } @@ -120,7 +121,7 @@ object MBlocks { val MATTER_ENTANGLER: MatterEntanglerBlock by registry.register(MNames.MATTER_ENTANGLER) { MatterEntanglerBlock() } val ENERGY_CABLES: Map = SupplierMap(CablesConfig.E.entries.map { conf -> - conf to registry.register("${conf.name.lowercase()}_energy_cable") { EnergyCableBlock { a, b -> MBlockEntities.ENERGY_CABLES[conf]!!.create(a, b)!! } }::get + conf to registry.register("${conf.name.lowercase()}_energy_cable") { EnergyCableBlock { a, b -> MBlockEntities.ENERGY_CABLES[conf]!!.create(a, b)!! } } }) val STORAGE_BUS: Block by registry.register(MNames.STORAGE_BUS) { StorageBusBlock() } @@ -216,7 +217,7 @@ object MBlocks { val TRITANIUM_ANVIL: List init { - val anvils = ArrayList<() -> Block>() + val anvils = ArrayList>() for (i in 0 until TRITANIUM_ANVIL_VARIANTS) { val props = BlockBehaviour.Properties.of() @@ -233,7 +234,7 @@ object MBlocks { TRITANIUM_ANVIL = SupplierList(anvils) } - val TRITANIUM_DOOR = registry.allColored(MNames.TRITANIUM_DOOR) { color, _ -> + val TRITANIUM_DOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_DOOR) { color, _ -> object : DoorBlock( Properties.of() .mapColor(color ?: DyeColor.LIGHT_BLUE) @@ -270,7 +271,7 @@ object MBlocks { } } - val TRITANIUM_TRAPDOOR = registry.allColored(MNames.TRITANIUM_TRAPDOOR) { color, _ -> + val TRITANIUM_TRAPDOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_TRAPDOOR) { color, _ -> object : TrapDoorBlock( Properties.of() .mapColor(color ?: DyeColor.LIGHT_BLUE) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MEntityTypes.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MEntityTypes.kt index 2076a4323..47cad1f74 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MEntityTypes.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MEntityTypes.kt @@ -7,10 +7,8 @@ import net.minecraft.client.renderer.entity.MinecartRenderer import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.MobCategory -import net.minecraft.world.item.DyeColor import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.ForgeRegistries import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -25,7 +23,7 @@ object MEntityTypes { EntityType.Builder.of({ _, level -> PlasmaProjectile(level) }, MobCategory.MISC).sized(0.4f, 0.4f).build(MNames.PLASMA) } - val CARGO_CRATE_MINECARTS = registry.allColored(MNames.MINECART_CARGO_CRATE) { color, name -> + val CARGO_CRATE_MINECARTS = registry.coloredWithBase(MNames.MINECART_CARGO_CRATE) { color, name -> EntityType.Builder.of({ it, level -> MinecartCargoCrate(it, color, level)}, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build(name) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 0d3611aaa..bab4bcba9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -21,6 +21,9 @@ import ru.dbotthepony.mc.otm.config.CablesConfig import ru.dbotthepony.mc.otm.config.ItemsConfig import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.TranslatableComponent +import ru.dbotthepony.mc.otm.core.addAll +import ru.dbotthepony.mc.otm.core.asLambdaSupplierArray +import ru.dbotthepony.mc.otm.core.asSupplierArray import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.item.* @@ -39,6 +42,7 @@ import ru.dbotthepony.mc.otm.item.armor.TritaniumArmorItem import ru.dbotthepony.mc.otm.item.exopack.ExopackUpgradeItem import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem import ru.dbotthepony.mc.otm.item.weapon.PlasmaRifleItem +import java.util.function.Supplier object MItems { private val DEFAULT_PROPERTIES = Item.Properties() @@ -49,7 +53,7 @@ object MItems { } val ENERGY_CABLES: Map = SupplierMap(CablesConfig.E.entries.map { conf -> - conf to registry.register("${conf.name.lowercase()}_energy_cable") { BlockItem(MBlocks.ENERGY_CABLES[conf]!!, DEFAULT_PROPERTIES) }::get + conf to registry.register("${conf.name.lowercase()}_energy_cable") { BlockItem(MBlocks.ENERGY_CABLES[conf]!!, DEFAULT_PROPERTIES) } }) val ANDROID_STATION: BlockItem by registry.register(MNames.ANDROID_STATION) { BlockItem(MBlocks.ANDROID_STATION, DEFAULT_PROPERTIES) } @@ -120,8 +124,8 @@ object MItems { } } - val COBBLESTONE_GENERATOR: BlockItem by registry.register(MNames.COBBLESTONE_GENERATOR) { - object : BlockItem(MBlocks.COBBLESTONE_GENERATOR, DEFAULT_PROPERTIES) { + val COBBLESTONE_GENERATOR: Map = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, name -> + object : BlockItem(MBlocks.COBBLESTONE_GENERATOR[color]!!, DEFAULT_PROPERTIES) { override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) p_40574_.add(TranslatableComponent("otm.needs_no_power").withStyle(ChatFormatting.GRAY)) @@ -161,17 +165,49 @@ object MItems { val PAINTER: BlockItem by registry.register(MNames.PAINTER) { BlockItem(MBlocks.PAINTER, DEFAULT_PROPERTIES) } val MATTER_ENTANGLER: BlockItem by registry.register(MNames.MATTER_ENTANGLER) { BlockItem(MBlocks.MATTER_ENTANGLER, DEFAULT_PROPERTIES) } - val MACHINES = SupplierList( - ::ANDROID_STATION, ::ANDROID_CHARGER, ::BATTERY_BANK, ::MATTER_DECOMPOSER, ::MATTER_CAPACITOR_BANK, ::MATTER_CABLE, ::PATTERN_STORAGE, - ::MATTER_SCANNER, ::MATTER_PANEL, ::MATTER_REPLICATOR, ::MATTER_BOTTLER, ::MATTER_ENTANGLER, ::ENERGY_COUNTER, ::CHEMICAL_GENERATOR, - ::MATTER_RECYCLER, ::PLATE_PRESS, ::TWIN_PLATE_PRESS, ::POWERED_FURNACE, ::POWERED_BLAST_FURNACE, - ::POWERED_SMOKER, - ::STORAGE_BUS, ::STORAGE_IMPORTER, ::STORAGE_EXPORTER, ::DRIVE_VIEWER, - ::DRIVE_RACK, ::ITEM_MONITOR, ::STORAGE_CABLE, ::STORAGE_POWER_SUPPLIER, - ::ENERGY_SERVO, ::PAINTER, - ::PHANTOM_ATTRACTOR, ::GRAVITATION_STABILIZER, ::COBBLESTONE_GENERATOR, ::INFINITE_WATER_SOURCE, - ::ESSENCE_STORAGE, ::MATTER_RECONSTRUCTOR - ) + val MACHINES: List + + init { + val machines = ArrayList>() + + machines.add(::PLATE_PRESS) + machines.add(::TWIN_PLATE_PRESS) + machines.add(::POWERED_FURNACE) + machines.add(::POWERED_BLAST_FURNACE) + machines.add(::POWERED_SMOKER) + + machines.add(::ANDROID_STATION) + machines.add(::ANDROID_CHARGER) + machines.add(::BATTERY_BANK) + machines.add(::ENERGY_COUNTER) + machines.add(::CHEMICAL_GENERATOR) + machines.add(::ENERGY_SERVO) + + machines.add(::PAINTER) + machines.addAll(COBBLESTONE_GENERATOR.asSupplierArray().iterator()) + + machines.add(::MATTER_DECOMPOSER) + machines.add(::MATTER_CAPACITOR_BANK) + machines.add(::MATTER_CABLE) + machines.add(::PATTERN_STORAGE) + machines.add(::MATTER_SCANNER) + machines.add(::MATTER_PANEL) + machines.add(::MATTER_REPLICATOR) + machines.add(::MATTER_BOTTLER) + machines.add(::MATTER_ENTANGLER) + machines.add(::MATTER_RECYCLER) + + machines.add(::STORAGE_BUS) + machines.add(::STORAGE_IMPORTER) + machines.add(::STORAGE_EXPORTER) + machines.add(::DRIVE_VIEWER) + machines.add(::DRIVE_RACK) + machines.add(::ITEM_MONITOR) + machines.add(::STORAGE_CABLE) + machines.add(::STORAGE_POWER_SUPPLIER) + + MACHINES = SupplierList(machines) + } val DEBUG_EXPLOSION_SMALL: Item by registry.register(MNames.DEBUG_EXPLOSION_SMALL) { BlockItem(MBlocks.DEBUG_EXPLOSION_SMALL, Item.Properties().stacksTo(64)) } val DEBUG_SPHERE_POINTS: Item by registry.register(MNames.DEBUG_SPHERE_POINTS) { BlockItem(MBlocks.DEBUG_SPHERE_POINTS, Item.Properties().stacksTo(64)) } @@ -179,7 +215,7 @@ object MItems { val TRITANIUM_ANVIL: List init { - val props = ArrayList<() -> BlockItem>() + val props = ArrayList>() for (i in MBlocks.TRITANIUM_ANVIL.indices) { props.add(registry.register(MNames.TRITANIUM_ANVIL + i) { BlockItem(MBlocks.TRITANIUM_ANVIL[i], DEFAULT_PROPERTIES) }::get) @@ -475,8 +511,8 @@ object MItems { val ENGINE: Item by registry.register(MNames.ENGINE) { BlockItem(MBlocks.ENGINE, DEFAULT_PROPERTIES) } val HOLO_SIGN: Item by registry.register(MNames.HOLO_SIGN) { BlockItem(MBlocks.HOLO_SIGN, DEFAULT_PROPERTIES) } - val TRITANIUM_DOOR = registry.allColored(MNames.TRITANIUM_DOOR) { color, _ -> DoubleHighBlockItem(MBlocks.TRITANIUM_DOOR[color]!!, DEFAULT_PROPERTIES) } - val TRITANIUM_TRAPDOOR = registry.allColored(MNames.TRITANIUM_TRAPDOOR) { color, _ -> BlockItem(MBlocks.TRITANIUM_TRAPDOOR[color]!!, DEFAULT_PROPERTIES) } + val TRITANIUM_DOOR = registry.coloredWithBase(MNames.TRITANIUM_DOOR) { color, _ -> DoubleHighBlockItem(MBlocks.TRITANIUM_DOOR[color]!!, DEFAULT_PROPERTIES) } + val TRITANIUM_TRAPDOOR = registry.coloredWithBase(MNames.TRITANIUM_TRAPDOOR) { color, _ -> BlockItem(MBlocks.TRITANIUM_TRAPDOOR[color]!!, DEFAULT_PROPERTIES) } init { MRegistry.TRITANIUM_PRESSURE_PLATE.registerItems(registry) @@ -590,7 +626,7 @@ object MItems { ::REINFORCED_TRITANIUM_PLATE, ) - val CARGO_CRATE_MINECARTS = registry.allColored(MNames.MINECART_CARGO_CRATE) { color, _ -> MinecartCargoCrateItem(color) } + val CARGO_CRATE_MINECARTS = registry.coloredWithBase(MNames.MINECART_CARGO_CRATE) { color, _ -> MinecartCargoCrateItem(color) } val EXOPACK_PROBE: Item by registry.register(MNames.EXOPACK_PROBE, ::ExopackProbeItem) @@ -601,7 +637,7 @@ object MItems { val ENDER_UPGRADE: ExopackUpgradeItem by registry.register("exopack_ender_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.ENDER_ACCESS, "ender_access_upgrade", "ender_access_installed") } val INVENTORY_UPGRADES = SupplierList(8) { - registry.register("exosuit_inventory_upgrade_$it") { ExopackSlotUpgradeItem(18, Rarity.COMMON) }::get + registry.register("exosuit_inventory_upgrade_$it") { ExopackSlotUpgradeItem(18, Rarity.COMMON) } } val INVENTORY_UPGRADE_PROCEDURAL: ProceduralExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_procedural") { ProceduralExopackSlotUpgradeItem() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 0555c6d59..bdb7615ad 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.registry +import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableSet import com.google.common.collect.Streams import net.minecraft.advancements.CriteriaTriggers @@ -11,6 +12,7 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.ai.village.poi.PoiType import net.minecraft.world.entity.ai.village.poi.PoiTypes +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeableArmorItem import net.minecraft.world.item.Items import net.minecraft.world.level.BlockGetter @@ -81,6 +83,25 @@ object MRegistry { val ANDROID_FEATURES_LOCATION get() = features.location val ANDROID_FEATURES_KEY get() = features.key + val DYE_ORDER: ImmutableList = ImmutableList.of( + DyeColor.BLACK, + DyeColor.BLUE, + DyeColor.BROWN, + DyeColor.CYAN, + DyeColor.GRAY, + DyeColor.GREEN, + DyeColor.LIGHT_BLUE, + DyeColor.LIGHT_GRAY, + DyeColor.LIME, + DyeColor.MAGENTA, + DyeColor.ORANGE, + DyeColor.PINK, + DyeColor.PURPLE, + DyeColor.RED, + DyeColor.WHITE, + DyeColor.YELLOW, + ) + private fun register(event: NewRegistryEvent) { features.build(event) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt index 7b5e10a4d..d12172250 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt @@ -8,12 +8,13 @@ import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.RegistryObject import ru.dbotthepony.mc.otm.core.collect.SupplierMap +import ru.dbotthepony.mc.otm.registry.MRegistry import java.util.EnumMap /** * Colored only */ -@Suppress("PropertyName", "unused") +@Suppress("unused") open class ColoredDecorativeBlock( val baseName: String, private val provider: (DyeColor) -> Block, @@ -28,41 +29,15 @@ open class ColoredDecorativeBlock( protected val blockMap = EnumMap>(DyeColor::class.java) fun forEachItem(consumer: (String, DyeColor, Item) -> Unit) { - consumer.invoke("black", DyeColor.BLACK, getItem(DyeColor.BLACK)) - consumer.invoke("blue", DyeColor.BLUE, getItem(DyeColor.BLUE)) - consumer.invoke("brown", DyeColor.BROWN, getItem(DyeColor.BROWN)) - consumer.invoke("cyan", DyeColor.CYAN, getItem(DyeColor.CYAN)) - consumer.invoke("gray", DyeColor.GRAY, getItem(DyeColor.GRAY)) - consumer.invoke("green", DyeColor.GREEN, getItem(DyeColor.GREEN)) - consumer.invoke("light_blue", DyeColor.LIGHT_BLUE, getItem(DyeColor.LIGHT_BLUE)) - consumer.invoke("light_gray", DyeColor.LIGHT_GRAY, getItem(DyeColor.LIGHT_GRAY)) - consumer.invoke("lime", DyeColor.LIME, getItem(DyeColor.LIME)) - consumer.invoke("magenta", DyeColor.MAGENTA, getItem(DyeColor.MAGENTA)) - consumer.invoke("orange", DyeColor.ORANGE, getItem(DyeColor.ORANGE)) - consumer.invoke("pink", DyeColor.PINK, getItem(DyeColor.PINK)) - consumer.invoke("purple", DyeColor.PURPLE, getItem(DyeColor.PURPLE)) - consumer.invoke("red", DyeColor.RED, getItem(DyeColor.RED)) - consumer.invoke("white", DyeColor.WHITE, getItem(DyeColor.WHITE)) - consumer.invoke("yellow", DyeColor.YELLOW, getItem(DyeColor.YELLOW)) + MRegistry.DYE_ORDER.forEach { + consumer.invoke(it.name.lowercase(), it, getItem(it)) + } } fun forEachBlock(consumer: (String, DyeColor, Block) -> Unit) { - consumer.invoke("black", DyeColor.BLACK, getBlock(DyeColor.BLACK)) - consumer.invoke("blue", DyeColor.BLUE, getBlock(DyeColor.BLUE)) - consumer.invoke("brown", DyeColor.BROWN, getBlock(DyeColor.BROWN)) - consumer.invoke("cyan", DyeColor.CYAN, getBlock(DyeColor.CYAN)) - consumer.invoke("gray", DyeColor.GRAY, getBlock(DyeColor.GRAY)) - consumer.invoke("green", DyeColor.GREEN, getBlock(DyeColor.GREEN)) - consumer.invoke("light_blue", DyeColor.LIGHT_BLUE, getBlock(DyeColor.LIGHT_BLUE)) - consumer.invoke("light_gray", DyeColor.LIGHT_GRAY, getBlock(DyeColor.LIGHT_GRAY)) - consumer.invoke("lime", DyeColor.LIME, getBlock(DyeColor.LIME)) - consumer.invoke("magenta", DyeColor.MAGENTA, getBlock(DyeColor.MAGENTA)) - consumer.invoke("orange", DyeColor.ORANGE, getBlock(DyeColor.ORANGE)) - consumer.invoke("pink", DyeColor.PINK, getBlock(DyeColor.PINK)) - consumer.invoke("purple", DyeColor.PURPLE, getBlock(DyeColor.PURPLE)) - consumer.invoke("red", DyeColor.RED, getBlock(DyeColor.RED)) - consumer.invoke("white", DyeColor.WHITE, getBlock(DyeColor.WHITE)) - consumer.invoke("yellow", DyeColor.YELLOW, getBlock(DyeColor.YELLOW)) + MRegistry.DYE_ORDER.forEach { + consumer.invoke(it.name.lowercase(), it, getBlock(it)) + } } fun getItem(dyeColor: DyeColor): Item { @@ -77,33 +52,20 @@ open class ColoredDecorativeBlock( val blocks: Map by lazy { check(registeredBlocks) { "Didn't register blocks yet" } - SupplierMap(blockMap.map { it.key to it.value::get }) + SupplierMap(MRegistry.DYE_ORDER.map { it to blockMap[it]!! }) } val items: Map by lazy { check(registeredItems) { "Didn't register items yet" } - SupplierMap(itemMap.map { it.key to it.value::get }) + SupplierMap(MRegistry.DYE_ORDER.map { it to itemMap[it]!! }) } open fun registerBlocks(registry: DeferredRegister) { check(blockMap.isEmpty()) { "( ͡° ͜ʖ ͡°) No. \\(• ε •)/ ( ͠° ل͜ ͡°) ( ͠° ͟ ͟ʖ ͡°) (ง ͠° ͟ل͜ ͡°)ง ( ͡°︺͡°) ('ω')" } - blockMap[DyeColor.WHITE] = registry.register("${baseName}_white") { provider.invoke(DyeColor.WHITE) } - blockMap[DyeColor.ORANGE] = registry.register("${baseName}_orange") { provider.invoke(DyeColor.ORANGE) } - blockMap[DyeColor.MAGENTA] = registry.register("${baseName}_magenta") { provider.invoke(DyeColor.MAGENTA) } - blockMap[DyeColor.LIGHT_BLUE] = registry.register("${baseName}_light_blue") { provider.invoke(DyeColor.LIGHT_BLUE) } - blockMap[DyeColor.YELLOW] = registry.register("${baseName}_yellow") { provider.invoke(DyeColor.YELLOW) } - blockMap[DyeColor.LIME] = registry.register("${baseName}_lime") { provider.invoke(DyeColor.LIME) } - blockMap[DyeColor.PINK] = registry.register("${baseName}_pink") { provider.invoke(DyeColor.PINK) } - blockMap[DyeColor.GRAY] = registry.register("${baseName}_gray") { provider.invoke(DyeColor.GRAY) } - blockMap[DyeColor.LIGHT_GRAY] = registry.register("${baseName}_light_gray") { provider.invoke(DyeColor.LIGHT_GRAY) } - blockMap[DyeColor.CYAN] = registry.register("${baseName}_cyan") { provider.invoke(DyeColor.CYAN) } - blockMap[DyeColor.PURPLE] = registry.register("${baseName}_purple") { provider.invoke(DyeColor.PURPLE) } - blockMap[DyeColor.BLUE] = registry.register("${baseName}_blue") { provider.invoke(DyeColor.BLUE) } - blockMap[DyeColor.BROWN] = registry.register("${baseName}_brown") { provider.invoke(DyeColor.BROWN) } - blockMap[DyeColor.GREEN] = registry.register("${baseName}_green") { provider.invoke(DyeColor.GREEN) } - blockMap[DyeColor.RED] = registry.register("${baseName}_red") { provider.invoke(DyeColor.RED) } - blockMap[DyeColor.BLACK] = registry.register("${baseName}_black") { provider.invoke(DyeColor.BLACK) } + MRegistry.DYE_ORDER.forEach { + blockMap[it] = registry.register("${baseName}_${it.name.lowercase()}") { provider.invoke(it) } + } registeredBlocks = true } @@ -114,22 +76,9 @@ open class ColoredDecorativeBlock( check(itemMap.isEmpty()) { "( ͡° ͜ʖ ͡°) No. \\(• ε •)/ ( ͠° ل͜ ͡°) ( ͠° ͟ ͟ʖ ͡°) (ง ͠° ͟ل͜ ͡°)ง ( ͡°︺͡°) ('ω')" } check(registeredBlocks) { "wtffffff???????????" } - itemMap[DyeColor.WHITE] = registry.register("${baseName}_white") { BlockItem(blockMap[DyeColor.WHITE]!!.get(), properties) } - itemMap[DyeColor.ORANGE] = registry.register("${baseName}_orange") { BlockItem(blockMap[DyeColor.ORANGE]!!.get(), properties) } - itemMap[DyeColor.MAGENTA] = registry.register("${baseName}_magenta") { BlockItem(blockMap[DyeColor.MAGENTA]!!.get(), properties) } - itemMap[DyeColor.LIGHT_BLUE] = registry.register("${baseName}_light_blue") { BlockItem(blockMap[DyeColor.LIGHT_BLUE]!!.get(), properties) } - itemMap[DyeColor.YELLOW] = registry.register("${baseName}_yellow") { BlockItem(blockMap[DyeColor.YELLOW]!!.get(), properties) } - itemMap[DyeColor.LIME] = registry.register("${baseName}_lime") { BlockItem(blockMap[DyeColor.LIME]!!.get(), properties) } - itemMap[DyeColor.PINK] = registry.register("${baseName}_pink") { BlockItem(blockMap[DyeColor.PINK]!!.get(), properties) } - itemMap[DyeColor.GRAY] = registry.register("${baseName}_gray") { BlockItem(blockMap[DyeColor.GRAY]!!.get(), properties) } - itemMap[DyeColor.LIGHT_GRAY] = registry.register("${baseName}_light_gray") { BlockItem(blockMap[DyeColor.LIGHT_GRAY]!!.get(), properties) } - itemMap[DyeColor.CYAN] = registry.register("${baseName}_cyan") { BlockItem(blockMap[DyeColor.CYAN]!!.get(), properties) } - itemMap[DyeColor.PURPLE] = registry.register("${baseName}_purple") { BlockItem(blockMap[DyeColor.PURPLE]!!.get(), properties) } - itemMap[DyeColor.BLUE] = registry.register("${baseName}_blue") { BlockItem(blockMap[DyeColor.BLUE]!!.get(), properties) } - itemMap[DyeColor.BROWN] = registry.register("${baseName}_brown") { BlockItem(blockMap[DyeColor.BROWN]!!.get(), properties) } - itemMap[DyeColor.GREEN] = registry.register("${baseName}_green") { BlockItem(blockMap[DyeColor.GREEN]!!.get(), properties) } - itemMap[DyeColor.RED] = registry.register("${baseName}_red") { BlockItem(blockMap[DyeColor.RED]!!.get(), properties) } - itemMap[DyeColor.BLACK] = registry.register("${baseName}_black") { BlockItem(blockMap[DyeColor.BLACK]!!.get(), properties) } + MRegistry.DYE_ORDER.forEach { + itemMap[it] = registry.register("${baseName}_${it.name.lowercase()}") { BlockItem(blockMap[DyeColor.WHITE]!!.get(), properties) } + } registeredItems = true } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt index d12237294..f5ca9181c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.registry.objects +import com.google.common.collect.Streams import net.minecraft.world.item.BlockItem import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item @@ -9,6 +10,8 @@ import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.RegistryObject import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.core.util.WriteOnce +import ru.dbotthepony.mc.otm.registry.MRegistry +import java.util.stream.Stream /** * Base + Colored @@ -25,12 +28,12 @@ class DecorativeBlock( val allBlocks: Map by lazy { check(registeredBlocks) { "Didn't register items yet" } - SupplierMap(blockMap.map { it.key to it.value::get }.toMutableList().also { it.add(null to _block::get) }) + SupplierMap(Streams.concat(MRegistry.DYE_ORDER.stream().map { it to blockMap[it]!! }, Stream.of(null to _block))) } val allItems: Map by lazy { check(registeredItems) { "Didn't register items yet" } - SupplierMap(itemMap.map { it.key to it.value::get }.toMutableList().also { it.add(null to _item::get) }) + SupplierMap(Streams.concat(MRegistry.DYE_ORDER.stream().map { it to itemMap[it]!! }, Stream.of(null to _item))) } override fun registerBlocks(registry: DeferredRegister) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt index 6e357144d..5cfe5242e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt @@ -11,8 +11,9 @@ import net.minecraftforge.registries.RegistryObject import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.collect.SupplierMap import java.util.EnumMap +import java.util.function.Supplier -@Suppress("PropertyName", "unused", "ReplaceGetOrSet", "ReplacePutWithAssignment") +@Suppress("unused", "ReplaceGetOrSet", "ReplacePutWithAssignment") class StripedColoredDecorativeBlock( val basename: String, val blockFactory: (colorA: DyeColor, colorB: DyeColor) -> Block, @@ -54,7 +55,7 @@ class StripedColoredDecorativeBlock( val builder = ImmutableMap.Builder>() for ((base, children) in mapItems) { - builder.put(base, SupplierMap(children.map { it.key to it.value::get })) + builder.put(base, SupplierMap(children.map { it.key to it.value })) } builder.build() @@ -65,7 +66,7 @@ class StripedColoredDecorativeBlock( val builder = ImmutableMap.Builder>() for ((base, children) in mapBlocks) { - builder.put(base, SupplierMap(children.map { it.key to it.value::get })) + builder.put(base, SupplierMap(children.map { it.key to it.value })) } builder.build() @@ -73,17 +74,17 @@ class StripedColoredDecorativeBlock( val flatItems: List by lazy { check(registeredItems) { "Didn't register items yet" } - SupplierList(mapItems.flatMap { it.value.values }.map { it::get }) + SupplierList(mapItems.flatMap { it.value.values }) } val flatBlocks: List by lazy { check(registeredBlocks) { "Didn't register items yet" } - SupplierList(mapBlocks.flatMap { it.value.values }.map { it::get }) + SupplierList(mapBlocks.flatMap { it.value.values }) } fun registerItems(registry: DeferredRegister) { - for (base in DyeColor.values()) { - for (stripe in DyeColor.values()) { + for (base in DyeColor.entries) { + for (stripe in DyeColor.entries) { if (base == stripe) { continue } @@ -97,8 +98,8 @@ class StripedColoredDecorativeBlock( } fun registerBlocks(registry: DeferredRegister) { - for (base in DyeColor.values()) { - for (stripe in DyeColor.values()) { + for (base in DyeColor.entries) { + for (stripe in DyeColor.entries) { if (base == stripe) { continue } @@ -116,7 +117,7 @@ class StripedColoredDecorativeBlock( throw IllegalStateException("Not yet registered blocks") } - val build = ImmutableList.Builder<() -> Pair>>() + val build = ImmutableList.Builder>>>() for ((base, children) in mapBlocks) { for ((stripe, registryObject) in children) { @@ -132,7 +133,7 @@ class StripedColoredDecorativeBlock( throw IllegalStateException("Not yet registered items") } - val build = ImmutableList.Builder<() -> Pair>>() + val build = ImmutableList.Builder>>>() for ((base, children) in mapItems) { for ((stripe, registryObject) in children) { diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/black.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e38a3b11202b086ff2fd471d57fc1ab74012fb GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI@rX(V@Z%-FoVOh8)+a;lDE4H zyI5k!YaoZc#M9T6{RJa4hn}g|M$KhF=>Sg`#}JFtXD8YF9X1d-CeM@lGQeF_n3z{VB%%kSTnh3YgO!_DU!WYvjReUH$Aw- zzkJ_&SGhZ73=`Ldww?>*UVOtcD{l*{>+J_;nhM#IrXRMb^K~I(F6WD9EDs{26^<{v@?hoxkLKgqKN*j4=X&U+ za(ZZ|GA`O?<5_vNSYXF%^{a}D>n;VEA5)VyY23MJQ!Jl^%1l8CeVKy_r*E}yQYx@t z?)pdQjq29a@~`C%nz4J0KHC@6akXA(sOu}e@~r*S%;Gmq`h1J|j{JVmu=t1Bk{_BK z{9i8eZRd3~-WT-Y{1;9=_Z^>Q4+gdagIl%4HKHUXu_VD!PC{xWt~$(699>M_;vsQ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..67763b0e53fad3a08b1d4654b957be893bec8bc1 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI@OIZIrL1uHfk;dN(XqlIEGl9K0C?Y@34W$F?pWUmjUjg!pxi; zoGXRTv1aH@OIsMUOL?MBV!~stryNf?<}KDa7qF^B^?iVi^~T#GD-{$~_8mNY{{HXm zW^t~dC+a7ad?%~0+Vj|mx!m(se_-BIa&WSr0uwLO#+u1RTdQIZO_A)KniUY*yXnCt z{^k4LyUN`uW0<%uwDnvd_u?CtS$SJnU2i`)(^SZwH2tt;PBPz(YqAR-dQ1#&kKyn; z(D(k-qbGOmZ!64Wb~tr|>Dpmap05iTb2(o;V|frEt#EwVl?O8qcr+i+{>gZZJJ&-m zmD58zm2uHF8_&wC#R5BCt6x=ITz4tR{Fs`wN#o8%n_~GSRAvfF=*t{bIDM;qlTv~G za@RjXZ&bIYmVYgG(2U({^x3|kj;r-TLtS6#m1pgrW){C`(&t;ucjWhjhQ&Y3mi*A{ z;Qw-wZ#%D}@xGuB=f803x$pQadoZva7~HBQt`Q|Ei6yC4$wjF^iowXh$VAt`5Qsty z&8!SSNZY``%D|v%^8B|b8glbfGSez?Yv4Yo9thN+0k@$fGdH!kBr&%Dp~pDHz{1MJ Z%*xalVu{$~IaxqG44$rjF6*2UngBBa`i%ep literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..0f41dbe7e1df47b6a86175fdf4d161e40eff714c GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI|)3@3;DHYf+ zcl{&uMs;gy`PXs>&Dgz0pY03kxLPkX)b*8KdDi}EX7QUQeZIwfM}9wOSp36m$q&sA z{x28#w(~j~?+f~H{tKs``;O1D2Ls!I!L3^28c~vxSdwa$T$Bo=7>o>zOmqzlfhfe# z%*p_Sv<(cb3=FC!&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dW=I1EUZk- ZtW1p|mWWNBlLgen;OXk;vd$@?2>{>Q_#OZN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb1a09b8b68c0f8c8c6469613b82a1696aa4ff5 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIY zcCo~c*FX+?iKnkC`wK>94n0$^jhf4V(gB_>jv*GO&rY)UJ8U3wOr9t8Wq`Y=Ff%6y z=StyotQk7f(iR5oQl6-jnDChEDaTWed5d+<1+3~&eIHtW{ z^u0gz=*eCC+Y0lT9Zua~x^~!<=j%eoT+SEISRO=3D;!^T<-yDY9?i$Ie=;89&h^ks z<@C@_Wn8q)#Q@yP*If!SKc*&a(ztWcrdU1+m6?JP`Z5OMB|kJf z_`h7_+s^A~yf5g(`7fM$?mIrq9t>;;2DfU7YeY#(Vo9o1a#1RfVlXl=GSM|K1fmc_ zGb;lS(l#)#GBBu`JpV0Q ZvobY?SRyugP8LuPgQu&X%Q~loCIBA@`U?O6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bc2569b7889c5f7e7b718bceba80d5c319751d GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIkd#UV@Z%-FoVOh8)+a;lDE4H zyI5k!YaoZc#M9T6{RJa4hn}g|M$KhF=>Sg`#}JFtXD8YF9X1d-CeM@lGQeF_n3z{VB%%kSTnh3YgO!_DU!WYvjReUH$Aw- zzkJ_&SGhZ73=`Ldww?>*UVOtcD{l*{>+J_;nhM#IrXRMb^K~I(F6WD9EDs{26^<{v@?hoxkLKgqKN*j4=X&U+ za(ZZ|GA`O?<5_vNSYXF%^{a}D>n;VEA5)VyY23MJQ!Jl^%1l8CeVKy_r*E}yQYx@t z?)pdQjq29a@~`C%nz4J0KHC@6akXA(sOu}e@~r*S%;Gmq`h1J|j{JVmu=t1Bk{_BK z{9i8eZRd3~-WT-Y{1;9=_Z^>Q4+gdagIl%4HKHUXu_VD!PC{xWt~$(696B!`6&PZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/green.png new file mode 100644 index 0000000000000000000000000000000000000000..55876af25fa9a02a6c2cd26f20674c21e867ffc3 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI|)3@3;DHYf+ zcl{&uMs;gy`PXs>&Dgz0pY03kxLPkX)b*8KdDi}EX7QUQeZIwfM}9wOSp36m$q&sA z{x28#w(~j~?+f~H{tKs``;O1D2Ls!I!L3^28c~vxSdwa$T$Bo=7>o>zOmqzlfhfe# z%*p_Sv<(cb3=FC!&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dW=I1EUZk- ZtW1p|mWWNBlLgen;OXk;vd$@?2>^YW_}l;h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc1adcb5b3cd343a821705d269c252d9454fc69 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI|%)>uYnx)5>H=O_7{xI9D1f+8#R{!r2{-&978NlpPgjyci2GWm^@GF%K&##VP;Ma z&XvOFSTl5{r7aBFr94q5G2t=SQ;w$`^A_uz3s}{m`aZzMdgE=8l?sX~`wkvHfB$!O zvp84K6ZMlyzLQm0?Rjj(T<&?RKQQkpIXKx*fr*!CW6k8EtyQsyrbzZq%?b$Z-SprR z|MGqBUFGhSF-%+++IlXKd+`m+th_C(uD2hYX)0t-nts?aCzFxtuSau{?;7Rye-w%7d8)JerSZ|71MIo$H~O z%ITq<%D8Bojc4W6Vu2m6)vqcpuDcXueoRf;q;cn>O|g6uDl-Ko^kohzoW9k*NvXho zx$7UHH>z7x%fFU8XvXd}`fOiN$JKhFp{}p=%Cq)QGmGCe>GLh-JM#NM!{Q%iOMYl} z@PE0;x1HC~cwf+m^Itgi+;@DIJs8*y3~tpD*NBpo#FA92y9uq-|heWnfS>dH!1z4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7&|@58U}0rq ZW@Ty&u|#b0oGhRo22WQ%mvv4FO#o?A`XK-S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e055183aec328e82bb1501034f37902fdf6a7c GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fICdU~4w|Nmc9R8(JI-`?IH5)zV-kl-)B#T=-Vu_VYZn8D%MjWiG^$=lt9 zT`aNVHITzz;_2(k{(_O2L(kM}qvkT8bbzOeV~EA+vy<%o4jYIZljli&8Q?A|%*@Hb zxl;HXYlhCWw1q*tlqc#WCOqbP%JGzA-eR3|0joMx-v`)OZ@ewCQbAE=-@(J@@Bhwj z7Uv3jqJC1zcd`nrJ&%o;%RO)P2j)E`2PgX}F!3^NteIT2wJP?|6v^JHSplKFn;u-^ zU%v0XtK6M3hKcJ!Th9e@FTP=!mA8e}_4b1^O@-`9(+^wbB=g<4CcEIF$HegV7!JP! zeeX{_dUDtPw!%DShf_D0t{pbz`MQuXm-EFlmIo2i3dfgSc`);UNAvOQpNz-2b3OD@ zIX$#f85eD{@vOXBEU@FX`c=inb(ez7kEuzUH11rqDV9${Wu~BnzRW>|)3@3;DHYf+ zcl{&uMs;gy`PXs>&Dgz0pY03kxLPkX)b*8KdDi}EX7QUQeZIwfM}9wOSp36m$q&sA z{x28#w(~j~?+f~H{tKs``;O1D2Ls!I!L3^28c~vxSdwa$T$Bo=7>o>zOmqzlfhfe# z%*p_Sv<(cb3=FC!&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dW=I1EUZk- ZtW1p|mWWNBlLgen;OXk;vd$@?2>|zy`S1V$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..d318c423d062b57a2174251f99d5ea8a85546a12 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI|%)>uYnx)5>H=O_7{xI9D1f+8#R{!r2{-&978NlpPgjyci2GWm^@GF%K&##VP;Ma z&XvOFSTl5{r7aBFr94q5G2t=SQ;w$`^A_uz3s}{m`aZzMdgE=8l?sX~`wkvHfB$!O zvp84K6ZMlyzLQm0?Rjj(T<&?RKQQkpIXKx*fr*!CW6k8EtyQsyrbzZq%?b$Z-SprR z|MGqBUFGhSF-%+++IlXKd+`m+th_C(uD2hYX)0t-nts?aCzFxtuSau{?;7Rye-w%7d8)JerSZ|71MIo$H~O z%ITq<%D8Bojc4W6Vu2m6)vqcpuDcXueoRf;q;cn>O|g6uDl-Ko^kohzoW9k*NvXho zx$7UHH>z7x%fFU8XvXd}`fOiN$JKhFp{}p=%Cq)QGmGCe>GLh-JM#NM!{Q%iOMYl} z@PE0;x1HC~cwf+m^Itgi+;@DIJs8*y3~tpD*NBpo#FA92y9uq-|heWnfS>dH!1z4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7&|@58U}0rq ZW@Ty&u|#b0oGhRo22WQ%mvv4FO#ogV`kMd% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae1067a02177abc0328e0bc6e10bf8e24d79550 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIiYm2>y5WXRw^i}>^pe){QckA z&Ei}^Pt;E;`A$}0wdb)BbGhfO{=mGad{x zpzr;uM^EnB-&UB%>~QJ^)3w8_L%`AS?q|djQ@5t{54U2!6E%~9@ z!T;qV-*#R{<9$IN&VS+5bKmh<_F!N;Ft}AqTq8ArOTa znpqiukhXz=m4QLkeJv6A|NnncQBi$;eS3R*NJvORLPEBT-c_Jd#*!evUY zcCo~c*FX+?iKnkC`wK>94n0$^jhf4V(gB_>jv*GO&rY)UJ8U3wOr9t8Wq`Y=Ff%6y z=StyotQk7f(iR5oQl6-jnDChEDaTWed5d+<1+3~&eIHtW{ z^u0gz=*eCC+Y0lT9Zua~x^~!<=j%eoT+SEISRO=3D;!^T<-yDY9?i$Ie=;89&h^ks z<@C@_Wn8q)#Q@yP*If!SKc*&a(ztWcrdU1+m6?JP`Z5OMB|kJf z_`h7_+s^A~yf5g(`7fM$?mIrq9t>;;2DfU7YeY#(Vo9o1a#1RfVlXl=GSM|K1fmc_ zGb;lS(l#)#GBBu`JpV0Q ZvobY?SRyugP8LuPgQu&X%Q~loCIHKV`Q88k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..a905f58c0bae1d411472782c84758fbbc8ac3a5e GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIiYm2>y5WXRw^i}>^pe){QckA z&Ei}^Pt;E;`A$}0wdb)BbGhfO{=mGad{x zpzr;uM^EnB-&UB%>~QJ^)3w8_L%`AS?q|djQ@5t{54U2!6E%~9@ z!T;qV-*#R{<9$IN&VS+5bKmh<_F!N;Ft}AqTq8ArOTa znpqiukhXz=m4QLkSg`#}JFtXD8YF9X1d-CeM@lGQeF_n3z{VB%%kSTnh3YgO!_DU!WYvjReUH$Aw- zzkJ_&SGhZ73=`Ldww?>*UVOtcD{l*{>+J_;nhM#IrXRMb^K~I(F6WD9EDs{26^<{v@?hoxkLKgqKN*j4=X&U+ za(ZZ|GA`O?<5_vNSYXF%^{a}D>n;VEA5)VyY23MJQ!Jl^%1l8CeVKy_r*E}yQYx@t z?)pdQjq29a@~`C%nz4J0KHC@6akXA(sOu}e@~r*S%;Gmq`h1J|j{JVmu=t1Bk{_BK z{9i8eZRd3~-WT-Y{1;9=_Z^>Q4+gdagIl%4HKHUXu_VD!PC{xWt~$(69C4Z_<#Ta literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/red.png new file mode 100644 index 0000000000000000000000000000000000000000..14c2ffd9a80e7cdc4cff6d3a06f3ee9c39a886f8 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI|%)>uYnx)5>H=O_7{xI9D1f+8#R{!r2{-&978NlpPgjyci2GWm^@GF%K&##VP;Ma z&XvOFSTl5{r7aBFr94q5G2t=SQ;w$`^A_uz3s}{m`aZzMdgE=8l?sX~`wkvHfB$!O zvp84K6ZMlyzLQm0?Rjj(T<&?RKQQkpIXKx*fr*!CW6k8EtyQsyrbzZq%?b$Z-SprR z|MGqBUFGhSF-%+++IlXKd+`m+th_C(uD2hYX)0t-nts?aCzFxtuSau{?;7Rye-w%7d8)JerSZ|71MIo$H~O z%ITq<%D8Bojc4W6Vu2m6)vqcpuDcXueoRf;q;cn>O|g6uDl-Ko^kohzoW9k*NvXho zx$7UHH>z7x%fFU8XvXd}`fOiN$JKhFp{}p=%Cq)QGmGCe>GLh-JM#NM!{Q%iOMYl} z@PE0;x1HC~cwf+m^Itgi+;@DIJs8*y3~tpD*NBpo#FA92y9uq-|heWnfS>dH!1z4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7&|@58U}0rq ZW@Ty&u|#b0oGhRo22WQ%mvv4FO#pE=`N04H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/white.png new file mode 100644 index 0000000000000000000000000000000000000000..71ce93dc137ee5902f6f513b949162a3f38d2635 GIT binary patch literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@0VEjWo@x~VDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(GY3GxeOU?`h>)&j&! z@^*J&_}|`tWiq^tgYP-5alW3?^aG47sh-Cn)bda#^9)J^N6znEMG;j|mlg5tmNb zO;p}}}=V~Q+sP)qAHh`^IKKcsf?@Q8FSx?Zn)eO%_ABRa9wr#;kUatyj#S_Zp3tD z`fX{}zTJ6~7S7|znjf!UnUdHPu>DjLgIWCa2Le+>FL@tGUa)3$-3bQ%jvHZFMm}yK z8#}dDSvK%;S6+M4AKtKLiP4n@yi+^#GV&cP-)TJ7_Fhn1m$z7;l;?`W_7!%UPS!;; zRB!z)^G9b!XFv0En?Jl8E_Qzu6X5#FPb!y@rPhf$^?d;u=wsl30>zm0Xkxq!^40j7)S541p-b(9FsJgtQF| ztPBjQCeMG1q9HdwB{QuOw+8NW>VZHF8gLs*GILXlOA>Pn5PFP53@ofn%&bg}A(n_u So|6UC!{F)a=d#Wzp$Py1t|_$u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..21eae70794adef28520e4d9fef4669488c483d74 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI@OIZIrL1uHfk;dN(XqlIEGl9K0C?Y@34W$F?pWUmjUjg!pxi; zoGXRTv1aH@OIsMUOL?MBV!~stryNf?<}KDa7qF^B^?iVi^~T#GD-{$~_8mNY{{HXm zW^t~dC+a7ad?%~0+Vj|mx!m(se_-BIa&WSr0uwLO#+u1RTdQIZO_A)KniUY*yXnCt z{^k4LyUN`uW0<%uwDnvd_u?CtS$SJnU2i`)(^SZwH2tt;PBPz(YqAR-dQ1#&kKyn; z(D(k-qbGOmZ!64Wb~tr|>Dpmap05iTb2(o;V|frEt#EwVl?O8qcr+i+{>gZZJJ&-m zmD58zm2uHF8_&wC#R5BCt6x=ITz4tR{Fs`wN#o8%n_~GSRAvfF=*t{bIDM;qlTv~G za@RjXZ&bIYmVYgG(2U({^x3|kj;r-TLtS6#m1pgrW){C`(&t;ucjWhjhQ&Y3mi*A{ z;Qw-wZ#%D}@xGuB=f803x$pQadoZva7~HBQt`Q|Ei6yC4$wjF^iowXh$VAt`5Qsty z&8!SSNZY``%D|v%^8B|b8glbfGSez?Yv4Yo9thN+0k@$fGdH!kBr&%Dp~pDHz{1MJ Z%*xalVu{$~IaxqG44$rjF6*2UngH22`o;hN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/cobblestone_generator_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..79df901129172887616f9db661a513f6d974c415 GIT binary patch literal 1343 zcmV-F1;F}=P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j~F<2pl3L68I1R00TQoL_t(&-tAbiPU|ofJ*iv? zMXBVab2pYsY+*pmofyl;kcF>eVPNAA@&OFZR>`Vh3u}iOwTh5B_zl&~v)wp2O@Q~L zoT-iD_}t^;dv6lNag3rUuwJjhIfoCVlo*f42*VI*nksvoo+G6M=NwW>RNW(`1S^UH zVHlPJ!{HDB5QZW2v7#sd0Q>#k80VY^E}}%l6&U9nY`tC^i|b^neiM;A&nZfU76{JI z&yOOngRR8P%?$uxG#cUT?Cj|N&(BZe|8~2@Xf(ohy9EHSs>ti0-}mwHf%o@!V?2r? z>~=duQ3L?k?RLf(0Amh2RXS2)wOSzzL*#j0?sc7y_WM1gl$cB=D2n1hz&H9T#BmG& zm`nZPjCxROo?C6H!|*-8|#**lUuWzFQNZs+Q-up@a(*IVBSPOzQ@-4e7ehC|lVJ z_;|qHE?rI6vDB|eQ3OUAEX%Sos|g{D1*+~LWLbu{w>KwIrIeCVVm6x@Wjjq%#W_Ei z@bU4{NUK?v84n=>LI?;UkR%E8c|NFWTmT@LPNxt;xY#2Ij{6Or&{t4OsoUGzK=%qI zujl7y#cC#2E`CZPS}vCu4u_b}=Vj0E`uYk07}$GSN>j6V9LJ>!KDfBJz}?-Q(XfyT z3;>cODfiv3;dTPj2`5PcA;ghq>dG%+wOaip(8Nrqn$VR`SRH$p559`Hu43xj0ssS- znYuRN)6>&Yg9-ov$!RAdeed=BK)-$Er(iDS z&0KoIaeV`7tiX4pR)KFXHg%0<+fz{0@BipA^!32Mtw0x1v?9 Date: Wed, 3 Jan 2024 18:51:59 +0700 Subject: [PATCH 09/37] Essence storage coloring --- .../mc/otm/datagen/blocks/BlockModels.kt | 1 + .../mc/otm/datagen/blocks/BlockStates.kt | 2 +- .../mc/otm/datagen/items/ItemModels.kt | 9 ++++----- .../datagen/items/MatteryItemModelProvider.kt | 2 +- .../dbotthepony/mc/otm/datagen/lang/English.kt | 4 ++-- .../otm/datagen/lang/MatteryLanguageProvider.kt | 1 + .../dbotthepony/mc/otm/datagen/lang/Russian.kt | 4 ++-- .../mc/otm/datagen/loot/LootTablesData.kt | 2 +- .../otm/datagen/recipes/CraftingTableRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 2 ++ .../ru/dbotthepony/mc/otm/datagen/tags/Tags.kt | 2 +- .../mc/otm/block/tech/EssenceStorageBlock.kt | 5 ++++- .../mc/otm/registry/MBlockEntities.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 5 +++-- .../textures/block/essence_storage/black.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/blue.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/brown.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/cyan.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/gray.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/green.png | Bin 0 -> 1331 bytes .../block/essence_storage/light_blue.png | Bin 0 -> 1331 bytes .../block/essence_storage/light_gray.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/lime.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/magenta.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/orange.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/pink.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/purple.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/red.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage/white.png | Bin 0 -> 1326 bytes .../textures/block/essence_storage/yellow.png | Bin 0 -> 1331 bytes .../textures/block/essence_storage_mask.png | Bin 0 -> 1695 bytes 32 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 315bc0f59..4ccc440f4 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -11,5 +11,6 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK) coloredMachine(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) + coloredMachine(MBlocks.ESSENCE_STORAGE, listOf("0", "particle")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 6aba587d5..38c4cafb9 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -107,7 +107,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.MATTER_RECONSTRUCTOR) provider.block(MBlocks.ENERGY_SERVO) provider.block(MBlocks.COBBLESTONE_GENERATOR.values) - provider.block(MBlocks.ESSENCE_STORAGE) + provider.block(MBlocks.ESSENCE_STORAGE.values) provider.exec { for (crate in MRegistry.CARGO_CRATES.allBlocks.values) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 6bb6f9915..0b3cc5702 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -159,12 +159,11 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.TRITANIUM_TRAPDOOR[null]!!, "tritanium_trapdoor_bottom") - for (color in DyeColor.values()) + for (color in DyeColor.entries) provider.block(MItems.TRITANIUM_TRAPDOOR[color]!!, "tritanium_trapdoor_${color.name.lowercase()}_bottom") - for (item in MRegistry.CARGO_CRATES.allItems.values) { + for (item in MRegistry.CARGO_CRATES.allItems.values) provider.block(item, "${item.registryName!!.path}_closed") - } provider.block(MItems.CHEMICAL_GENERATOR, "chemical_generator_working") provider.block(MItems.ENERGY_COUNTER, "energy_counter_down") @@ -172,7 +171,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.MATTER_CABLE, "matter_cable_core") provider.block(MItems.MATTER_DECOMPOSER, "matter_decomposer_working") provider.block(MItems.ENERGY_SERVO, "energy_servo") - provider.block(MItems.ESSENCE_STORAGE, "essence_storage") + provider.coloredWithBaseBlock(MItems.ESSENCE_STORAGE, "essence_storage") provider.block(MItems.MATTER_RECONSTRUCTOR, "matter_reconstructor") provider.block(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace_working") @@ -183,7 +182,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.TWIN_PLATE_PRESS, "twin_plate_press_idle") provider.block(MItems.STORAGE_POWER_SUPPLIER, "storage_power_supplier") provider.block(MItems.MATTER_RECYCLER, "matter_recycler_working") - provider.allColoredBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") + provider.coloredWithBaseBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") provider.block(MItems.STORAGE_BUS) provider.block(MItems.STORAGE_IMPORTER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt index e90c8448c..f53ef39e2 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt @@ -31,7 +31,7 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event fun block(item: Item) = exec { withExistingParent(item.registryName!!.path, modLocation("block/${item.registryName!!.path}")) } fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, modLocation("block/$path")) } - fun allColoredBlock(items: Map, path: String) { + fun coloredWithBaseBlock(items: Map, path: String) { block(items[DyeColor.BLACK]!!, path + "_black") block(items[DyeColor.BLUE]!!, path + "_blue") block(items[DyeColor.BROWN]!!, path + "_brown") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 50e35e437..6fe4e1df8 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -426,8 +426,8 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Cobblestone Generator") add(MBlocks.INFINITE_WATER_SOURCE, "Infinite Water Source") - add(MBlocks.ESSENCE_STORAGE, "Essence Storage") - add(MBlocks.ESSENCE_STORAGE, "desc", "Allows to store and retrieve experience levels") + addBlock(MBlocks.ESSENCE_STORAGE.values, "Essence Storage") + addBlock(MBlocks.ESSENCE_STORAGE.values, "desc", "Allows to store and retrieve experience levels") add(MBlocks.MATTER_RECONSTRUCTOR, "Matter Reconstructor") add(MBlocks.MATTER_RECONSTRUCTOR, "desc", "Repairs tools using matter") add(MBlocks.DEV_CHEST, "Dev Chest") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt index 2718b807b..3c10bb57c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt @@ -83,6 +83,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { fun add(key: Block, value: String) = slave.add(key, value) fun addBlock(key: Collection, value: String) = key.forEach { add(it, value) } fun add(key: Block, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value) + fun addBlock(key: Collection, suffix: String, value: String) = key.forEach { add(it, suffix, value) } fun add(key: Item, value: String) = slave.add(key, value) fun addItem(key: Collection, value: String) = key.forEach { add(it, value) } fun add(key: Item, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 69395a069..2a1c9bc6a 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -428,8 +428,8 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника") add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды") - add(MBlocks.ESSENCE_STORAGE, "Хранилище эссенции") - add(MBlocks.ESSENCE_STORAGE, "desc", "Позволяет хранить очки опыта") + addBlock(MBlocks.ESSENCE_STORAGE.values, "Хранилище эссенции") + addBlock(MBlocks.ESSENCE_STORAGE.values, "desc", "Позволяет хранить очки опыта") add(MBlocks.MATTER_RECONSTRUCTOR, "Материальный реконструктор") add(MBlocks.MATTER_RECONSTRUCTOR, "desc", "Чинит инструменты используя материю") add(MBlocks.DEV_CHEST, "Сундук разработчика") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index f78f65f44..481aecb84 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -131,7 +131,7 @@ fun addLootTables(lootTables: LootTables) { } lootTables.tile(MBlocks.COBBLESTONE_GENERATOR.values) - lootTables.tile(MBlocks.ESSENCE_STORAGE) + lootTables.tile(MBlocks.ESSENCE_STORAGE.values) lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR) lootTables.tile(MBlocks.FLUID_TANK) lootTables.tile(MBlocks.PAINTER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index c9e89a661..275872420 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -391,7 +391,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(MItemTags.TRITANIUM_NUGGETS) .save(consumer, modLocation("ingot_from_nuggets")) - MatteryRecipe(MItems.ESSENCE_STORAGE, category = machinesCategory) + MatteryRecipe(MItems.ESSENCE_STORAGE[null]!!, category = machinesCategory) .row(MItems.MATTER_CAPACITOR_PARTS, Items.ENDER_EYE, MItemTags.ADVANCED_CIRCUIT) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.GOLD_WIRES, MItemTags.HARDENED_GLASS, MItemTags.HARDENED_GLASS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 4294b3830..28ef24561 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -272,6 +272,7 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, MItems.TRITANIUM_TRAPDOOR[null]!!, MItems.TRITANIUM_TRAPDOOR) generate(consumer, MItems.COBBLESTONE_GENERATOR[null]!!, MItems.COBBLESTONE_GENERATOR) + generate(consumer, MItems.ESSENCE_STORAGE[null]!!, MItems.ESSENCE_STORAGE) generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items) @@ -290,5 +291,6 @@ fun addPainterRecipes(consumer: RecipeOutput) { for (color in DyeColor.entries) { consumer.accept(PainterArmorDyeRecipe(mapOf(color to 1)).toFinished(modLocation("painter/armor_dye_" + color.getName().lowercase()))) } + consumer.accept(PainterArmorDyeRecipe(mapOf(null to 15)).toFinished(modLocation("painter/armor_clear_dye"))) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index e0e173231..3329b811a 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -219,7 +219,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.ENGINE, MBlocks.HOLO_SIGN, *MBlocks.COBBLESTONE_GENERATOR.values.toTypedArray(), - MBlocks.ESSENCE_STORAGE, + *MBlocks.ESSENCE_STORAGE.values.toTypedArray(), MBlocks.MATTER_RECONSTRUCTOR, MBlocks.FLUID_TANK, MBlocks.ANDROID_CHARGER, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt index 41eb4826a..84339f5a0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt @@ -4,6 +4,7 @@ import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.EntityBlock @@ -11,6 +12,8 @@ import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntityTicker import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.material.MapColor +import net.minecraft.world.level.material.PushReaction import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape @@ -21,7 +24,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.shapes.BlockShapes -class EssenceStorageBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properties.of().mapColor(color?.mapColor ?: MapColor.METAL).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(60.0f)), EntityBlock { override fun newBlockEntity(pPos: BlockPos, pState: BlockState): BlockEntity { return EssenceStorageBlockEntity(pPos, pState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index f345eb9ca..fecb1ecc9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -68,7 +68,7 @@ object MBlockEntities { val MATTER_RECYCLER by register(MNames.MATTER_RECYCLER, ::MatterRecyclerBlockEntity, MBlocks::MATTER_RECYCLER) val ENERGY_SERVO by register(MNames.ENERGY_SERVO, ::EnergyServoBlockEntity, MBlocks::ENERGY_SERVO) val COBBLESTONE_GENERATOR by register(MNames.COBBLESTONE_GENERATOR, ::CobblerBlockEntity, *MBlocks.COBBLESTONE_GENERATOR.asSupplierArray()) - val ESSENCE_STORAGE by register(MNames.ESSENCE_STORAGE, ::EssenceStorageBlockEntity, MBlocks::ESSENCE_STORAGE) + val ESSENCE_STORAGE by register(MNames.ESSENCE_STORAGE, ::EssenceStorageBlockEntity, *MBlocks.ESSENCE_STORAGE.asSupplierArray()) val MATTER_RECONSTRUCTOR by register(MNames.MATTER_RECONSTRUCTOR, ::MatterReconstructorBlockEntity, MBlocks::MATTER_RECONSTRUCTOR) val FLUID_TANK by register(MNames.FLUID_TANK, ::FluidTankBlockEntity, MBlocks::FLUID_TANK) val ANDROID_CHARGER by register(MNames.ANDROID_CHARGER, ::AndroidChargerBlockEntity, MBlocks::ANDROID_CHARGER) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 634a71f79..0171399dd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -115,7 +115,7 @@ object MBlocks { val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } val INFINITE_WATER_SOURCE: Block by registry.register(MNames.INFINITE_WATER_SOURCE) { InfiniteWaterSourceBlock() } - val ESSENCE_STORAGE: EssenceStorageBlock by registry.register(MNames.ESSENCE_STORAGE) { EssenceStorageBlock() } + val ESSENCE_STORAGE = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> EssenceStorageBlock(color) } val MATTER_RECONSTRUCTOR: MatterReconstructorBlock by registry.register(MNames.MATTER_RECONSTRUCTOR) { MatterReconstructorBlock() } val PAINTER: PainterBlock by registry.register(MNames.PAINTER) { PainterBlock() } val MATTER_ENTANGLER: MatterEntanglerBlock by registry.register(MNames.MATTER_ENTANGLER) { MatterEntanglerBlock() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index bab4bcba9..7968c5b68 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -135,8 +135,8 @@ object MItems { val INFINITE_WATER_SOURCE: BlockItem by registry.register(MNames.INFINITE_WATER_SOURCE) { BlockItem(MBlocks.INFINITE_WATER_SOURCE, DEFAULT_PROPERTIES) } - val ESSENCE_STORAGE: BlockItem by registry.register(MNames.ESSENCE_STORAGE) { - object : BlockItem(MBlocks.ESSENCE_STORAGE, DEFAULT_PROPERTIES) { + val ESSENCE_STORAGE: Map = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> + object : BlockItem(MBlocks.ESSENCE_STORAGE[color]!!, DEFAULT_PROPERTIES) { override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) p_40574_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) @@ -185,6 +185,7 @@ object MItems { machines.add(::PAINTER) machines.addAll(COBBLESTONE_GENERATOR.asSupplierArray().iterator()) + machines.addAll(ESSENCE_STORAGE.asSupplierArray().iterator()) machines.add(::MATTER_DECOMPOSER) machines.add(::MATTER_CAPACITOR_BANK) diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/black.png new file mode 100644 index 0000000000000000000000000000000000000000..0c76753ceec6ee199d190e44c99870d17ac3b2e0 GIT binary patch literal 1331 zcmZ{idrZ?;6vt0nI)qAj7ZsImXu+Z62ec@~newPoUa7TWk-3$Zf>;DvRD4mTiYUqy z6tt~?7=h_Xp}3X_3>7ChBN!w&@G+4o5k!kY(J5yoOSbHfCFh=Rz9;9CZ|==45Js=E zv7TcM05*cKP?1@g=EIvoG51K}0gYKKHU&im0n``KKE_kco|zaXiUQcl0#K>|KA1r~ z5)if{oJ2@OIEtV~IE_$_AVCl!Ee~N0TBRch&^ZE~vJi|2?Fg3;G7ypw4k0unv?0VI z=n-xpbRa|`EfVRS2t53J?ex{ihUwvqHAp^?C=4;b5lJD6UIV;m_cu#@sRQ?E-diw!5R&p+~hZ)jQ)ZJ6w?`3bv}e z*KNg#PzgF4jVWj9^vS`V>RGB;uk|y_h&JVfL&a_G@NcEDgfGXsj|}OxWTCs9w37@? zHc3H`l7rIU%%|D$I~)CI)QZ9e$&XD=q=XVq$y{OKKFYbCd!dVXKD`yOwd{Y5%0+h442Bhm1BdaXgSO_YWJv`LVI`QLaeVrG8N~zcmCqjahm6>vM`Hf>+f7{ zc*;-(`1K`}#u{mp)zrEv+cy84CzXkFQWm=g4m8-?t*X+by?mcZ;ticj8+W8T$*+j* z=(_bm_0kj<73tX1*M5BYLCxVyj6$yf-j?p#4(%5j`PJz8mPC(3hn2paB+Be)QLfGG zrqb*oXHzO8gb!PkO5;SyT1%3h{er{0m(C>J9?_BpP4S&Brt8P+N9QVMfW^-_tRvo2 z^bV%!?0EAvSv8w7^4w7F_(k&d@ww@vL{<9z*>DNwIgs_HnD=`|z?jEfebsYo;l#rQ0qNT2L(#>*gr`-&b;73TqQ^sh z#egY)WFGa<%Ih_s#(PKd-m2diH;gRe$=TzZUA8`Mc`W<0wDnc3&*;Q8Q+`o-%%9~U zxenFVy87&1BVBDORqw#G6Zf2?L|M$u%ufU7-FBC=OqJxxRKMY=S&uKV`dSnYMb6BO z;=5h$hH?w7?i<@aXKDXD8`tVUJ)3J=9Qz@H z+Q;7ZKJ)xQ$@hrz89MNSZT{^G6?};zDPEDxP0UI*3-}Vg>?MScxx_yHTw=Ps2!cxx zJB!O-{s)k4O-kLE^Zx+tj>l><;Q3F2B2|_wSH#OQ{$>2cK0aJF!SyBn4&id0mYNw5 M@S{WPf~EWa0y`@<6aWAK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..90cc6fa92a3b12c84c07db7b33cf066fd788d08e GIT binary patch literal 1331 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 JSmQ6-_ZOy3IEVlM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b70f47e38cb9535bc9798eda3620375c88fba7 GIT binary patch literal 1331 zcmZ{idrZ?;6vs~s9YUo*f#Q62QwxfcU!g@Q&J+Ztyi#k$B6BM*1+fUUi1?yP6+x6K zC}>*?Vg#lmKyfV-7%EP1MleWl;A0|FB3La3MW>vVEZMR@mYjRO`JS9lzPUFyUl_T@ z-fpHH0N4vcf?7z`GRm64IbICMNGC&zh*lAf9+ z7K^1)DI%Wba(~c#M6uoK}b!exYNgyRT%5WYhwML2^XN61IWMyNvA zjj$DAJ3`+z z=n-xpbRdKyH5_T32z>lv{nXXShNW|(9}^>7ijGu;8mU4ozhamdZ1CDd>G3CA{d<4MNSMqZrJtM!)H75wUhAiq5pBwGdiibM@NcEjgg4i&j|{0bWZ`@{X%`uq z>=ObWB?hFvnM-vH?rij-QpyV(BtJH}km5?XC9{Qv`>oFP+zVR7XZMyz-?D0!d|fB0 z?jnUY9r2pDz;LU`U2PgXMa^cmQMyOfR@8S#E<}49B$F}D`{ph=9iw^9Dhsh*zVXiG zhNldbpHE+0X|$0#QAMepbZGO{F1kO| zmk*fpM&?isufAUWX{>i7_pSPkanr~mzMM0*)ouIZmdCO`OIu&nut&$Qne&QtQGe=I z<gqFljWo5nRJ{{ZPTX^m5@k_0(?1QIpSMTHGFOl%l6{6JXFR^d>T6NZi(Hv$ z#do{r8+6v%x^Eo%T&4YU>}OT^>p47!;^+@yBrmV6xy)8g`@Wg7ptEN>FZVxrW$ISX zX*a#?edh7OD$hNFJ#_E|$MV}3DuN}7gjhu)FFqsDBH&GUbCwcpONrUOJYuRm34%uu zyNY!${{zUjCnRsq{(pda$9=5@@c1V|kt|D;D`I77|1v&eHk-#Gc;3X{Av~VTG7AHO M;K-obK*+0x5pss-SF@|dP%($S4Fo0bw0Hq4xy?LY@ z2FN4;o=XAvB>*mInxEIM1Rya*p<;n~fyd*yySpJ%(k&)pWusSE$gJ zi=|R2BA(;%e$P%Lr8nClK}^e2-9!a27$1kcW_kP>HY` zVGF`GglL2mgzX3?5vmcI5p)Pzgj$45ghT{B`UufJAK?;0BZ3m)3PK3l2ccsy(k~#y zBJ4mog%F2u3_*=>2B8!|f*?X#4#GOLN<|Q&a|k+RAQ%za5NZ(85aJOIBQznjB19qR z5pE!~BZML?6zLrZe)z@u>8p_q)596-kepZ(H2vHpMMU^I@OyecaoWU&tO=aCU%xia zY%CSRFoESTi9&O8ifCiH0+2g}f&Sv4o5zZ1-}Mo8t?GtTjAadcog0p8b05W=yqtg(zlT!(%YMr>(jfa zG<(R}oXl7yfUQcUaiVCwCCScy(UCpNXOeD@Xi0;nm<|`y^%HfYbCol|;+HJeQT7zQ zooPBZ-gHe?$)yZ=W!kNJu)(VcTFOW1gI^sPc_;F=O@a*-q-I^pZ-Z|oEh}yxFftq3 zd_PvWIS|!(mwu=w-%?b)!`Q1?Jm$gba!Dr^3{p-G>noIIKAIXpG%aSf}tS>aIN%uFl1 z+quwCYN6GAYuoEA?VD#ar_x8y<=YlUy$>O=*;{g$Et9pCqa=cOOPvKWNH60o?;G%&n5UC#NQ!&zSD9u142P~ JU~Pc(z+c##HwXX# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/green.png new file mode 100644 index 0000000000000000000000000000000000000000..103cac4e848e47cca4ad181b8c510acd74b1640c GIT binary patch literal 1331 zcmZ{idrXsO6vod-=@2S+D9md&wcya^16q{gOhKxYTPjv;Wp3rBAQrh46>n5Q5k;AT zg0>Y9BQPB)6i1oBP;r7YfIkOMs2(alprOQklYf{$Ky3lzV>F%etk|H4Fo2zG096jadupT_ z2FM@*p34FFB>*ldnx9uM10Y!9P>GOQ;PH4K9v)04lg(zQrKL#}v$C?Xg5|D4nTtds zk;~5&LK5UwIzMyNtKj<6fydxTS|^UQ^RR%(2O`|&!panP)3BW0m0Mz8>dW6$g05U`}C`0 zDPy4&g$XT&2^z!QDWZ+#24L1H3iOu*-8@>v_^yw%YgN~uWG=4f>)h#lXFtDZ=Wl7k zt47QF<7}13zP{gr4N~KYqQ20Ek%DE0EF)*Th#QbG&r$2powF~IlX90EtjvxGuq?mV zWyuT45p~oX63*1<;{)8)t~su+^wUeoR@Jye*=_#t@5M6Gi)Ynq2FcZC;(6)BPBUn< zj`M#M@1Oj74#Q5^QSZ&5m*v+}`1uhhL_LRwP(VC>+=%iJh zL~!E~&cp?#OL_K6h`<{7&r$b9MgJD2O8 zFmrspdt-`a2F64sy=Kz3)hBbHJa$IHqM3gEb@q0vDl|zi-lYj^AGP{GM%_Rq9q1R(H$

&I(HXQ`%v`7fF5Bb-T_ zc9!YvSkpB{C6_kjlVP{w!8)HJXel4H8T{(-$UCvGZ33*TAewbazYV^Xwk*B9-@vMG zTmG@a-GQvmyZA#*L(^E<)1GyE8fqU%3psV$lNHUM*Y|0=b{PgfQ%7xBaPURs(DJ^# zxi2G2CybA}_uTk%TW82%_8%#}Mz_2Aif2~h@rUz$leJBU!V7;5PAY@zq;?+iuY*)tuN`vzVbyVSGW zjBk3Ly1%F8x`lZT9eB>Ae)|HYP^yfJR>t#V)8Z)sFVc&0byt)>9?e-f05iuiP8v?AqS##`d)$>)-MFY@mYKHq5x#ehf{ K9#|6~-~Sijwl=c> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf458e94bf864cbc671b20961c3fc1242777b6d GIT binary patch literal 1331 zcmZ{idrZ?;6vs~s9YUqNi}Tq{EjYCK6_?XC)2v)(M_~NW&$(H@GMXC#D*BLQ|W0hIXw@2w-{ zAV4+&@LUGKD+BP%(EPk=DFBHfijWAb3tTSO$H#|Gr!$$%tgNg+V_$A=E=PBjP#Gl> ziA*L##4}v(kJ^ZQgtG{h2n7gYq(mcZN4SD;385O{7{V@u?-5E7P9w+>3K4P;st|S} zY(m(A5Q~tCuodArLJdL_f*wJOP>Ya_umORGfkJdCLb!m?fS^RUj1Z14q39Ndv~vjY z2-^@&AS56hK~N){LeL>d5kyGMLs*UW=?Fsf2uJrU1T#V_!bOA(ghYgc2#p9W2r&o- zgzE@x2oXq)Kw3KjAHP^Lc{Q?WayVr*l2`0*|7d+9l0qD{8u(A|ZJ0Fi;VVO??lr7R zuo^psFj8PQNV1`NyNg>HUI63{VMvf9^u`et^}AlexkYU}L0@F#>AfjDkHElZ=Wc4E zs)sB35}g!BzrNRuCaLAPsyD(kRJ_!jYhi5@a)Ptxx@ldz^7p2&GVXA~6nWxc`-;1r z_T2D%VY|_se7e?<6zr{@mOt&4VQLxCq8xKAzr`E;y)=gK`!)hDq+r#H$d`;4cShqd17oLjMJY$xH+Adjl`%?WA zdVYXkPkd>NnL1uYshx0Y@y~f&kuW`Z;f%n(dKc%Fm73HS?=ngJfs?7DZZvoKWr;IQ zzb>dwmh72NI{M_5pFn;kEf z8)M|mXyetiDvr&7f41}T`)mDG&|EQ0>;LM|&^u9pQ!=crBsJ+%f9roMZC-L~pP6B7 zUG}lk+m)y(yzoPvm5?1}T^t7hWjlJ5=o#w}%sbkmAKky=YU|DbB zoR`tMam&N5-Pixz+7aHL_eVy6#p{lt@|lBZ?7_T%bZz6osFGj9Qp@2Q;aGgZ>w%%X zZ=_&o7UkfIYt^4dyNB}Ls9&4c4=v!!Iis6Aw>)Zkl=h*t`DG1zc4$rA1=6yJc#oCm|Xx6munVuGM=5+g|-p4O3o$6Vw zmN(r`z2Dmuctx@Y_CM!XfBSreK&nWLQzY>cvXZOwn3 KDx@}8w(l<*lsfbP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c93546b8705f1f2bd55edaa35bc9833259d9b2d5 GIT binary patch literal 1331 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 Lhx%3d%J%;Sez7@Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0559b7f9df65b2763b7dfe8b1e7edbc20345b0 GIT binary patch literal 1331 zcmZ{idrZ?;6vt0nI)us_iu2h`EjYCK0WC^#hF6vHN~sl#%&oi>#3In5;)^O(L{L;v z(6$!D2&f~4;#wv!RGi?9V36Rz$3&(?5G@A97iT3)w(O53=bmrAC+CxI?#;~?M6R;2 zo@osLHvEuap;;N`<3EjJ?%{&{YO`2u42TE-s4Jp0kDG!pilyQFpm^N z09gdU3kd+X48S#A{d3fE01`tGF5;ONI2?|LhX?do zi6jyUBA(%Je$<335zZo1BIF?mks6J#9pNg%WrS*kV+gwtjv|yIoJNo#JOVJpIMgc^iq1Ra6~p%x(vVFLme{rKomh;R|15kY})1tAO_LeMD`ZOtY2)!_f^{)Q*DA4{M;>d zWc5fzf1;iI$hY@f&>$W?UeXtC7%p0F%o$~E$!PYQHb%}~yGt)E^-v?|6O%WrdselLw7yg1gqWJs$a3+Bs6JIK&z zlNj(QDIo35T$(+vqrsa-EibGW|J3MAiZ9`m%oY^xrJU`)7re;dv!^`f7Ntr2olacc zNeXQ&U`?E-yH@0`9341G%VxAvyGB$L+Pi}DF+NjmcMwKq?8Kz-;Ez0kwge{)w&yXI@P>}up(OQPGc-Adm^5@xhFE7oLm zQE3j4y)lIz#DmQWg>k%OjU~z6VZotYOQ(}=4{JyRrnnAQ)AeI@BeNCLz~Yx|W&vx` zww+-*GuCuXTE(Ue`efM$Jy`2g0xcCIwgcZB8h$VEwM&Mzm851}>Td(@#4XEi?=vzQ z+E#q3bay0b@-JSfH8hQtKkHe$+fesFT+FK9mL_ffvY}7YwbS_I3svm;g$G_n53cCT zpZ6+SJ2CpGd-sh$w|0gNv7X`Fx2iYB^}~z&W$dv{u3H{AKbC$hZFyDWIWm6DlvkvU{-_Pg zajde|)n)YbnfnJyo?C?H;QkkE^KV}$=ZWQsaq=W?LS~X#z>Dx=FCje5CGzy)5>w?t5L|-T zQLKIWA3(Y#F=a#c{{yr;Zc%2y{htJRiZn?kkCUeV%Xo`CJ-KXx>qYz>!sR+IH8a5H LMF!UfO7{H)Z7Mql literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..d278320e77f79e44a3753ecfcda9e5178fba4f52 GIT binary patch literal 1331 zcmZ{idrZ?;6vs~~9YW;|#rdpL3yL;BphYRp6r@UdrPhi?<}6P^Eb=HSzNk_~1Vse} zZEHb{z;vWgT+0N8iW8g>3=$mpn8=g}R*OOL#aYRcE&F51x#yej$@%1)dvo&z5vy%& zrrQ93Ek8I&XjZ!UaHo*XJxp*=WfsfL0pS4vbw$+AF%+|>#{~<+0d_F}6Muv=0larH^IQP`1IRzq- zNFtFS;yE_^M|GG2;XFbmLLPz;DUk>}5w0OzL8wMJfv^YRI6^7HS%gf4e1vR-Dumq# zTM)J(L?fgiY)3eWP=nBnphZw4)FNadBqDIopO21(2$v8V5#$J05kk>17@b4V?gBzA z!VZK}2yqBU5tImL5Htv41OZZW5!Rx0Dgqx}L(wGz!GO?)a2X*DAs*o{LK8wOLKK1y z;U+>mLKsrR(5?f4i*wgaUd=*3Ih?Wb5=WbEA}Td)9$fCWVymX>x%nb z*6dIPzoWsBbhcKP5a^+trkM6dH?@ptm5(`<-{B1XUK&Msvu%1UAhpIqFfWs|%K{p0 z;{zTi1f;&5O?BXPH26>{<%RX)pBi0Au_f%1nS#Ro#n}=J-XLTSe|FYM$vB5r!p;u-$^^^Oj!D^)44KBSYlgQrtQo$XvQuZkS( zv>O8IBuQ=x(y?c6e0Z6MR7Wn;3O)U}Tf1u7)!(QxuSLwZBD$U0t#xfAVS0PBd|i4M zh3W{|o0DlPd9YP3H;k36vm!Y-&Ofqe=~U94VKr&M6w~2mx^bdzWTt!ySpJgDC}2+5 zwbM=KMw_lnt61bg-z`~7c=X3q)MB=Zs=2Y?KV99N*TRz!J$`?gDd*- z=e&;8j2j6%|Mmqko>&$iBTL}KWh9sdya{jC62i+|A}?PKFG19bu86T0C7l%b~yotXMMdns+3L*%!sCc7F6+x6K zC}>*&F#^*Opg76|hFT{$BN!w&@G_Ap5v+ni(J5yiS+Zq+EIIFa@|>Jsp1g0~Tygkn zYpa=70AMW&3Y1XFqK@A*GpdJ*4{9kf-|Qde4^UUY_!v#6JS#Rx5(cn~4WLp3e4s|E zA%F}L;DsDOPy*nRs{LurasYxQ4wVY21wNne;o-q#GTCf)dV0Ec;k>M@tUQ*h%5}C> zDwWISh+X2 zOBoBLC`@QEM3^z$og_w<8vw0S6zDGvx_PvS@ogVz*QRMW$z0MPsCB0coPB+tpTDII zuNo=ukF!-C`|5rxHp)yViuytuhYOY)vP_&EB3?kod`F!_w|ajfC-p8bSeY#euq?mV zWyudwi#i$%31@2b@d56d8R{9Y_0vnpHr2R8*=@nlZ^e|FP~z(s!Cp0dbWX3es%Yh_iP zL~zp)&cp?#OL_Jx)4(Z4CaaC!HKH+NygPCs(z8)E8RfXob@Aya?Q?cXkomF=cP`gI zWvYF=dSi+s4UCCOdd;M5n|J1u^4OUPi)Z=v*W25zuFxjEe4j@64W3FGbF^_%T#?$@ z)Nb&vlP9>SiDOS+dkGbXw0W19`5r!gTf3^;b@Q}}tKqH|WVb`RrQS$L(%M^8>(aXD z4137joXA`$gsm!-VZ3Oa1z~5uAaBpo>BQ|}9WgK(-QhBN{dnETY}GU{|2dO=gfnT= z&Kf;C)_g6wl4myPong1~!Ful^Xe}SH8Tc}9_`TT2HUZXG5G}PyzYe^UwJy7Tz`$xS zuJ~Bt?m$-OUi`kMv3acQS!A3J$tl5c4C+<1P$&!ehX`lMf&)rkX9xbO$Bzg@^&Uk!@-P@vcC~#(_ z7T)cg-&ks{tNq5d*IC{-$9h(!ubwBcEsXpSLU1@+vRSQKG?(dFKAXEXOU3J9zK~kNWKkl|q>^E?OBch)s{D1UyMk-V%~am6Yo(Ag9WMBn2e7 ztFZLte}Lp|afzEU{~uu7aa%(H?*Akx6O-c=%IM_Oe;F?+mn-0r0#EYq5P`sHDaC+D L7#>&?AV2UIj2<_x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage/white.png new file mode 100644 index 0000000000000000000000000000000000000000..79a8ae9ec113040be880ab873945fbec4bbd0a74 GIT binary patch literal 1326 zcmZ{idrXsO6vj`13RpowXw`^TgMb$62hyR%$;DPE6hfhRnN?bDa<@Q5E>&7DC__*{ z9bOP|UZ>WIG!-VUfR%z15uFN%E=-AY(HWt^5!l&BmTcJ{OU`?qJSXRuC-0lLBr+n{ zZt9$=0AMEw;YE?kBu{{iCE10M`%aN!wKXt25a7lk+PI8LdS-k`R5(C^8-Qvrz!*7F zy#?4#0KAg|aH|0r@>5NsRR9#1NTHZdE^s&;7K=rv)7{+Mva_=hv8bqMaB#4vr$;On zOQq7&9L}{G;a-HZ2;U;?M~Fh|I)prg76cu_C4>qDCBk8ZZxBu(7&?UD%uuvHhY*Lb z1K}t_JVF`5NrdAFwFny!B9XQSAsTHn5d`QQhECZCw-D|kTt$#0Bp@6>xQ$>y*obfw z!H8f&5F$;8_8kZTxFBZoY8Lv*p-nVew6;*j$p@k+q9URpVCZ?$q=^d)=1q|$-P%bS zYlR@3Z~c~HN%L@uy32G2uy`Qg1&Tx3%Z|`u9}_bSCmRO(9%-n)+zt8|sd(W+me8vA zol@1QoW@h0d4=)Sl1jFZ#g?M`@uLq1-mpv5+7#!wxP<<6X}>eOSY44KJ4gi0+T_-n z>nyt5XU}LO!kdIP7iQ8Hlupbo4fl}VFgqHaa34Ruu9Z5c&d?-6PALaA?W0`?o)+M% zUTEs~G-bS$sre$^Kx>fgCAH@h2|E!sax8h2PA_?YqWH9joyWx!DNB|ZN{!U7sRh*T z&ds?kzB;Xe`_#1gg?zzutDKhPu?OnTfw)=aKQ29j_x9FW2M^JQI;|XSAvi6R<(C;) zee)>2skJr3&`iHI<`2(?_HA|fNqaA=F2{udSw5+uzjYm=S@JR)*Vf3-WXEdi&gwBct z#^!Uq!gZXVzw@81FV|~^M_fBJ!>{JZ3;JdmU#G7;DvRD4mTiYUqy z6tt}cF#^+(LUAn<7%D0_BN!w&P?^Y-2v&hZ_dxn%^lFq?X2_^ zi9`~K1QE}0I6rA3ln7@LDiQJ#qLC7VupQwF!X<=igkuQ15Pm=?ML3NhLnuJVL8wC5 ziLeP_3ql-18p2kD;|Mhf%?LUK4MHtKHo^u3E(QwFxe(z3LL-6#;W9!vI)|cb7&@Fo zNI=+zZ~`F_;Ru2X;S_=vL5v_oY97LBv`t44pnEvFWg!?5+7K=xWFRCV97JeBXhn!c z&?8(&Xh(=ZY6LoTAn@>uHB(o!GE5DptwyU4vKy}~Z$y$uN390l)B78yOhWj|km-B% zs}e27MlOit+YFP)RByNFHo6ypRi_{%NECYWND1}(KEkP0)o_BgxPhzlrf}T@1D~C{ zrH-l|t>{m3lpp>2ehV7JrsE}j5r&bXWyV|+bDMx2oITG~Z`BOtj92>UWkjoD+@<_Bclh_xSi+ZM*J}moHCDoTGSUt! zXtYlXdXyZL{(278iQm!SN2Qb(){B2`bR#8{a7tzi3-^-GcHawG$Yb@C$KE10iNDo} zt2;?yjfa^N=V=}lc`HnVC#gB~R!Y~XicEcb_-Sl#Gs#Wb+~HHUGS zIqA?&H=h}6x+<+=lZX7Xot8gX>t6yb6{8M=UmY5GCk${*fwh&SW?kBEgKxzxOK@gLevyo__5Z|G*moeH2)1&U)*Z#n}?nVoR_;rxJfP1C`s;u~RU<#3I#FS_9M zP+#6}&L8ol99(g&`qNm?NZuROYvcNng*+L1Y?H^9f#w0}htigpHLTI`tLFS7ZOjMl z@?4iHJ6&CNkI_M8E>&&EwBz^OBt%)v&CE~z=jQIxGRzfL6RCc~lQRY`GJ2ckE=BJ2 zjN-eU^9)*RjqW?gUUx~Kr~Ry|Ks}r5SRDI4oWx{q%A>ca+xEXIN|1y3e7K_U!xW2^SAzZH85(@(Y LepEs~$J0CA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..decef23af87daa0a200e105378846a30e6aba9ab GIT binary patch literal 1695 zcmV;Q24MM#P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j~F<3n&3U8N|#000f&!L_t(&-o;o?OFB;&|BNn} z5axjGLBSBbCY1=i0tpH_`4S2{<~8zQhi-M~VDtjI6y1X8yg<`5WV2aNN>MJC0RYu%)wZTq zs{sJEwzf>Ca|j_s(RCe^Qfn|8jRF8DrQqjuT?YURheO*u0H~^pWHMR&Ahe_oIrY(k4DrFJxcDn#z`(Llu&7-3uqG_6KPrY6@)9Ex(nA(}-UXaaZ zEln`+#JkVPin#$}f7o-h}EI@o5?e&8h(wa=hx3 z$)q)A7>26`$nNg$gw4GAz;HOk{{FsnK9NYE-|u64d)qMra=9E)f=W#(wL?L9-?xR9IQIJb z>Ug-@oW;QN^Rs0F@n)3035LTVG)=QiP%IYl@bF+U&40asn5Jpsk3a|^N~hDo$Hxaz zRTbrO*><0^3uSe6b%Mztd!$UX+immd>4~_d)1952iNpNtF$`m3T|6E~I-UMM70ZaY z5%RMq9*?_c!fEN$&$w*PNdp!G^Tt#SEE?%_n%EvBe+h-zM`kCP4S994aoLzSXBY4^v%QMF zI3fGWq!U#d4u>%sjr=j-RJl+}aeaMleZ9aBajQC>MTOyTIMAasnM`6Z7|iyfm6^Z` zVzC$qAsCHDe^VQNeSKM``jgs__mjCXAjW$n5|OT(3j>r=EG;eB#(sW&7S|t;<$NbB z)CXd**o0|*je+ImWlw9u;qdQOwn6j2Tul%Pg|M=+vY6T)06srIF&GR2?TthtvorAh p{q5WHe>Dtw!l6(It6r>002ovPDHLkV1mI&Df0jT literal 0 HcmV?d00001 From b2c2bfa536e6be83bb2615f7f642a52e69e590a5 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 19:56:50 +0700 Subject: [PATCH 10/37] Plate press coloring --- .../advancements/MachineAdvancementsData.kt | 12 +++-- .../mc/otm/datagen/blocks/BlockModels.kt | 3 ++ .../mc/otm/datagen/blocks/BlockStates.kt | 4 +- .../mc/otm/datagen/items/ItemModels.kt | 4 +- .../datagen/items/MatteryItemModelProvider.kt | 28 +++++------ .../mc/otm/datagen/lang/English.kt | 4 +- .../datagen/lang/MatteryLanguageProvider.kt | 46 ------------------ .../mc/otm/datagen/lang/Russian.kt | 4 +- .../mc/otm/datagen/loot/LootTablesData.kt | 4 +- .../datagen/models/MatteryModelProvider.kt | 14 ++++++ .../datagen/recipes/CraftingTableRecipes.kt | 22 +++++---- .../mc/otm/datagen/recipes/MatteryRecipe.kt | 5 ++ .../mc/otm/datagen/recipes/PainterRecipes.kt | 2 + .../dbotthepony/mc/otm/datagen/tags/Tags.kt | 4 +- .../mc/otm/block/tech/PlatePressBlock.kt | 5 +- .../mc/otm/compat/jei/JEIPlugin.kt | 3 +- .../compat/jei/PlatePressRecipeCategory.kt | 4 +- .../mc/otm/recipe/PlatePressRecipe.kt | 2 +- .../mc/otm/registry/MBlockEntities.kt | 4 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 4 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 8 +-- .../objects/ColoredDecorativeBlock.kt | 2 +- .../textures/block/plate_press/black.png | Bin 0 -> 744 bytes .../textures/block/plate_press/blue.png | Bin 0 -> 744 bytes .../textures/block/plate_press/brown.png | Bin 0 -> 744 bytes .../textures/block/plate_press/cyan.png | Bin 0 -> 744 bytes .../textures/block/plate_press/gray.png | Bin 0 -> 744 bytes .../textures/block/plate_press/green.png | Bin 0 -> 744 bytes .../textures/block/plate_press/light_blue.png | Bin 0 -> 744 bytes .../textures/block/plate_press/light_gray.png | Bin 0 -> 744 bytes .../textures/block/plate_press/lime.png | Bin 0 -> 744 bytes .../textures/block/plate_press/magenta.png | Bin 0 -> 744 bytes .../textures/block/plate_press/orange.png | Bin 0 -> 744 bytes .../textures/block/plate_press/pink.png | Bin 0 -> 744 bytes .../textures/block/plate_press/purple.png | Bin 0 -> 744 bytes .../textures/block/plate_press/red.png | Bin 0 -> 744 bytes .../textures/block/plate_press/white.png | Bin 0 -> 730 bytes .../textures/block/plate_press/yellow.png | Bin 0 -> 744 bytes .../textures/block/plate_press2/black.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/blue.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/brown.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/cyan.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/gray.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/green.png | Bin 0 -> 861 bytes .../block/plate_press2/light_blue.png | Bin 0 -> 861 bytes .../block/plate_press2/light_gray.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/lime.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/magenta.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/orange.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/pink.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/purple.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/red.png | Bin 0 -> 861 bytes .../textures/block/plate_press2/white.png | Bin 0 -> 858 bytes .../textures/block/plate_press2/yellow.png | Bin 0 -> 861 bytes .../textures/block/plate_press2_mask.png | Bin 0 -> 1683 bytes .../textures/block/plate_press_mask.png | Bin 0 -> 1289 bytes 56 files changed, 87 insertions(+), 101 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/plate_press_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 31380c0b3..7a8db81c5 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.datagen.advancements import net.minecraft.advancements.AdvancementHolder +import net.minecraft.advancements.AdvancementRequirements import net.minecraft.advancements.FrameType import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.world.item.Item @@ -58,6 +59,7 @@ private data class CraftEntry( it.addCriterion(i.toString(), criterion(item)) } } + .requirements(AdvancementRequirements.Strategy.OR) .save(serializer, modLocation("machines/$path")) } } @@ -82,7 +84,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter val press = AdvancementBuilder() .parent(chem) .display( - itemStack = ItemStack(MItems.PLATE_PRESS), + itemStack = ItemStack(MItems.PLATE_PRESS[null]!!), title = translation.add("plate_press", "Bending the Material") { russian("Раскатка металла") }, @@ -90,10 +92,14 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter russian("Создайте пресс пластин, не суйте свои или чужие конечности внутрь") }, ) - .addCriterion("has_machine", criterion(MItems.PLATE_PRESS)) + .also { + for ((i, m) in MItems.PLATE_PRESS.values.withIndex()) + it.addCriterion(i.toString(), criterion(m)) + } + .requirements(AdvancementRequirements.Strategy.OR) .save(serializer, modLocation("machines/plate_press")) - CraftEntry(MItems.TWIN_PLATE_PRESS, "Twice the Thud", + CraftEntry(MItems.TWIN_PLATE_PRESS.values, "Twice the Thud", russianName = "Двойной стук").make(serializer, press, translation) val scanner = CraftEntry(MItems.MATTER_SCANNER, "Scanning Things that Matter", diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 4ccc440f4..3dba552b8 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -12,5 +12,8 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { coloredMachine(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) coloredMachine(MBlocks.ESSENCE_STORAGE, listOf("0", "particle")) + + coloredMachineCombined("plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) + coloredMachineCombined("twin_plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 38c4cafb9..978834388 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -93,8 +93,8 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.MATTER_DECOMPOSER) provider.block(MBlocks.MATTER_REPLICATOR) - provider.block(MBlocks.PLATE_PRESS) - provider.block(MBlocks.TWIN_PLATE_PRESS) + provider.block(MBlocks.PLATE_PRESS.values) + provider.block(MBlocks.TWIN_PLATE_PRESS.values) provider.block(MBlocks.GRAVITATION_STABILIZER) provider.block(MBlocks.GRAVITATION_STABILIZER_LENS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 0b3cc5702..d16873818 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -178,8 +178,8 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.POWERED_FURNACE, "powered_furnace_working") provider.block(MItems.POWERED_SMOKER, "powered_smoker_working") - provider.block(MItems.PLATE_PRESS, "plate_press_idle") - provider.block(MItems.TWIN_PLATE_PRESS, "twin_plate_press_idle") + provider.coloredWithBaseBlock(MItems.PLATE_PRESS, "plate_press", "_idle") + provider.coloredWithBaseBlock(MItems.TWIN_PLATE_PRESS, "twin_plate_press", "_idle") provider.block(MItems.STORAGE_POWER_SUPPLIER, "storage_power_supplier") provider.block(MItems.MATTER_RECYCLER, "matter_recycler_working") provider.coloredWithBaseBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt index f53ef39e2..52586634c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt @@ -32,25 +32,21 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, modLocation("block/$path")) } fun coloredWithBaseBlock(items: Map, path: String) { - block(items[DyeColor.BLACK]!!, path + "_black") - block(items[DyeColor.BLUE]!!, path + "_blue") - block(items[DyeColor.BROWN]!!, path + "_brown") - block(items[DyeColor.CYAN]!!, path + "_cyan") - block(items[DyeColor.GRAY]!!, path + "_gray") - block(items[DyeColor.GREEN]!!, path + "_green") - block(items[DyeColor.LIGHT_BLUE]!!, path + "_light_blue") - block(items[DyeColor.LIGHT_GRAY]!!, path + "_light_gray") - block(items[DyeColor.LIME]!!, path + "_lime") - block(items[DyeColor.MAGENTA]!!, path + "_magenta") - block(items[DyeColor.ORANGE]!!, path + "_orange") - block(items[DyeColor.PINK]!!, path + "_pink") - block(items[DyeColor.PURPLE]!!, path + "_purple") - block(items[DyeColor.RED]!!, path + "_red") - block(items[DyeColor.WHITE]!!, path + "_white") - block(items[DyeColor.YELLOW]!!, path + "_yellow") + for (color in DyeColor.entries) { + block(items[color]!!, path + "_${color.name.lowercase()}") + } + block(items[null]!!, path) } + fun coloredWithBaseBlock(items: Map, path: String, suffix: String) { + for (color in DyeColor.entries) { + block(items[color]!!, path + "_${color.name.lowercase()}$suffix") + } + + block(items[null]!!, path + suffix) + } + fun blocks(vararg items: Item) = items.forEach(this::block) fun blocks(items: Collection) = items.forEach(this::block) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 6fe4e1df8..e03ae6762 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -455,8 +455,8 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.CHEMICAL_GENERATOR, "Chemical Generator") add(MBlocks.DRIVE_RACK, "Condensation Drive Rack") add(MBlocks.ITEM_MONITOR, "Item Monitor") - add(MBlocks.PLATE_PRESS, "Plate Press") - add(MBlocks.TWIN_PLATE_PRESS, "Twin Plate Press") + addBlock(MBlocks.PLATE_PRESS.values, "Plate Press") + addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Twin Plate Press") add(MBlocks.POWERED_FURNACE, "Electric Furnace") add(MBlocks.POWERED_SMOKER, "Microwave Oven") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt index 3c10bb57c..d87e5d4b1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt @@ -349,52 +349,6 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { slave.add(redItem, toFormat.format(red)) slave.add(blackItem, toFormat.format(black)) } - - fun addBlocks(list: List, toFormat: String) { - add( - whiteBlock = list[0], - orangeBlock = list[1], - magentaBlock = list[2], - lightBlueBlock = list[3], - yellowBlock = list[4], - limeBlock = list[5], - pinkBlock = list[6], - grayBlock = list[7], - lightGrayBlock = list[8], - cyanBlock = list[9], - purpleBlock = list[10], - blueBlock = list[11], - brownBlock = list[12], - greenBlock = list[13], - redBlock = list[14], - blackBlock = list[15], - - toFormat = toFormat - ) - } - - fun addItems(list: List, toFormat: String) { - add( - whiteItem = list[0], - orangeItem = list[1], - magentaItem = list[2], - lightBlueItem = list[3], - yellowItem = list[4], - limeItem = list[5], - pinkItem = list[6], - grayItem = list[7], - lightGrayItem = list[8], - cyanItem = list[9], - purpleItem = list[10], - blueItem = list[11], - brownItem = list[12], - greenItem = list[13], - redItem = list[14], - blackItem = list[15], - - toFormat = toFormat - ) - } } val englishColors = Colors("en_us", diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 2a1c9bc6a..82856ae07 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -457,8 +457,8 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.CHEMICAL_GENERATOR, "Химический генератор") add(MBlocks.DRIVE_RACK, "Стеллаж дисков конденсации") add(MBlocks.ITEM_MONITOR, "Монитор предметов") - add(MBlocks.PLATE_PRESS, "Пресс пластин") - add(MBlocks.TWIN_PLATE_PRESS, "Двойной пресс пластин") + addBlock(MBlocks.PLATE_PRESS.values, "Пресс пластин") + addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Двойной пресс пластин") add(MBlocks.POWERED_FURNACE, "Электрическая печь") add(MBlocks.POWERED_BLAST_FURNACE, "Индукционная печь") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index 481aecb84..ca8d3a69f 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -157,8 +157,8 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.MATTER_REPLICATOR) lootTables.tile(MBlocks.MATTER_RECYCLER) lootTables.tile(MBlocks.MATTER_SCANNER) - lootTables.tile(MBlocks.PLATE_PRESS) - lootTables.tile(MBlocks.TWIN_PLATE_PRESS) + lootTables.tile(MBlocks.PLATE_PRESS.values) + lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values) lootTables.tile(MBlocks.POWERED_FURNACE) lootTables.tile(MBlocks.POWERED_SMOKER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index 246b82385..cebb67f1e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -113,4 +113,18 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } } + + fun coloredMachineCombined(modelName: String, textureName: String, states: Collection, textureKeys: Collection) { + exec { + for (color in DyeColor.entries) { + for (state in states) { + val model = withExistingParent(modelName + "_${color.name.lowercase()}_$state", modLocation(modelName + "_$state")) + + for (key in textureKeys) { + model.texture(key, modLocation("block/$textureName/${color.name.lowercase()}")) + } + } + } + } + } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 275872420..7f56a681d 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -57,7 +57,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(MItems.HOLO_SIGN) .save(consumer, modLocation("holo_sign_reset")) - MatteryRecipe(MBlocks.PLATE_PRESS, category = machinesCategory) + MatteryRecipe(MBlocks.PLATE_PRESS[null]!!, category = machinesCategory) .row(MItems.ELECTRIC_PARTS, MItems.ENERGY_BUS, MItems.ELECTRIC_PARTS) .row(MItemTags.TRITANIUM_INGOTS, Items.BLAST_FURNACE, MItemTags.TRITANIUM_INGOTS) .row(MItemTags.PISTONS, MItemTags.TRITANIUM_INGOTS, MItemTags.PISTONS) @@ -65,21 +65,23 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(MItems.ELECTRIC_PARTS) .build(consumer) - MatteryRecipe(MBlocks.PLATE_PRESS, category = machinesCategory) + MatteryRecipe(MBlocks.PLATE_PRESS[null]!!, category = machinesCategory) .rowB(MItemTags.PISTONS) .rowB(MItems.MACHINE_FRAME) .unlockedBy(MItemTags.TRITANIUM_INGOTS) .unlockedBy(MItems.ELECTRIC_PARTS) .build(consumer, "advanced") - MatteryRecipe(MBlocks.TWIN_PLATE_PRESS, category = machinesCategory) - .setUpgradeSource(MItems.PLATE_PRESS) - .addUpgradeOps(UpgradeRecipe.Direct("BlockEntityTag")) - .rowB(MItemTags.PISTONS) - .rowB(MItems.PLATE_PRESS) - .rowB(MItemTags.TRITANIUM_PLATES) - .unlockedBy(MItems.PLATE_PRESS) - .build(consumer) + for ((color, press) in MBlocks.PLATE_PRESS) { + MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[color]!!, category = machinesCategory) + .setUpgradeSource(press) + .addUpgradeOps(UpgradeRecipe.Direct("BlockEntityTag")) + .rowB(MItemTags.PISTONS) + .rowB(press) + .rowB(MItemTags.TRITANIUM_PLATES) + .unlockedBy(MBlocks.PLATE_PRESS.values) + .build(consumer, "twin_plate_press/${color?.name?.lowercase() ?: "default"}") + } MatteryRecipe(MItems.PATTERN_DRIVE_NORMAL, category = machinesCategory) .rowAC(MItemTags.ADVANCED_CIRCUIT, MItemTags.ADVANCED_CIRCUIT) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MatteryRecipe.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MatteryRecipe.kt index 7e2e75f89..e3a00907d 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MatteryRecipe.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/MatteryRecipe.kt @@ -91,6 +91,11 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci return unlockedBy("has_${location.namespace}_${location.path}", has(item)) } + fun unlockedBy(item: Collection): MatteryRecipe { + item.forEach { unlockedBy(it) } + return this + } + fun unlockedBy(item: TagKey): MatteryRecipe { return unlockedBy("has_${item.location.namespace}_${item.location.path}", has(item)) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 28ef24561..6bb0f685c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -273,6 +273,8 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, MItems.COBBLESTONE_GENERATOR[null]!!, MItems.COBBLESTONE_GENERATOR) generate(consumer, MItems.ESSENCE_STORAGE[null]!!, MItems.ESSENCE_STORAGE) + generate(consumer, MItems.PLATE_PRESS[null]!!, MItems.PLATE_PRESS) + generate(consumer, MItems.TWIN_PLATE_PRESS[null]!!, MItems.TWIN_PLATE_PRESS) generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 3329b811a..f23b251af 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -190,8 +190,8 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.MATTER_BOTTLER, MBlocks.ENERGY_COUNTER, MBlocks.CHEMICAL_GENERATOR, - MBlocks.PLATE_PRESS, - MBlocks.TWIN_PLATE_PRESS, + *MBlocks.PLATE_PRESS.values.toTypedArray(), + *MBlocks.TWIN_PLATE_PRESS.values.toTypedArray(), MBlocks.MATTER_RECYCLER, MBlocks.MATTER_ENTANGLER, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt index 8aed09a9a..aee0f1e58 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.block.tech import net.minecraft.core.BlockPos import net.minecraft.network.chat.Component +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag import net.minecraft.world.level.BlockGetter @@ -13,6 +14,8 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.StateDefinition +import net.minecraft.world.level.material.MapColor +import net.minecraft.world.level.material.PushReaction import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock @@ -24,7 +27,7 @@ import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.shapes.BlockShapes -class PlatePressBlock(properties: Properties = DEFAULT_MACHINE_PROPERTIES, val isTwin: Boolean = false) : RotatableMatteryBlock(properties), EntityBlock { +class PlatePressBlock(val color: DyeColor?, val isTwin: Boolean = false) : RotatableMatteryBlock(Properties.of().mapColor(color?.mapColor ?: MapColor.METAL).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(25.0f)), EntityBlock { override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity { return PlatePressBlockEntity(p_153215_, p_153216_, isTwin) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt index 354c4346f..22f6bdcd8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt @@ -72,7 +72,8 @@ class JEIPlugin : IModPlugin { registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER), MicrowaveRecipeCategory.recipeType) registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.CRAFTING_UPGRADE), RecipeTypes.CRAFTING) registration.addRecipeCatalyst(ItemStack(MItems.ITEM_MONITOR), RecipeTypes.CRAFTING) - registration.addRecipeCatalyst(ItemStack(MItems.PLATE_PRESS), PlatePressRecipeCategory.recipeType) + MItems.PLATE_PRESS.values.forEach { registration.addRecipeCatalyst(ItemStack(it), PlatePressRecipeCategory.recipeType) } + MItems.TWIN_PLATE_PRESS.values.forEach { registration.addRecipeCatalyst(ItemStack(it), PlatePressRecipeCategory.recipeType) } registration.addRecipeCatalyst(ItemStack(MItems.PAINTER), PainterRecipeCategory.recipeType) registration.addRecipeCatalyst(ItemStack(MItems.MATTER_ENTANGLER), MatterEntanglerRecipeCategory.recipeType) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/PlatePressRecipeCategory.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/PlatePressRecipeCategory.kt index 506fd5382..c2be97082 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/PlatePressRecipeCategory.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/PlatePressRecipeCategory.kt @@ -42,7 +42,7 @@ object PlatePressRecipeCategory : IRecipeCategory, IDrawable { } override fun getTitle(): Component { - return MItems.PLATE_PRESS.description + return MItems.PLATE_PRESS[null]!!.description } override fun draw(graphics: GuiGraphics, xOffset: Int, yOffset: Int) { @@ -96,7 +96,7 @@ object PlatePressRecipeCategory : IRecipeCategory, IDrawable { } private val iconField by lazy { - JEIPlugin.helpers.guiHelper.createDrawableItemStack(ItemStack(MItems.PLATE_PRESS)) + JEIPlugin.helpers.guiHelper.createDrawableItemStack(ItemStack(MItems.PLATE_PRESS[null]!!)) } override fun getIcon(): IDrawable { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/PlatePressRecipe.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/PlatePressRecipe.kt index aca5daf14..861fa271f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/PlatePressRecipe.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/PlatePressRecipe.kt @@ -76,7 +76,7 @@ class PlatePressRecipe( override fun getType(): RecipeType = MRecipes.PLATE_PRESS override fun getToastSymbol(): ItemStack { - return ItemStack(MItems.PLATE_PRESS) + return ItemStack(MItems.PLATE_PRESS[null]!!) } fun toFinished(id: ResourceLocation) = SERIALIZER.toFinished(this, id) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index fecb1ecc9..0189e278e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -62,8 +62,8 @@ object MBlockEntities { val ITEM_MONITOR by register(MNames.ITEM_MONITOR, ::ItemMonitorBlockEntity, MBlocks::ITEM_MONITOR) val ENERGY_COUNTER by register(MNames.ENERGY_COUNTER, ::EnergyCounterBlockEntity, MBlocks::ENERGY_COUNTER) val CHEMICAL_GENERATOR by register(MNames.CHEMICAL_GENERATOR, ::ChemicalGeneratorBlockEntity, MBlocks::CHEMICAL_GENERATOR) - val PLATE_PRESS by register(MNames.PLATE_PRESS, ::PlatePressBlockEntity, MBlocks::PLATE_PRESS) - val TWIN_PLATE_PRESS by register(MNames.TWIN_PLATE_PRESS, { a, b -> PlatePressBlockEntity(a, b, true) }, MBlocks::TWIN_PLATE_PRESS) + val PLATE_PRESS by register(MNames.PLATE_PRESS, ::PlatePressBlockEntity, *MBlocks.PLATE_PRESS.asSupplierArray()) + val TWIN_PLATE_PRESS by register(MNames.TWIN_PLATE_PRESS, { a, b -> PlatePressBlockEntity(a, b, true) }, *MBlocks.TWIN_PLATE_PRESS.asSupplierArray()) val GRAVITATION_STABILIZER by register(MNames.GRAVITATION_STABILIZER, ::GravitationStabilizerBlockEntity, MBlocks::GRAVITATION_STABILIZER) val MATTER_RECYCLER by register(MNames.MATTER_RECYCLER, ::MatterRecyclerBlockEntity, MBlocks::MATTER_RECYCLER) val ENERGY_SERVO by register(MNames.ENERGY_SERVO, ::EnergyServoBlockEntity, MBlocks::ENERGY_SERVO) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 0171399dd..0bd6a4775 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -106,8 +106,8 @@ object MBlocks { val MATTER_BOTTLER: Block by registry.register(MNames.MATTER_BOTTLER) { MatterBottlerBlock() } val ENERGY_COUNTER: Block by registry.register(MNames.ENERGY_COUNTER) { EnergyCounterBlock() } val CHEMICAL_GENERATOR: Block by registry.register(MNames.CHEMICAL_GENERATOR) { ChemicalGeneratorBlock() } - val PLATE_PRESS: Block by registry.register(MNames.PLATE_PRESS) { PlatePressBlock() } - val TWIN_PLATE_PRESS: Block by registry.register(MNames.TWIN_PLATE_PRESS) { PlatePressBlock(isTwin = true) } + val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> PlatePressBlock(color) } + val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> PlatePressBlock(color, isTwin = true) } val POWERED_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } val POWERED_BLAST_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_BLAST_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } val POWERED_SMOKER: PoweredFurnaceBlock by registry.register(MNames.POWERED_SMOKER) { PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 7968c5b68..0cfc227f3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -73,8 +73,8 @@ object MItems { val TRITANIUM_RAW_BLOCK: BlockItem by registry.register(MNames.TRITANIUM_RAW_BLOCK) { BlockItem(MBlocks.TRITANIUM_RAW_BLOCK, DEFAULT_PROPERTIES) } val ENERGY_COUNTER: BlockItem by registry.register(MNames.ENERGY_COUNTER) { BlockItem(MBlocks.ENERGY_COUNTER, DEFAULT_PROPERTIES) } val CHEMICAL_GENERATOR: BlockItem by registry.register(MNames.CHEMICAL_GENERATOR) { BlockItem(MBlocks.CHEMICAL_GENERATOR, DEFAULT_PROPERTIES) } - val PLATE_PRESS: BlockItem by registry.register(MNames.PLATE_PRESS) { BlockItem(MBlocks.PLATE_PRESS, DEFAULT_PROPERTIES) } - val TWIN_PLATE_PRESS: BlockItem by registry.register(MNames.TWIN_PLATE_PRESS) { BlockItem(MBlocks.TWIN_PLATE_PRESS, DEFAULT_PROPERTIES) } + val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> BlockItem(MBlocks.PLATE_PRESS[color]!!, DEFAULT_PROPERTIES) } + val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> BlockItem(MBlocks.TWIN_PLATE_PRESS[color]!!, DEFAULT_PROPERTIES) } val MATTER_RECYCLER: BlockItem by registry.register(MNames.MATTER_RECYCLER) { BlockItem(MBlocks.MATTER_RECYCLER, DEFAULT_PROPERTIES) } val POWERED_FURNACE: BlockItem by registry.register(MNames.POWERED_FURNACE) { BlockItem(MBlocks.POWERED_FURNACE, DEFAULT_PROPERTIES) } @@ -170,8 +170,8 @@ object MItems { init { val machines = ArrayList>() - machines.add(::PLATE_PRESS) - machines.add(::TWIN_PLATE_PRESS) + machines.addAll(PLATE_PRESS.asSupplierArray()) + machines.addAll(TWIN_PLATE_PRESS.asSupplierArray()) machines.add(::POWERED_FURNACE) machines.add(::POWERED_BLAST_FURNACE) machines.add(::POWERED_SMOKER) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt index d12172250..6c538bb07 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt @@ -77,7 +77,7 @@ open class ColoredDecorativeBlock( check(registeredBlocks) { "wtffffff???????????" } MRegistry.DYE_ORDER.forEach { - itemMap[it] = registry.register("${baseName}_${it.name.lowercase()}") { BlockItem(blockMap[DyeColor.WHITE]!!.get(), properties) } + itemMap[it] = registry.register("${baseName}_${it.name.lowercase()}") { BlockItem(blockMap[it]!!.get(), properties) } } registeredItems = true diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/black.png new file mode 100644 index 0000000000000000000000000000000000000000..1b53f937375a8fb525e5c6b72048ee2293fc4856 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`g(bJ<^TWxOG(MyzJ2@AvzfDi8W>B0{DK)Ap4~_T zagw~anMpdfpRr>`sf3r1#cOV;eQ%11$ZJY5_^ zEKX0IXq|P$K%kA4arZenMRg7y7jcii33ZAJ&37btq&jY1+r9JPw3XXFFy?gJl-}W| z6`y#1f~4)AuGlB}Zprn(o-1zL&0bL%#%1rfXQQ z2?_54rm?xR&#-9tFEg`~d3wRFjF2#i*i|0D<}K^CJPQ3JZOCwr zQOL~Wg2Xq)1(oWP;+4w9QyGf3ZDz2vIAEqCysFzXYCVHOvBCkVwM=^snI^nxOrP+g z(VQtQSf|loA4hvC=e@&mK3j4wz3@scKG6TN@xpDE58bzz+CuXgA8ss??s}%bq2k?B zk^PJo>rP%yVQ~URfNF_rL`h0wNvc(HQ7VvPFfuSQ(ls#DHM9sZG_W!-wlcNUHUKgV zR^85ef}$ZeKP5A*61RriZI>c|8Z_WGlw{_n7MCRE7J&4afGjaE4ly*eGBvj{Fojsc TS^6UcsE5JR)z4*}Q$iB}Vr&VL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..47eabcb9e40ee7b797f6d33021fb1f3cdb92ab4e GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`g&v2+5i9l*U@deef#!)$tVG!2F8*gzhDN3XE)M7 zoFs2|7oNt=fyqD)XMsm#F#`kNVGw3Kp1&dmD9B#o>Fdh=f{~fqk~Mp+@==f;PZ!4! zi_=plT4x9K7Gb|eZ%gpR#o?fskBP2{BcGZo5EtbsjyOds@UzA$v>%$-`HQW4yMpF>` z6{nRiZpCHKzV6(~>5$vQVA*nu@xh+=zw_BORJ+do%Vc^`l{uH$bz<2+XFdf^4|B%% z6aL+PSnxX1o?SZ6?whmBvKw7Ys*{TDbSVqyDM?K&@M^bR%X^TkdCR&jk3v658#0_@ z6f*O;An{FcL8bbnc%^djREDB$n;9%E4w$J3uj=-UTF;S6G7^>bP0l+XkKE9VIa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..477efbcdd604d3bc9397f8a9de42e4986388b25e GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uZYwjsO4uC)q09zJ1%_HHSA)17k^$UoeBivm0q3 zPLj8~3s2+bz+@nYv%n*=n1O-sFbFdq&tH)O6l5>)^mS!_!N|;Q$(p@Z`6x(_r;B5V z#p$UNt+S382(+;>?mj1{sLsLTBJR;Qp-xeu`HlpSRL9M0yLTR(wsPAC#+;6u(mVXL z;uFtLkhJ~N75gOLExG>JbH$Cj*()l;xa|Fwe16$6v!LtZf-^_nH8xyl)adV!+i_Su zA>m!XG&Xnk85RxyWoC9VPcPV&5fUa5yXr>37E9*%T}m&{FG?--^ z3IA?CEO;Gh&n}&3_sv;m*^MqH)k#Hnx|9Xc(vQEmj4H?cc z3YmFakocy!pi+HOyi&P%Dnrq>%?y?n2h3E2S9Nogkd<7iLiymvUxXG_kd7hb8w2l`(&UbxNjq5Bq7TWCJx!;MAKUC;D4RJ?mC zvY*jn-O0--EKa}(P%UwdC`m~yNwrEYN(E93Mg~Skx(0^2h87`)237{fR;HHP20(_v zs@qvlP&DM`r(~v8;?{7x?NS6#g9hA&lFZ!H;*!MN0+1dPkR=AjA%=!lrsh@#rVvXw TOMip_^)Pt4`njxgN@xNAAn*wU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..1808bac0f6638b4c8cdf8b3316b61711e4fae774 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`g*apiU0rq7cQy2efxHO$M@?%4U8p0e!&b5&u*lF zI7!~_E{XE)7O>#1tT-JC2RIt<)a`yo-U3d z7N@69w9YzWAkfCjxci)(qB;kUi?~PMggQlq<~tHRQXMz1?cRBC+RAMo7;`#qO7HN~ zicdU0LDKe5SL~B~x8(X?&lNZBX0NCW@ZpUHu zgoJki)7aeEXIM1+mzmkgJiTC7Mo5@M?5Z09TP&I5cPYI*zbLiT*M~t?YPR_Yjiw;> zD^4q4+=|Pdecic}(;>Hq!LsER?DswKg>%_8u&U^}-9_Ebi zC;Yqpu;6v1J-c+C-8W~MWjDH*R3{bP=~5QZQ<9om;MH!smiHi6^Okj69)*6AHe@)* zC}iewLE@X@f=cyC@k-_5sSHKiHZxdS957Q6Ue)axwVpwtSmA)wTBbdROcUNTrcZd$ zXwH-ttkY<)kE1=6^WNb&pDj6;UU;PzALxJCc;Pn7hwfWUZK3&$4>uM`cRkbJQ1R}m z$bLqPbtf;Uus8uDK()j*q9i4;B-JXpC>2OC7#SED=^7a78d`)H8dw<^TbWvF8vq#w zt8QmKLD7(#pOTqYiCe?%wo4H}4H|G8N-}d(i%Sx73qX2IK$aL7hZq`KnVMS}m_jV! TEd3Dz)WhKE>gTe~DWM4fkaY^` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c31d5b9ce7decaa8700886c6f875ef03d638b238 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`g%JjxBvhDn_Al3zI}VX*%hDx42&f~e!&b5&u*lF zI7!~_E{XE)7O>#1tT-JC2RIt<)a`yo-U3d z7N@69w9YzWAkfCjxci)(qB;kUi?~PMggQlq<~tHRQXMz1?cRBC+RAMo7;`#qO7HN~ zicdU0LDKe5SL~B~x8(X?&lNZBX0NCW@ZpUHu zgoJki)7aeEXIM1+mzmkgJiTC7Mo5@M?5Z09TP&I5cPYI*zbLiT*M~t?YPR_Yjiw;> zD^4q4+=|Pdecic}(;>Hq!LsER?DswKg>%_8u&U^}-9_Ebi zC;Yqpu;6v1J-c+C-8W~MWjDH*R3{bP=~5QZQ<9om;MH!smiHi6^Okj69)*6AHe@)* zC}iewLE@X@f=cyC@k-_5sSHKiHZxdS957Q6Ue)axwVpwtSmA)wTBbdROcUNTrcZd$ zXwH-ttkY<)kE1=6^WNb&pDj6;UU;PzALxJCc;Pn7hwfWUZK3&$4>uM`cRkbJQ1R}m z$bLqPbtf;Uus8uDK()j*q9i4;B-JXpC>2OC7#SED=^7a78d`)H8dw<^TbWvF8vq#w zt8QmKLD7(#pOTqYiCe?%wo4H}4H|G8N-}d(i%Sx73qX2IK$aL7hZq`KnVMS}m_jV! TEd3Dz)WhKE>gTe~DWM4fZ?*}Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/green.png new file mode 100644 index 0000000000000000000000000000000000000000..dc0ec59d8aee1b8fd06fceba41a2c49582e17110 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`udPung9R)d&EiHzI{9N{{}Ch2F8*gzhDN3XE)M7 zoFs2|7oNt=fyqD)XMsm#F#`kNVGw3Kp1&dmD9B#o>Fdh=f{~fqk~Mp+@==f;PZ!4! zi_=plT4x9K7Gb|eZ%gpR#o?fskBP2{BcGZo5EtbsjyOds@UzA$v>%$-`HQW4yMpF>` z6{nRiZpCHKzV6(~>5$vQVA*nu@xh+=zw_BORJ+do%Vc^`l{uH$bz<2+XFdf^4|B%% z6aL+PSnxX1o?SZ6?whmBvKw7Ys*{TDbSVqyDM?K&@M^bR%X^TkdCR&jk3v658#0_@ z6f*O;An{FcL8bbnc%^djREDB$n;9%E4w$J3uj=-UTF;S6G7^>bP0l+XkK^v4O! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f790103f4d9a7cb4782fe08874b9367abc201804 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`g-dvxBvhDZ#-x3?c29A&+115H87S0`2{mLJiCzw z;v{*yyYMt_4on7eI14-?iy0XB4ude`@%$AjKtc8rPhVH|7mUo@maN%pm5+k-c)B=- zSe%|Z(K_phfj}E8bDZRr_ zD?ai31WDUJU9nH{-ID8nJy+bgo4ukkjLY6{$>*0HGYh&dE;w`KU1P&_MveXsxgCeq z6B6D9Ok;CrpJCDPUuI?}^YnsU86ja3v8!$bY_VjH-=*~O{G!xSUmpfpsoCZqG@63g zuQ;uIaVsu+_I2k@PKVqc2FsRPj1Ts_|DDgSq1tusUnbLos?52}t`p1tIrAxSdYCi5 zpYZSY!-Ch5_UzJmcHf+3mfh%LQk_(Er%PEtPf2QOfmgfjTHb?P&0E%Oc@+9d+K}NK zqmY@$1&MEp3o6wo#VeJIr!o|6+st5TallMPcvZJ&)OrSmVub@zYnk>OGEI2Xm_Fe} zqd8Mruuh}FK92TO&U=UBe759Vdf}B?e4zhjT9Aao_Wom9^U<$E> Tv-C#@P!EHrtDnm{r-UW|!L|ze literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..e70d121d7d31c3a12b9954763a5e5a7f9b9d5c01 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`ud)p=KufyS5_9@zI|JH@8NSm4U8p0e!&b5&u*lF zI7!~_E{XE)7O>#1tT-JC2RIt<)a`yo-U3d z7N@69w9YzWAkfCjxci)(qB;kUi?~PMggQlq<~tHRQXMz1?cRBC+RAMo7;`#qO7HN~ zicdU0LDKe5SL~B~x8(X?&lNZBX0NCW@ZpUHu zgoJki)7aeEXIM1+mzmkgJiTC7Mo5@M?5Z09TP&I5cPYI*zbLiT*M~t?YPR_Yjiw;> zD^4q4+=|Pdecic}(;>Hq!LsER?DswKg>%_8u&U^}-9_Ebi zC;Yqpu;6v1J-c+C-8W~MWjDH*R3{bP=~5QZQ<9om;MH!smiHi6^Okj69)*6AHe@)* zC}iewLE@X@f=cyC@k-_5sSHKiHZxdS957Q6Ue)axwVpwtSmA)wTBbdROcUNTrcZd$ zXwH-ttkY<)kE1=6^WNb&pDj6;UU;PzALxJCc;Pn7hwfWUZK3&$4>uM`cRkbJQ1R}m z$bLqPbtf;Uus8uDK()j*q9i4;B-JXpC>2OC7#SED=^7a78d`)H8dw<^TbWvF8vq#w zt8QmKLD7(#pOTqYiCe?%wo4H}4H|G8N-}d(i%Sx73qX2IK$aL7hZq`KnVMS}m_jV! TEd3Dz)WhKE>gTe~DWM4fjiU=w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..acc05367a7295c1cad525835c40e689dc0ba1c27 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uhCc6951IPgo>!`}XZmD^zQN8W>B0{DK)Ap4~_T zagw~anMpdfpRr>`sf3r1#cOV;eQ%11$ZJY5_^ zEKX0IXq|P$K%kA4arZenMRg7y7jcii33ZAJ&37btq&jY1+r9JPw3XXFFy?gJl-}W| z6`y#1f~4)AuGlB}Zprn(o-1zL&0bL%#%1rfXQQ z2?_54rm?xR&#-9tFEg`~d3wRFjF2#i*i|0D<}K^CJPQ3JZOCwr zQOL~Wg2Xq)1(oWP;+4w9QyGf3ZDz2vIAEqCysFzXYCVHOvBCkVwM=^snI^nxOrP+g z(VQtQSf|loA4hvC=e@&mK3j4wz3@scKG6TN@xpDE58bzz+CuXgA8ss??s}%bq2k?B zk^PJo>rP%yVQ~URfNF_rL`h0wNvc(HQ7VvPFfuSQ(ls#DHM9sZG_W!-wlcNUHUKgV zR^85ef}$ZeKP5A*61RriZI>c|8Z_WGlw{_n7MCRE7J&4afGjaE4ly*eGBvj{Fojsc TS^6UcsE5JR)z4*}Q$iB}i**Wk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..8de4317be06415529928f0b85e61329e97d662db GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`ubh=>;M1%ztC*@?c2BKR6jWZ)WBF0;VkfoEM{QfI}E~%$MaXD00r4gJbhi+UobLrTe4=aRXz&R)%ffib7!rt}U! zt@yz`%+m{YWrT!D#ICv#u*H%&ewWhA^NUhTeSH{YrDmId&}a%` zzv8s=#jUvP+1H&rIURC)7%W?EF+SMy{&zmRhHBTjf0;}Vsxs#?yG|_o=gg0!?J ze!{=o4+~yL+OtdN*?n`CS$3m~Np(`uoi1eoJte8B1zzp8Yk3cHHE&tBt!3JC$TZ4jHn@qzxAjTdgSeCWQ#)E1i0_;6#9bk{Te4HfU6 zitJ~!SaHYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`ueXW0{{R2zmmdx`}XbmH=F%|8W>B0{DK)Ap4~_T zagw~anMpdfpRr>`sf3r1#cOV;eQ%11$ZJY5_^ zEKX0IXq|P$K%kA4arZenMRg7y7jcii33ZAJ&37btq&jY1+r9JPw3XXFFy?gJl-}W| z6`y#1f~4)AuGlB}Zprn(o-1zL&0bL%#%1rfXQQ z2?_54rm?xR&#-9tFEg`~d3wRFjF2#i*i|0D<}K^CJPQ3JZOCwr zQOL~Wg2Xq)1(oWP;+4w9QyGf3ZDz2vIAEqCysFzXYCVHOvBCkVwM=^snI^nxOrP+g z(VQtQSf|loA4hvC=e@&mK3j4wz3@scKG6TN@xpDE58bzz+CuXgA8ss??s}%bq2k?B zk^PJo>rP%yVQ~URfNF_rL`h0wNvc(HQ7VvPFfuSQ(ls#DHM9sZG_W!-wlcNUHUKgV zR^85ef}$ZeKP5A*61RriZI>c|8Z_WGlw{_n7MCRE7J&4afGjaE4ly*eGBvj{Fojsc TS^6UcsE5JR)z4*}Q$iB}o@xs0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..488a78fae221b08a59e3bf0186bcd6e4b19077cc GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`ufk^tN#E0f2m^f?c2BS-d*?ysDZI0$S;_|;n|He z5GTpo-G!%db6_%%!&%@FS21szhGqMwq(s-t9%rs$J50z z#NzbSiPl+1356@l@0MKu>$&2_-Ru>WVO;ipOFqBsm|4(ualx4*?;0DfGivmA$n7|+ zo{;b^U>ch{`wWYQ|1vW>nWq=*$_NRQh+TCfV2dSl{4S-J=NF}x`uZ@)O3gO^pwSe> ze#L3!i(7Hov#&dMaysPpFj%(SVtlaY{qKBs4b`r5|1y~#RAtU(cAZ%E&zVnw)5Dzc z{e*wF9~Qihv}c#jv-{>Ov+PC}lj@|RJ6*~GdP-7L3%uHG*YY0ZYTmML%cIaw(uNG@ z7=_F{E=YV+Tu`Y#DPE~uJe8qn+hzt!ivwmV!mGMHqt-Jh6e}E%TFbQOkZHo3#`Fm< z8qJx~f^`}V_HneQa^5=}=d&f}(hIND;sgCJ8!y~u`OtlfsVy|0@!`fI>8@w`8!FyC z71_^dvF_yM6c#671gMs{MwFx^mZVxG7o`Fz1|tI_BV7YST|+oZUIP-3CI!y;}AnbD^qhT15=14 UoTWcPfO;4_UHx3vIVCg!02U4nKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..679edbb1d2638e37741c774b92f5f0edf52d8101 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uY;JmH+?$Pf?h3`}XY=fr=YI4U8p0e!&b5&u*lF zI7!~_E{XE)7O>#1tT-JC2RIt<)a`yo-U3d z7N@69w9YzWAkfCjxci)(qB;kUi?~PMggQlq<~tHRQXMz1?cRBC+RAMo7;`#qO7HN~ zicdU0LDKe5SL~B~x8(X?&lNZBX0NCW@ZpUHu zgoJki)7aeEXIM1+mzmkgJiTC7Mo5@M?5Z09TP&I5cPYI*zbLiT*M~t?YPR_Yjiw;> zD^4q4+=|Pdecic}(;>Hq!LsER?DswKg>%_8u&U^}-9_Ebi zC;Yqpu;6v1J-c+C-8W~MWjDH*R3{bP=~5QZQ<9om;MH!smiHi6^Okj69)*6AHe@)* zC}iewLE@X@f=cyC@k-_5sSHKiHZxdS957Q6Ue)axwVpwtSmA)wTBbdROcUNTrcZd$ zXwH-ttkY<)kE1=6^WNb&pDj6;UU;PzALxJCc;Pn7hwfWUZK3&$4>uM`cRkbJQ1R}m z$bLqPbtf;Uus8uDK()j*q9i4;B-JXpC>2OC7#SED=^7a78d`)H8dw<^TbWvF8vq#w zt8QmKLD7(#pOTqYiCe?%wo4H}4H|G8N-}d(i%Sx73qX2IK$aL7hZq`KnVMS}m_jV! TEd3Dz)WhKE>gTe~DWM4fb5aTc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/red.png new file mode 100644 index 0000000000000000000000000000000000000000..003133d3368b43ba3815096396ba9e8b1cd6a3fc GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uaJlO8@`=ZLefxGtN>~L@17k^$UoeBivm0q3 zPLj8~3s2+bz+@nYv%n*=n1O-sFbFdq&tH)O6l5>)^mS!_!N|;Q$(p@Z`6x(_r;B5V z#p$UNt+S382(+;>?mj1{sLsLTBJR;Qp-xeu`HlpSRL9M0yLTR(wsPAC#+;6u(mVXL z;uFtLkhJ~N75gOLExG>JbH$Cj*()l;xa|Fwe16$6v!LtZf-^_nH8xyl)adV!+i_Su zA>m!XG&Xnk85RxyWoC9VPcPV&5fUa5yXr>37E9*%T}m&{FG?--^ z3IA?CEO;Gh&n}&3_sv;m*^MqH)k#Hnx|9Xc(vQEmj4H?cc z3YmFakocy!pi+HOyi&P%Dnrq>%?y?n2h3E2S9Nogkd<7iLiymvUxXG_kd7hb8w2l`(&UbxNjq5Bq7TWCJx!;MAKUC;D4RJ?mC zvY*jn-O0--EKa}(P%UwdC`m~yNwrEYN(E93Mg~Skx(0^2h87`)237{fR;HHP20(_v zs@qvlP&DM`r(~v8;?{7x?NS6#g9hA&lFZ!H;*!MN0+1dPkR=AjA%=!lrsh@#rVvXw TOMip_^)Pt4`njxgN@xNAxTy(6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press/white.png new file mode 100644 index 0000000000000000000000000000000000000000..965f9af38ea54a7e3560f6a8e1f8efe126df366b GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(mxfC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uhL>|KGiP_xA1EC5)dh097-V1o;IsI6S+N2I3@n zySs49Uq5mH$l)yTh%9Dc;5!V$jK}j=qyPokOFVsD*LLRV<=&AA?587^B0>|>(nqv&suZ4cm0Ij zC2p5~h|c~u`{IrH|0+Fl-!aC`>pj@7{PJ_f0Vmd_F9O7~K06%9<_}>%!g1%Juz^A8 z3a$2L<{lY^I=?$78ogQO>PYGP_?5oW_%)|7KYH?;>+jxNUB*)IrINefYYO{(4g1IkiUiF1K0G1h3xYjlUeR@%zopr0CLHYaZfQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(nArC&U#<|G&ZT|AD8N znAlbzn}H!AA;Hwtbi1A1JX6#9`uab|RsR3~e`}5W?c2Ba)ZGIb!oXM(;VkfoEM{QfI}E~%$MaXD00r4gJbhi+UobLrTe4=aRXz&R)%ffib7!rt}U! zt@yz`%+m{YWrT!D#ICv#u*H%&ewWhA^NUhTeSH{YrDmId&}a%` zzv8s=#jUvP+1H&rIURC)7%W?EF+SMy{&zmRhHBTjf0;}Vsxs#?yG|_o=gg0!?J ze!{=o4+~yL+OtdN*?n`CS$3m~Np(`uoi1eoJte8B1zzp8Yk3cHHE&tBt!3JC$TZ4jHn@qzxAjTdgSeCWQ#)E1i0_;6#9bk{Te4HfU6 zitJ~!SagJBqT&aLRwo}+tk!lO--%7zP`P^U0z;UMn+-nT%UQSrpLB~ z|NsAg=0dADpec+cL4Lsu4$p3+fjCLt?k=KFZ~R;gvL>4nJ@ErtU#vK#0-vR~M zOFVsD*N(`;;uzv_eC?FZY0U~euCcdH#KrvkAFa;mc;S`7Jmd9J z7pC2IZz%bD;k)vyuXTGFt}avyQ4flo#oQGY;CAKfVFQ%|zhfD$y<>PD=*Q5?Hp~7( ztmTVcToYJL7d%`r@5s9cd;!`FEmwXo2s*Ek`s2D({+mb2W(j(XuA&O7djxLrU~L{Je!xDJ2c%diTMHNgPm6%Y;ky~cVHrydsL?`gRV4_&AjU8|-hX$;9Mfm7Sn(l=JwoMDSryZT90wU0#`+VDpWW2i zt5!0$olZQ>I9HCPqq#KJmr+79S>bnBx_&^x&4Wj@j&9Og&^Xooeb1FsT0OVTm+RrKUU=H(#*G=1A7!Q96KU$sB@xm*EdB*Fd zE=;@a-ca)Q!gu9YU+eZVTwSOZq8=1Ei@7T*!0pP{!v-n`e#bIgd&lrR(2t>&ZI=Co zSj!i?xF)cgE_k?L-jR0?_yV*UTCV(F5OiK6^~ZIo{5Ox3%@Xt&T}2gE_Xyq!X6RoS z>S1z5UM=vo^Z}F919Qt97T9zD=hFzzU`m>kyu{$Vap~I9b2rTr{FQjuh}f=Xdofv$ z;oQZkEo^JHe$8aK$eUotbj0!IsrsS-f5qCnY#G~FrX11u`S_!uelnxUvIJd8KY_H1 zs^-a$O%ue^cs4IPcWAm_67vJj2RpAk*y8X|@4!SZ_oz-?23=_;n|amG%MUQKZ~3@~ zDT{N%8k<&jzKqvO3O2OC7#SFu z=o%OTQHY_Ll>rE88yHv_7*tK34@waT4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7 h&|@58XlP|>W@Tgov4rXAd{A0s@O1TaS?83{1OSIPJTCwM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..5af3beab1bb1a828746ae009ee6fbf7626acf7db GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%2+tk!lO--%7zP`P^y~tf7(@}NpT%UQSrpLB~ z|NsAg)$-?6KvNh?g8YIR9G=}s196hP-CabV-uSr~$l)yTh%9Dc;5!Jyj5{V~zXb}i zmw5WRvcF(t=C+U!+)x(_)N{zw#WBR=_}VF*)0!1{Tw`yYh>Q96KU$sB@xm*EdB*Fd zE=;@a-ca)Q!gu9YU+eZVTwSOZq8=1Ei@7T*!0pP{!v-n`e#bIgd&lrR(2t>&ZI=Co zSj!i?xF)cgE_k?L-jR0?_yV*UTCV(F5OiK6^~ZIo{5Ox3%@Xt&T}2gE_Xyq!X6RoS z>S1z5UM=vo^Z}F919Qt97T9zD=hFzzU`m>kyu{$Vap~I9b2rTr{FQjuh}f=Xdofv$ z;oQZkEo^JHe$8aK$eUotbj0!IsrsS-f5qCnY#G~FrX11u`S_!uelnxUvIJd8KY_H1 zs^-a$O%ue^cs4IPcWAm_67vJj2RpAk*y8X|@4!SZ_oz-?23=_;n|amG%MUQKZ~3@~ zDT{N%8k<&jzKqvO3O2OC7#SFu z=o%OTQHY_Ll>rE88yHv_7*tK34@waT4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7 h&|@58XlP|>W@Tgov4rXAd{A0s@O1TaS?83{1ORdIJSzYI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6c11b7ba607905e2aaa1b87cc795b42f0351a7 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%W}ME`EMR6nsOI2j-SJEU@SP&!-Wb!IU&7d5OV!4@XaQ}smw{))AC*)q1VOgWOBm6nq%moUb4;JTV#S9f_6U_rWmQZUavWr280$|oes)u5 zuUg62b~^Di<6JqGj^@%>Uq%VdWQE^h>G}Z$HxC}sI=V?~LE}{S_dQomY4zMTlY1v( zap>7g=6HsZ-9`tj>MiTM1N(I>d>I)}Z_2oNYCosYgE`C}UN>!fVNl5W=+Uo*C;bv1 z9ajiUKM**fN#^;N2}Qb$MN`7fe=!PFSXUG~MgvnHgKCLuL`h0wNvc(HQ7VvPFfuSQ z(KRpxq7XwfD+3VHHZZU>kmJ%RuL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..05bab290b1775ff4b446ab1d0f9bd6ed25db6709 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%vL>4nJ@ErtU#vK#0-vR~M zOFVsD*N(`;;uzv_eC?FZY0U~euCcdH#KrvkAFa;mc;S`7Jmd9J z7pC2IZz%bD;k)vyuXTGFt}avyQ4flo#oQGY;CAKfVFQ%|zhfD$y<>PD=*Q5?Hp~7( ztmTVcToYJL7d%`r@5s9cd;!`FEmwXo2s*Ek`s2D({+mb2W(j(XuA&O7djxLrU~L{Je!xDJ2c%diTMHNgPm6%Y;ky~cVHrydsL?`gRV4_&AjU8|-hX$;9Mfm7Sn(l=JwoMDSryZT90wU0#`+VDpWW2i zt5!0$olZQ>I9HCPqq#KJmr+79S>bnBx_&^x&4Wj@j&9Og&^Xooeb1FsT0OVTm+RrKUU=H(#*G=1A7!vL>4nJ@ErtU#vK#0-vR~M zOFVsD*N(`;;uzv_eC?FZY0U~euCcdH#KrvkAFa;mc;S`7Jmd9J z7pC2IZz%bD;k)vyuXTGFt}avyQ4flo#oQGY;CAKfVFQ%|zhfD$y<>PD=*Q5?Hp~7( ztmTVcToYJL7d%`r@5s9cd;!`FEmwXo2s*Ek`s2D({+mb2W(j(XuA&O7djxLrU~L{Je!xDJ2c%diTMHNgPm6%Y;ky~cVHrydsL?`gRV4_&AjU8|-hX$;9Mfm7Sn(l=JwoMDSryZT90wU0#`+VDpWW2i zt5!0$olZQ>I9HCPqq#KJmr+79S>bnBx_&^x&4Wj@j&9Og&^Xooeb1FsT0OVTm+RrKUU=H(#*G=1A7!5ZR@fgH{PkH}&M2EKzJ%(!D>_FJGJ zdx@v7EBgyZW^M}!!3}k>Ks|>%T^vI^j<224IjvcN$2IoWiMW`5|D)A89WT5xm}k6R z>cX_!?hPe>FML;i^|fv4Jv~<{f$WfG(@+%i@XVTOh+7Vo~kbj@K>z8%a*Z?Wy%qapN~Hp>L)XrEKAUp^b<(C zsA``4*fc>rjc4<+bBCt;B{4tXe6aJ%gDnmZ^$twra*yiNWzdyovYA)?y!-$&`<9P; zn6fxGtg&fj=gWAlq~OD-@7wT~#ryB>m}C0v6)Qd@u}7#}Dyw3;kmDdD!&rZ!@w1yc zd(}$Dw$q8H8RyEebTpU7`Z7vrCM*07OV^3@JRc~469oVm9;mgQ)dQ-;DQ~NoE9?W6>@VaT+3xh(|M~{9jJn5JC z=(s{)`hma+O)}5FOeoT2ESeH-{)!Wf5KEYz&IhGM22WQ%mvv4FO#o9lJ=p*N literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..43cf87d0560f4e987ddc3efd8c32a245cc381f15 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%H=O_7{xI+!hjo8|q?#dJcKIIEHu}Upu99TC)O=YwWEPaWVh?N2_x>UU+3N&v?Dm zg=x3l8%q9O_^$lwYu#Rks|(da)Po{tF?U4;xLx^r*g)mL?^uRw?--s3`Z2V!&9c7` zYx!aq*92D61rHa@JM!)UUw}44%az{?g3fEC{H6|4E+m3 zJxtEXs|CK6K46l1U~ZYi0(X+SOi6Q+ml&KkE?rxC?xtCSzY^~n5!=;lFDC0T zoVz%+g>B8&ubB)Nc@ylIjyT>tRbLd~uULDREn^$Ylp`8HAAdB|Pi8b(mY^%?Cy;hg z)javJX@Ynf&*o+44o&wgE7$3aGhvHnEkXE$~B zs+EjwrxQ;z&Xr^7XfBQQWt7lNR`?y3t{+fv^WYJ!qnorAG){GY-*e@ZR?lrSxpyKK zhn~G;j%O&@ZFIn@-m=a+uwTc*myz-Gri`1X_Hzn7n8WEAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a> gdW=I14XsSgtc*+`mM}e?4@!#+p00i_>zopr0I_F1qW}N^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..da8664f0c73ac19579153e037273fa94c75d9c58 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%{_+B=5lfqo3FY_sey z#9F@C#WjJ|biu;~^NzfGz!#v+&~oMXf}rynsXwku<-d8PY?h$M=qjqPx<~Ls zP!E$c@@j#vr4N{-9++F^u)v=CKc7Z$22;|U-p1Wz5;IG8HM#OeC+l$G1 z4CgLRZDCup^=l@>McxEErX!9wPt_L%_$$`lWy{#cGUbTI&&MAP^^+M*mL=#)`U#|6 zR5ee2Y?>gR#8*4VVN^JTnNQt)Ba_igyg;{A7b%rSlTiWMJ{*dtUfl~pla$Z?R7VXQyV_}NXJ zy=o<6+v&v9jC18!I+{ykeHkS*lNEl4rRxV2+&p+h>*yw}1&veP-}hWOrPXuWOzxeC z#i3^}nd2Esb{ieAs<*834(!*l@MUB?y(#17sr{Tn59Tm`c-^$^g+U?fqes6Mp7cw6 zbX*}Y{XpP^CYk47CKTy17EK8^|HUX!VO>$|7!6E)45}rr5hW>!C8<`)MX5lF!N|bK zMAyI&h(Zj_tPDU%+rYrez@TdKd{Bx&Xvob^$xN%nt%3WTdLU4P2Hb{{%-q!ClEmBs hgdXD%LqjW5GbEamTaeVER&S}jGJg%{~PQ=Ch`yZ{&>3HFl!93&j zQWvJ(c5f*8d*QqCtFLu?8Llo=3sDb>oWtO?x1HWS#uDxS;9_Yu=$~MdX zLagPBU0f4bO&2^|Fz?8_2YdnA3@ulFF9zt9t}*1vB(7 z4D~QMBd-?tTKa%V>Vdgs4h!tL|MO`CXD}trNnT=b-neva>A9O`3I0mFYeZ~Uv%Q$C z$8hfA)E2fiTfb&9T;xr#V>;q^^HhCNfWKnxUAByEEK`nX{Cxb;P(PW`WLbi)q@O_A zMOE|U$EFG5X*`>kojWw$FNyg9=YySB9&B-VsCQr@mwQyFE`zQ#lg+&9=j8{O*|&V$ z!<5CjVU0~IJ730YB?TWwecy(^EZ%>2#~jmVuUPRRi9JH)Qdt$#g&YSN8OHh(ji24r z*{fDEww+Eq%{W(%rK7nt)|XL2Gg;wxSh{{d!Oeq5w2p4lTF^Mv{e91sQ(8T@&E(#R zSR8uxk~yBCWVg`)t9r{i@4$W?3tvXY)0;AGp4!hT^k5G2hu2NpUKkXzK6>Tc(+>nrXp(vUWkQiIW6_jw^Iwbt71kBSj?uu>$Dmr`8c~vxSdwa$T$Bo=7>o>z zOmqzlfhfe#%*p_Sv<(cb3=FC!&j+OlgofPwl+3hB+#0ygsRsfzXuxeK$;?eHE=kNS iKW}ME`EMR6nsOI2j-SJEU@SP&!-Wb!IU&7d5OV!4@XaQ}smw{))AC*)q1VOgWOBm6nq%moUb4;JTV#S9f_6U_rWmQZUavWr280$|oes)u5 zuUg62b~^Di<6JqGj^@%>Uq%VdWQE^h>G}Z$HxC}sI=V?~LE}{S_dQomY4zMTlY1v( zap>7g=6HsZ-9`tj>MiTM1N(I>d>I)}Z_2oNYCosYgE`C}UN>!fVNl5W=+Uo*C;bv1 z9ajiUKM**fN#^;N2}Qb$MN`7fe=!PFSXUG~MgvnHgKCLuL`h0wNvc(HQ7VvPFfuSQ z(KRpxq7XwfD+3VHHZZU@}#JkkIF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1a38712a2745ec9de83301179d7cd6cf5515e6 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%J!qJ_cCODnQ`2Kx z!vFvOU;fPUAJ7!Wk|4ie28U-i(m8b@ z>?NMQuIw)unYk?_1UJ;h0`(m7ba4#vIKFmD=d@-89@p4gC*orM{f}1XbiDA&V4m@M zsSDF?yEl~lz3^T6)z`Yc3|AMbg{TKb&SLJ03UIsf^{|1;f#0zV*WNKa5AIZ(O>z^xRFe1b-#oH6pgF*owlY75(%tzR=4F7hVWF&%Ndd8)oBz+bWUE?dSnmMKRxem?$asGrPevMfPY(oZ1m zqN;iFW77ojG@i}N&K;WWm&E*l^TEz554Jcw)H^Vd%RQ=7mqAyW$!1>l^YR1C>{~wW zVanp%u*Rm9oiF3Hl7bJTzHh@{7Vp2iV~**wSFHGu#2%q?sjQ0WLXLxs3}gL?#?Nl* z>{Tln+fFB*W}GX>($QQR>&qyinXK?TEL}gK;O4<2T1Pi&EohwT{=VnRDXpH{W^(UD zEDk+;$sEs6vfJo@RlQ}McVNGcg)bxH=}j3oPwnRvdN7Ci!|SGPFANGwGNDM9v1m%T`7cI+3hRnu$7o>cV^A$|jVMV;EJ?LWE=mPb3`Pb< zCb|ZOKonwVW@P|E+6D$z1_o7==YvuNLPKtTN@iLmZVlY$)B}MUG~hOrWag$8mn7yE iAoLiA7#docnpqi{KrCT;Ivx{QDoR&gppJmBBpY z^->q6-F9y%`Fr8J@~f|Pdl{}SR0~lLik!vV6&2ui@(H8Lqu!cpm7-(8@N; z{z9zfi(On3SWOo^Trls*y9ay$+6*mMelG|*uaWxWx>Wv~N6KaidW^233afhrZv`{- zFAViCIU}zY_*(jaN$P>QWeyAMx&QNN1ZOZM%}HKjaNf9dZRxq2W(odEylX^kSF^pC ztjBQf;?x$lHCw-CGF;?Muwy#nc=J?!QGmZgVMLnAx{{ z+{2W`xnYe>D?4AtYb6CAMt$FgzbxK=cgGylXRlcCA&EUg+g=zHvOaqBYvD=1 z#7D;!0@Du!PH2*O{$)auE@RP@aPwb`0u|O3#g5Uy)W@J&;u=wsl30>zm0Xkxq!^40 zj7)S541p-b(9FsJgtQF|tPBjQCeH_@2!w{*{FKbJO57T_CjHE6(XD9OxCEiOsS jEkNio4ly*eGBvX@GJ#ma^mINbEi!nz`njxgN@xNAKde0` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/red.png new file mode 100644 index 0000000000000000000000000000000000000000..660b8d74cc1ef18f141552eed1f0e28a7413ffe3 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{Jv|C&U#<|G&ZT|AD8N znAlbzn}H!AA)%kbA9HSnjYH{ z{{R2~Q{_{Ofu=B)1o;IsI6S+N2I3@nySs=!z43D~ki%Kv5eZbmcMyabcTCKF3lwB8 z@$_|Nf5FJiZ6P7Jp)MAv=a8q1V~EG`wNpB$H7oGA#@;#+7xV9bv^uBbg;xgijMqzD zn0DK}q2%v{@5-;f*6n4ux=<}dJt%S(b5~S=+m)|}4O9;Nj%B#^j^TNrA44nKEc*+w zmM?a3O<*-$@NmJrBkvyY1!yz0T=~5q=)6YikLyzTZyqU|CFn7_iYlz`5xf=5(7!O$ z!{m&-THtHx116~l=9W1uu;>2IrxBdNlr$%KiNSf}(zT`MZki?dEAg%ov0csfVzM5? zxrHk88~(C*|J@yPOrO1C#fK#J2$f4^RZJIh9Asn|>rXU(c2j4s zTFKaUI`K5)TsfAG=F(VSMhVSih2LT6`T+$u4<6Avx=Cw6<5c(eJy%X?_1rd-dnaOX z=-Er=c!rYQMhC3wE$h4k`*kdQ85vJ+%D8!IKc~=xIm{nkH*I@iP{{h|(XWLk{SqG? zR|rf$5ICVp=J}TiMY@bdQ^L)EF$z>zR}?!&15+P^YKdz^NlIc#s#S7PDv)9@GB7gH zH82FC5JNL70}#?SFt9Q(sG2+FVdQ&MBb@0B|rn%K!iX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press2/white.png new file mode 100644 index 0000000000000000000000000000000000000000..e156dcaf5ece6d0e7ea7700b4c648e8d7d1ae428 GIT binary patch literal 858 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/plate_press_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..939804355501fc7ce8dc8ac19255e98eca2bfaa5 GIT binary patch literal 1289 zcmV+k1@`)hP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m?d01m?e$8V@)00007bV*G`2j~F<3poRV&W7*+00RX{L_t(&-ql$_uCg!?9t?5e z1zgJ|u!bGpptoRWVB-Od8w@Au5!ewL6R)7IJw^Y;?~oQLv{2rAeu=?CXWC9@z8Q)q zga8@a?N(`@PA7=t7|OB)0D#qMr95Yh0RX`He1_-q37gFZ`q0(qcswfY%jE)7kfy29 zrj$1Gtf~s4C~C%8m@19q7~(hvm$=<-Mhmb-RaGDVtEy7&Ba97DmSy7wu0bhPu2X?K z-2UGM-^K#~066EJ)?O}`qbFR~wNr!2ZeCRtP)e1yVgS$cdX??>d!;ReXpBGzX%rVl zVKqsNNsRYA&w+Ced7d}-F%-Hy1LfOZr1LH<#D73t*C2!#{K@?=UWFY{Uf=@XI;?f4 zX=*ionx+tjVe@l>_oPP|Kz9AQu9csx`+mPG3b2iRO$V;)8p1FHG@KO&%#Gb{_hVzp zJmB}mnMn*!#nAYV$3wZc@7toyRsNfR1OOl#3KK?!t%=qFnK9t4~N6S=y1cvn{;iX zI$$ix^o4;Ot5}kv>;5Jdx;G`=x!PC`aP{&uy8+}~ZXYDNa``#Y#UoY*&@EKA_^CTP zM4psVt3Emo(CPRS2O^kB2J*KzbTTDp4O1igLnkIfB-l=6bJYP;PL%pSv@H4-A4Smz zC%6V|nl~Mj(jIR&_00000NkvXXu0mjf9%oag literal 0 HcmV?d00001 From 0dcf6664a3b6b6e2fe0b00e121d788cf96413ad7 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 20:03:23 +0700 Subject: [PATCH 11/37] Add painter recipes to matter recipe finder --- .../overdrive_that_matters/otm_recipe_finder/painter.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/resources/data/overdrive_that_matters/otm_recipe_finder/painter.json diff --git a/src/main/resources/data/overdrive_that_matters/otm_recipe_finder/painter.json b/src/main/resources/data/overdrive_that_matters/otm_recipe_finder/painter.json new file mode 100644 index 000000000..c80a53af4 --- /dev/null +++ b/src/main/resources/data/overdrive_that_matters/otm_recipe_finder/painter.json @@ -0,0 +1,6 @@ +{ + "recipe_type": "overdrive_that_matters:painter", + "type": "overdrive_that_matters:simple", + "is_critical": false, + "ignore_damageables": true +} \ No newline at end of file From 800fd54d8ea6d682a65935fbc231758eebcb1b03 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 20:04:46 +0700 Subject: [PATCH 12/37] Explicitly inherit string matter value for wool --- .../ru/dbotthepony/mc/otm/datagen/MatterData.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt index a46c6be0c..65c2e3396 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt @@ -89,6 +89,23 @@ fun addMatterData(provider: MatterDataProvider) { provider.inherit(Items.RED_CONCRETE, Items.RED_CONCRETE_POWDER) provider.inherit(Items.BLACK_CONCRETE, Items.BLACK_CONCRETE_POWDER) + provider.inherit(Items.WHITE_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.ORANGE_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.MAGENTA_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.LIGHT_BLUE_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.YELLOW_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.LIME_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.PINK_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.GRAY_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.LIGHT_GRAY_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.CYAN_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.PURPLE_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.BLUE_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.BROWN_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.GREEN_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.RED_WOOL, Items.STRING, Decimal(4)) + provider.inherit(Items.BLACK_WOOL, Items.STRING, Decimal(4)) + with(provider) { blacklist(Tags.Items.RAW_MATERIALS) blacklist(Tags.Items.RAW_MATERIALS_COPPER) From 8f92b8d3f1b8826d90641ca38a7f786eb04aeba4 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 3 Jan 2024 20:46:51 +0700 Subject: [PATCH 13/37] Add computer terminal as actual block --- .../mc/otm/datagen/DecorativeData.kt | 8 ++++ .../blocks/MatteryBlockStateProvider.kt | 24 +++++++---- .../mc/otm/datagen/items/ItemModels.kt | 1 + .../mc/otm/datagen/lang/English.kt | 2 + .../mc/otm/datagen/lang/Russian.kt | 10 +++-- .../mc/otm/datagen/loot/LootTablesData.kt | 1 + .../datagen/models/MatteryModelProvider.kt | 12 ++++++ .../otm/datagen/recipes/DecorativesRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 1 + .../dbotthepony/mc/otm/datagen/tags/Tags.kt | 1 + .../mc/otm/shapes/BlockShapes.java | 7 ++++ .../mc/otm/block/RotatableMatteryBlock.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 1 + .../mc/otm/registry/MCreativeTabs.kt | 2 + .../ru/dbotthepony/mc/otm/registry/MItems.kt | 1 + .../dbotthepony/mc/otm/registry/MRegistry.kt | 10 +++++ .../otm/registry/objects/DecorativeBlock.kt | 39 ++++++++++++++++++ .../{decorative => }/computer_terminal.json | 0 .../block/decorative/computer_base/black.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/blue.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/brown.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/cyan.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/gray.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/green.png | Bin 0 -> 553 bytes .../decorative/computer_base/light_blue.png | Bin 0 -> 553 bytes .../decorative/computer_base/light_gray.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/lime.png | Bin 0 -> 553 bytes .../decorative/computer_base/magenta.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/orange.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/pink.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/purple.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/red.png | Bin 0 -> 553 bytes .../block/decorative/computer_base/white.png | Bin 0 -> 586 bytes .../block/decorative/computer_base/yellow.png | Bin 0 -> 553 bytes .../block/decorative/computer_base_mask.png | Bin 0 -> 935 bytes .../decorative/computer_screen/black.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/blue.png | Bin 0 -> 527 bytes .../decorative/computer_screen/brown.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/cyan.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/gray.png | Bin 0 -> 527 bytes .../decorative/computer_screen/green.png | Bin 0 -> 527 bytes .../decorative/computer_screen/light_blue.png | Bin 0 -> 527 bytes .../decorative/computer_screen/light_gray.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/lime.png | Bin 0 -> 527 bytes .../decorative/computer_screen/magenta.png | Bin 0 -> 527 bytes .../decorative/computer_screen/orange.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/pink.png | Bin 0 -> 527 bytes .../decorative/computer_screen/purple.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen/red.png | Bin 0 -> 527 bytes .../decorative/computer_screen/white.png | Bin 0 -> 522 bytes .../decorative/computer_screen/yellow.png | Bin 0 -> 527 bytes .../block/decorative/computer_screen_mask.png | Bin 0 -> 800 bytes 52 files changed, 109 insertions(+), 15 deletions(-) rename src/main/resources/assets/overdrive_that_matters/models/block/{decorative => }/computer_terminal.json (100%) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt index a9380202f..fd50bef53 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt @@ -140,6 +140,14 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr blockModelProvider.decorativeGlassAll(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) blockStateProvider.simpleBlockM(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) + blockModelProvider.colored("computer_terminal", mapOf( + "0" to "decorative/computer_base", + "1" to "decorative/computer_screen", + "particle" to "decorative/computer_base", + )) + + blockStateProvider.block(MRegistry.COMPUTER_TERMINAL.allBlocks.values) + blockStateProvider.simpleBlockM(MBlocks.FLUID_TANK) for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt index 509171aa9..fa5038372 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.datagen.blocks import net.minecraft.core.Direction +import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.RotatedPillarBlock import net.minecraft.world.level.block.state.BlockState @@ -56,10 +57,10 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve return this } - fun block(block: Block, func: BlockStateTransform) = exec { + fun block(block: Block, model: String = "block/${block.registryName!!.path}", func: BlockStateTransform = EMPTY) = exec { getVariantBuilder(block).forAllStates { val builder = ConfiguredModel.builder() - var modelPath = initialTransform(it, "block/${block.registryName!!.path}", builder) + var modelPath = initialTransform(it, model, builder) modelPath = func(it, builder, modelPath) ?: modelPath builder.modelFile(models().getExistingFile(modLocation(modelPath))) @@ -70,7 +71,7 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve fun block(blocks: Collection): MatteryBlockStateProvider { for (block in blocks) { - this.block(block, EMPTY) + this.block(block) } return this @@ -78,7 +79,7 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve fun block(vararg blocks: Block): MatteryBlockStateProvider { for (block in blocks) { - this.block(block, EMPTY) + block(block) } return this @@ -86,11 +87,16 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve fun simpleBlockM(vararg blocks: Block): MatteryBlockStateProvider { for (block in blocks) { - exec { - getVariantBuilder(block).forAllStates { - check(block.registryName != null) {"$block registry name is null!"} - return@forAllStates arrayOf(ConfiguredModel(models().getExistingFile(block.registryName))) - } + simpleBlockM(block) + } + + return this + } + + fun simpleBlockM(block: Block, model: ResourceLocation = checkNotNull(block.registryName) {"$block registry name is null!"}): MatteryBlockStateProvider { + exec { + getVariantBuilder(block).forAllStates { + return@forAllStates arrayOf(ConfiguredModel(models().getExistingFile(model))) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index d16873818..21e5437f7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -35,6 +35,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { MRegistry.VENT.allItems.values.forEach(provider::block) MRegistry.VENT_ALTERNATIVE.allItems.values.forEach(provider::block) MRegistry.TRITANIUM_BLOCK.allItems.values.forEach(provider::block) + MRegistry.COMPUTER_TERMINAL.allItems.values.forEach(provider::block) MRegistry.INDUSTRIAL_GLASS.allItems.values.forEach(provider::block) for (block in MRegistry.TRITANIUM_STRIPED_BLOCK.flatItems) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index e03ae6762..1c6ed54ab 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -7,6 +7,7 @@ private fun decoratives(provider: MatteryLanguageProvider) { add(MRegistry.VENT, "%s Vent") add(MRegistry.VENT_ALTERNATIVE, "%s Alternative Vent") + add(MRegistry.COMPUTER_TERMINAL, "%s Computer Terminal") add(MRegistry.TRITANIUM_BLOCK, "%s Tritanium Block") add(MRegistry.TRITANIUM_STAIRS, "%s Tritanium Stairs") add(MRegistry.TRITANIUM_SLAB, "%s Tritanium Slab") @@ -53,6 +54,7 @@ private fun decoratives(provider: MatteryLanguageProvider) { add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Minecart with Cargo Crate") add(MRegistry.CARGO_CRATES.block, "Cargo Crate") + add(MRegistry.COMPUTER_TERMINAL.block, "Computer Terminal") add(MRegistry.TRITANIUM_BLOCK.block, "Tritanium Block") add(MRegistry.TRITANIUM_STAIRS.block, "Tritanium Stairs") add(MRegistry.TRITANIUM_SLAB.block, "Tritanium Slab") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 82856ae07..db989cc4b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -13,12 +13,13 @@ private const val FEELING_SAFE_NOW = "...ощущаете ли вы себя т private fun decoratives(provider: MatteryLanguageProvider) { with(provider.russianColors) { - add(MRegistry.VENT, "%s Вентиляция") - add(MRegistry.VENT_ALTERNATIVE, "%s Альтернативная Вентиляция") + add(MRegistry.VENT, "%s вентиляция") + add(MRegistry.VENT_ALTERNATIVE, "%s альтернативная вентиляция") add(MRegistry.TRITANIUM_BLOCK, "%s тритановый блок") - add(MRegistry.TRITANIUM_STAIRS, "%s Тритановые ступеньки") - add(MRegistry.TRITANIUM_SLAB, "%s Тритановая плита") + add(MRegistry.COMPUTER_TERMINAL, "%s компьютерный терминал") + add(MRegistry.TRITANIUM_STAIRS, "%s тритановые ступеньки") + add(MRegistry.TRITANIUM_SLAB, "%s тритановая плита") add(MRegistry.TRITANIUM_WALL, "%s тритановая ограда") add(MRegistry.FLOOR_TILES, "%s керамическая плитка") add(MRegistry.FLOOR_TILES_STAIRS, "%s ступеньки из керамической плитки") @@ -62,6 +63,7 @@ private fun decoratives(provider: MatteryLanguageProvider) { add(MEntityTypes.CARGO_CRATE_MINECARTS[null]!!, "Вагонетка с грузовым ящиком") add(MRegistry.CARGO_CRATES.block, "Грузовой ящик") + add(MRegistry.COMPUTER_TERMINAL.block, "Компьютерный терминал") add(MRegistry.TRITANIUM_BLOCK.block, "Тритановый блок") add(MRegistry.TRITANIUM_STAIRS.block, "Тритановые ступеньки") add(MRegistry.TRITANIUM_SLAB.block, "Тритановая плита") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index ca8d3a69f..eb14cda0b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -14,6 +14,7 @@ import ru.dbotthepony.mc.otm.registry.MRegistry fun addLootTables(lootTables: LootTables) { lootTables.dropsSelf(MRegistry.DECORATIVE_CRATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.COMPUTER_TERMINAL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MRegistry.CARGO_CRATES.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index cebb67f1e..113e69a4f 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -114,6 +114,18 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } + fun colored(modelName: String, textureKeys: Map) { + for (color in DyeColor.entries) { + exec { + val model = withExistingParent(modelName + "_${color.name.lowercase()}", modLocation(modelName)) + + for ((key, value) in textureKeys) { + model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) + } + } + } + } + fun coloredMachineCombined(modelName: String, textureName: String, states: Collection, textureKeys: Collection) { exec { for (color in DyeColor.entries) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt index ef69bdd76..522c48dbc 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt @@ -233,7 +233,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu DyeColor.BLACK to Items.BLACK_STAINED_GLASS, ) - for (color in DyeColor.values()) { + for (color in DyeColor.entries) { val item = MRegistry.INDUSTRIAL_GLASS.items[color]!! val paneItem = MRegistry.INDUSTRIAL_GLASS_PANE.items[color]!! val mappedVanilla = mappingUpgradeVanilla[color]!! diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 6bb0f685c..23694cb1d 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -275,6 +275,7 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, MItems.ESSENCE_STORAGE[null]!!, MItems.ESSENCE_STORAGE) generate(consumer, MItems.PLATE_PRESS[null]!!, MItems.PLATE_PRESS) generate(consumer, MItems.TWIN_PLATE_PRESS[null]!!, MItems.TWIN_PLATE_PRESS) + generate(consumer, MRegistry.COMPUTER_TERMINAL.item, MRegistry.COMPUTER_TERMINAL.items) generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) generate(consumer, MRegistry.VENT_ALTERNATIVE.item, MRegistry.VENT_ALTERNATIVE.items) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index f23b251af..0e2712d35 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -244,6 +244,7 @@ fun addTags(tagsProvider: TagsProvider) { tagsProvider.requiresPickaxe(MRegistry.VENT.allBlocks.values, Tiers.IRON) tagsProvider.requiresPickaxe(MRegistry.VENT_ALTERNATIVE.allBlocks.values, Tiers.IRON) tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_BLOCK.allBlocks.values, Tiers.IRON) + tagsProvider.requiresPickaxe(MRegistry.COMPUTER_TERMINAL.allBlocks.values, Tiers.STONE) tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_SLAB.allBlocks.values, Tiers.IRON) tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_WALL.allBlocks.values, Tiers.IRON) tagsProvider.requiresPickaxe(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values, Tiers.IRON) diff --git a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java index 6a1851dab..a0bf71844 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java +++ b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java @@ -797,4 +797,11 @@ public class BlockShapes { new SimpleCuboid(0.3125d, 0.3125d, 0.0625d, 0.9375d, 0.875d, 0.0625d), new SimpleCuboid(0.3125d, 0.6875d, 0.5d, 0.375d, 0.875d, 0.8125d) ); + + public static final BlockShape COMPUTER_TERMINAL = new BlockShape( + new SimpleCuboid(0.0625d, 0d, 0.0625d, 0.9375d, 0.125d, 0.9375d), + new SimpleCuboid(0.0625d, 0.125d, 0.3125d, 0.9375d, 0.3125d, 0.9375d), + new SimpleCuboid(0.125d, 0.3125d, 0.25d, 0.875d, 0.9375d, 0.875d), + new SimpleCuboid(0.1875d, 0.5d, 0.875d, 0.8125d, 0.875d, 0.9375d) + ); } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt index 9843a2acb..b2ecb1775 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/RotatableMatteryBlock.kt @@ -10,7 +10,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.core.math.BlockRotation import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom -abstract class RotatableMatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : MatteryBlock(properties) { +open class RotatableMatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : MatteryBlock(properties) { init { @Suppress("LeakingThis") registerDefaultState(getStateDefinition().any().setValue(rotationProperty, BlockRotation.SOUTH)) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 0bd6a4775..74e4ef5e8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -361,5 +361,6 @@ object MBlocks { MRegistry.TRITANIUM_STRIPED_STAIRS.registerBlocks(registry) MRegistry.TRITANIUM_STRIPED_SLAB.registerBlocks(registry) MRegistry.TRITANIUM_STRIPED_WALL.registerBlocks(registry) + MRegistry.COMPUTER_TERMINAL.registerBlocks(registry) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt index 258ca4ed1..71673402b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MCreativeTabs.kt @@ -243,6 +243,8 @@ private fun addDecorativeTabItems(consumer: CreativeModeTab.Output) { colored(MItems.CARGO_CRATE_MINECARTS) + all(MRegistry.COMPUTER_TERMINAL.allItems) + all(MRegistry.DECORATIVE_CRATE.allItems) for (color in colorOrder) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 0cfc227f3..857d79ad5 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -685,5 +685,6 @@ object MItems { MRegistry.TRITANIUM_STRIPED_STAIRS.registerItems(registry) MRegistry.TRITANIUM_STRIPED_SLAB.registerItems(registry) MRegistry.TRITANIUM_STRIPED_WALL.registerItems(registry) + MRegistry.COMPUTER_TERMINAL.registerItems(registry) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index bdb7615ad..cd582a85f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -44,6 +44,7 @@ import ru.dbotthepony.mc.otm.block.decorative.TritaniumPressurePlate import ru.dbotthepony.mc.otm.capability.matteryEnergy import ru.dbotthepony.mc.otm.client.MatteryGUI import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu +import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.data.DecimalProvider @@ -53,6 +54,7 @@ import ru.dbotthepony.mc.otm.matter.IMatterFunction import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.StripedColoredDecorativeBlock +import ru.dbotthepony.mc.otm.shapes.BlockShapes import ru.dbotthepony.mc.otm.storage.StorageStack import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger @@ -126,6 +128,14 @@ object MRegistry { .destroyTime(2.5f) } + val COMPUTER_TERMINAL = DecorativeBlock.rotatable("computer_terminal", BlockShapes.COMPUTER_TERMINAL, BlockRotationFreedom.HORIZONTAL) { + BlockBehaviour.Properties.of() + .mapColor(it?.mapColor ?: MapColor.COLOR_LIGHT_BLUE) + .sound(SoundType.METAL) + .explosionResistance(15f) + .destroyTime(1.5f) + } + val TRITANIUM_STAIRS = DecorativeBlock(MNames.TRITANIUM_STAIRS) { StairBlock( { TRITANIUM_BLOCK.allBlocks[it]!!.defaultBlockState() }, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt index f5ca9181c..03a4dae6d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt @@ -1,16 +1,27 @@ package ru.dbotthepony.mc.otm.registry.objects import com.google.common.collect.Streams +import net.minecraft.core.BlockPos import net.minecraft.world.item.BlockItem import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item +import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockBehaviour +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.shapes.CollisionContext +import net.minecraft.world.phys.shapes.VoxelShape import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.RegistryObject +import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.collect.SupplierMap +import ru.dbotthepony.mc.otm.core.get +import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.registry.MRegistry +import ru.dbotthepony.mc.otm.shapes.BlockShape +import ru.dbotthepony.mc.otm.shapes.BlockShapes import java.util.stream.Stream /** @@ -52,5 +63,33 @@ class DecorativeBlock( Block(provider.invoke(it)) } } + + fun rotatable(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock { + return DecorativeBlock(baseName) { + RotatableMatteryBlock(provider.invoke(it)) + } + } + + fun rotatable(baseName: String, shape: BlockShape, rotationFreedom: BlockRotationFreedom, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock { + return DecorativeBlock(baseName) { + object : RotatableMatteryBlock(provider.invoke(it)) { + override fun rotationFreedom(): BlockRotationFreedom { + return rotationFreedom + } + + private val shapes = getShapeForEachState(rotationProperty) { shape.rotateFromNorth(it[rotationProperty]).computeShape() } + + @Suppress("override_deprecation") + override fun getShape( + state: BlockState, + blockGetter: BlockGetter, + pos: BlockPos, + context: CollisionContext + ): VoxelShape { + return shapes[state]!! + } + } + } + } } } diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json b/src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json similarity index 100% rename from src/main/resources/assets/overdrive_that_matters/models/block/decorative/computer_terminal.json rename to src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/black.png new file mode 100644 index 0000000000000000000000000000000000000000..83954e68d2e6ffafb0c2f48bb53a35b708f62c41 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YN2T6y)TT zw6(QOO-+l6it6j@#l*y<>&pIuk(rlMJ(W!(0VuTI)5S4FxSRc1x0zPk_@ep!1#NCG8E{qVuF>+z(vanqTvyK1WgV0*90XhvMAt=RA8` zG?TsruDrO(L1-gK>h4bGGZC#_El2GxxtL${iaZni$}2O;E8#=L8ZO?92Jvpg8?S#) zDwgZJ%DK}}<=kT)DZ6(yOv^a*V>`^Ya6HKUJ&iv*B`VnKH50SrqmN4SZnrNuQL8Ez znE6$G?Z5L!{L6B;<{p^7-n$g&bk!2qh?11Vl2ohYqEsNoU}RuqqHAENYhWB=U}|M# zY-MV$ZD3$!V9=}Lkc^@sH$NpatrE9}Kb1f312t&CZ79jiO)V}-%q>9HV`yw;U}NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YSA0`ix9w zXlrYmnwl0B71h_*i;0P8>o))Y|KC@{DFdj8u_VYZn8D%MjWiG^$=lt9E91hKFd&Ds zz$3Dlfr0NZ2s0kfUy%Y7WH0gbb!C6S$jr;Bp30_?02Es9>EaloasF(-A>UyI9@m{r zfff$EQ&wqDyCuoVC&1|!(D_dClJ$jn}^? z70dNq<=knga_%vYl-;`;rez%Zu^nbxI3DEwp2nY@5*6(Anu*!*(MP3ux7!z-s8tmU z%>1gp_TTv<{$;saa}P{k?_COXx@w7QL`h0wNvc(HQ7VvPFfuSQ(KRsCH82h_Ftsu= zwlX!>HZZUNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YLK@RSI0y zwY9ZPO-+l6it6j@#l*xCZIu51|F6_qJQt{lu_VYZn8D%MjWiG^$=lt9E91hKFd&Ds zz$3Dlfr0NZ2s0kfUy%Y7WH0gbb!C6S$jr;Bp30_?02Es9>EaloasF(-A>UyI9@m{r zfff$EQ&wqDyCuoVC&1|!(D_dClJ$jn}^? z70dNq<=knga_%vYl-;`;rez%Zu^nbxI3DEwp2nY@5*6(Anu*!*(MP3ux7!z-s8tmU z%>1gp_TTv<{$;saa}P{k?_COXx@w7QL`h0wNvc(HQ7VvPFfuSQ(KRsCH82h_Ftsu= zwlX!>HZZUNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YL?(T1A`t zw6(QOO-+l6it6j@#l*yfimLzr|3CNErYxW$#*!evUYu8a#`!hjsk z0*}aI1_r*vAk26?e?s4dYbIvLM<12u-ELoSqE=Nb zF!QVW+JEPd_?P8w%{?%Ey>}_l>8d5J5hW>!C8<`)MX5lF!N|bKMAyJj*T6W$z|_jf z*viyg+rYrez@S&fAsIzOZhlH;S|x4`e=2|62WrrO+fb63n_66wm|K9X$I#fyz|zXt W5@Lz}j6Ib=Jq(_%elF{r5}E*!TCvXn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..da9cafd18457473df05b169dc8131ab2b9b905cd GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YL3&9Bdt2 zw6(QOO-+l6it6j@#l*x+EUf?k|F6H@;4e@SV@Z%-FoVOh8)+a;lDE4HSH^`eVL%RN zfk$L90|Vb-5N14{zaj-F$X?><>&pIuk(rlMO^8wA8&GJyr;B5V#`&}ThJ1$=cwBcf z1zI@tPFbZr?Up1bp8%&{K<7KjOWGT@MdwM&xF5K-HNWOZeU75!1r8|(4#m0O&w2K? zXeNCLTzPSmgV08f)ZLxVXChj=T8`RXaxuT?6?rE3l~-nxSHg#gHC((I4dUH~H(vjq zR4mtbm2;<|%DKlpQg-iZn3i$q$99-);dqeydm4XsN>s4dYbIvLM<12u-ELoSqE=Nb zF!QVW+JEPd_?P8w%{?%Ey>}_l>8d5J5hW>!C8<`)MX5lF!N|bKMAyJj*T6W$z|_jf z*viyg+rYrez@S&fAsIzOZhlH;S|x4`e=2|62WrrO+fb63n_66wm|K9X$I#fyz|zXt X0%FO__uJ0`^)Pt4`njxgN@xNADlxI2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/green.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9bf139b87c38824751880c06e81c68ac501ca GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YN=aB!jZ0 zwY9ZPO-+l6it6j@#l*ziW5oae|9{Gg?=MghV@Z%-FoVOh8)+a;lDE4HSH^`eVL%RN zfk$L90|Vb-5N14{zaj-F$X?><>&pIuk(rlMJ(W!(0VuTI)5S4FxSRc1x0zPk_@ep!1#NCG8E{qVuF>+z(vanqTvyK1WgV0*90XhvMAt=RA8` zG?TsruDrO(L1-gK>h4bGGZC#_El2GxxtL${iaZni$}2O;E8#=L8ZO?92Jvpg8?S#) zDwgZJ%DK}}<=kT)DZ6(yOv^a*V>`^Ya6HKUJ&iv*B`VnKH50SrqmN4SZnrNuQL8Ez znE6$G?Z5L!{L6B;<{p^7-n$g&bk!2qh?11Vl2ohYqEsNoU}RuqqHAENYhWB=U}|M# zY-MV$ZD3$!V9=}Lkc^@sH$NpatrE9}Kb1f312t&CZ79jiO)V}-%q>9HV`yw;U}NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YQzDp0L_@ zU0Yk*)YP=7sHncaUQA5PXy&f}|NrY;jn4rpVk`;r3ubV5b|VeMN%D4g;mWx1B@D>n zEbxddW?SIbemOD^UYy&}&9zw*jV@=Ev+v4)E`qd~me@W$)k zlZxf~u5#`)R5|yUN6PM94bw6X{n!q(EgTPWe^2AjPKgTkddt+@xLulFtmI$gEIHKHUXu_VKYh_7?@fa z8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{`#=pEa2rZ8b5n~;5_1cX^%xpk8CY5w XTR<#%`F{IZpdJQKS3j3^P6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YKXpDmptG zw6(QOO-+l6it6j@#l*zQ%k%&L|G)V7d|RL*#*!evUYu8a#`!hjsk z0*}aI1_r*vAk26?e?MJH=xjZPZ!4!jq_*w4fzf$@VM?| z3bb(Oow7=M+AT>=J^@a@fX;W4m$Wx*i_VjlaX)ZvYktj-`W!{c3mj4o9Ex+lpY!Z( z(MD(6l^m2;1Ir0m|+FfHTIkL@tq!to&Y_cZ?Ol&D~@*G$Zgk3K5RyWPIvM6Ie= zVCGl#wg1i^@h{8WntNdSdhb%8(^X4cBT7;dOH!?pi&B9UgOP!eiLQa6u7PogfvJ^| zv6ZR0wt<0_fkCf|Lo$kn-29Zxv`X9>{#5?B57eLmx1l66H?_DVF}DC&kD;-Zfu)tP X1;mn<@3)@?>S6G7^>bP0l+XkKYGt$? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..327a637728e2d53c93aa15c920283362f945d922 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YMW}i{-+)5vJzX3_G|r#xH{?64z~j1; zDbT{9cgia5X}2Uf`2;xq0y^JGUeeyMEjmwH#{Iyxt@$-S>T?t&FK|dXa463Ge$KPE zMKkG3;L3}e9E3JT})pFGCl8gC8ugEjOue>soyb?Y{tl{F#Xb|rsUNbQ}KKiIM?{@ow6Sb;h zftg>`*Zw%B{XPFF2)jVMV;EJ?LWE=mPb3`PbNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YMj4F4%6j zMq69k)YP=7sHncaUQA4Ep6QhT|No2jERO*yVk`;r3ubV5b|VeMN%D4g;mWx1B@D>n zEbxddW?SIbemOD^UYy&}&9zw*jV@=Ev+v4)E`qd~me@W$)k zlZxf~u5#`)R5|yUN6PM94bw6X{n!q(EgTPWe^2AjPKgTkddt+@xLulFtmI$gEIHKHUXu_VKYh_7?@fa z8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{`#=pEa2rZ8b5n~;5_1cX^%xpk8CY5w XTR<#%`F{IZpdJQKS3j3^P6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YKki@qH}f z*VfiHH8m|NDypxq7ZVe^ki`4{|Noj`w@9EO#*!evUYu8a#`!hjsk z0*}aI1_r*vAk26?e?MJH=xjZPZ!4!jq_*w4fzf$@VM?| z3bb(Oow7=M+AT>=J^@a@fX;W4m$Wx*i_VjlaX)ZvYktj-`W!{c3mj4o9Ex+lpY!Z( z(MD(6l^m2;1Ir0m|+FfHTIkL@tq!to&Y_cZ?Ol&D~@*G$Zgk3K5RyWPIvM6Ie= zVCGl#wg1i^@h{8WntNdSdhb%8(^X4cBT7;dOH!?pi&B9UgOP!eiLQa6u7PogfvJ^| zv6ZR0wt<0_fkCf|Lo$kn-29Zxv`X9>{#5?B57eLmx1l66H?_DVF}DC&kD;-Zfu)tP X1;mn<@3)@?>S6G7^>bP0l+XkKYhSYG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d746097c915acc77ccf416c867dddfc19ddf69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YR_P&w1am zTw7b))YP=7sHncaUQA5vT-k*G|Nl4jUzGzYVk`;r3ubV5b|VeMN%D4g;mWx1B@D>n zEbxddW?SIbemOD^UYy&}&9zw*jV@=Ev+v4)E`qd~me@W$)k zlZxf~u5#`)R5|yUN6PM94bw6X{n!q(EgTPWe^2AjPKgTkddt+@xLulFtmI$gEIHKHUXu_VKYh_7?@fa z8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{`#=pEa2rZ8b5n~;5_1cX^%xpk8CY5w XTR<#%`F{IZpdJQKS3j3^P6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YP(+W*4b0 z)7I8DH8m|NDypxq7ZVdpQt1Ex|NrlswPrv?j3q&S!3+-1Zlr-YN#5=*Tp1U>gaJ96 z1s;*b3=DjSL74G){)!Z!AbW|YuPgftMrK}4^;9;E1fbA*PZ!4!jq_*w4fzf$@VM?| z3bb(Oow7=M+AT>=J^@a@fX;W4m$Wx*i_VjlaX)ZvYktj-`W!{c3mj4o9Ex+lpY!Z( z(MD(6l^m2;1Ir0m|+FfHTIkL@tq!to&Y_cZ?Ol&D~@*G$Zgk3K5RyWPIvM6Ie= zVCGl#wg1i^@h{8WntNdSdhb%8(^X4cBT7;dOH!?pi&B9UgOP!eiLQa6u7PogfvJ^| zv6ZR0wt<0_fkCf|Lo$kn-29Zxv`X9>{#5?B57eLmx1l66H?_DVF}DC&kD;-Zfu)tP X1;mn<@3)@?>S6G7^>bP0l+XkK`e?I1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/red.png new file mode 100644 index 0000000000000000000000000000000000000000..8f04ce6ed96ae3046eecfbb9d79840004be482f8 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YSSFYu8a#`!hjsk z0*}aI1_r*vAk26?e?s4dYbIvLM<12u-ELoSqE=Nb zF!QVW+JEPd_?P8w%{?%Ey>}_l>8d5J5hW>!C8<`)MX5lF!N|bKMAyJj*T6W$z|_jf z*viyg+rYrez@S&fAsIzOZhlH;S|x4`e=2|62WrrO+fb63n_66wm|K9X$I#fyz|zXt W5@Lz}j6Ib=Jq(_%elF{r5}E*h96#DJy;uvCa z`t78>xkn6m+~)J_7F4jv$!qa`D7xn&Z-KVT=_NZwx44AuXtU%9SggjHd%R_Gh~{U( z0LR*@KaGcG?lt1j=wMP`(9W3DE1IE@(Ef8lvVxnGt{I!VaWQ+LuS@-Yp|Y-TCsuAQ zS5{X3dRu7f{3X^+r!Ae{S5*|WhChF|GQMNi6W7$_otj}=*41clRMeW#@RGScULAAs+q9i4;B-JXpC>2OC7#SFu=o%R68W@Kdm|7VbTbY_`8yHv_81$+* zB%^4^%}>cptHiD0PvwvMKn)sj8%i>BQ;SOya|@957#dp{SXvodKrDIre*0OV9tKZW KKbLh*2~7a7$jYz) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..86ba22a649028b1565668ad8aa556fb7f88841d8 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhI)YP7DQ~YsQ zSzBA%)YP=7sHncaUQA5v+Df_q|Nl#fHS7Z_Vk`;r3ubV5b|VeMN%D4g;mWx1B@D>n zEbxddW?SIbemOD^UYy&}&9zw*jV@=Ev+v4)E`qd~me@W$)k zlZxf~u5#`)R5|yUN6PM94bw6X{n!q(EgTPWe^2AjPKgTkddt+@xLulFtmI$gEIHKHUXu_VKYh_7?@fa z8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{`#=pEa2rZ8b5n~;5_1cX^%xpk8CY5w XTR<#%`F{IZpdJQKS3j3^P6i6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_base_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5b5c9fd5ff9d928f3f733f66e59a0a795374b6 GIT binary patch literal 935 zcmV;Y16cftP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m?d01m?e$8V@)00007bV*G`2j~F<4G9`OZe(!)00E;(L_t(o!|heQu7e;LJrE~5 znJ;P6!9JCXuiz_m_7(bWu5A~a5H<#h;Vu^fUTl?`+{Kd^&f$YqRfQDXZZ~7! zi=uFLDJ6WnKL>#0@yPsnW?%9=cSa(D5W+ynzb6pVm*G1qHWn@JwHat6s+qyvsF`Bf8Q0fUDvs%swylQ zqk7X?n>EhIafGF9Qw@Bp=2T=Ux7wEA_-E_^>;dcn{Cfa9egJECOAL^ziuM2i002ov JPDHLkV1frnti1pL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/black.png new file mode 100644 index 0000000000000000000000000000000000000000..c5412450c656627232fe6d0336a4d9da715900b7 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHf?WEB4Y|1U4E zEFmE+CMJ3N_H9v72{AFTkdTmsgoKZ|UCKa3j3q&S!3+-1Zlr-YN#5=*OljOTDL@Wq zfk$L90|Vb-5N14{zXBx4UgGKN%Kn0pnU_1Fa7V znM_>bv$7S7{5G~8IkS`X*_M_wdu(1ROly4?`1Kw8k6YZ2j}@soGQ>Iq9jIF38c~vx zSdwa$T$Bo=7>o>zOmqzlbq$O|3{0(zjIB(~wG9lc3=Dcz9FkEqgTe~DWM4fw{fC> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..5982686e9e37fec2c5df6a7c4b41777d4654c912 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHho4JZ8n|KHej zwuV-_!@hljQC0!j#5clLF*$ z7I;J!GcfQS24TkI`71zz>?NMQuIw)unRz*NTQ4810}4&`ba4#PIKTGXMP4RFo`%FQ z2Q>k8g`9+}M-1VQS#}(}%4o8SDaT>?l%nYz-xr8K{(nth*D-VVXTRxYVcI7}KJYPo z6Vs|-{LgvDOG3bpQQF}MpNwE{qt=vu$>r8JUhTA6{djW;^UL}Iu^q}XY;PQ9J<$4~ zkjca)J}XNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHg*oK*k+|6k;; z5oIACVj_F{_H91{X)!UekdTmsgoGNy)9FA(j3q&S!3+-1Zlr-YN#5=*OljOTDL@Wq zfk$L90|Vb-5N14{zXBx4UgGKN%Kn0pnU_1Fa7V znM_>bv$7S7{5G~8IkS`X*_M_wdu(1ROly4?`1Kw8k6YZ2j}@soGQ>Iq9jIF38c~vx zSdwa$T$Bo=7>o>zOmqzlbq$O|3{0(zjIB(~wG9lc3=Dcz9FkEqgTe~DWM4f(^aHt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..009b412a1154a73f6d93cef3c4be6cc4947ad9be GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHfiYTN(+|1Z`y zQ824mAUXT??c4m($zoz+At50N2?^pykIV%sVk`;r3ubV5b|VeMN%D4gVM^n!Nda;= z3p^r=85sBugD~Uq{1qTU_7YEDSN0c-%)Fest(Onh0fnY|x;TbtoL_tHA}^C7PeWpu zgPMT4LQX=~BZlzDEISTfWi;8vl;f~`O3`$V?+e5q|G%cM>zKLwv)^>HFzu5fANUx) ziD^|Z{^va7B_ZI)DD7~BPe!n}QEN)S#ks;O@=s?vH*NBpo z#FA92u5DmoWnj>&;*gA@AvZrIGp!Q0hCh`* v?gKSwz-=hW%uOvWNz5%k)?;XFWngJ#VhXXO>F<3JpdJQKS3j3^P6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHfKZ5{vr|8M8y zW@uurYhZl)_H8X)12HkNkdTmsgoLdVZNh*a%WK%uFgE{-7@=hvRQ$jhY2(~ubE zpeCTMkdu)0h#~wj%Z`Ir8BKOE^I#kO#7tB2R?>x zVpA8#&Uepz22wnJHl?Ty2%2U;H# zGMTudQ4z|_jf*viyg+rYrez@S&fAsIzOZhlH;S|x4`e=2|6 u2WrrO+fb63n_66wm|K9X$I#fyz|zXZ6kNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhwQl*a%WK%uFgE{-7@=hvRQ$jhY2(~ubE zpeCTMkdu)0h#~wj%Z`Ir8BKOE^I#kO#7tB2R?>x zVpA8#&Uepz22wnJHl?Ty2%2U;H# zGMTuKYh_7?@fa8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{ v`#=pEa2rZ8b5n~;5_1cX^%xpk8CY7Gm_jUR`g>mlsE5JR)z4*}Q$iB}rn;m} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa096ec1f78833b38e2678514bb5826d09efa75 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHhASDg9(|G)K? z+j{-$v|AV5zI|JxdYYJ+SV%}nLPEmDsef#NiWp0R{DK)Ap4~_Tagw~pEuc{_Hp1EKK{P$Ok@# zZ(>>%jQ=^$cu5HOF-kie;gb>UZPc35FS*?M#;cuHs~>MJVSZU(AhttUhV6~RtOr^j z6f&8(#AjtI7Wr*#J#uCz>$5E_XZF~I7Q wkNZFk8gLs*GILXlOA>Pnko6cETNzkdnV3Q>Y5IF#1gM9>)78&qol`;+02UXh^8f$< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0d35bccc3d8586d8be08e857629cfa232a488f GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHgjnyUW)|KHQo zoS&bOo}PI7_U(j(NHH<7kdTmsgoNa;(er_d7)yfuf*Bm1-ADs*lDyqrn9{gwQh*%J z0*}aI1_r*vAk26?e+5X8y~NYkmHh=HGcTuZ>*a%WK%uFgE{-7@=hvRQ$jhY2(~ubE zpeCTMkdu)0h#~wj%Z`Ir8BKOE^I#kO#7tB2R?>x zVpA8#&Uepz22wnJHl?Ty2%2U;H# zGMTuKYh_7?@fa8C#i}Ya19?85s1cI3%NJ$jwj5OsmAL;ZNm{ v`#=pEa2rZ8b5n~;5_1cX^%xpk8CY7Gm_jUR`g>mlsE5JR)z4*}Q$iB}WpbzD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..a9148179c210116c92277aa38a734d80901b2e29 GIT binary patch literal 527 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf7e4819c30dde7915d97403f4accea3f0baf81 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%~y3;tHf+?^OK%|No!k zDktX2?3yff`}XZM9TH+<>&pIuk(rlMxApSDI-t;0PZ!4!jq_{IUF2m_zm0Xkxq!^40j7)S540R2RLkvuJ&9w~-tPBi#RUDF0H00)|WTsW(*6^qD w$9FVdQ&MBb@0LC+?W&i*H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/computer_screen_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..067bd88103637ae3ccf32b1ceaeaa7afd2d36403 GIT binary patch literal 800 zcmV+*1K<3KP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m?d01m?e$8V@)00007bV*G`2j~F<4G9?2U2&wqEL9l1~!-(dl2ry z%oYI3vQ*!4@;Py9V^72wvl>@bmAAjeg~+yw$B3jvhMSS?z2D0S+};6c!Zc0(>Fm%S zu9v>mDL6_ZR#*xV0cPG^aBp0;CN!asnQ_&}s$xp$RO}446wqIRF$PW3EQ6!Tec#(> z3?BlikxPUmjMZ9y__fwzVaks(j}pEN4wV(ZA80^o!0cpZGj%rpq z?;|3oe%`)x3c})U?R?93$q6hANKc$x2V!lPbU{oYc4BGUPj|qPh>;;8(Y1)Dpl#dd eXY^kL9=rhUe2y?iCs_>u0000 Date: Wed, 3 Jan 2024 23:50:05 +0700 Subject: [PATCH 14/37] Subscribe to these vents only when running client --- src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index cd582a85f..9ab9f2306 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -48,6 +48,7 @@ import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.data.DecimalProvider +import ru.dbotthepony.mc.otm.isClient import ru.dbotthepony.mc.otm.item.weapon.EnergySwordItem import ru.dbotthepony.mc.otm.matter.AbstractRegistryAction import ru.dbotthepony.mc.otm.matter.IMatterFunction @@ -291,8 +292,8 @@ object MRegistry { bus.addListener(this::initializeCommon) bus.addListener(MStats::registerVanilla) bus.addListener(this::registerEvent) - bus.addListener(this::registerItemColorHandlers) - bus.addListener(this::registerItemDecorators) + if (isClient) bus.addListener(this::registerItemColorHandlers) + if (isClient) bus.addListener(this::registerItemDecorators) MCreativeTabs.initialize(bus) From 1e8aecb5d736d49f94f16ab04f90c75cf4ded86b Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 00:00:06 +0700 Subject: [PATCH 15/37] Maintain inner list of decorative blocks to register --- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 15 +---- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 15 +---- .../dbotthepony/mc/otm/registry/MRegistry.kt | 55 ++++++++++++------- .../objects/ColoredDecorativeBlock.kt | 6 +- .../objects/IBlockItemRegistryAcceptor.kt | 10 ++++ .../objects/StripedColoredDecorativeBlock.kt | 6 +- 6 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/IBlockItemRegistryAcceptor.kt diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 74e4ef5e8..9e560c112 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -348,19 +348,6 @@ object MBlocks { ) } init { - MRegistry.INDUSTRIAL_GLASS.registerBlocks(registry) - MRegistry.INDUSTRIAL_GLASS_PANE.registerBlocks(registry) - MRegistry.UNREFINED_FLOOR_TILES.registerBlocks(registry) - MRegistry.FLOOR_TILES.registerBlocks(registry) - MRegistry.FLOOR_TILES_STAIRS.registerBlocks(registry) - MRegistry.FLOOR_TILES_SLAB.registerBlocks(registry) - MRegistry.VENT.registerBlocks(registry) - MRegistry.VENT_ALTERNATIVE.registerBlocks(registry) - MRegistry.DECORATIVE_CRATE.registerBlocks(registry) - MRegistry.TRITANIUM_STRIPED_BLOCK.registerBlocks(registry) - MRegistry.TRITANIUM_STRIPED_STAIRS.registerBlocks(registry) - MRegistry.TRITANIUM_STRIPED_SLAB.registerBlocks(registry) - MRegistry.TRITANIUM_STRIPED_WALL.registerBlocks(registry) - MRegistry.COMPUTER_TERMINAL.registerBlocks(registry) + MRegistry.registerBlocks(registry) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 857d79ad5..b8328cf96 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -672,19 +672,6 @@ object MItems { val CHEST_UPGRADER: Item by registry.register(MNames.CHEST_UPGRADER) { ChestUpgraderItem() } init { - MRegistry.INDUSTRIAL_GLASS.registerItems(registry) - MRegistry.INDUSTRIAL_GLASS_PANE.registerItems(registry) - MRegistry.UNREFINED_FLOOR_TILES.registerItems(registry) - MRegistry.FLOOR_TILES.registerItems(registry) - MRegistry.FLOOR_TILES_STAIRS.registerItems(registry) - MRegistry.FLOOR_TILES_SLAB.registerItems(registry) - MRegistry.VENT.registerItems(registry) - MRegistry.VENT_ALTERNATIVE.registerItems(registry) - MRegistry.DECORATIVE_CRATE.registerItems(registry) - MRegistry.TRITANIUM_STRIPED_BLOCK.registerItems(registry) - MRegistry.TRITANIUM_STRIPED_STAIRS.registerItems(registry) - MRegistry.TRITANIUM_STRIPED_SLAB.registerItems(registry) - MRegistry.TRITANIUM_STRIPED_WALL.registerItems(registry) - MRegistry.COMPUTER_TERMINAL.registerItems(registry) + MRegistry.registerItems(registry) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 9ab9f2306..636762b46 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -14,6 +14,7 @@ import net.minecraft.world.entity.ai.village.poi.PoiType import net.minecraft.world.entity.ai.village.poi.PoiTypes import net.minecraft.world.item.DyeColor import net.minecraft.world.item.DyeableArmorItem +import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.* @@ -29,6 +30,7 @@ import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent import net.minecraftforge.fml.loading.FMLEnvironment +import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.NewRegistryEvent import net.minecraftforge.registries.RegisterEvent import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -54,6 +56,7 @@ import ru.dbotthepony.mc.otm.matter.AbstractRegistryAction import ru.dbotthepony.mc.otm.matter.IMatterFunction import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock +import ru.dbotthepony.mc.otm.registry.objects.IBlockItemRegistryAcceptor import ru.dbotthepony.mc.otm.registry.objects.StripedColoredDecorativeBlock import ru.dbotthepony.mc.otm.shapes.BlockShapes import ru.dbotthepony.mc.otm.storage.StorageStack @@ -80,7 +83,7 @@ import ru.dbotthepony.mc.otm.triggers.ShockwaveDamageMobTrigger import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger -object MRegistry { +object MRegistry : IBlockItemRegistryAcceptor { private val features = RegistryDelegate>("android_features") val ANDROID_FEATURES by features val ANDROID_FEATURES_LOCATION get() = features.location @@ -109,7 +112,17 @@ object MRegistry { features.build(event) } - val CARGO_CRATES = DecorativeBlock(MNames.CARGO_CRATE, ::CargoCrateBlock) + private val decorativeBlocks = ArrayList() + + override fun registerItems(registry: DeferredRegister) { + decorativeBlocks.forEach { it.registerItems(registry) } + } + + override fun registerBlocks(registry: DeferredRegister) { + decorativeBlocks.forEach { it.registerBlocks(registry) } + } + + val CARGO_CRATES = DecorativeBlock(MNames.CARGO_CRATE, ::CargoCrateBlock).also { decorativeBlocks.add(it) } val DECORATIVE_CRATE = DecorativeBlock.simple(MNames.DECORATIVE_CRATE) { BlockBehaviour.Properties.of() @@ -118,7 +131,7 @@ object MRegistry { .requiresCorrectToolForDrops() .explosionResistance(10f) .destroyTime(1f) - } + }.also { decorativeBlocks.add(it) } val TRITANIUM_BLOCK = DecorativeBlock.simple(MNames.TRITANIUM_BLOCK) { BlockBehaviour.Properties.of() @@ -127,7 +140,7 @@ object MRegistry { .requiresCorrectToolForDrops() .explosionResistance(80f) .destroyTime(2.5f) - } + }.also { decorativeBlocks.add(it) } val COMPUTER_TERMINAL = DecorativeBlock.rotatable("computer_terminal", BlockShapes.COMPUTER_TERMINAL, BlockRotationFreedom.HORIZONTAL) { BlockBehaviour.Properties.of() @@ -135,24 +148,24 @@ object MRegistry { .sound(SoundType.METAL) .explosionResistance(15f) .destroyTime(1.5f) - } + }.also { decorativeBlocks.add(it) } val TRITANIUM_STAIRS = DecorativeBlock(MNames.TRITANIUM_STAIRS) { StairBlock( { TRITANIUM_BLOCK.allBlocks[it]!!.defaultBlockState() }, BlockBehaviour.Properties.copy(TRITANIUM_BLOCK.allBlocks[it]!!) ) - } + }.also { decorativeBlocks.add(it) } val TRITANIUM_SLAB = DecorativeBlock(MNames.TRITANIUM_SLAB) { SlabBlock(BlockBehaviour.Properties.copy(TRITANIUM_BLOCK.allBlocks[it]!!)) - } + }.also { decorativeBlocks.add(it) } val TRITANIUM_WALL = DecorativeBlock(MNames.TRITANIUM_WALL) { WallBlock(BlockBehaviour.Properties.copy(TRITANIUM_BLOCK.allBlocks[it]!!)) - } + }.also { decorativeBlocks.add(it) } - val TRITANIUM_PRESSURE_PLATE = DecorativeBlock(MNames.TRITANIUM_PRESSURE_PLATE, ::TritaniumPressurePlate) + val TRITANIUM_PRESSURE_PLATE = DecorativeBlock(MNames.TRITANIUM_PRESSURE_PLATE, ::TritaniumPressurePlate).also { decorativeBlocks.add(it) } val VENT = DecorativeBlock.simple(MNames.VENT) { BlockBehaviour.Properties.of() @@ -161,7 +174,7 @@ object MRegistry { .requiresCorrectToolForDrops() .explosionResistance(20f) .destroyTime(1.5f) - } + }.also { decorativeBlocks.add(it) } val VENT_ALTERNATIVE = DecorativeBlock.simple(MNames.VENT_ALTERNATIVE) { BlockBehaviour.Properties.of() @@ -170,7 +183,7 @@ object MRegistry { .requiresCorrectToolForDrops() .explosionResistance(20f) .destroyTime(1.5f) - } + }.also { decorativeBlocks.add(it) } val FLOOR_TILES = ColoredDecorativeBlock.simple(MNames.FLOOR_TILES) { BlockBehaviour.Properties.of() @@ -178,25 +191,25 @@ object MRegistry { .sound(SoundType.STONE) .requiresCorrectToolForDrops() .strength(1.5f, 6f) - } + }.also { decorativeBlocks.add(it) } val FLOOR_TILES_STAIRS = ColoredDecorativeBlock(MNames.FLOOR_TILES_STAIRS) { StairBlock( { FLOOR_TILES.blocks[it]!!.defaultBlockState() }, BlockBehaviour.Properties.copy(FLOOR_TILES.blocks[it]!!) ) - } + }.also { decorativeBlocks.add(it) } val FLOOR_TILES_SLAB = ColoredDecorativeBlock(MNames.FLOOR_TILES_SLAB) { SlabBlock(BlockBehaviour.Properties.copy(FLOOR_TILES.blocks[it]!!)) - } + }.also { decorativeBlocks.add(it) } val UNREFINED_FLOOR_TILES = ColoredDecorativeBlock.simple(MNames.UNREFINED_FLOOR_TILES) { BlockBehaviour.Properties.of() .mapColor(it.mapColor) .sound(SoundType.GRAVEL) .strength(1f, 2f) - } + }.also { decorativeBlocks.add(it) } val INDUSTRIAL_GLASS = DecorativeBlock(MNames.INDUSTRIAL_GLASS) { color -> val properties = @@ -218,7 +231,7 @@ object MRegistry { } return@DecorativeBlock GlassBlock(properties) - } + }.also { decorativeBlocks.add(it) } val INDUSTRIAL_GLASS_PANE = DecorativeBlock(MNames.INDUSTRIAL_GLASS_PANE) { color -> val properties = @@ -235,7 +248,7 @@ object MRegistry { } return@DecorativeBlock IronBarsBlock(properties) - } + }.also { decorativeBlocks.add(it) } val TRITANIUM_STRIPED_BLOCK = StripedColoredDecorativeBlock(MNames.TRITANIUM_STRIPED_BLOCK, { colorA, _ -> Block(BlockBehaviour.Properties.of() @@ -244,19 +257,19 @@ object MRegistry { .requiresCorrectToolForDrops() .explosionResistance(80f) .strength(4f)) - }) + }).also { decorativeBlocks.add(it) } val TRITANIUM_STRIPED_STAIRS = StripedColoredDecorativeBlock(MNames.TRITANIUM_STRIPED_STAIRS, { colorA, colorB -> StairBlock({ TRITANIUM_STRIPED_BLOCK.getBlock(colorA, colorB).defaultBlockState() }, BlockBehaviour.Properties.copy(TRITANIUM_STRIPED_BLOCK.getBlock(colorA, colorB))) - }) + }).also { decorativeBlocks.add(it) } val TRITANIUM_STRIPED_SLAB = StripedColoredDecorativeBlock(MNames.TRITANIUM_STRIPED_SLAB, { colorA, colorB -> SlabBlock(BlockBehaviour.Properties.copy(TRITANIUM_STRIPED_BLOCK.getBlock(colorA, colorB))) - }) + }).also { decorativeBlocks.add(it) } val TRITANIUM_STRIPED_WALL = StripedColoredDecorativeBlock(MNames.TRITANIUM_STRIPED_WALL, { colorA, colorB -> WallBlock(BlockBehaviour.Properties.copy(TRITANIUM_STRIPED_BLOCK.getBlock(colorA, colorB))) - }) + }).also { decorativeBlocks.add(it) } private fun registerEvent(event: RegisterEvent) { // mojang moment diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt index 6c538bb07..a591fb49c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt @@ -18,7 +18,7 @@ import java.util.EnumMap open class ColoredDecorativeBlock( val baseName: String, private val provider: (DyeColor) -> Block, -) { +) : IBlockItemRegistryAcceptor { var registeredItems = false private set @@ -60,7 +60,7 @@ open class ColoredDecorativeBlock( SupplierMap(MRegistry.DYE_ORDER.map { it to itemMap[it]!! }) } - open fun registerBlocks(registry: DeferredRegister) { + override fun registerBlocks(registry: DeferredRegister) { check(blockMap.isEmpty()) { "( ͡° ͜ʖ ͡°) No. \\(• ε •)/ ( ͠° ل͜ ͡°) ( ͠° ͟ ͟ʖ ͡°) (ง ͠° ͟ل͜ ͡°)ง ( ͡°︺͡°) ('ω')" } MRegistry.DYE_ORDER.forEach { @@ -72,7 +72,7 @@ open class ColoredDecorativeBlock( private val properties = Item.Properties().stacksTo(64) - open fun registerItems(registry: DeferredRegister) { + override fun registerItems(registry: DeferredRegister) { check(itemMap.isEmpty()) { "( ͡° ͜ʖ ͡°) No. \\(• ε •)/ ( ͠° ل͜ ͡°) ( ͠° ͟ ͟ʖ ͡°) (ง ͠° ͟ل͜ ͡°)ง ( ͡°︺͡°) ('ω')" } check(registeredBlocks) { "wtffffff???????????" } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/IBlockItemRegistryAcceptor.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/IBlockItemRegistryAcceptor.kt new file mode 100644 index 000000000..5104597eb --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/IBlockItemRegistryAcceptor.kt @@ -0,0 +1,10 @@ +package ru.dbotthepony.mc.otm.registry.objects + +import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.minecraftforge.registries.DeferredRegister + +interface IBlockItemRegistryAcceptor { + fun registerItems(registry: DeferredRegister) + fun registerBlocks(registry: DeferredRegister) +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt index 5cfe5242e..222bd7e31 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/StripedColoredDecorativeBlock.kt @@ -20,7 +20,7 @@ class StripedColoredDecorativeBlock( val itemFactory: ((colorA: DyeColor, colorB: DyeColor, block: Block) -> Item) = { _, _, block -> BlockItem(block, Item.Properties().stacksTo(64)) } -) { +) : IBlockItemRegistryAcceptor { private val mapBlocks = EnumMap>>(DyeColor::class.java) private val mapItems = EnumMap>>(DyeColor::class.java) @@ -82,7 +82,7 @@ class StripedColoredDecorativeBlock( SupplierList(mapBlocks.flatMap { it.value.values }) } - fun registerItems(registry: DeferredRegister) { + override fun registerItems(registry: DeferredRegister) { for (base in DyeColor.entries) { for (stripe in DyeColor.entries) { if (base == stripe) { @@ -97,7 +97,7 @@ class StripedColoredDecorativeBlock( registeredItems = true } - fun registerBlocks(registry: DeferredRegister) { + override fun registerBlocks(registry: DeferredRegister) { for (base in DyeColor.entries) { for (stripe in DyeColor.entries) { if (base == stripe) { From 0c004aedc5760c0946e188bd24ba9529574f8b95 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 01:06:55 +0700 Subject: [PATCH 16/37] Some unifications regarding item tooltips --- .../mc/otm/datagen/lang/English.kt | 18 +-- .../mc/otm/datagen/lang/Russian.kt | 2 + .../dbotthepony/mc/otm/block/MatteryBlock.kt | 23 +++- .../mc/otm/block/decorative/DevChestBlock.kt | 5 + .../mc/otm/block/decorative/EngineBlock.kt | 12 +- .../block/decorative/TritaniumDoorBlock.kt | 51 +++++++ .../decorative/TritaniumTrapdoorBlock.kt | 50 +++++++ .../block/matter/MatterReconstructorBlock.kt | 5 + .../mc/otm/block/storage/DriveRackBlock.kt | 14 +- .../mc/otm/block/storage/DriveViewerBlock.kt | 14 +- .../mc/otm/block/storage/ItemMonitorBlock.kt | 14 +- .../mc/otm/block/storage/StorageBusBlock.kt | 15 +-- .../mc/otm/block/storage/StorageInterfaces.kt | 29 ++-- .../storage/StoragePowerSupplierBlock.kt | 14 +- .../mc/otm/block/tech/AndroidChargerBlock.kt | 10 +- .../mc/otm/block/tech/AndroidStationBlock.kt | 14 +- .../otm/block/tech/ChemicalGeneratorBlock.kt | 18 +-- .../mc/otm/block/tech/CobblerBlock.kt | 5 + .../mc/otm/block/tech/EnergyServoBlock.kt | 5 + .../mc/otm/block/tech/EssenceStorageBlock.kt | 5 + .../block/tech/GravitationStabilizerBlock.kt | 10 ++ .../otm/block/tech/PhantomAttractorBlock.kt | 7 + .../mc/otm/block/tech/PlatePressBlock.kt | 13 +- .../dbotthepony/mc/otm/core/ITooltippable.kt | 100 ++++++++++++++ .../mc/otm/item/ChestUpgraderItem.kt | 13 +- .../mc/otm/item/EssenceCapsuleItem.kt | 20 +-- .../mc/otm/item/EssenceServoItem.kt | 9 +- .../ru/dbotthepony/mc/otm/item/MatteryItem.kt | 28 ++++ .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 103 ++------------- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 124 ++---------------- 30 files changed, 421 insertions(+), 329 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumDoorBlock.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumTrapdoorBlock.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/core/ITooltippable.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/item/MatteryItem.kt diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 1c6ed54ab..fb1c20267 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -119,6 +119,8 @@ private fun sounds(provider: MatteryLanguageProvider) { private fun misc(provider: MatteryLanguageProvider) { with(provider.english) { + gui("shift_for_more_info", "") + gui("help.slot_filters", "Hold CTRL to setup slot filters") gui("help.slot_charging", "Hold ALT to switch slot charging") @@ -614,19 +616,19 @@ private fun items(provider: MatteryLanguageProvider) { add(MItems.ELECTROMOTOR, "Electromotor") add(MItems.MIRROR_COMPOUND, "Mirror Compound") add(MItems.MIRROR, "Mirror") - add(MItems.MIRROR, "description", "I can clearly see my own reflection in this mirror") + add(MItems.MIRROR, "desc", "I can clearly see my own reflection in this mirror") add(MItems.REINFORCED_TRITANIUM_PLATE, "Reinforced Tritanium Plate") - add(MItems.REINFORCED_TRITANIUM_PLATE, "description", "An armor plate, reinforced to withstand great kinetic forces") + add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "An armor plate, reinforced to withstand great kinetic forces") add(MItems.CARBON_MESH, "Carbon Mesh") add(MItems.GRAVITATIONAL_DISRUPTOR, "Spacetime Equalizer") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description2", "Allows collapse of singularities") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description4", "The explosion %s be contained by %s. Do not even attempt to contain it.") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification", "can not") - add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification2", "anything") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc2", "Allows collapse of singularities") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4", "The explosion %s be contained by %s. Do not even attempt to contain it.") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification", "can not") + add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification2", "anything") add(MItems.MATTER_DUST, "Matter Dust") add(MItems.MATTER_DUST, "desc", "This item is product of failed decomposition or replication attempt") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index db989cc4b..f24fe6dc1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -127,6 +127,8 @@ private fun sounds(provider: MatteryLanguageProvider) { private fun misc(provider: MatteryLanguageProvider) { with(provider.russian) { + gui("shift_for_more_info", "<Удерживайте SHIFT для подробностей>") + gui("help.slot_filters", "Удерживайте CTRL для настройки фильтрации слотов") gui("help.slot_charging", "Удерживайте ALT для переключения зарядки слотов") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt index f6d4459d7..b1174f853 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt @@ -3,6 +3,8 @@ package ru.dbotthepony.mc.otm.block import com.google.common.collect.ImmutableMap import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Object2ObjectFunction +import it.unimi.dsi.fastutil.objects.ObjectIterators +import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.particles.DustParticleOptions @@ -15,6 +17,8 @@ import net.minecraft.world.MenuProvider import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.EntityBlock @@ -28,13 +32,22 @@ import ru.dbotthepony.mc.otm.block.entity.IRedstoneControlled import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity import ru.dbotthepony.mc.otm.block.entity.WorkerState +import ru.dbotthepony.mc.otm.client.isShiftDown +import ru.dbotthepony.mc.otm.client.minecraft +import ru.dbotthepony.mc.otm.core.ITooltippable +import ru.dbotthepony.mc.otm.core.TranslatableComponent +import ru.dbotthepony.mc.otm.core.addAll +import ru.dbotthepony.mc.otm.core.addDescriptionFunctions +import ru.dbotthepony.mc.otm.core.addDescriptionLines import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.component1 import ru.dbotthepony.mc.otm.core.math.component2 import ru.dbotthepony.mc.otm.core.math.component3 +import ru.dbotthepony.mc.otm.core.stream import ru.dbotthepony.mc.otm.core.tagNotNull import ru.dbotthepony.mc.otm.once +import java.util.stream.Stream fun Block.getShapeForEachState(properties: List>, fn: (BlockState) -> VoxelShape): Map { val builder = ImmutableMap.Builder() @@ -71,7 +84,7 @@ fun interface INeighbourChangeListener { ) } -abstract class MatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : Block(properties), INeighbourChangeListener { +open class MatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : Block(properties), INeighbourChangeListener, ITooltippable by ITooltippable.Impl() { override fun setPlacedBy( level: Level, blockPos: BlockPos, @@ -238,9 +251,17 @@ abstract class MatteryBlock(properties: Properties = DEFAULT_PROPERTIES) : Block } } + override fun appendHoverText(itemStack: ItemStack, blockAccessor: BlockGetter?, components: MutableList, tooltipType: TooltipFlag) { + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + assembleDescription(itemStack, components) + } + companion object { val DEFAULT_PROPERTIES: Properties = Properties.of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(25.0f) val DEFAULT_MACHINE_PROPERTIES: Properties = Properties.of().mapColor(MapColor.METAL).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(25.0f) } } +fun T.addSimpleDescription(suffix: String = "", formatting: ChatFormatting = ChatFormatting.GRAY): T { + return addDescriptionFunctions { ObjectIterators.singleton(TranslatableComponent("$descriptionId.desc$suffix").withStyle(formatting)) } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/DevChestBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/DevChestBlock.kt index 3e6c21913..1270389db 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/DevChestBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/DevChestBlock.kt @@ -6,10 +6,15 @@ import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.material.PushReaction import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.entity.decorative.DevChestBlockEntity class DevChestBlock : RotatableMatteryBlock(Properties.of().destroyTime(-1f).explosionResistance(360000f).pushReaction(PushReaction.BLOCK)), EntityBlock { override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity { return DevChestBlockEntity(p_153215_, p_153216_) } + + init { + addSimpleDescription() + } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt index 3ff655cdc..8b2043ef4 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt @@ -20,13 +20,13 @@ import ru.dbotthepony.mc.otm.shapes.BlockShapes class EngineBlock : RotatableMatteryBlock(Properties.of().mapColor(MapColor.COLOR_ORANGE).sound(SoundType.METAL).explosionResistance(14f).destroyTime(2.5f).requiresCorrectToolForDrops().pushReaction(PushReaction.NORMAL)) { override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - p_49818_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.DARK_GRAY)) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + components.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.DARK_GRAY)) } override fun rotationFreedom(): BlockRotationFreedom { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumDoorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumDoorBlock.kt new file mode 100644 index 000000000..943606243 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumDoorBlock.kt @@ -0,0 +1,51 @@ +package ru.dbotthepony.mc.otm.block.decorative + +import net.minecraft.ChatFormatting +import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.block.DoorBlock +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.block.state.properties.BlockSetType +import net.minecraft.world.level.material.PushReaction +import ru.dbotthepony.mc.otm.core.TranslatableComponent + +class TritaniumDoorBlock(val color: DyeColor?) : DoorBlock( + Properties.of() + .mapColor(color ?: DyeColor.LIGHT_BLUE) + .explosionResistance(80f) + .noOcclusion() + .destroyTime(3f) + .pushReaction(PushReaction.DESTROY) + .requiresCorrectToolForDrops(), + BlockSetType.IRON +) { + override fun appendHoverText( + p_49816_: ItemStack, + p_49817_: BlockGetter?, + p_49818_: MutableList, + p_49819_: TooltipFlag + ) { + super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + p_49818_.add(TranslatableComponent("$descriptionId.description0").withStyle(ChatFormatting.DARK_GRAY)) + p_49818_.add(TranslatableComponent("$descriptionId.description1").withStyle(ChatFormatting.DARK_GRAY)) + + if (color != null) { + p_49818_.add(TranslatableComponent("$descriptionId.description2").withStyle(ChatFormatting.DARK_GRAY)) + } + } + + override fun canEntityDestroy( + state: BlockState, + level: BlockGetter, + pos: BlockPos, + entity: Entity + ): Boolean { + return entity !is Zombie && super.canEntityDestroy(state, level, pos, entity) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumTrapdoorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumTrapdoorBlock.kt new file mode 100644 index 000000000..3a1c0de0e --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/TritaniumTrapdoorBlock.kt @@ -0,0 +1,50 @@ +package ru.dbotthepony.mc.otm.block.decorative + +import net.minecraft.ChatFormatting +import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.monster.Zombie +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.block.TrapDoorBlock +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.block.state.properties.BlockSetType +import ru.dbotthepony.mc.otm.core.TranslatableComponent + +class TritaniumTrapdoorBlock(val color: DyeColor?) : TrapDoorBlock( + Properties.of() + .mapColor(color ?: DyeColor.LIGHT_BLUE) + .explosionResistance(80f) + .noOcclusion().destroyTime(3f) + .requiresCorrectToolForDrops() + .isValidSpawn { _: BlockState, _: BlockGetter, _: BlockPos, _: EntityType<*>? -> false }, + BlockSetType.IRON +) { + override fun appendHoverText( + p_49816_: ItemStack, + p_49817_: BlockGetter?, + p_49818_: MutableList, + p_49819_: TooltipFlag + ) { + super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + p_49818_.add(TranslatableComponent("$descriptionId.description0").withStyle(ChatFormatting.DARK_GRAY)) + p_49818_.add(TranslatableComponent("$descriptionId.description1").withStyle(ChatFormatting.DARK_GRAY)) + + if (color != null) { + p_49818_.add(TranslatableComponent("$descriptionId.description2").withStyle(ChatFormatting.DARK_GRAY)) + } + } + + override fun canEntityDestroy( + state: BlockState, + level: BlockGetter, + pos: BlockPos, + entity: Entity + ): Boolean { + return entity !is Zombie && super.canEntityDestroy(state, level, pos, entity) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt index 3452c1ff2..56b036df7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt @@ -11,6 +11,7 @@ import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get @@ -28,6 +29,10 @@ class MatterReconstructorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIE return BlockEntityTicker { _, _, _, pBlockEntity -> if (pBlockEntity is MatterReconstructorBlockEntity) pBlockEntity.tick() } } + init { + addSimpleDescription() + } + private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.MATTER_RECONSTRUCTOR.rotateFromNorth(it[rotationProperty]).computeShape() } @Suppress("override_deprecation") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveRackBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveRackBlock.kt index 8f4ecc071..0d648cd60 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveRackBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveRackBlock.kt @@ -39,14 +39,14 @@ class DriveRackBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Entity } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.DRIVE_RACK.rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveViewerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveViewerBlock.kt index 03a0bb47c..f0c35ec79 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveViewerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/DriveViewerBlock.kt @@ -50,14 +50,14 @@ class DriveViewerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Enti } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } override fun getStateForPlacement(context: BlockPlaceContext): BlockState { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt index 32dd33264..8944f7265 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt @@ -39,14 +39,14 @@ class ItemMonitorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Enti } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.ITEM_MONITOR.rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageBusBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageBusBlock.kt index 568ec92e9..1f5f3f58e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageBusBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageBusBlock.kt @@ -20,7 +20,6 @@ import net.minecraft.world.phys.shapes.Shapes import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.CableBlock import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock -import ru.dbotthepony.mc.otm.block.StorageCableBlock import ru.dbotthepony.mc.otm.block.entity.MatteryPoweredBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageBusBlockEntity import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage @@ -55,14 +54,14 @@ class StorageBusBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Entit } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } override fun createBlockStateDefinition(builder: StateDefinition.Builder) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageInterfaces.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageInterfaces.kt index aaef6b7f4..243af2941 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageInterfaces.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StorageInterfaces.kt @@ -20,7 +20,6 @@ import net.minecraft.world.phys.shapes.Shapes import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.CableBlock import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock -import ru.dbotthepony.mc.otm.block.StorageCableBlock import ru.dbotthepony.mc.otm.block.entity.MatteryPoweredBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageExporterBlockEntity import ru.dbotthepony.mc.otm.block.entity.storage.StorageImporterBlockEntity @@ -80,14 +79,14 @@ class StorageImporterBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState { @@ -138,14 +137,14 @@ class StorageExporterBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } override fun getTicker( diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StoragePowerSupplierBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StoragePowerSupplierBlock.kt index 0f756e32e..18562a541 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StoragePowerSupplierBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/StoragePowerSupplierBlock.kt @@ -39,14 +39,14 @@ class StoragePowerSupplierBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTI } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidChargerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidChargerBlock.kt index 5b3afa5ef..432923221 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidChargerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidChargerBlock.kt @@ -139,12 +139,12 @@ class AndroidChargerBlock : RotatableMatteryBlock(Properties.of().destroyTime(2. } } - override fun appendHoverText(p_49816_: ItemStack, p_49817_: BlockGetter?, p_49818_: MutableList, p_49819_: TooltipFlag) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + override fun appendHoverText(itemStack: ItemStack, blockAccessor: BlockGetter?, components: MutableList, tooltipType: TooltipFlag) { + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) - p_49818_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + components.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState(listOf(rotationProperty, PART)) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt index 962af67b5..fcc2b1996 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt @@ -52,14 +52,14 @@ class AndroidStationBlock : MatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBloc } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - WorkerEnergyStorage.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryPoweredBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + WorkerEnergyStorage.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryPoweredBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } override fun getShape( diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/ChemicalGeneratorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/ChemicalGeneratorBlock.kt index 3ba037ad4..48e4ca6ee 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/ChemicalGeneratorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/ChemicalGeneratorBlock.kt @@ -1,10 +1,7 @@ package ru.dbotthepony.mc.otm.block.tech -import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos -import net.minecraft.nbt.CompoundTag import net.minecraft.network.chat.Component -import net.minecraft.world.item.BlockItem import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag import net.minecraft.world.level.BlockGetter @@ -19,18 +16,11 @@ import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock -import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.ChemicalGeneratorBlockEntity -import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.capability.energy.GeneratorEnergyStorage -import ru.dbotthepony.mc.otm.capability.energy.ItemEnergyStorageImpl -import ru.dbotthepony.mc.otm.container.MatteryContainer -import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.get -import ru.dbotthepony.mc.otm.core.nbt.map -import ru.dbotthepony.mc.otm.oncePre import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes @@ -57,12 +47,12 @@ class ChemicalGeneratorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES) override fun appendHoverText( itemStack: ItemStack, - p_49817_: BlockGetter?, + blockAccessor: BlockGetter?, tooltips: MutableList, - p_49819_: TooltipFlag + tooltipType: TooltipFlag ) { - super.appendHoverText(itemStack, p_49817_, tooltips, p_49819_) - GeneratorEnergyStorage.appendHoverText(itemStack, p_49817_, tooltips, p_49819_) + super.appendHoverText(itemStack, blockAccessor, tooltips, tooltipType) + GeneratorEnergyStorage.appendHoverText(itemStack, blockAccessor, tooltips, tooltipType) } private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.CHEMICAL_GENERATOR.rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt index 41b222bee..112bf0bc0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/CobblerBlock.kt @@ -17,6 +17,7 @@ import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.block.entity.tech.CobblerBlockEntity import ru.dbotthepony.mc.otm.core.get +import ru.dbotthepony.mc.otm.core.needsNoPowerDescription import ru.dbotthepony.mc.otm.shapes.BlockShapes class CobblerBlock(val color: DyeColor?) : RotatableMatteryBlock(Properties.of().mapColor(color?.mapColor ?: MapColor.METAL).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().destroyTime(1.5f).explosionResistance(25.0f)), EntityBlock { @@ -36,6 +37,10 @@ class CobblerBlock(val color: DyeColor?) : RotatableMatteryBlock(Properties.of() return null } + init { + needsNoPowerDescription() + } + private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.COBBLESTONE_GENERATOR.rotateFromNorth(it[rotationProperty]).computeShape() } @Suppress("override_deprecation") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EnergyServoBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EnergyServoBlock.kt index 4dff8b68c..e95a95765 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EnergyServoBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EnergyServoBlock.kt @@ -13,6 +13,7 @@ import net.minecraft.world.level.material.MapColor import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.entity.tech.EnergyServoBlockEntity import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get @@ -36,6 +37,10 @@ class EnergyServoBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Enti return null } + init { + addSimpleDescription() + } + private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.ENERGY_SERVO.rotateFromNorth(it[rotationProperty]).computeShape() } @Suppress("override_deprecation") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt index 84339f5a0..e57d06360 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt @@ -18,6 +18,7 @@ import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get @@ -46,6 +47,10 @@ class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properti return super.use(blockState, level, blockPos, ply, hand, blockHitResult) } + init { + addSimpleDescription() + } + private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.ESSENCE_STORAGE.rotateFromNorth(it[rotationProperty]).computeShape() } @Suppress("override_deprecation") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/GravitationStabilizerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/GravitationStabilizerBlock.kt index e2f33127e..0367b5564 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/GravitationStabilizerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/GravitationStabilizerBlock.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.block.tech +import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.SectionPos @@ -23,6 +24,7 @@ import net.minecraft.world.level.material.PushReaction import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity import ru.dbotthepony.mc.otm.block.entity.blackhole.BlackHoleBlockEntity import ru.dbotthepony.mc.otm.block.entity.WorkerState @@ -30,6 +32,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.plus import ru.dbotthepony.mc.otm.core.math.times +import ru.dbotthepony.mc.otm.core.needsNoPowerDescription import ru.dbotthepony.mc.otm.oncePre import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlocks @@ -140,6 +143,13 @@ class BlockGravitationStabilizer : RotatableMatteryBlock(props), EntityBlock { return SHAPES[p_60555_[BlockRotationFreedom.DIRECTIONAL].ordinal] } + init { + addSimpleDescription() + needsNoPowerDescription(ChatFormatting.DARK_GRAY) + addSimpleDescription("2", ChatFormatting.DARK_GRAY) + addSimpleDescription("3", ChatFormatting.DARK_GRAY) + } + companion object { private val SHAPES = arrayOf( BlockShapes.GRAVITATION_STABILIZER.rotateAroundX(PI / 2).computeShape(), diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PhantomAttractorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PhantomAttractorBlock.kt index ef92bc7f5..54f6b1bc1 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PhantomAttractorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PhantomAttractorBlock.kt @@ -27,10 +27,12 @@ import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import net.minecraftforge.event.ForgeEventFactory import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.core.math.minus import ru.dbotthepony.mc.otm.core.math.plus +import ru.dbotthepony.mc.otm.core.needsNoPowerDescription import ru.dbotthepony.mc.otm.once import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.shapes.BlockShapes @@ -134,4 +136,9 @@ class PhantomAttractorBlock : RotatableMatteryBlock(Properties.of().mapColor(Map } } } + + init { + addSimpleDescription() + needsNoPowerDescription() + } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt index aee0f1e58..8bafde210 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PlatePressBlock.kt @@ -22,7 +22,6 @@ import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity import ru.dbotthepony.mc.otm.block.entity.WorkerState -import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.shapes.BlockShapes @@ -49,13 +48,13 @@ class PlatePressBlock(val color: DyeColor?, val isTwin: Boolean = false) : Rotat } override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag + itemStack: ItemStack, + blockAccessor: BlockGetter?, + components: MutableList, + tooltipType: TooltipFlag ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - MatteryWorkerBlockEntity.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + MatteryWorkerBlockEntity.appendHoverText(itemStack, blockAccessor, components, tooltipType) } private val shapes = getShapeForEachState(rotationProperty) { (if (isTwin) BlockShapes.TWIN_PLATE_PRESS_IDLE else BlockShapes.PLATE_PRESS_IDLE).rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/ITooltippable.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/ITooltippable.kt new file mode 100644 index 000000000..94234f21a --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/ITooltippable.kt @@ -0,0 +1,100 @@ +package ru.dbotthepony.mc.otm.core + +import it.unimi.dsi.fastutil.objects.ObjectIterators +import net.minecraft.ChatFormatting +import net.minecraft.network.chat.Component +import net.minecraft.world.item.ItemStack +import ru.dbotthepony.mc.otm.client.isShiftDown +import ru.dbotthepony.mc.otm.client.minecraft +import java.util.stream.Stream + +interface ITooltippable { + fun addDescriptionLinesInternal(lines: Stream) { + addDescriptionFunctionsInternal(lines.map { c -> { ObjectIterators.singleton(c.copy()) } }) + } + + fun addDescriptionLinesInternal(vararg lines: Component) { + lines.forEach { c -> + addDescriptionFunctionsInternal({ ObjectIterators.singleton(c.copy()) }) + } + } + + fun addDescriptionLinesInternal(lines: Collection) { + lines.forEach { c -> + addDescriptionFunctionsInternal({ ObjectIterators.singleton(c.copy()) }) + } + } + + fun addDescriptionFunctionsInternal(lines: Stream Iterator>) + fun addDescriptionFunctionsInternal(vararg lines: (ItemStack) -> Iterator) + fun addDescriptionFunctionsInternal(lines: Collection<(ItemStack) -> Iterator>) + + fun assembleDescription(itemStack: ItemStack, into: MutableCollection) + + class Impl : ITooltippable { + private val descriptionLines = ArrayList<(ItemStack) -> Iterator>() + + override fun addDescriptionFunctionsInternal(lines: Stream Iterator>) { + lines.forEach { descriptionLines.add(it) } + } + + override fun addDescriptionFunctionsInternal(vararg lines: (ItemStack) -> Iterator) { + lines.forEach { descriptionLines.add(it) } + } + + override fun addDescriptionFunctionsInternal(lines: Collection<(ItemStack) -> Iterator>) { + lines.forEach { descriptionLines.add(it) } + } + + override fun assembleDescription(itemStack: ItemStack, into: MutableCollection) { + if (descriptionLines.isNotEmpty()) { + if (!minecraft.window.isShiftDown) { + into.add(TranslatableComponent("otm.gui.shift_for_more_info").withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.ITALIC)) + } else { + for (lines in descriptionLines) { + into.addAll(lines.invoke(itemStack)) + } + } + } + } + } +} + +fun T.addDescriptionLines(lines: Stream): T { + addDescriptionLinesInternal(lines) + return this +} + +fun T.addDescriptionLines(vararg lines: Component): T { + addDescriptionLinesInternal(lines.stream()) + return this +} + +fun T.addDescriptionLines(lines: Collection): T { + addDescriptionLinesInternal(lines) + return this +} + +fun T.addDescriptionFunctions(lines: Stream Iterator>): T { + addDescriptionFunctionsInternal(lines) + return this +} + +fun T.addDescriptionFunctions(vararg lines: (ItemStack) -> Iterator): T { + addDescriptionFunctionsInternal(lines.stream()) + return this +} + +fun T.addDescriptionFunctions(line: (ItemStack) -> Iterator): T { + addDescriptionFunctionsInternal(line) + return this +} + +fun T.addDescriptionFunctions(lines: Collection<(ItemStack) -> Iterator>): T { + addDescriptionFunctionsInternal(lines) + return this +} + +fun T.needsNoPowerDescription(formatting: ChatFormatting = ChatFormatting.GRAY): T { + return addDescriptionLines(TranslatableComponent("otm.needs_no_power").withStyle(formatting)) +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/ChestUpgraderItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/ChestUpgraderItem.kt index 3df88999a..2a0af4fcf 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/ChestUpgraderItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/ChestUpgraderItem.kt @@ -31,7 +31,7 @@ import ru.dbotthepony.mc.otm.core.math.Vector import ru.dbotthepony.mc.otm.entity.MinecartCargoCrate import ru.dbotthepony.mc.otm.registry.MEntityTypes -class ChestUpgraderItem : Item(Properties().stacksTo(1)) { +class ChestUpgraderItem : MatteryItem(Properties().stacksTo(1)) { override fun onItemUseFirst(stack: ItemStack, context: UseOnContext): InteractionResult { val player = context.player ?: return super.onItemUseFirst(stack, context) @@ -105,17 +105,12 @@ class ChestUpgraderItem : Item(Properties().stacksTo(1)) { return super.onItemUseFirst(stack, context) } - override fun appendHoverText(pStack: ItemStack, pLevel: Level?, pTooltip: MutableList, pFlag: TooltipFlag) { - super.appendHoverText(pStack, pLevel, pTooltip, pFlag) - - pTooltip.add(DESCRIPTION) - pTooltip.add(DESCRIPTION2) + init { + addSimpleDescription() + addSimpleDescription("2") } companion object { - private val DESCRIPTION = TranslatableComponent("item.${MOD_ID}.chest_upgrader.desc").withStyle(ChatFormatting.DARK_GRAY) - private val DESCRIPTION2= TranslatableComponent("item.${MOD_ID}.chest_upgrader.desc2").withStyle(ChatFormatting.DARK_GRAY) - fun onEntityInteract(event: PlayerInteractEvent.EntityInteract) { if (event.target !is MinecartChest) return diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt index d7b6076db..377eca58f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceCapsuleItem.kt @@ -22,22 +22,22 @@ import ru.dbotthepony.mc.otm.core.tagNotNull import ru.dbotthepony.mc.otm.core.util.getLevelFromXp import ru.dbotthepony.mc.otm.runIfClient -class EssenceCapsuleItem(private val digital: Boolean) : Item(Properties().stacksTo(1).rarity(Rarity.UNCOMMON)) { - override fun appendHoverText(pStack: ItemStack, pLevel: Level?, pTooltipComponents: MutableList, pIsAdvanced: TooltipFlag) { - super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced) - pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule").withStyle(ChatFormatting.DARK_GRAY)) - pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule2").withStyle(ChatFormatting.DARK_GRAY)) +class EssenceCapsuleItem(private val digital: Boolean) : MatteryItem(Properties().stacksTo(1).rarity(Rarity.UNCOMMON)) { + override fun appendHoverText(itemStack: ItemStack, level: Level?, components: MutableList, tooltipType: TooltipFlag) { + super.appendHoverText(itemStack, level, components, tooltipType) + components.add(TranslatableComponent("otm.gui.essence_capsule").withStyle(ChatFormatting.DARK_GRAY)) + components.add(TranslatableComponent("otm.gui.essence_capsule2").withStyle(ChatFormatting.DARK_GRAY)) if (!digital) { - pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule3").withStyle(ChatFormatting.DARK_GRAY)) - } else if (runIfClient(false) { minecraft.player?.matteryPlayer?.isAndroid ?: false }) { - pTooltipComponents.add(TranslatableComponent("otm.gui.essence_capsule.digital").withStyle(ChatFormatting.DARK_GRAY)) + components.add(TranslatableComponent("otm.gui.essence_capsule3").withStyle(ChatFormatting.DARK_GRAY)) + } else if (runIfClient(false) { minecraft.player?.matteryPlayer?.isAndroid == true }) { + components.add(TranslatableComponent("otm.gui.essence_capsule.digital").withStyle(ChatFormatting.DARK_GRAY)) } if (runIfClient(false) { minecraft.window.isShiftDown }) { - pTooltipComponents.add(TranslatableComponent("otm.gui.experience", experienceStored(pStack)).withStyle(ChatFormatting.GRAY)) + components.add(TranslatableComponent("otm.gui.experience", experienceStored(itemStack)).withStyle(ChatFormatting.GRAY)) } else { - pTooltipComponents.add(TranslatableComponent("otm.gui.experience_levels", getLevelFromXp(experienceStored(pStack))).withStyle(ChatFormatting.GRAY)) + components.add(TranslatableComponent("otm.gui.experience_levels", getLevelFromXp(experienceStored(itemStack))).withStyle(ChatFormatting.GRAY)) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt index 320bcfbcd..329216fa2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt @@ -14,11 +14,10 @@ import net.minecraft.world.level.Level import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity import ru.dbotthepony.mc.otm.core.TranslatableComponent -class EssenceServoItem : Item(Properties().stacksTo(64)) { - override fun appendHoverText(pStack: ItemStack, pLevel: Level?, pTooltipComponents: MutableList, pIsAdvanced: TooltipFlag) { - super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced) - pTooltipComponents.add(TranslatableComponent("$descriptionId.desc2").withStyle(ChatFormatting.GRAY)) - pTooltipComponents.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.DARK_GRAY)) +class EssenceServoItem : MatteryItem(Properties().stacksTo(64)) { + init { + addSimpleDescription("2") + addSimpleDescription(formatting = ChatFormatting.DARK_GRAY) } fun useServo(player: Player, pos: BlockPos): InteractionResult { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatteryItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatteryItem.kt new file mode 100644 index 000000000..85f0ea45d --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/MatteryItem.kt @@ -0,0 +1,28 @@ +package ru.dbotthepony.mc.otm.item + +import it.unimi.dsi.fastutil.objects.ObjectIterators +import net.minecraft.ChatFormatting +import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.level.Level +import ru.dbotthepony.mc.otm.client.isShiftDown +import ru.dbotthepony.mc.otm.client.minecraft +import ru.dbotthepony.mc.otm.core.ITooltippable +import ru.dbotthepony.mc.otm.core.TranslatableComponent +import ru.dbotthepony.mc.otm.core.addAll +import ru.dbotthepony.mc.otm.core.addDescriptionFunctions +import ru.dbotthepony.mc.otm.core.addDescriptionLines +import java.util.stream.Stream + +open class MatteryItem(properties: Properties) : Item(properties), ITooltippable by ITooltippable.Impl() { + override fun appendHoverText(itemStack: ItemStack, level: Level?, components: MutableList, tooltipType: TooltipFlag) { + super.appendHoverText(itemStack, level, components, tooltipType) + assembleDescription(itemStack, components) + } +} + +fun T.addSimpleDescription(suffix: String = "", formatting: ChatFormatting = ChatFormatting.GRAY): T { + return addDescriptionFunctions { ObjectIterators.singleton(TranslatableComponent("$descriptionId.desc$suffix").withStyle(formatting)) } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 9e560c112..46706719a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -39,7 +39,9 @@ import ru.dbotthepony.mc.otm.block.BlockExplosionDebugger import ru.dbotthepony.mc.otm.block.BlockSphereDebugger import ru.dbotthepony.mc.otm.block.EnergyCableBlock import ru.dbotthepony.mc.otm.block.MatterCableBlock +import ru.dbotthepony.mc.otm.block.MatteryBlock import ru.dbotthepony.mc.otm.block.StorageCableBlock +import ru.dbotthepony.mc.otm.block.addSimpleDescription import ru.dbotthepony.mc.otm.block.decorative.DevChestBlock import ru.dbotthepony.mc.otm.block.decorative.EngineBlock import ru.dbotthepony.mc.otm.block.decorative.FluidTankBlock @@ -48,6 +50,8 @@ import ru.dbotthepony.mc.otm.block.decorative.InfiniteWaterSourceBlock import ru.dbotthepony.mc.otm.block.decorative.LaboratoryLamp import ru.dbotthepony.mc.otm.block.decorative.LaboratoryLampLight import ru.dbotthepony.mc.otm.block.decorative.PainterBlock +import ru.dbotthepony.mc.otm.block.decorative.TritaniumDoorBlock +import ru.dbotthepony.mc.otm.block.decorative.TritaniumTrapdoorBlock import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock import ru.dbotthepony.mc.otm.block.matter.MatterCapacitorBankBlock import ru.dbotthepony.mc.otm.block.matter.MatterDecomposerBlock @@ -159,18 +163,9 @@ object MBlocks { Block(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLUE).sound(SoundType.METAL).explosionResistance(400f).destroyTime(3f).requiresCorrectToolForDrops()) } - val METAL_JUNK: Block by registry.register(MNames.METAL_JUNK) { - object : Block(BlockBehaviour.Properties.of().sound(SoundType.NETHERITE_BLOCK).mapColor(MapColor.COLOR_GRAY).explosionResistance(45f).destroyTime(3f).requiresCorrectToolForDrops()) { - override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag - ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - p_49818_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.DARK_GRAY)) - } - } + val METAL_JUNK: MatteryBlock by registry.register(MNames.METAL_JUNK) { + MatteryBlock(BlockBehaviour.Properties.of().sound(SoundType.NETHERITE_BLOCK).mapColor(MapColor.COLOR_GRAY).explosionResistance(45f).destroyTime(3f).requiresCorrectToolForDrops()) + .addSimpleDescription() } val METAL_MESH: Block by registry.register(MNames.METAL_MESH) { @@ -234,87 +229,11 @@ object MBlocks { TRITANIUM_ANVIL = SupplierList(anvils) } - val TRITANIUM_DOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_DOOR) { color, _ -> - object : DoorBlock( - Properties.of() - .mapColor(color ?: DyeColor.LIGHT_BLUE) - .explosionResistance(80f) - .noOcclusion() - .destroyTime(3f) - .pushReaction(PushReaction.DESTROY) - .requiresCorrectToolForDrops(), - BlockSetType.IRON - ) { - override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag - ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - p_49818_.add(TranslatableComponent("$descriptionId.description0").withStyle(ChatFormatting.DARK_GRAY)) - p_49818_.add(TranslatableComponent("$descriptionId.description1").withStyle(ChatFormatting.DARK_GRAY)) + val TRITANIUM_DOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_DOOR) { color, _ -> + TritaniumDoorBlock(color) } - if (color != null) { - p_49818_.add(TranslatableComponent("$descriptionId.description2").withStyle(ChatFormatting.DARK_GRAY)) - } - } - - override fun canEntityDestroy( - state: BlockState, - level: BlockGetter, - pos: BlockPos, - entity: Entity - ): Boolean { - return entity !is Zombie && super.canEntityDestroy(state, level, pos, entity) - } - } - } - - val TRITANIUM_TRAPDOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_TRAPDOOR) { color, _ -> - object : TrapDoorBlock( - Properties.of() - .mapColor(color ?: DyeColor.LIGHT_BLUE) - .explosionResistance(80f) - .noOcclusion().destroyTime(3f) - .requiresCorrectToolForDrops() - .isValidSpawn { _: BlockState, _: BlockGetter, _: BlockPos, _: EntityType<*>? -> false }, - BlockSetType.IRON - ) { - override fun appendHoverText( - p_49816_: ItemStack, - p_49817_: BlockGetter?, - p_49818_: MutableList, - p_49819_: TooltipFlag - ) { - super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) - p_49818_.add(TranslatableComponent("$descriptionId.description0").withStyle(ChatFormatting.DARK_GRAY)) - p_49818_.add(TranslatableComponent("$descriptionId.description1").withStyle(ChatFormatting.DARK_GRAY)) - - if (color != null) { - p_49818_.add(TranslatableComponent("$descriptionId.description2").withStyle(ChatFormatting.DARK_GRAY)) - } - } - - override fun canEntityDestroy( - state: BlockState, - level: BlockGetter, - pos: BlockPos, - entity: Entity - ): Boolean { - return entity !is Zombie && super.canEntityDestroy(state, level, pos, entity) - } - } } - - init { - MRegistry.TRITANIUM_PRESSURE_PLATE.registerBlocks(registry) - - MRegistry.CARGO_CRATES.registerBlocks(registry) - MRegistry.TRITANIUM_BLOCK.registerBlocks(registry) - MRegistry.TRITANIUM_STAIRS.registerBlocks(registry) - MRegistry.TRITANIUM_SLAB.registerBlocks(registry) - MRegistry.TRITANIUM_WALL.registerBlocks(registry) - } + val TRITANIUM_TRAPDOOR: Map = registry.coloredWithBase(MNames.TRITANIUM_TRAPDOOR) { color, _ -> + TritaniumTrapdoorBlock(color) } val TRITANIUM_STRIPED_BLOCK: Block by registry.register(MNames.TRITANIUM_STRIPED_BLOCK) { Block( BlockBehaviour.Properties.of() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index b8328cf96..534054183 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -22,7 +22,6 @@ import ru.dbotthepony.mc.otm.config.ItemsConfig import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.addAll -import ru.dbotthepony.mc.otm.core.asLambdaSupplierArray import ru.dbotthepony.mc.otm.core.asSupplierArray import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.core.math.Decimal @@ -90,78 +89,17 @@ object MItems { val STORAGE_CABLE: BlockItem by registry.register(MNames.STORAGE_CABLE) { BlockItem(MBlocks.STORAGE_CABLE, DEFAULT_PROPERTIES) } val STORAGE_POWER_SUPPLIER: BlockItem by registry.register(MNames.STORAGE_POWER_SUPPLIER) { BlockItem(MBlocks.STORAGE_POWER_SUPPLIER, DEFAULT_PROPERTIES) } - val GRAVITATION_STABILIZER: BlockItem by registry.register(MNames.GRAVITATION_STABILIZER) { - object : BlockItem(MBlocks.GRAVITATION_STABILIZER, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) + val GRAVITATION_STABILIZER: BlockItem by registry.register(MNames.GRAVITATION_STABILIZER) { BlockItem(MBlocks.GRAVITATION_STABILIZER, DEFAULT_PROPERTIES) } - p_40574_.add(TranslatableComponent("${MBlocks.GRAVITATION_STABILIZER.descriptionId}.desc").withStyle(ChatFormatting.GRAY)) - p_40574_.add(TranslatableComponent("otm.needs_no_power").withStyle(ChatFormatting.DARK_GRAY)) - p_40574_.add(TranslatableComponent("${MBlocks.GRAVITATION_STABILIZER.descriptionId}.desc2").withStyle(ChatFormatting.DARK_GRAY)) - p_40574_.add(TranslatableComponent("${MBlocks.GRAVITATION_STABILIZER.descriptionId}.desc3").withStyle(ChatFormatting.DARK_GRAY)) - } - } - } - - val PHANTOM_ATTRACTOR: DoubleHighBlockItem by registry.register(MNames.PHANTOM_ATTRACTOR) { - object : DoubleHighBlockItem(MBlocks.PHANTOM_ATTRACTOR, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - - p_40574_.add(TranslatableComponent("${MBlocks.PHANTOM_ATTRACTOR.descriptionId}.desc").withStyle(ChatFormatting.GRAY)) - p_40574_.add(TranslatableComponent("otm.needs_no_power").withStyle(ChatFormatting.DARK_GRAY)) - } - } - } - - val ENERGY_SERVO: BlockItem by registry.register(MNames.ENERGY_SERVO) { - object : BlockItem(MBlocks.ENERGY_SERVO, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - - p_40574_.add(TranslatableComponent("${MBlocks.ENERGY_SERVO.descriptionId}.desc").withStyle(ChatFormatting.GRAY)) - } - } - } - - val COBBLESTONE_GENERATOR: Map = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, name -> - object : BlockItem(MBlocks.COBBLESTONE_GENERATOR[color]!!, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - p_40574_.add(TranslatableComponent("otm.needs_no_power").withStyle(ChatFormatting.GRAY)) - } - } - } + val PHANTOM_ATTRACTOR: DoubleHighBlockItem by registry.register(MNames.PHANTOM_ATTRACTOR) { DoubleHighBlockItem(MBlocks.PHANTOM_ATTRACTOR, DEFAULT_PROPERTIES) } + val ENERGY_SERVO: BlockItem by registry.register(MNames.ENERGY_SERVO) { BlockItem(MBlocks.ENERGY_SERVO, DEFAULT_PROPERTIES) } + val COBBLESTONE_GENERATOR: Map = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> BlockItem(MBlocks.COBBLESTONE_GENERATOR[color]!!, DEFAULT_PROPERTIES) } val INFINITE_WATER_SOURCE: BlockItem by registry.register(MNames.INFINITE_WATER_SOURCE) { BlockItem(MBlocks.INFINITE_WATER_SOURCE, DEFAULT_PROPERTIES) } + val ESSENCE_STORAGE: Map = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> BlockItem(MBlocks.ESSENCE_STORAGE[color]!!, DEFAULT_PROPERTIES) } + val MATTER_RECONSTRUCTOR: BlockItem by registry.register(MNames.MATTER_RECONSTRUCTOR) { BlockItem(MBlocks.MATTER_RECONSTRUCTOR, DEFAULT_PROPERTIES) } - val ESSENCE_STORAGE: Map = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> - object : BlockItem(MBlocks.ESSENCE_STORAGE[color]!!, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - p_40574_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) - } - } - } - - val MATTER_RECONSTRUCTOR: BlockItem by registry.register(MNames.MATTER_RECONSTRUCTOR) { - object : BlockItem(MBlocks.MATTER_RECONSTRUCTOR, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - p_40574_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) - } - } - } - - val DEV_CHEST: BlockItem by registry.register(MNames.DEV_CHEST) { - object : BlockItem(MBlocks.DEV_CHEST, DEFAULT_PROPERTIES) { - override fun appendHoverText(p_40572_: ItemStack, p_40573_: Level?, p_40574_: MutableList, p_40575_: TooltipFlag) { - super.appendHoverText(p_40572_, p_40573_, p_40574_, p_40575_) - p_40574_.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.GRAY)) - } - } - } - + val DEV_CHEST: BlockItem by registry.register(MNames.DEV_CHEST) { BlockItem(MBlocks.DEV_CHEST, DEFAULT_PROPERTIES) } val PAINTER: BlockItem by registry.register(MNames.PAINTER) { BlockItem(MBlocks.PAINTER, DEFAULT_PROPERTIES) } val MATTER_ENTANGLER: BlockItem by registry.register(MNames.MATTER_ENTANGLER) { BlockItem(MBlocks.MATTER_ENTANGLER, DEFAULT_PROPERTIES) } @@ -408,19 +346,7 @@ object MItems { val PLASMA_RIFLE: Item by registry.register(MNames.PLASMA_RIFLE) { PlasmaRifleItem() } - val BLACK_HOLE_SCANNER: Item by registry.register(MNames.BLACK_HOLE_SCANNER) { - object : Item(DEFAULT_PROPERTIES) { - override fun appendHoverText( - p_41421_: ItemStack, - p_41422_: Level?, - p_41423_: MutableList, - p_41424_: TooltipFlag - ) { - p_41423_.add(TranslatableComponent("item.overdrive_that_matters.black_hole_scanner.desc").withStyle(ChatFormatting.GRAY)) - p_41423_.add(TranslatableComponent("item.overdrive_that_matters.black_hole_scanner.desc2").withStyle(ChatFormatting.DARK_GRAY)) - } - } - } + val BLACK_HOLE_SCANNER: Item by registry.register(MNames.BLACK_HOLE_SCANNER) { MatteryItem(DEFAULT_PROPERTIES).addSimpleDescription().addSimpleDescription("2") } val GRAVITATION_FIELD_LIMITER: Item by registry.register(MNames.GRAVITATION_FIELD_LIMITER) { Item(DEFAULT_PROPERTIES) } val GRAVITATION_FIELD_SENSOR: Item by registry.register(MNames.GRAVITATION_FIELD_SENSOR) { Item(DEFAULT_PROPERTIES) } @@ -515,10 +441,6 @@ object MItems { val TRITANIUM_DOOR = registry.coloredWithBase(MNames.TRITANIUM_DOOR) { color, _ -> DoubleHighBlockItem(MBlocks.TRITANIUM_DOOR[color]!!, DEFAULT_PROPERTIES) } val TRITANIUM_TRAPDOOR = registry.coloredWithBase(MNames.TRITANIUM_TRAPDOOR) { color, _ -> BlockItem(MBlocks.TRITANIUM_TRAPDOOR[color]!!, DEFAULT_PROPERTIES) } - init { - MRegistry.TRITANIUM_PRESSURE_PLATE.registerItems(registry) - } - // components val MATTER_IO_PORT: Item by registry.register(MNames.MATTER_IO_PORT) { Item(DEFAULT_PROPERTIES) } val MATTER_TRANSFORM_MATRIX: Item by registry.register(MNames.MATTER_TRANSFORM_MATRIX) { Item(DEFAULT_PROPERTIES) } @@ -537,33 +459,13 @@ object MItems { val ADVANCED_CONTROL_CIRCUIT: Item by registry.register(MNames.ADVANCED_CONTROL_CIRCUIT) { Item(DEFAULT_PROPERTIES) } val MATTER_CAPACITOR_PARTS: Item by registry.register(MNames.MATTER_CAPACITOR_PARTS) { Item(DEFAULT_PROPERTIES) } val CARBON_MESH: Item by registry.register(MNames.CARBON_MESH) { Item(DEFAULT_PROPERTIES) } - val REINFORCED_TRITANIUM_PLATE: Item by registry.register(MNames.REINFORCED_TRITANIUM_PLATE) { object : Item(DEFAULT_PROPERTIES) { - override fun appendHoverText( - p_41421_: ItemStack, - p_41422_: Level?, - p_41423_: MutableList, - p_41424_: TooltipFlag - ) { - super.appendHoverText(p_41421_, p_41422_, p_41423_, p_41424_) - p_41423_.add(TranslatableComponent("$descriptionId.description").withStyle(ChatFormatting.DARK_GRAY)) - } - } } + val REINFORCED_TRITANIUM_PLATE: Item by registry.register(MNames.REINFORCED_TRITANIUM_PLATE) { MatteryItem(DEFAULT_PROPERTIES).addSimpleDescription() } val QUANTUM_TRANSCEIVER: Item by registry.register(MNames.QUANTUM_TRANSCEIVER) { Item(DEFAULT_PROPERTIES) } val ELECTROMAGNET: Item by registry.register(MNames.ELECTROMAGNET) { Item(DEFAULT_PROPERTIES) } val ELECTROMOTOR: Item by registry.register(MNames.ELECTROMOTOR) { Item(DEFAULT_PROPERTIES) } val MIRROR_COMPOUND: Item by registry.register(MNames.MIRROR_COMPOUND) { Item(DEFAULT_PROPERTIES) } - val MIRROR: Item by registry.register(MNames.MIRROR) { object : Item(DEFAULT_PROPERTIES) { - override fun appendHoverText( - p_41421_: ItemStack, - p_41422_: Level?, - p_41423_: MutableList, - p_41424_: TooltipFlag - ) { - super.appendHoverText(p_41421_, p_41422_, p_41423_, p_41424_) - p_41423_.add(TranslatableComponent("$descriptionId.description").withStyle(ChatFormatting.DARK_GRAY)) - } - } } + val MIRROR: Item by registry.register(MNames.MIRROR) { MatteryItem(DEFAULT_PROPERTIES).addSimpleDescription() } /** * List of components for everything else @@ -653,12 +555,6 @@ object MItems { init { // call static initializer ExopackUpgrades - - MRegistry.CARGO_CRATES.registerItems(registry) - MRegistry.TRITANIUM_BLOCK.registerItems(registry) - MRegistry.TRITANIUM_STAIRS.registerItems(registry) - MRegistry.TRITANIUM_SLAB.registerItems(registry) - MRegistry.TRITANIUM_WALL.registerItems(registry) } val TRITANIUM_STRIPED_BLOCK: Item by registry.register(MNames.TRITANIUM_STRIPED_BLOCK) { BlockItem(MBlocks.TRITANIUM_STRIPED_BLOCK, DEFAULT_PROPERTIES) } From 895ed6fbef1e9d9a66bcdfaf1ae6485a51098888 Mon Sep 17 00:00:00 2001 From: GearShocky Date: Thu, 4 Jan 2024 12:38:38 +0600 Subject: [PATCH 17/37] Fix Computer 1000 yard stare + 4chair --- .../models/block/computer_terminal.json | 33 +++- .../models/block/star_chair.json | 172 ++++++++++++++++++ .../textures/block/decorative/star_chair.png | Bin 0 -> 425 bytes 3 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/models/block/star_chair.json create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/decorative/star_chair.png diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json b/src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json index b0330d376..489cfffdb 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/computer_terminal.json @@ -53,5 +53,36 @@ "down": {"uv": [6, 12.5, 11, 13], "texture": "#1"} } } - ] + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/star_chair.json b/src/main/resources/assets/overdrive_that_matters/models/block/star_chair.json new file mode 100644 index 000000000..c8a636a24 --- /dev/null +++ b/src/main/resources/assets/overdrive_that_matters/models/block/star_chair.json @@ -0,0 +1,172 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "overdrive_that_matters:block/decorative/carbon_fibre_borderless", + "1": "overdrive_that_matters:block/decorative/star_chair", + "2": "overdrive_that_matters:block/powered_smoker_base", + "particle": "overdrive_that_matters:block/decorative/carbon_fibre_borderless" + }, + "elements": [ + { + "name": "base", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [7, 7.5, 13, 8.5], "texture": "#1"}, + "east": {"uv": [7, 7.5, 13, 8.5], "texture": "#1"}, + "south": {"uv": [7, 7.5, 13, 8.5], "texture": "#1"}, + "west": {"uv": [7, 7.5, 13, 8.5], "texture": "#1"}, + "up": {"uv": [7, 0, 13, 6], "texture": "#1"}, + "down": {"uv": [1, 1, 7, 7], "texture": "#2"} + } + }, + { + "name": "base", + "from": [4, 0.1, 13], + "to": [12, 5.1, 15], + "faces": { + "east": {"uv": [4, 13.5, 5, 16], "texture": "#1"}, + "south": {"uv": [0, 13.5, 4, 16], "texture": "#1"}, + "west": {"uv": [5, 13.5, 4, 16], "texture": "#1"}, + "up": {"uv": [11, 14, 15, 15], "rotation": 180, "texture": "#1"}, + "down": {"uv": [11, 15, 15, 16], "texture": "#1"} + } + }, + { + "name": "base", + "from": [4, 0.1, 1], + "to": [12, 5.1, 3], + "faces": { + "north": {"uv": [0, 13.5, 4, 16], "texture": "#1"}, + "east": {"uv": [5, 13.5, 4, 16], "texture": "#1"}, + "west": {"uv": [4, 13.5, 5, 16], "texture": "#1"}, + "up": {"uv": [11, 14, 15, 15], "texture": "#1"}, + "down": {"uv": [11, 15, 15, 16], "texture": "#1"} + } + }, + { + "name": "base", + "from": [2, 4, 2], + "to": [14, 7, 14], + "faces": { + "north": {"uv": [7, 6, 13, 7.5], "texture": "#1"}, + "east": {"uv": [7, 6, 13, 7.5], "texture": "#1"}, + "south": {"uv": [7, 6, 13, 7.5], "texture": "#1"}, + "west": {"uv": [7, 6, 13, 7.5], "texture": "#1"}, + "up": {"uv": [7, 0, 13, 6], "texture": "#1"}, + "down": {"uv": [7, 0, 13, 6], "texture": "#1"} + } + }, + { + "name": "base", + "from": [3, 6, 11], + "to": [13, 23, 15], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 7, 13]}, + "faces": { + "north": {"uv": [5, 0, 0, 8.5], "texture": "#1"}, + "east": {"uv": [7, 0, 5, 8.5], "texture": "#1"}, + "south": {"uv": [0, 0, 5, 8.5], "texture": "#1"}, + "west": {"uv": [5, 0, 7, 8.5], "texture": "#1"}, + "up": {"uv": [0, 8.5, 5, 10.5], "texture": "#1"}, + "down": {"uv": [0, 10.5, 5, 12.5], "texture": "#1"} + } + }, + { + "name": "base", + "from": [3, 2, 3], + "to": [13, 4, 13], + "faces": { + "north": {"uv": [0, 12.5, 5, 13.5], "texture": "#1"}, + "east": {"uv": [0, 12.5, 5, 13.5], "texture": "#1"}, + "south": {"uv": [0, 12.5, 5, 13.5], "texture": "#1"}, + "west": {"uv": [0, 12.5, 5, 13.5], "texture": "#1"} + } + }, + { + "name": "fabric", + "from": [3, 6, 1], + "to": [13, 9, 11], + "faces": { + "north": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 10, 3], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 10, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 10, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 10, 10], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "fabric", + "from": [4, 8, 10], + "to": [12, 22, 12], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 13]}, + "faces": { + "north": {"uv": [0, 0, 14, 8], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 14, 2], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 14, 2], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "arm", + "from": [1, 6, 0], + "to": [3, 12, 12], + "faces": { + "north": {"uv": [9, 13, 10, 16], "texture": "#1"}, + "east": {"uv": [6, 16, 9, 10], "rotation": 90, "texture": "#1"}, + "south": {"uv": [9, 10, 10, 13], "texture": "#1"}, + "west": {"uv": [6, 10, 9, 16], "rotation": 90, "texture": "#1"}, + "up": {"uv": [5, 10, 6, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10, 10, 11, 16], "texture": "#1"} + } + }, + { + "name": "arm", + "from": [13, 6, 0], + "to": [15, 12, 12], + "faces": { + "north": {"uv": [9, 13, 10, 16], "texture": "#1"}, + "east": {"uv": [6, 16, 9, 10], "rotation": 90, "texture": "#1"}, + "south": {"uv": [9, 10, 10, 13], "texture": "#1"}, + "west": {"uv": [6, 10, 9, 16], "rotation": 90, "texture": "#1"}, + "up": {"uv": [5, 10, 6, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10, 10, 11, 16], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 8.5, 1] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/star_chair.png b/src/main/resources/assets/overdrive_that_matters/textures/block/decorative/star_chair.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2e0459dfafe00f66308cde033045ef11736124 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STbDR3pDqH^l|9|`T?U0a=*!-%5gakD;H90vspppxhVq1X}S4ogx zFi;HyFl;)ba~>$lS>O>_%)r2R7=#&*=dVZs3jXtSaSXBW@14{r)vUnLa!}*#-}s7h zhty}+-u({qu6yX<8nPfrEYLVK_G9<;ce@y+nU>FMU^ubhHOq?Bk3vSLA80LYY433| zPI$MFy>9vhbN)Avwz{yz8YfJ1oVr-cJCJ?e;=X(yt%f^%e|e9HH|_zUJtC^MM$*%lsh%mk-_YG_=4R<8`8FhU5zs4`l_awy|(jCg9*dN+SO|% zFQtgQVkqm6aGqMpd23-i;{m=aM;8}0J^Sr`;HuU!ZiWYYxgE3Y9!<=w!5Oxn9oqtalYrV>$U$G4xJK;Z@d}_3VQ}mS3j3^ HP6 Date: Thu, 4 Jan 2024 13:40:40 +0700 Subject: [PATCH 18/37] More machine coloring --- .../ru/dbotthepony/mc/otm/datagen/DataGen.kt | 6 +- .../advancements/MachineAdvancementsData.kt | 14 +- .../mc/otm/datagen/blocks/Banks.kt | 15 +- .../mc/otm/datagen/blocks/BlockModels.kt | 13 + .../mc/otm/datagen/blocks/BlockStates.kt | 60 ++-- .../mc/otm/datagen/items/ItemModels.kt | 14 +- .../mc/otm/datagen/lang/English.kt | 18 +- .../mc/otm/datagen/lang/Russian.kt | 18 +- .../mc/otm/datagen/loot/LootTablesData.kt | 14 +- .../datagen/models/MatteryModelProvider.kt | 12 + .../datagen/recipes/CraftingTableRecipes.kt | 26 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 23 +- .../dbotthepony/mc/otm/datagen/tags/Tags.kt | 19 +- .../mc/otm/block/matter/MatterBottlerBlock.kt | 3 +- .../block/matter/MatterCapacitorBankBlock.kt | 3 +- .../otm/block/matter/MatterDecomposerBlock.kt | 3 +- .../block/matter/MatterReconstructorBlock.kt | 3 +- .../otm/block/matter/MatterReplicatorBlock.kt | 3 +- .../mc/otm/block/matter/MatterScannerBlock.kt | 3 +- .../mc/otm/block/storage/ItemMonitorBlock.kt | 3 +- .../mc/otm/block/tech/BatteryBankBlock.kt | 5 +- .../mc/otm/compat/jei/JEIPlugin.kt | 2 +- .../mc/otm/registry/MBlockEntities.kt | 16 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 16 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 30 +- .../models/block/matter_replicator.json | 330 ++++++++++-------- .../models/block/matter_replicator_error.json | 2 +- .../models/block/matter_replicator_idle.json | 2 +- .../block/matter_replicator_working.json | 324 +---------------- .../models/item/matter_replicator.json | 3 - .../models/item/matter_scanner.json | 3 - .../block/android_station_base_mask.png | Bin 0 -> 992 bytes .../block/batterybank_frame/black.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/blue.png | Bin 0 -> 648 bytes .../block/batterybank_frame/brown.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/cyan.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/gray.png | Bin 0 -> 648 bytes .../block/batterybank_frame/green.png | Bin 0 -> 648 bytes .../block/batterybank_frame/light_blue.png | Bin 0 -> 648 bytes .../block/batterybank_frame/light_gray.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/lime.png | Bin 0 -> 648 bytes .../block/batterybank_frame/magenta.png | Bin 0 -> 648 bytes .../block/batterybank_frame/orange.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/pink.png | Bin 0 -> 648 bytes .../block/batterybank_frame/purple.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame/red.png | Bin 0 -> 648 bytes .../block/batterybank_frame/white.png | Bin 0 -> 732 bytes .../block/batterybank_frame/yellow.png | Bin 0 -> 648 bytes .../textures/block/batterybank_frame_mask.png | Bin 0 -> 1228 bytes .../textures/block/item_monitor/black.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/blue.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/brown.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/cyan.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/gray.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/green.png | Bin 0 -> 580 bytes .../block/item_monitor/light_blue.png | Bin 0 -> 580 bytes .../block/item_monitor/light_gray.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/lime.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/magenta.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/orange.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/pink.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/purple.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/red.png | Bin 0 -> 580 bytes .../textures/block/item_monitor/white.png | Bin 0 -> 607 bytes .../textures/block/item_monitor/yellow.png | Bin 0 -> 580 bytes .../textures/block/item_monitor_mask.png | Bin 0 -> 956 bytes .../textures/block/matter_bottler/black.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/blue.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/brown.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/cyan.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/gray.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/green.png | Bin 0 -> 893 bytes .../block/matter_bottler/light_blue.png | Bin 0 -> 893 bytes .../block/matter_bottler/light_gray.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/lime.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/magenta.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/orange.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/pink.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/purple.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/red.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/white.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler/yellow.png | Bin 0 -> 893 bytes .../textures/block/matter_bottler_mask.png | Bin 0 -> 1639 bytes .../block/matter_decomposer/black.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/blue.png | Bin 0 -> 873 bytes .../block/matter_decomposer/brown.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/cyan.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/gray.png | Bin 0 -> 873 bytes .../block/matter_decomposer/green.png | Bin 0 -> 873 bytes .../block/matter_decomposer/light_blue.png | Bin 0 -> 873 bytes .../block/matter_decomposer/light_gray.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/lime.png | Bin 0 -> 873 bytes .../block/matter_decomposer/magenta.png | Bin 0 -> 873 bytes .../block/matter_decomposer/orange.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/pink.png | Bin 0 -> 873 bytes .../block/matter_decomposer/purple.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer/red.png | Bin 0 -> 873 bytes .../block/matter_decomposer/white.png | Bin 0 -> 869 bytes .../block/matter_decomposer/yellow.png | Bin 0 -> 873 bytes .../textures/block/matter_decomposer_mask.png | Bin 0 -> 1689 bytes .../block/matter_reconstructor/black.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/blue.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/brown.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/cyan.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/gray.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/green.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/light_blue.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/light_gray.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/lime.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/magenta.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/orange.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/pink.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/purple.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/red.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/white.png | Bin 0 -> 896 bytes .../block/matter_reconstructor/yellow.png | Bin 0 -> 896 bytes .../block/matter_reconstructor_mask.png | Bin 0 -> 1670 bytes .../textures/block/matter_recycler/black.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/blue.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/brown.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/cyan.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/gray.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/green.png | Bin 0 -> 681 bytes .../block/matter_recycler/light_blue.png | Bin 0 -> 681 bytes .../block/matter_recycler/light_gray.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/lime.png | Bin 0 -> 681 bytes .../block/matter_recycler/magenta.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/orange.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/pink.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/purple.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/red.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/white.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler/yellow.png | Bin 0 -> 681 bytes .../textures/block/matter_recycler_mask.png | Bin 0 -> 1199 bytes .../block/matter_replicator/black.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/blue.png | Bin 0 -> 674 bytes .../block/matter_replicator/brown.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/cyan.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/gray.png | Bin 0 -> 674 bytes .../block/matter_replicator/green.png | Bin 0 -> 674 bytes .../block/matter_replicator/light_blue.png | Bin 0 -> 674 bytes .../block/matter_replicator/light_gray.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/lime.png | Bin 0 -> 674 bytes .../block/matter_replicator/magenta.png | Bin 0 -> 674 bytes .../block/matter_replicator/orange.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/pink.png | Bin 0 -> 674 bytes .../block/matter_replicator/purple.png | Bin 0 -> 674 bytes .../textures/block/matter_replicator/red.png | Bin 0 -> 674 bytes .../block/matter_replicator/white.png | Bin 0 -> 674 bytes .../block/matter_replicator/yellow.png | Bin 0 -> 674 bytes .../block/matter_replicator_base/black.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/blue.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/brown.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/cyan.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/gray.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/green.png | Bin 0 -> 671 bytes .../matter_replicator_base/light_blue.png | Bin 0 -> 671 bytes .../matter_replicator_base/light_gray.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/lime.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/magenta.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/orange.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/pink.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/purple.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/red.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/white.png | Bin 0 -> 671 bytes .../block/matter_replicator_base/yellow.png | Bin 0 -> 671 bytes .../block/matter_replicator_base_mask.png | Bin 0 -> 1224 bytes .../block/matter_replicator_halted/black.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/blue.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/brown.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/cyan.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/gray.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/green.png | Bin 0 -> 673 bytes .../matter_replicator_halted/light_blue.png | Bin 0 -> 673 bytes .../matter_replicator_halted/light_gray.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/lime.png | Bin 0 -> 673 bytes .../matter_replicator_halted/magenta.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/orange.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/pink.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/purple.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/red.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/white.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted/yellow.png | Bin 0 -> 673 bytes .../block/matter_replicator_halted_mask.png | Bin 0 -> 1271 bytes .../textures/block/matter_replicator_mask.png | Bin 0 -> 1271 bytes .../block/matter_replicator_offline/black.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/blue.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/brown.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/cyan.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/gray.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/green.png | Bin 0 -> 683 bytes .../matter_replicator_offline/light_blue.png | Bin 0 -> 683 bytes .../matter_replicator_offline/light_gray.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/lime.png | Bin 0 -> 683 bytes .../matter_replicator_offline/magenta.png | Bin 0 -> 683 bytes .../matter_replicator_offline/orange.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/pink.png | Bin 0 -> 683 bytes .../matter_replicator_offline/purple.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/red.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline/white.png | Bin 0 -> 683 bytes .../matter_replicator_offline/yellow.png | Bin 0 -> 683 bytes .../block/matter_replicator_offline_mask.png | Bin 0 -> 1271 bytes .../textures/block/matter_scanner/black.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/blue.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/brown.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/cyan.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/gray.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/green.png | Bin 0 -> 815 bytes .../block/matter_scanner/light_blue.png | Bin 0 -> 815 bytes .../block/matter_scanner/light_gray.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/lime.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/magenta.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/orange.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/pink.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/purple.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/red.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/white.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner/yellow.png | Bin 0 -> 815 bytes .../textures/block/matter_scanner_mask.png | Bin 0 -> 1653 bytes .../block/mattercapacitorbank_frame/black.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/blue.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/brown.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/cyan.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/gray.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/green.png | Bin 0 -> 648 bytes .../mattercapacitorbank_frame/light_blue.png | Bin 0 -> 648 bytes .../mattercapacitorbank_frame/light_gray.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/lime.png | Bin 0 -> 648 bytes .../mattercapacitorbank_frame/magenta.png | Bin 0 -> 648 bytes .../mattercapacitorbank_frame/orange.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/pink.png | Bin 0 -> 648 bytes .../mattercapacitorbank_frame/purple.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/red.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame/white.png | Bin 0 -> 732 bytes .../mattercapacitorbank_frame/yellow.png | Bin 0 -> 648 bytes .../block/mattercapacitorbank_frame_mask.png | Bin 0 -> 1228 bytes 236 files changed, 395 insertions(+), 611 deletions(-) delete mode 100644 src/main/resources/assets/overdrive_that_matters/models/item/matter_replicator.json delete mode 100644 src/main/resources/assets/overdrive_that_matters/models/item/matter_scanner.json create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index f15538f74..20e84e1d1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -516,8 +516,10 @@ object DataGen { event.generator.addProvider(event.includeServer(), blockStateProvider) event.generator.addProvider(event.includeClient(), itemModelProvider) event.generator.addProvider(event.includeServer(), recipeProvider) - event.generator.addProvider(event.includeClient(), MatterBankProvider(event)) - event.generator.addProvider(event.includeClient(), BatteryBankProvider(event)) + DyeColor.entries.forEach { event.generator.addProvider(event.includeClient(), MatterBankProvider(event, it)) } + event.generator.addProvider(event.includeClient(), MatterBankProvider(event, null)) + DyeColor.entries.forEach { event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, it)) } + event.generator.addProvider(event.includeClient(), BatteryBankProvider(event, null)) event.generator.addProvider(event.includeServer(), lootTableProvider) event.generator.addProvider(event.includeServer(), lootModifier) event.generator.addProvider(event.includeServer(), SoundDataProvider(event)) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 7a8db81c5..5906c96cf 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -102,30 +102,30 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter CraftEntry(MItems.TWIN_PLATE_PRESS.values, "Twice the Thud", russianName = "Двойной стук").make(serializer, press, translation) - val scanner = CraftEntry(MItems.MATTER_SCANNER, "Scanning Things that Matter", + val scanner = CraftEntry(MItems.MATTER_SCANNER.values, "Scanning Things that Matter", russianName = "Сканируем вещи которые материальны") - val decomposer = CraftEntry(MItems.MATTER_DECOMPOSER, "Decaying the Atoms", "Keep your limbs outside of the working chamber at all times", + val decomposer = CraftEntry(MItems.MATTER_DECOMPOSER.values, "Decaying the Atoms", "Keep your limbs outside of the working chamber at all times", russianName = "Разлагаем атомы", russianSuffix = "Во всех ситуациях держите свои конечности вне рабочей камеры") val panel = CraftEntry(MItems.MATTER_PANEL, "Indexing the Library", russianName = "Индексируем библиотеку") - val replicator = CraftEntry(MItems.MATTER_REPLICATOR, "Cook with (Im)Perfection", "Now let's bake some perfect bread", + val replicator = CraftEntry(MItems.MATTER_REPLICATOR.values, "Cook with (Im)Perfection", "Now let's bake some perfect bread", russianName = "Повар с (не) идеальностями", russianSuffix = "А теперь давайте выпечем немного идеального хлеба") - val bottler = CraftEntry(MItems.MATTER_BOTTLER, "Transfusing Pure Matter", "For those who loved to play with water in their childhood", + val bottler = CraftEntry(MItems.MATTER_BOTTLER.values, "Transfusing Pure Matter", "For those who loved to play with water in their childhood", russianName = "Переливаем чистую материю", russianSuffix = "Для тех, кто любил играться в воде в детстве") val recycler = CraftEntry(MItems.MATTER_RECYCLER, "Refine and Redefine", "This is what waste recycling should look like", russianName = "Переработка и перегонка", russianSuffix = "Вот он, пик переработки отходов") - val capacitor = CraftEntry(MItems.MATTER_CAPACITOR_BANK, "Modular Matter Tank", + val capacitor = CraftEntry(MItems.MATTER_CAPACITOR_BANK.values, "Modular Matter Tank", russianName = "Модульный бак материи") val counter = CraftEntry(MItems.ENERGY_COUNTER, "Visualize Power Burn", russianName = "Визуализация сжигания энергии") - val battery = CraftEntry(MItems.BATTERY_BANK, "Batteries Not Included", "By all means avoid the urge to hammer incompatible batteries into the power bus.", + val battery = CraftEntry(MItems.BATTERY_BANK.values, "Batteries Not Included", "By all means avoid the urge to hammer incompatible batteries into the power bus.", russianName = "Батарейки в комплект не входят", russianSuffix = "Пожалуйста, воздержитесь от вбивания кувалдой несовместимых батарей в энергетическую шину.") val pattern = CraftEntry(MItems.PATTERN_STORAGE, "Digital Knowledge Library", russianName = "Цифровая библиотека знаний") - val reconstructor = CraftEntry(MItems.MATTER_RECONSTRUCTOR, "Flipping Hourglass", + val reconstructor = CraftEntry(MItems.MATTER_RECONSTRUCTOR.values, "Flipping Hourglass", russianName = "Переворачиваем песочные часы") decomposer.make(serializer, press, translation).also { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt index 7302eeb0c..acc27d924 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/Banks.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.datagen.blocks +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.block.Block import net.minecraftforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.ConfiguredModel @@ -18,16 +19,16 @@ private fun nothingOrNumber(input: Int): String { return (input - 1).toString() } -open class BatteryBankProvider(event: GatherDataEvent) : BlockStateProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { +open class BatteryBankProvider(event: GatherDataEvent, val color: DyeColor?) : BlockStateProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) { protected var block = "battery_bank" protected var batteryPath = "block/battery/battery" - protected var registry: Block = MBlocks.BATTERY_BANK + protected var registry: Block = MBlocks.BATTERY_BANK[color]!! override fun registerStatesAndModels() { with(getVariantBuilder(registry)) { forAllStates { ConfiguredModel.builder() - .modelFile(models().getExistingFile(modLocation("block/$block"))) + .modelFile(models().getExistingFile(modLocation("block/$block${if (color != null) "_${color.name.lowercase()}" else ""}"))) .rotationY(it[BlockRotationFreedom.HORIZONTAL.property].front.yRotationBlockstateNorth()) .build() } @@ -35,18 +36,18 @@ open class BatteryBankProvider(event: GatherDataEvent) : BlockStateProvider(even } override fun getName(): String { - return "Battery Bank Model Provider" + return "Battery Bank Model Provider for color $color" } } -class MatterBankProvider(event: GatherDataEvent) : BatteryBankProvider(event) { +class MatterBankProvider(event: GatherDataEvent, color: DyeColor?) : BatteryBankProvider(event, color) { init { block = "matter_capacitor_bank" batteryPath = "block/battery/matter_capacitor" - registry = MBlocks.MATTER_CAPACITOR_BANK + registry = MBlocks.MATTER_CAPACITOR_BANK[color]!! } override fun getName(): String { - return "Matter Bank Model Provider" + return "Matter Bank Model Provider for color $color" } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 3dba552b8..e831fc197 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -12,8 +12,21 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { coloredMachine(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) coloredMachine(MBlocks.ESSENCE_STORAGE, listOf("0", "particle")) + coloredMachine(MBlocks.ITEM_MONITOR, listOf("0", "particle")) + coloredMachine(MBlocks.MATTER_RECONSTRUCTOR, listOf("0", "particle")) + + colored("matter_capacitor_bank", mapOf("1" to "mattercapacitorbank_frame", "particle" to "mattercapacitorbank_frame")) + colored("battery_bank", mapOf("1" to "batterybank_frame", "particle" to "batterybank_frame")) coloredMachineCombined("plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) coloredMachineCombined("twin_plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) + coloredMachineCombined("matter_recycler", "matter_recycler", listOf("idle", "error", "working"), listOf("0", "particle")) + coloredMachineCombined("matter_scanner", "matter_scanner", listOf("idle", "error", "working"), listOf("texture", "particle")) + coloredMachineCombined("matter_bottler", "matter_bottler", listOf("idle", "error", "working"), listOf("texture", "particle")) + coloredMachineCombined("matter_decomposer", "matter_decomposer", listOf("idle", "error", "working"), listOf("texture", "particle")) + + colored("matter_replicator", "idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline")) + colored("matter_replicator", "error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted")) + colored("matter_replicator", "working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 978834388..ee2725561 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -30,8 +30,8 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.METAL_MESH) provider.block(MBlocks.CHEMICAL_GENERATOR) - provider.block(MBlocks.MATTER_SCANNER) - provider.block(MBlocks.ITEM_MONITOR) + provider.block(MBlocks.MATTER_SCANNER.values) + provider.block(MBlocks.ITEM_MONITOR.values) provider.block(MBlocks.HOLO_SIGN) provider.exec { @@ -59,40 +59,42 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { } } - with(provider.getMultipartBuilder(MBlocks.MATTER_BOTTLER)) { - for (dir in BlockRotationFreedom.HORIZONTAL.possibleValues) { - for (enum in WorkerState.SEMI_WORKER_STATE.possibleValues) { - part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name.lowercase()}"))) - .rotationY(dir.front.yRotationBlockstateNorth()) - .addModel() - .condition(BlockRotationFreedom.HORIZONTAL.property, dir) - .condition(WorkerState.WORKER_STATE, enum) - .end() + for (block in MBlocks.MATTER_BOTTLER.values) { + with(provider.getMultipartBuilder(block)) { + for (dir in BlockRotationFreedom.HORIZONTAL.possibleValues) { + for (enum in WorkerState.SEMI_WORKER_STATE.possibleValues) { + part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name.lowercase()}"))) + .rotationY(dir.front.yRotationBlockstateNorth()) + .addModel() + .condition(BlockRotationFreedom.HORIZONTAL.property, dir) + .condition(WorkerState.WORKER_STATE, enum) + .end() + } } - } - for (dir in BlockRotationFreedom.HORIZONTAL.possibleValues) { - for (enum in MatterBottlerBlock.SLOT_PROPERTIES) { - part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name}_open"))) - .rotationY(dir.front.yRotationBlockstateNorth()) - .addModel() - .condition(BlockRotationFreedom.HORIZONTAL.property, dir) - .condition(enum, false) - .end() + for (dir in BlockRotationFreedom.HORIZONTAL.possibleValues) { + for (enum in MatterBottlerBlock.SLOT_PROPERTIES) { + part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name}_open"))) + .rotationY(dir.front.yRotationBlockstateNorth()) + .addModel() + .condition(BlockRotationFreedom.HORIZONTAL.property, dir) + .condition(enum, false) + .end() - part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name}_closed"))) - .rotationY(dir.front.yRotationBlockstateNorth()) - .addModel() - .condition(BlockRotationFreedom.HORIZONTAL.property, dir) - .condition(enum, true) - .end() + part().modelFile(provider.models().getExistingFile(modLocation("matter_bottler_${enum.name}_closed"))) + .rotationY(dir.front.yRotationBlockstateNorth()) + .addModel() + .condition(BlockRotationFreedom.HORIZONTAL.property, dir) + .condition(enum, true) + .end() + } } } } } - provider.block(MBlocks.MATTER_DECOMPOSER) - provider.block(MBlocks.MATTER_REPLICATOR) + provider.block(MBlocks.MATTER_DECOMPOSER.values) + provider.block(MBlocks.MATTER_REPLICATOR.values) provider.block(MBlocks.PLATE_PRESS.values) provider.block(MBlocks.TWIN_PLATE_PRESS.values) provider.block(MBlocks.GRAVITATION_STABILIZER) @@ -104,7 +106,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.STORAGE_POWER_SUPPLIER) provider.block(MBlocks.MATTER_RECYCLER) - provider.block(MBlocks.MATTER_RECONSTRUCTOR) + provider.block(MBlocks.MATTER_RECONSTRUCTOR.values) provider.block(MBlocks.ENERGY_SERVO) provider.block(MBlocks.COBBLESTONE_GENERATOR.values) provider.block(MBlocks.ESSENCE_STORAGE.values) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 21e5437f7..52797e34f 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -8,8 +8,8 @@ import ru.dbotthepony.mc.otm.registry.MRegistry fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.ANDROID_STATION, "android_station_working") - provider.block(MItems.BATTERY_BANK) - provider.block(MItems.MATTER_CAPACITOR_BANK) + provider.coloredWithBaseBlock(MItems.BATTERY_BANK, "matter_capacitor_bank") + provider.coloredWithBaseBlock(MItems.MATTER_CAPACITOR_BANK, "matter_capacitor_bank") provider.block(MItems.PATTERN_STORAGE) provider.exec { @@ -28,7 +28,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.TRITANIUM_STRIPED_BLOCK) provider.block(MItems.TRITANIUM_RAW_BLOCK) provider.block(MItems.TRITANIUM_INGOT_BLOCK) - provider.block(MItems.ITEM_MONITOR) + provider.coloredWithBaseBlock(MItems.ITEM_MONITOR, "item_monitor") provider.block(MItems.PHANTOM_ATTRACTOR) provider.block(MItems.HOLO_SIGN) @@ -168,12 +168,14 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.CHEMICAL_GENERATOR, "chemical_generator_working") provider.block(MItems.ENERGY_COUNTER, "energy_counter_down") - provider.block(MItems.MATTER_BOTTLER, "matter_bottler_working") + provider.coloredWithBaseBlock(MItems.MATTER_BOTTLER, "matter_bottler", "_idle") + provider.coloredWithBaseBlock(MItems.MATTER_SCANNER, "matter_scanner", "_idle") + provider.coloredWithBaseBlock(MItems.MATTER_REPLICATOR, "matter_replicator", "_idle") provider.block(MItems.MATTER_CABLE, "matter_cable_core") - provider.block(MItems.MATTER_DECOMPOSER, "matter_decomposer_working") + provider.coloredWithBaseBlock(MItems.MATTER_DECOMPOSER, "matter_decomposer", "_idle") provider.block(MItems.ENERGY_SERVO, "energy_servo") provider.coloredWithBaseBlock(MItems.ESSENCE_STORAGE, "essence_storage") - provider.block(MItems.MATTER_RECONSTRUCTOR, "matter_reconstructor") + provider.coloredWithBaseBlock(MItems.MATTER_RECONSTRUCTOR, "matter_reconstructor") provider.block(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace_working") provider.block(MItems.POWERED_FURNACE, "powered_furnace_working") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index fb1c20267..cbea1fe86 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -417,23 +417,23 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.ANDROID_STATION, "Android Station") add(MBlocks.ANDROID_CHARGER, "Wireless Charger") add(MBlocks.ANDROID_CHARGER, "desc", "Charges nearby androids and exopacks") - add(MBlocks.BATTERY_BANK, "Battery Bank") - add(MBlocks.MATTER_DECOMPOSER, "Matter Decomposer") - add(MBlocks.MATTER_CAPACITOR_BANK, "Matter Capacitor Bank") + addBlock(MBlocks.BATTERY_BANK.values, "Battery Bank") + addBlock(MBlocks.MATTER_DECOMPOSER.values, "Matter Decomposer") + addBlock(MBlocks.MATTER_CAPACITOR_BANK.values, "Matter Capacitor Bank") add(MBlocks.MATTER_CABLE, "Matter Network Cable") add(MBlocks.PATTERN_STORAGE, "Pattern Storage") - add(MBlocks.MATTER_SCANNER, "Matter Scanner") + addBlock(MBlocks.MATTER_SCANNER.values, "Matter Scanner") add(MBlocks.MATTER_PANEL, "Pattern Monitor") - add(MBlocks.MATTER_REPLICATOR, "Matter Replicator") - add(MBlocks.MATTER_BOTTLER, "Matter Bottler") + addBlock(MBlocks.MATTER_REPLICATOR.values, "Matter Replicator") + addBlock(MBlocks.MATTER_BOTTLER.values, "Matter Bottler") add(MBlocks.DRIVE_VIEWER, "Drive Viewer") add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Cobblestone Generator") add(MBlocks.INFINITE_WATER_SOURCE, "Infinite Water Source") addBlock(MBlocks.ESSENCE_STORAGE.values, "Essence Storage") addBlock(MBlocks.ESSENCE_STORAGE.values, "desc", "Allows to store and retrieve experience levels") - add(MBlocks.MATTER_RECONSTRUCTOR, "Matter Reconstructor") - add(MBlocks.MATTER_RECONSTRUCTOR, "desc", "Repairs tools using matter") + addBlock(MBlocks.MATTER_RECONSTRUCTOR.values, "Matter Reconstructor") + addBlock(MBlocks.MATTER_RECONSTRUCTOR.values, "desc", "Repairs tools using matter") add(MBlocks.DEV_CHEST, "Dev Chest") add(MBlocks.DEV_CHEST, "desc", "Contains all items present in game") add(MBlocks.PAINTER, "Painting Table") @@ -458,7 +458,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.CHEMICAL_GENERATOR, "Chemical Generator") add(MBlocks.DRIVE_RACK, "Condensation Drive Rack") - add(MBlocks.ITEM_MONITOR, "Item Monitor") + addBlock(MBlocks.ITEM_MONITOR.values, "Item Monitor") addBlock(MBlocks.PLATE_PRESS.values, "Plate Press") addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Twin Plate Press") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index f24fe6dc1..c8d77d378 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -419,23 +419,23 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.ANDROID_STATION, "Станция андроидов") add(MBlocks.ANDROID_CHARGER, "Беспроводной зарядник") add(MBlocks.ANDROID_CHARGER, "desc", "Заряжает ближайших андроидов и экзопаки") - add(MBlocks.BATTERY_BANK, "Банк аккумуляторов") - add(MBlocks.MATTER_DECOMPOSER, "Декомпозитор материи") - add(MBlocks.MATTER_CAPACITOR_BANK, "Банк накопителей материи") + addBlock(MBlocks.BATTERY_BANK.values, "Банк аккумуляторов") + addBlock(MBlocks.MATTER_DECOMPOSER.values, "Декомпозитор материи") + addBlock(MBlocks.MATTER_CAPACITOR_BANK.values, "Банк накопителей материи") add(MBlocks.MATTER_CABLE, "Кабель сети материи") add(MBlocks.PATTERN_STORAGE, "Хранилище шаблонов") - add(MBlocks.MATTER_SCANNER, "Сканер материи") + addBlock(MBlocks.MATTER_SCANNER.values, "Сканер материи") add(MBlocks.MATTER_PANEL, "Монитор шаблонов") - add(MBlocks.MATTER_REPLICATOR, "Репликатор материи") - add(MBlocks.MATTER_BOTTLER, "Бутилировщик материи") + addBlock(MBlocks.MATTER_REPLICATOR.values, "Репликатор материи") + addBlock(MBlocks.MATTER_BOTTLER.values, "Бутилировщик материи") add(MBlocks.DRIVE_VIEWER, "Просмотрщик дисков конденсации") add(MBlocks.BLACK_HOLE, "Локализированная сингулярная точка аномального искажения пространства-времени") addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника") add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды") addBlock(MBlocks.ESSENCE_STORAGE.values, "Хранилище эссенции") addBlock(MBlocks.ESSENCE_STORAGE.values, "desc", "Позволяет хранить очки опыта") - add(MBlocks.MATTER_RECONSTRUCTOR, "Материальный реконструктор") - add(MBlocks.MATTER_RECONSTRUCTOR, "desc", "Чинит инструменты используя материю") + addBlock(MBlocks.MATTER_RECONSTRUCTOR.values, "Материальный реконструктор") + addBlock(MBlocks.MATTER_RECONSTRUCTOR.values, "desc", "Чинит инструменты используя материю") add(MBlocks.DEV_CHEST, "Сундук разработчика") add(MBlocks.DEV_CHEST, "desc", "Хранит все предметы, которые есть в игре") add(MBlocks.PAINTER, "Стол маляра") @@ -460,7 +460,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.CHEMICAL_GENERATOR, "Химический генератор") add(MBlocks.DRIVE_RACK, "Стеллаж дисков конденсации") - add(MBlocks.ITEM_MONITOR, "Монитор предметов") + addBlock(MBlocks.ITEM_MONITOR.values, "Монитор предметов") addBlock(MBlocks.PLATE_PRESS.values, "Пресс пластин") addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Двойной пресс пластин") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index eb14cda0b..e42a1bcff 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -133,7 +133,7 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.COBBLESTONE_GENERATOR.values) lootTables.tile(MBlocks.ESSENCE_STORAGE.values) - lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR) + lootTables.tile(MBlocks.MATTER_RECONSTRUCTOR.values) lootTables.tile(MBlocks.FLUID_TANK) lootTables.tile(MBlocks.PAINTER) lootTables.tile(MBlocks.MATTER_ENTANGLER) @@ -145,7 +145,7 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.STORAGE_CABLE) lootTables.tile(MBlocks.ANDROID_STATION) lootTables.tile(MBlocks.ANDROID_CHARGER) - lootTables.tile(MBlocks.BATTERY_BANK) + lootTables.tile(MBlocks.BATTERY_BANK.values) lootTables.tile(MBlocks.DRIVE_VIEWER) lootTables.tile(MBlocks.STORAGE_BUS) @@ -154,10 +154,10 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.STORAGE_POWER_SUPPLIER) lootTables.tile(MBlocks.DRIVE_RACK) - lootTables.tile(MBlocks.MATTER_DECOMPOSER) - lootTables.tile(MBlocks.MATTER_REPLICATOR) + lootTables.tile(MBlocks.MATTER_DECOMPOSER.values) + lootTables.tile(MBlocks.MATTER_REPLICATOR.values) lootTables.tile(MBlocks.MATTER_RECYCLER) - lootTables.tile(MBlocks.MATTER_SCANNER) + lootTables.tile(MBlocks.MATTER_SCANNER.values) lootTables.tile(MBlocks.PLATE_PRESS.values) lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values) @@ -167,6 +167,6 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.MATTER_PANEL) lootTables.tile(MBlocks.PATTERN_STORAGE) - lootTables.tile(MBlocks.MATTER_CAPACITOR_BANK) - lootTables.tile(MBlocks.MATTER_BOTTLER) + lootTables.tile(MBlocks.MATTER_CAPACITOR_BANK.values) + lootTables.tile(MBlocks.MATTER_BOTTLER.values) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index 113e69a4f..af597596c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -126,6 +126,18 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } + fun colored(modelName: String, suffix: String, textureKeys: Map) { + for (color in DyeColor.entries) { + exec { + val model = withExistingParent(modelName + "_${color.name.lowercase()}_$suffix", modLocation(modelName)) + + for ((key, value) in textureKeys) { + model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) + } + } + } + } + fun coloredMachineCombined(modelName: String, textureName: String, states: Collection, textureKeys: Collection) { exec { for (color in DyeColor.entries) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 7f56a681d..5c1f2280b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -99,14 +99,14 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .build(consumer) // Блоки - MatteryRecipe(MItems.MATTER_CAPACITOR_BANK, category = machinesCategory) + MatteryRecipe(MItems.MATTER_CAPACITOR_BANK[null]!!, category = machinesCategory) .row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS) .row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES) .row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE) .unlockedBy(MItems.MATTER_CABLE) .build(consumer) - MatteryRecipe(MItems.BATTERY_BANK, category = machinesCategory) + MatteryRecipe(MItems.BATTERY_BANK[null]!!, category = machinesCategory) .row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS) .row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES) .row(MItems.ELECTRIC_PARTS, MItems.ENERGY_BUS, MItems.ELECTRIC_PARTS) @@ -405,16 +405,18 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .rowB(Tags.Items.RODS_WOODEN) .build(consumer) - MatteryRecipe(MItems.MATTER_RECONSTRUCTOR, category = machinesCategory) - .setUpgradeSource(MItems.MATTER_REPLICATOR) - .addUpgradeOps( - UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.ENERGY_KEY}", "BlockEntityTag.energy"), - UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.MATTER_STORAGE_KEY}", "BlockEntityTag.matter"), - ) - .row(MItemTags.ADVANCED_CIRCUIT, Tags.Items.GEMS_EMERALD, MItemTags.ADVANCED_CIRCUIT) - .row(MItems.ELECTRIC_PARTS, MItems.MATTER_REPLICATOR, MItems.ELECTRIC_PARTS) - .row(MItems.ELECTROMAGNET, MItems.ELECTROMAGNET, MItems.ELECTROMAGNET) - .build(consumer) + for ((dye, item) in MItems.MATTER_REPLICATOR) { + MatteryRecipe(MItems.MATTER_RECONSTRUCTOR[dye]!!, category = machinesCategory) + .setUpgradeSource(item) + .addUpgradeOps( + UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.ENERGY_KEY}", "BlockEntityTag.energy"), + UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.MATTER_STORAGE_KEY}", "BlockEntityTag.matter"), + ) + .row(MItemTags.ADVANCED_CIRCUIT, Tags.Items.GEMS_EMERALD, MItemTags.ADVANCED_CIRCUIT) + .row(MItems.ELECTRIC_PARTS, item, MItems.ELECTRIC_PARTS) + .row(MItems.ELECTROMAGNET, MItems.ELECTROMAGNET, MItems.ELECTROMAGNET) + .build(consumer) + } MatteryRecipe(MItems.FLUID_CAPSULE, category = RecipeCategory.TOOLS, count = 8) .row(MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS, MItemTags.TRITANIUM_NUGGETS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 23694cb1d..4dd3e6afc 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -271,10 +271,25 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, MItems.TRITANIUM_DOOR[null]!!, MItems.TRITANIUM_DOOR) generate(consumer, MItems.TRITANIUM_TRAPDOOR[null]!!, MItems.TRITANIUM_TRAPDOOR) - generate(consumer, MItems.COBBLESTONE_GENERATOR[null]!!, MItems.COBBLESTONE_GENERATOR) - generate(consumer, MItems.ESSENCE_STORAGE[null]!!, MItems.ESSENCE_STORAGE) - generate(consumer, MItems.PLATE_PRESS[null]!!, MItems.PLATE_PRESS) - generate(consumer, MItems.TWIN_PLATE_PRESS[null]!!, MItems.TWIN_PLATE_PRESS) + val blocks = listOf( + MItems.COBBLESTONE_GENERATOR, + MItems.ESSENCE_STORAGE, + MItems.PLATE_PRESS, + MItems.TWIN_PLATE_PRESS, + MItems.ITEM_MONITOR, + MItems.MATTER_BOTTLER, + MItems.MATTER_RECONSTRUCTOR, + MItems.MATTER_REPLICATOR, + MItems.MATTER_SCANNER, + MItems.MATTER_CAPACITOR_BANK, + MItems.BATTERY_BANK, + MItems.MATTER_DECOMPOSER, + ) + + for (list in blocks) { + generate(consumer, list[null]!!,list) + } + generate(consumer, MRegistry.COMPUTER_TERMINAL.item, MRegistry.COMPUTER_TERMINAL.items) generate(consumer, MRegistry.VENT.item, MRegistry.VENT.items) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 0e2712d35..879d3f3f4 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -6,6 +6,7 @@ import net.minecraft.tags.ItemTags import net.minecraft.world.effect.MobEffects import net.minecraft.world.item.Items import net.minecraft.world.item.Tiers +import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Blocks import net.minecraftforge.common.Tags import ru.dbotthepony.mc.otm.registry.MBlockTags @@ -178,16 +179,16 @@ fun addTags(tagsProvider: TagsProvider) { tagsProvider.requiresPickaxe(MBlocks.PAINTER, Tiers.STONE) tagsProvider.requiresPickaxe(MBlocks.ENERGY_CABLES.values, Tiers.STONE) - tagsProvider.requiresPickaxe(listOf( + tagsProvider.requiresPickaxe(listOf( MBlocks.ANDROID_STATION, - MBlocks.BATTERY_BANK, - MBlocks.MATTER_DECOMPOSER, - MBlocks.MATTER_CAPACITOR_BANK, + *MBlocks.BATTERY_BANK.values.toTypedArray(), + *MBlocks.MATTER_DECOMPOSER.values.toTypedArray(), + *MBlocks.MATTER_CAPACITOR_BANK.values.toTypedArray(), MBlocks.PATTERN_STORAGE, - MBlocks.MATTER_SCANNER, + *MBlocks.MATTER_SCANNER.values.toTypedArray(), MBlocks.MATTER_PANEL, - MBlocks.MATTER_REPLICATOR, - MBlocks.MATTER_BOTTLER, + *MBlocks.MATTER_REPLICATOR.values.toTypedArray(), + *MBlocks.MATTER_BOTTLER.values.toTypedArray(), MBlocks.ENERGY_COUNTER, MBlocks.CHEMICAL_GENERATOR, *MBlocks.PLATE_PRESS.values.toTypedArray(), @@ -205,7 +206,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.DRIVE_VIEWER, MBlocks.DRIVE_RACK, - MBlocks.ITEM_MONITOR, + *MBlocks.ITEM_MONITOR.values.toTypedArray(), MBlocks.STORAGE_POWER_SUPPLIER, MBlocks.PHANTOM_ATTRACTOR, @@ -220,7 +221,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.HOLO_SIGN, *MBlocks.COBBLESTONE_GENERATOR.values.toTypedArray(), *MBlocks.ESSENCE_STORAGE.values.toTypedArray(), - MBlocks.MATTER_RECONSTRUCTOR, + *MBlocks.MATTER_RECONSTRUCTOR.values.toTypedArray(), MBlocks.FLUID_TANK, MBlocks.ANDROID_CHARGER, ), Tiers.IRON) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterBottlerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterBottlerBlock.kt index 7dd4a1876..ab6cf9e08 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterBottlerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterBottlerBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level @@ -22,7 +23,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterBottlerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterBottlerBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return MatterBottlerBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterCapacitorBankBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterCapacitorBankBlock.kt index 8dd5f1d73..ff66222dd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterCapacitorBankBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterCapacitorBankBlock.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos import net.minecraft.core.Direction +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.Block @@ -18,7 +19,7 @@ import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterCapacitorBankBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterCapacitorBankBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return MatterCapacitorBankBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterDecomposerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterDecomposerBlock.kt index 8a3034140..dbaa8d39b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterDecomposerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterDecomposerBlock.kt @@ -4,6 +4,7 @@ import net.minecraft.MethodsReturnNonnullByDefault import javax.annotation.ParametersAreNonnullByDefault import net.minecraft.world.level.block.EntityBlock import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.entity.BlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterDecomposerBlockEntity @@ -22,7 +23,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterDecomposerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterDecomposerBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return MatterDecomposerBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt index 56b036df7..268b31ddc 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReconstructorBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.EntityBlock @@ -17,7 +18,7 @@ import ru.dbotthepony.mc.otm.block.getShapeForEachState import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterReconstructorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterReconstructorBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(pPos: BlockPos, pState: BlockState): BlockEntity { return MatterReconstructorBlockEntity(pPos, pState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReplicatorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReplicatorBlock.kt index a51b83ae5..b20b79b6d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReplicatorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterReplicatorBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -20,7 +21,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterReplicatorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterReplicatorBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return MatterReplicatorBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterScannerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterScannerBlock.kt index 53cc306ca..b7ae511aa 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterScannerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterScannerBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -20,7 +21,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterScannerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterScannerBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return MatterScannerBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt index 8944f7265..957dbc9e8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/storage/ItemMonitorBlock.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.block.storage import net.minecraft.core.BlockPos import net.minecraft.network.chat.Component +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag import net.minecraft.world.level.BlockGetter @@ -22,7 +23,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class ItemMonitorBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class ItemMonitorBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return ItemMonitorBlockEntity(blockPos, blockState) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BatteryBankBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BatteryBankBlock.kt index c5f7f9c87..9bee0b46c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BatteryBankBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/BatteryBankBlock.kt @@ -12,6 +12,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.entity.BlockEntityTicker import net.minecraft.world.level.block.state.StateDefinition import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import ru.dbotthepony.mc.otm.block.entity.tech.BatteryBankBlockEntity import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level @@ -25,9 +26,7 @@ import ru.dbotthepony.mc.otm.oncePre import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -class BatteryBankBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class BatteryBankBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun getTicker( level: Level, p_153213_: BlockState, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt index 22f6bdcd8..ce94da256 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt @@ -71,7 +71,7 @@ class JEIPlugin : IModPlugin { registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER), RecipeTypes.SMOKING) registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER), MicrowaveRecipeCategory.recipeType) registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.CRAFTING_UPGRADE), RecipeTypes.CRAFTING) - registration.addRecipeCatalyst(ItemStack(MItems.ITEM_MONITOR), RecipeTypes.CRAFTING) + registration.addRecipeCatalyst(ItemStack(MItems.ITEM_MONITOR[null]!!), RecipeTypes.CRAFTING) MItems.PLATE_PRESS.values.forEach { registration.addRecipeCatalyst(ItemStack(it), PlatePressRecipeCategory.recipeType) } MItems.TWIN_PLATE_PRESS.values.forEach { registration.addRecipeCatalyst(ItemStack(it), PlatePressRecipeCategory.recipeType) } registration.addRecipeCatalyst(ItemStack(MItems.PAINTER), PainterRecipeCategory.recipeType) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index 0189e278e..b63e48283 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -45,21 +45,21 @@ object MBlockEntities { } val ANDROID_STATION by register(MNames.ANDROID_STATION, ::AndroidStationBlockEntity, MBlocks::ANDROID_STATION) - val BATTERY_BANK by register(MNames.BATTERY_BANK, ::BatteryBankBlockEntity, MBlocks::BATTERY_BANK) - val MATTER_DECOMPOSER by register(MNames.MATTER_DECOMPOSER, ::MatterDecomposerBlockEntity, MBlocks::MATTER_DECOMPOSER) - val MATTER_CAPACITOR_BANK by register(MNames.MATTER_CAPACITOR_BANK, ::MatterCapacitorBankBlockEntity, MBlocks::MATTER_CAPACITOR_BANK) + val BATTERY_BANK by register(MNames.BATTERY_BANK, ::BatteryBankBlockEntity, *MBlocks.BATTERY_BANK.asSupplierArray()) + val MATTER_DECOMPOSER by register(MNames.MATTER_DECOMPOSER, ::MatterDecomposerBlockEntity, *MBlocks.MATTER_DECOMPOSER.asSupplierArray()) + val MATTER_CAPACITOR_BANK by register(MNames.MATTER_CAPACITOR_BANK, ::MatterCapacitorBankBlockEntity, *MBlocks.MATTER_CAPACITOR_BANK.asSupplierArray()) val MATTER_CABLE by register(MNames.MATTER_CABLE, ::MatterCableBlockEntity, MBlocks::MATTER_CABLE) val STORAGE_CABLE by register(MNames.STORAGE_CABLE, ::StorageCableBlockEntity, MBlocks::STORAGE_CABLE) val PATTERN_STORAGE by register(MNames.PATTERN_STORAGE, ::PatternStorageBlockEntity, MBlocks::PATTERN_STORAGE) - val MATTER_SCANNER by register(MNames.MATTER_SCANNER, ::MatterScannerBlockEntity, MBlocks::MATTER_SCANNER) + val MATTER_SCANNER by register(MNames.MATTER_SCANNER, ::MatterScannerBlockEntity, *MBlocks.MATTER_SCANNER.asSupplierArray()) val MATTER_PANEL by register(MNames.MATTER_PANEL, ::MatterPanelBlockEntity, MBlocks::MATTER_PANEL) - val MATTER_REPLICATOR by register(MNames.MATTER_REPLICATOR, ::MatterReplicatorBlockEntity, MBlocks::MATTER_REPLICATOR) - val MATTER_BOTTLER by register(MNames.MATTER_BOTTLER, ::MatterBottlerBlockEntity, MBlocks::MATTER_BOTTLER) + val MATTER_REPLICATOR by register(MNames.MATTER_REPLICATOR, ::MatterReplicatorBlockEntity, *MBlocks.MATTER_REPLICATOR.asSupplierArray()) + val MATTER_BOTTLER by register(MNames.MATTER_BOTTLER, ::MatterBottlerBlockEntity, *MBlocks.MATTER_BOTTLER.asSupplierArray()) val DRIVE_VIEWER by register(MNames.DRIVE_VIEWER, ::DriveViewerBlockEntity, MBlocks::DRIVE_VIEWER) val BLACK_HOLE by register(MNames.BLACK_HOLE, ::BlackHoleBlockEntity, MBlocks::BLACK_HOLE) val CARGO_CRATE by register(MNames.CARGO_CRATE, ::CargoCrateBlockEntity, *MRegistry.CARGO_CRATES.blocks.asSupplierArray()) val DRIVE_RACK by register(MNames.DRIVE_RACK, ::DriveRackBlockEntity, MBlocks::DRIVE_RACK) - val ITEM_MONITOR by register(MNames.ITEM_MONITOR, ::ItemMonitorBlockEntity, MBlocks::ITEM_MONITOR) + val ITEM_MONITOR by register(MNames.ITEM_MONITOR, ::ItemMonitorBlockEntity, *MBlocks.ITEM_MONITOR.asSupplierArray()) val ENERGY_COUNTER by register(MNames.ENERGY_COUNTER, ::EnergyCounterBlockEntity, MBlocks::ENERGY_COUNTER) val CHEMICAL_GENERATOR by register(MNames.CHEMICAL_GENERATOR, ::ChemicalGeneratorBlockEntity, MBlocks::CHEMICAL_GENERATOR) val PLATE_PRESS by register(MNames.PLATE_PRESS, ::PlatePressBlockEntity, *MBlocks.PLATE_PRESS.asSupplierArray()) @@ -69,7 +69,7 @@ object MBlockEntities { val ENERGY_SERVO by register(MNames.ENERGY_SERVO, ::EnergyServoBlockEntity, MBlocks::ENERGY_SERVO) val COBBLESTONE_GENERATOR by register(MNames.COBBLESTONE_GENERATOR, ::CobblerBlockEntity, *MBlocks.COBBLESTONE_GENERATOR.asSupplierArray()) val ESSENCE_STORAGE by register(MNames.ESSENCE_STORAGE, ::EssenceStorageBlockEntity, *MBlocks.ESSENCE_STORAGE.asSupplierArray()) - val MATTER_RECONSTRUCTOR by register(MNames.MATTER_RECONSTRUCTOR, ::MatterReconstructorBlockEntity, MBlocks::MATTER_RECONSTRUCTOR) + val MATTER_RECONSTRUCTOR by register(MNames.MATTER_RECONSTRUCTOR, ::MatterReconstructorBlockEntity, *MBlocks.MATTER_RECONSTRUCTOR.asSupplierArray()) val FLUID_TANK by register(MNames.FLUID_TANK, ::FluidTankBlockEntity, MBlocks::FLUID_TANK) val ANDROID_CHARGER by register(MNames.ANDROID_CHARGER, ::AndroidChargerBlockEntity, MBlocks::ANDROID_CHARGER) val ANDROID_CHARGER_MIDDLE by register(MNames.ANDROID_CHARGER + "_middle", ::AndroidChargerMiddleBlockEntity, MBlocks::ANDROID_CHARGER) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 46706719a..11b002f9c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -99,15 +99,15 @@ object MBlocks { val ANDROID_STATION: Block by registry.register(MNames.ANDROID_STATION) { AndroidStationBlock() } val ANDROID_CHARGER: Block by registry.register(MNames.ANDROID_CHARGER) { AndroidChargerBlock() } - val BATTERY_BANK: Block by registry.register(MNames.BATTERY_BANK) { BatteryBankBlock() } - val MATTER_DECOMPOSER: Block by registry.register(MNames.MATTER_DECOMPOSER) { MatterDecomposerBlock() } - val MATTER_CAPACITOR_BANK: Block by registry.register(MNames.MATTER_CAPACITOR_BANK) { MatterCapacitorBankBlock() } + val BATTERY_BANK = registry.coloredWithBase(MNames.BATTERY_BANK) { color, _ -> BatteryBankBlock(color) } + val MATTER_DECOMPOSER = registry.coloredWithBase(MNames.MATTER_DECOMPOSER) { color, _ -> MatterDecomposerBlock(color) } + val MATTER_CAPACITOR_BANK = registry.coloredWithBase(MNames.MATTER_CAPACITOR_BANK) { color, _ -> MatterCapacitorBankBlock(color) } val MATTER_CABLE: Block by registry.register(MNames.MATTER_CABLE) { MatterCableBlock() } val PATTERN_STORAGE: Block by registry.register(MNames.PATTERN_STORAGE) { PatternStorageBlock() } - val MATTER_SCANNER: Block by registry.register(MNames.MATTER_SCANNER) { MatterScannerBlock() } + val MATTER_SCANNER = registry.coloredWithBase(MNames.MATTER_SCANNER) { color, _ -> MatterScannerBlock(color) } val MATTER_PANEL: Block by registry.register(MNames.MATTER_PANEL) { MatterPanelBlock() } - val MATTER_REPLICATOR: Block by registry.register(MNames.MATTER_REPLICATOR) { MatterReplicatorBlock() } - val MATTER_BOTTLER: Block by registry.register(MNames.MATTER_BOTTLER) { MatterBottlerBlock() } + val MATTER_REPLICATOR = registry.coloredWithBase(MNames.MATTER_REPLICATOR) { color, _ -> MatterReplicatorBlock(color) } + val MATTER_BOTTLER = registry.coloredWithBase(MNames.MATTER_BOTTLER) { color, _ -> MatterBottlerBlock(color) } val ENERGY_COUNTER: Block by registry.register(MNames.ENERGY_COUNTER) { EnergyCounterBlock() } val CHEMICAL_GENERATOR: Block by registry.register(MNames.CHEMICAL_GENERATOR) { ChemicalGeneratorBlock() } val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> PlatePressBlock(color) } @@ -120,7 +120,7 @@ object MBlocks { val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } val INFINITE_WATER_SOURCE: Block by registry.register(MNames.INFINITE_WATER_SOURCE) { InfiniteWaterSourceBlock() } val ESSENCE_STORAGE = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> EssenceStorageBlock(color) } - val MATTER_RECONSTRUCTOR: MatterReconstructorBlock by registry.register(MNames.MATTER_RECONSTRUCTOR) { MatterReconstructorBlock() } + val MATTER_RECONSTRUCTOR = registry.coloredWithBase(MNames.MATTER_RECONSTRUCTOR) { color, _ -> MatterReconstructorBlock(color) } val PAINTER: PainterBlock by registry.register(MNames.PAINTER) { PainterBlock() } val MATTER_ENTANGLER: MatterEntanglerBlock by registry.register(MNames.MATTER_ENTANGLER) { MatterEntanglerBlock() } @@ -134,7 +134,7 @@ object MBlocks { val DRIVE_VIEWER: Block by registry.register(MNames.DRIVE_VIEWER) { DriveViewerBlock() } val DRIVE_RACK: Block by registry.register(MNames.DRIVE_RACK) { DriveRackBlock() } - val ITEM_MONITOR: Block by registry.register(MNames.ITEM_MONITOR) { ItemMonitorBlock() } + val ITEM_MONITOR = registry.coloredWithBase(MNames.ITEM_MONITOR) { color, _ -> ItemMonitorBlock(color) } val STORAGE_CABLE: Block by registry.register(MNames.STORAGE_CABLE) { StorageCableBlock() } val STORAGE_POWER_SUPPLIER: Block by registry.register(MNames.STORAGE_POWER_SUPPLIER) { StoragePowerSupplierBlock() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 534054183..437ffb988 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -57,15 +57,15 @@ object MItems { val ANDROID_STATION: BlockItem by registry.register(MNames.ANDROID_STATION) { BlockItem(MBlocks.ANDROID_STATION, DEFAULT_PROPERTIES) } val ANDROID_CHARGER: BlockItem by registry.register(MNames.ANDROID_CHARGER) { BlockItem(MBlocks.ANDROID_CHARGER, DEFAULT_PROPERTIES) } - val BATTERY_BANK: BlockItem by registry.register(MNames.BATTERY_BANK) { BlockItem(MBlocks.BATTERY_BANK, DEFAULT_PROPERTIES) } - val MATTER_DECOMPOSER: BlockItem by registry.register(MNames.MATTER_DECOMPOSER) { BlockItem(MBlocks.MATTER_DECOMPOSER, DEFAULT_PROPERTIES) } - val MATTER_CAPACITOR_BANK: BlockItem by registry.register(MNames.MATTER_CAPACITOR_BANK) { BlockItem(MBlocks.MATTER_CAPACITOR_BANK, DEFAULT_PROPERTIES) } + val BATTERY_BANK = registry.coloredWithBase(MNames.BATTERY_BANK) { color, _ -> BlockItem(MBlocks.BATTERY_BANK[color]!!, DEFAULT_PROPERTIES) } + val MATTER_DECOMPOSER = registry.coloredWithBase(MNames.MATTER_DECOMPOSER) { color, _ -> BlockItem(MBlocks.MATTER_DECOMPOSER[color]!!, DEFAULT_PROPERTIES) } + val MATTER_CAPACITOR_BANK = registry.coloredWithBase(MNames.MATTER_CAPACITOR_BANK) { color, _ -> BlockItem(MBlocks.MATTER_CAPACITOR_BANK[color]!!, DEFAULT_PROPERTIES) } val MATTER_CABLE: BlockItem by registry.register(MNames.MATTER_CABLE) { BlockItem(MBlocks.MATTER_CABLE, DEFAULT_PROPERTIES) } val PATTERN_STORAGE: BlockItem by registry.register(MNames.PATTERN_STORAGE) { BlockItem(MBlocks.PATTERN_STORAGE, DEFAULT_PROPERTIES) } - val MATTER_SCANNER: BlockItem by registry.register(MNames.MATTER_SCANNER) { BlockItem(MBlocks.MATTER_SCANNER, DEFAULT_PROPERTIES) } + val MATTER_SCANNER = registry.coloredWithBase(MNames.MATTER_SCANNER) { color, _ -> BlockItem(MBlocks.MATTER_SCANNER[color]!!, DEFAULT_PROPERTIES) } val MATTER_PANEL: BlockItem by registry.register(MNames.MATTER_PANEL) { BlockItem(MBlocks.MATTER_PANEL, DEFAULT_PROPERTIES) } - val MATTER_REPLICATOR: BlockItem by registry.register(MNames.MATTER_REPLICATOR) { BlockItem(MBlocks.MATTER_REPLICATOR, DEFAULT_PROPERTIES) } - val MATTER_BOTTLER: BlockItem by registry.register(MNames.MATTER_BOTTLER) { BlockItem(MBlocks.MATTER_BOTTLER, DEFAULT_PROPERTIES) } + val MATTER_REPLICATOR = registry.coloredWithBase(MNames.MATTER_REPLICATOR) { color, _ -> BlockItem(MBlocks.MATTER_REPLICATOR[color]!!, DEFAULT_PROPERTIES) } + val MATTER_BOTTLER = registry.coloredWithBase(MNames.MATTER_BOTTLER) { color, _ -> BlockItem(MBlocks.MATTER_BOTTLER[color]!!, DEFAULT_PROPERTIES) } val TRITANIUM_ORE: BlockItem by registry.register(MNames.TRITANIUM_ORE) { BlockItem(MBlocks.TRITANIUM_ORE, DEFAULT_PROPERTIES) } val DEEPSLATE_TRITANIUM_ORE: BlockItem by registry.register(MNames.DEEPSLATE_TRITANIUM_ORE) { BlockItem(MBlocks.DEEPSLATE_TRITANIUM_ORE, DEFAULT_PROPERTIES) } @@ -85,7 +85,7 @@ object MItems { val STORAGE_EXPORTER: BlockItem by registry.register(MNames.STORAGE_EXPORTER) { BlockItem(MBlocks.STORAGE_EXPORTER, DEFAULT_PROPERTIES) } val DRIVE_VIEWER: BlockItem by registry.register(MNames.DRIVE_VIEWER) { BlockItem(MBlocks.DRIVE_VIEWER, DEFAULT_PROPERTIES) } val DRIVE_RACK: BlockItem by registry.register(MNames.DRIVE_RACK) { BlockItem(MBlocks.DRIVE_RACK, DEFAULT_PROPERTIES) } - val ITEM_MONITOR: BlockItem by registry.register(MNames.ITEM_MONITOR) { BlockItem(MBlocks.ITEM_MONITOR, DEFAULT_PROPERTIES) } + val ITEM_MONITOR = registry.coloredWithBase(MNames.ITEM_MONITOR) { color, _ -> BlockItem(MBlocks.ITEM_MONITOR[color]!!, DEFAULT_PROPERTIES) } val STORAGE_CABLE: BlockItem by registry.register(MNames.STORAGE_CABLE) { BlockItem(MBlocks.STORAGE_CABLE, DEFAULT_PROPERTIES) } val STORAGE_POWER_SUPPLIER: BlockItem by registry.register(MNames.STORAGE_POWER_SUPPLIER) { BlockItem(MBlocks.STORAGE_POWER_SUPPLIER, DEFAULT_PROPERTIES) } @@ -97,7 +97,7 @@ object MItems { val INFINITE_WATER_SOURCE: BlockItem by registry.register(MNames.INFINITE_WATER_SOURCE) { BlockItem(MBlocks.INFINITE_WATER_SOURCE, DEFAULT_PROPERTIES) } val ESSENCE_STORAGE: Map = registry.coloredWithBase(MNames.ESSENCE_STORAGE) { color, _ -> BlockItem(MBlocks.ESSENCE_STORAGE[color]!!, DEFAULT_PROPERTIES) } - val MATTER_RECONSTRUCTOR: BlockItem by registry.register(MNames.MATTER_RECONSTRUCTOR) { BlockItem(MBlocks.MATTER_RECONSTRUCTOR, DEFAULT_PROPERTIES) } + val MATTER_RECONSTRUCTOR = registry.coloredWithBase(MNames.MATTER_RECONSTRUCTOR) { color, _ -> BlockItem(MBlocks.MATTER_RECONSTRUCTOR[color]!!, DEFAULT_PROPERTIES) } val DEV_CHEST: BlockItem by registry.register(MNames.DEV_CHEST) { BlockItem(MBlocks.DEV_CHEST, DEFAULT_PROPERTIES) } val PAINTER: BlockItem by registry.register(MNames.PAINTER) { BlockItem(MBlocks.PAINTER, DEFAULT_PROPERTIES) } @@ -116,7 +116,7 @@ object MItems { machines.add(::ANDROID_STATION) machines.add(::ANDROID_CHARGER) - machines.add(::BATTERY_BANK) + machines.addAll(BATTERY_BANK.asSupplierArray().iterator()) machines.add(::ENERGY_COUNTER) machines.add(::CHEMICAL_GENERATOR) machines.add(::ENERGY_SERVO) @@ -125,14 +125,14 @@ object MItems { machines.addAll(COBBLESTONE_GENERATOR.asSupplierArray().iterator()) machines.addAll(ESSENCE_STORAGE.asSupplierArray().iterator()) - machines.add(::MATTER_DECOMPOSER) - machines.add(::MATTER_CAPACITOR_BANK) + machines.addAll(MATTER_DECOMPOSER.asSupplierArray().iterator()) + machines.addAll(MATTER_CAPACITOR_BANK.asSupplierArray().iterator()) machines.add(::MATTER_CABLE) machines.add(::PATTERN_STORAGE) - machines.add(::MATTER_SCANNER) + machines.addAll(MATTER_SCANNER.asSupplierArray().iterator()) machines.add(::MATTER_PANEL) - machines.add(::MATTER_REPLICATOR) - machines.add(::MATTER_BOTTLER) + machines.addAll(MATTER_REPLICATOR.asSupplierArray().iterator()) + machines.addAll(MATTER_BOTTLER.asSupplierArray().iterator()) machines.add(::MATTER_ENTANGLER) machines.add(::MATTER_RECYCLER) @@ -141,7 +141,7 @@ object MItems { machines.add(::STORAGE_EXPORTER) machines.add(::DRIVE_VIEWER) machines.add(::DRIVE_RACK) - machines.add(::ITEM_MONITOR) + machines.addAll(ITEM_MONITOR.asSupplierArray().iterator()) machines.add(::STORAGE_CABLE) machines.add(::STORAGE_POWER_SUPPLIER) diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json index 0ead5fb39..db7a07bee 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator.json @@ -1,10 +1,12 @@ { "credit": "Made with Blockbench", - "ambientocclusion": false, - "texture_size": [32, 64], + "parent": "block/block", + "render_type": "translucent", + "texture_size": [32, 32], "textures": { - "particle": "matter_replicator", - "texture": "matter_replicator" + "1": "overdrive_that_matters:block/matter_replicator_base", + "particle": "overdrive_that_matters:block/matter_replicator_base", + "texture": "overdrive_that_matters:block/matter_replicator" }, "elements": [ { @@ -12,12 +14,12 @@ "from": [15, 0, 0], "to": [16, 11, 16], "faces": { - "north": {"uv": [0, 1.25, 0.5, 4], "texture": "#texture"}, - "east": {"uv": [0, 5.25, 8, 8], "texture": "#texture"}, - "south": {"uv": [15.5, 1.25, 16, 4], "texture": "#texture"}, - "west": {"uv": [8, 9, 16, 11.75], "texture": "#texture"}, - "up": {"uv": [0, 8, 0.5, 12], "rotation": 180, "texture": "#texture"}, - "down": {"uv": [8, 8, 8.5, 12], "texture": "#texture"} + "north": {"uv": [0, 2.5, 0.5, 8], "texture": "#texture"}, + "east": {"uv": [0, 2.5, 8, 8], "texture": "#1"}, + "south": {"uv": [15.5, 2.5, 16, 8], "texture": "#texture"}, + "west": {"uv": [8, 9.5, 16, 15], "texture": "#1"}, + "up": {"uv": [0, 8, 0.5, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8, 8, 8.5, 16], "texture": "#1"} } }, { @@ -25,12 +27,12 @@ "from": [0, 0, 0], "to": [1, 11, 16], "faces": { - "north": {"uv": [7.5, 1.25, 8, 4], "texture": "#texture"}, - "east": {"uv": [8, 9, 16, 11.75], "texture": "#texture"}, - "south": {"uv": [8, 1.25, 8.5, 4], "texture": "#texture"}, - "west": {"uv": [8, 5.25, 16, 8], "texture": "#texture"}, - "up": {"uv": [7.5, 8, 8, 12], "rotation": 180, "texture": "#texture"}, - "down": {"uv": [15.5, 8, 16, 12], "texture": "#texture"} + "north": {"uv": [7.5, 2.5, 8, 8], "texture": "#texture"}, + "east": {"uv": [8, 9.5, 16, 15], "texture": "#1"}, + "south": {"uv": [8, 2.5, 8.5, 8], "texture": "#1"}, + "west": {"uv": [8, 2.5, 16, 8], "texture": "#1"}, + "up": {"uv": [7.5, 8, 8, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [15.5, 8, 16, 16], "texture": "#1"} } }, { @@ -38,12 +40,10 @@ "from": [0, 11, 1], "to": [8, 16, 6], "faces": { - "north": {"uv": [4, 13.25, 8, 14.5], "texture": "#texture"}, - "east": {"uv": [0, 0, 5, 5], "texture": "#missing"}, - "south": {"uv": [4, 12, 8, 13.25], "texture": "#texture"}, - "west": {"uv": [8.5, 4, 11, 5.25], "texture": "#texture"}, - "up": {"uv": [4, 12, 8, 13.25], "texture": "#texture"}, - "down": {"uv": [0, 0, 8, 5], "texture": "#missing"} + "north": {"uv": [4, 10.5, 8, 13], "texture": "#texture"}, + "south": {"uv": [4, 13, 8, 15.5], "texture": "#texture"}, + "west": {"uv": [8.5, 0, 11, 2.5], "texture": "#1"}, + "up": {"uv": [4, 8, 8, 10.5], "texture": "#texture"} } }, { @@ -51,77 +51,99 @@ "from": [8, 11, 0], "to": [16, 16, 6], "faces": { - "north": {"uv": [0, 0, 4, 1.25], "texture": "#texture"}, - "east": {"uv": [5, 4, 8, 5.25], "texture": "#texture"}, - "south": {"uv": [0, 12.25, 4, 13.5], "texture": "#texture"}, - "west": {"uv": [0, 12, 4, 13.5], "texture": "#texture"}, - "up": {"uv": [0, 12, 4, 13.5], "texture": "#texture"}, - "down": {"uv": [0, 0, 8, 6], "texture": "#missing"} + "north": {"uv": [0, 0, 4, 2.5], "texture": "#texture"}, + "east": {"uv": [5, 0, 8, 2.5], "texture": "#1"}, + "south": {"uv": [0, 8.5, 4, 11], "rotation": 180, "texture": "#texture"}, + "west": {"uv": [5, 0, 8, 2.5], "texture": "#1"}, + "up": {"uv": [0, 8, 4, 11], "texture": "#texture"} + } + }, + { + "name": "canisterlight", + "from": [5, 11, 11], + "to": [14, 15, 15], + "faces": { + "north": {"uv": [11, 0, 15.5, 2], "rotation": 180, "texture": "#texture"}, + "south": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, + "up": {"uv": [11, 0, 15.5, 2], "texture": "#texture"} + }, + "forge_data": { "block_light": 15, "sky_light": 15 } + }, + { + "name": "canister", + "from": [14, 11, 11], + "to": [15, 15, 15], + "faces": { + "north": {"uv": [15.5, 0, 16, 2], "rotation": 180, "texture": "#texture"}, + "east": {"uv": [8, 0, 10, 2], "texture": "#texture"}, + "south": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, + "up": {"uv": [15.5, 0, 16, 2], "texture": "#texture"} } }, { "name": "canister", "from": [3, 11, 11], - "to": [15, 15, 15], + "to": [5, 15, 15], "faces": { - "north": {"uv": [10, 12, 16, 13], "rotation": 180, "texture": "#texture"}, - "east": {"uv": [8, 12, 10, 13], "texture": "#texture"}, - "south": {"uv": [10, 12, 16, 13], "texture": "#texture"}, - "west": {"uv": [8, 12, 10, 13], "texture": "#texture"}, - "up": {"uv": [10, 12, 16, 13], "texture": "#texture"}, - "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} + "north": {"uv": [10, 0, 11, 2], "rotation": 180, "texture": "#texture"}, + "south": {"uv": [10, 0, 11, 2], "texture": "#texture"}, + "west": {"uv": [8, 0, 10, 2], "texture": "#texture"}, + "up": {"uv": [10, 0, 11, 2], "texture": "#texture"} } }, { "name": "canister", "from": [3, 11, 6], + "to": [5, 15, 10], + "faces": { + "south": {"uv": [10, 0, 11, 2], "texture": "#texture"}, + "west": {"uv": [8, 0, 10, 2], "texture": "#texture"}, + "up": {"uv": [10, 0, 11, 2], "texture": "#texture"}, + "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} + } + }, + { + "name": "canisterlight", + "from": [5, 11, 6], + "to": [14, 15, 10], + "faces": { + "south": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, + "up": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, + "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} + }, + "forge_data": { "block_light": 15, "sky_light": 15 } + }, + { + "name": "canister", + "from": [14, 11, 6], "to": [15, 15, 10], "faces": { - "north": {"uv": [0, 0, 6, 1], "texture": "#missing"}, - "east": {"uv": [8, 12, 10, 13], "texture": "#texture"}, - "south": {"uv": [10, 12, 16, 13], "texture": "#texture"}, - "west": {"uv": [8, 12, 10, 13], "texture": "#texture"}, - "up": {"uv": [10, 12, 16, 13], "texture": "#texture"}, + "east": {"uv": [8, 0, 10, 2], "texture": "#texture"}, + "south": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, + "up": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} } }, { "name": "pipe", - "from": [1, 11, 7], + "from": [0, 11, 7], "to": [3, 14, 9], "faces": { - "north": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "east": {"uv": [0, 0, 1, 0.75], "texture": "#missing"}, - "south": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "west": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "up": {"uv": [0, 13.5, 1, 14], "texture": "#texture"}, - "down": {"uv": [0, 0, 1, 0.5], "texture": "#missing"} + "north": {"uv": [1, 12, 0, 13.5], "texture": "#texture"}, + "south": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, + "west": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, + "up": {"uv": [0, 11, 1, 12], "texture": "#texture"} } }, { "name": "pipe", - "from": [1, 11, 12], + "from": [0, 11, 12], "to": [3, 14, 14], "faces": { - "north": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "east": {"uv": [0, 0, 1, 0.75], "texture": "#missing"}, - "south": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "west": {"uv": [0, 14, 1, 14.75], "texture": "#texture"}, - "up": {"uv": [0, 13.5, 1, 14], "texture": "#texture"}, - "down": {"uv": [0, 0, 1, 0.5], "texture": "#missing"} - } - }, - { - "name": "frame", - "from": [0, 11, 15], - "to": [0.5, 16, 16], - "faces": { - "north": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "east": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "south": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "west": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "up": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "down": {"uv": [0, 0, 0, 1], "texture": "#missing"} + "north": {"uv": [1, 12, 0, 13.5], "texture": "#texture"}, + "south": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, + "west": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, + "up": {"uv": [0, 11, 1, 12], "texture": "#texture"} } }, { @@ -129,12 +151,11 @@ "from": [15.5, 11, 15], "to": [16, 16, 16], "faces": { - "north": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "east": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "south": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "west": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "up": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "down": {"uv": [0, 0, 0, 1], "texture": "#missing"} + "north": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "east": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "south": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "west": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "up": {"uv": [2, 15, 2.5, 15.5], "texture": "#texture"} } }, { @@ -142,12 +163,22 @@ "from": [15.5, 15, 6], "to": [16, 16, 15], "faces": { - "north": {"uv": [0, 0, 0, 1], "texture": "#missing"}, - "east": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "south": {"uv": [0, 0, 0, 1], "texture": "#missing"}, - "west": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "up": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "down": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"} + "east": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, + "west": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, + "up": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"}, + "down": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"} + } + }, + { + "name": "frame", + "from": [0, 11, 15], + "to": [0.5, 16, 16], + "faces": { + "north": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "east": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "south": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "west": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, + "up": {"uv": [2, 15, 2.5, 15.5], "texture": "#texture"} } }, { @@ -155,120 +186,143 @@ "from": [0, 15, 6], "to": [0.5, 16, 15], "faces": { - "north": {"uv": [0, 0, 0, 1], "texture": "#missing"}, - "east": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "south": {"uv": [0, 0, 0, 1], "texture": "#missing"}, - "west": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "up": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"}, - "down": {"uv": [14.5, 0, 16, 0.75], "texture": "#texture"} + "east": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, + "west": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, + "up": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"}, + "down": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"} } }, { + "name": "body", "from": [1, 0, 0], "to": [15, 1, 16], "faces": { - "north": {"uv": [0.5, 3.75, 7.5, 4], "texture": "#texture"}, - "east": {"uv": [0, 0, 8, 0.25], "texture": "#missing"}, - "south": {"uv": [8.5, 3.75, 15.5, 4], "texture": "#texture"}, - "west": {"uv": [0, 0, 8, 0.25], "texture": "#missing"}, - "up": {"uv": [0.5, 8, 7.5, 12], "rotation": 180, "texture": "#texture"}, - "down": {"uv": [8.5, 8, 15.5, 12], "texture": "#texture"} + "north": {"uv": [0.5, 7.5, 7.5, 8], "texture": "#texture"}, + "south": {"uv": [8.5, 7.5, 15.5, 8], "texture": "#texture"}, + "up": {"uv": [0.5, 8.5, 7.5, 15.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8.5, 8, 15.5, 16], "texture": "#1"} } }, { + "name": "body", "from": [8, 7, 0], "to": [15, 11, 1], "faces": { - "north": {"uv": [0.5, 1.25, 4, 2.25], "texture": "#texture"}, - "east": {"uv": [0, 0, 0.5, 0.75], "texture": "#missing"}, - "south": {"uv": [0, 0, 3.5, 1], "texture": "#texture"}, - "west": {"uv": [3.5, 1.25, 4, 2], "texture": "#texture"}, - "up": {"uv": [0, 0, 3.5, 0.25], "texture": "#missing"}, - "down": {"uv": [0.5, 2, 4, 2.25], "texture": "#texture"} + "north": {"uv": [0.5, 2.5, 4, 4.5], "texture": "#texture"}, + "south": {"uv": [4, 2.5, 0.5, 4.5], "texture": "#texture"}, + "west": {"uv": [3.5, 2.5, 4, 4.5], "texture": "#texture"}, + "down": {"uv": [0.5, 4, 4, 4.5], "texture": "#texture"} } }, { + "name": "body", "from": [1, 9, 0], "to": [8, 11, 1], "faces": { - "north": {"uv": [4, 1.25, 7.5, 1.75], "texture": "#texture"}, + "north": {"uv": [4, 2.5, 7, 3.5], "texture": "#texture"}, "east": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}, - "south": {"uv": [4, 1.25, 7, 1.75], "texture": "#texture"}, - "west": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}, - "up": {"uv": [4, 11.75, 7.5, 12], "texture": "#texture"}, - "down": {"uv": [1.5, 3.5, 5, 3.75], "texture": "#texture"} + "south": {"uv": [4, 3, 7, 3.5], "rotation": 180, "texture": "#texture"}, + "up": {"uv": [4, 15.5, 7.5, 16], "texture": "#1"}, + "down": {"uv": [4, 3, 7, 3.5], "rotation": 180, "texture": "#texture"} } }, { + "name": "body", "from": [1, 1, 0], "to": [2, 9, 1], "faces": { - "north": {"uv": [7, 1.75, 7.5, 3.75], "texture": "#texture"}, - "east": {"uv": [7, 1.75, 7.5, 3.75], "texture": "#texture"}, - "south": {"uv": [7, 1.75, 7.5, 3.75], "texture": "#texture"}, - "west": {"uv": [0, 0, 0.5, 2], "texture": "#missing"}, - "up": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"}, - "down": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"} + "north": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"}, + "east": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"}, + "south": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"} } }, { + "name": "body", "from": [14, 1, 0], "to": [15, 7, 1], "faces": { - "north": {"uv": [0.5, 2.25, 1, 3.75], "texture": "#texture"}, - "east": {"uv": [0, 0, 0.5, 1.75], "texture": "#missing"}, - "south": {"uv": [0.5, 2.25, 1, 3.75], "texture": "#texture"}, - "west": {"uv": [0.5, 2.25, 1, 3.75], "texture": "#texture"}, - "up": {"uv": [0.5, 3.25, 1, 3.5], "texture": "#texture"}, - "down": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"} + "north": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"}, + "south": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"}, + "west": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"} } }, { + "name": "body", "from": [2, 1, 0], "to": [14, 2, 1], "faces": { - "north": {"uv": [1, 3.5, 7, 3.75], "texture": "#texture"}, - "east": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"}, - "south": {"uv": [1, 3.5, 7, 3.75], "texture": "#texture"}, - "west": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"}, - "up": {"uv": [1, 3.5, 7, 3.75], "texture": "#texture"}, - "down": {"uv": [0, 0, 6, 0.25], "texture": "#missing"} + "north": {"uv": [1, 7, 7, 7.5], "texture": "#texture"}, + "south": {"uv": [1, 7, 7, 7.5], "texture": "#texture"}, + "up": {"uv": [1, 7, 7, 7.5], "texture": "#texture"} } }, { + "name": "body", "from": [1, 10, 1], "to": [15, 11, 15], "faces": { - "north": {"uv": [0, 0, 7, 0.25], "texture": "#missing"}, - "east": {"uv": [0, 0, 7, 0.25], "texture": "#missing"}, - "south": {"uv": [0, 0, 7, 0.25], "texture": "#missing"}, - "west": {"uv": [0, 0, 7, 0.25], "texture": "#missing"}, - "up": {"uv": [0.5, 8.25, 7.5, 11.75], "rotation": 180, "texture": "#texture"}, - "down": {"uv": [8.5, 8.25, 15.5, 11.75], "texture": "#texture"} + "up": {"uv": [0.5, 8.5, 7.5, 15.5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} } }, { + "name": "body", "from": [1, 1, 15], "to": [15, 11, 16], "faces": { - "north": {"uv": [8.5, 9, 15.5, 11.5], "texture": "#texture"}, - "east": {"uv": [0, 0, 0.5, 2.5], "texture": "#missing"}, - "south": {"uv": [8.5, 1.25, 15.5, 3.75], "texture": "#texture"}, - "west": {"uv": [0, 0, 0.5, 2.5], "texture": "#missing"}, - "up": {"uv": [0.5, 8, 7.5, 8.25], "texture": "#texture"}, - "down": {"uv": [0, 0, 7, 0.25], "texture": "#missing"} + "north": {"uv": [8.5, 9.5, 15.5, 14.5], "texture": "#1"}, + "south": {"uv": [8.5, 2.5, 15.5, 7.5], "texture": "#texture"}, + "up": {"uv": [0.5, 8, 7.5, 8.5], "texture": "#1"} } }, { + "name": "body", "from": [3, 1, 3], "to": [13, 2, 13], "faces": { - "north": {"uv": [10.5, 13, 16, 13.25], "texture": "#texture"}, - "east": {"uv": [10.5, 13, 16, 13.25], "texture": "#texture"}, - "south": {"uv": [10.5, 13, 16, 13.25], "texture": "#texture"}, - "west": {"uv": [10.5, 13, 16, 13.25], "texture": "#texture"}, - "up": {"uv": [10.5, 13, 16, 15.75], "texture": "#texture"}, - "down": {"uv": [0, 0, 0.5, 0.25], "texture": "#missing"} + "north": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, + "east": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, + "south": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, + "west": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, + "up": {"uv": [10.5, 8, 16, 13.5], "texture": "#texture"} + } + }, + { + "from": [-2, 10, 7.1], + "to": [0, 14, 8.9], + "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 8]}, + "faces": { + "north": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "south": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "west": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "up": {"uv": [8.5, 8.5, 9.5, 9.5], "texture": "#texture"}, + "down": {"uv": [8.5, 11.5, 9.5, 12.5], "texture": "#texture"} + } + }, + { + "name": "pipestuff", + "from": [-2, 10, 12.1], + "to": [0, 14, 13.9], + "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 13]}, + "faces": { + "north": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "south": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "west": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, + "up": {"uv": [8.5, 8.5, 9.5, 9.5], "texture": "#texture"}, + "down": {"uv": [8.5, 11.5, 9.5, 12.5], "texture": "#texture"} + } + }, + { + "name": "pipestuff", + "from": [-2, 10, 12.1], + "to": [0, 14, 13.9], + "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 8]}, + "faces": { + "north": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, + "south": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, + "west": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, + "up": {"uv": [8.5, 13.25, 9.5, 13.75], "texture": "#texture"}, + "down": {"uv": [8.5, 14.75, 9.5, 15.25], "texture": "#texture"} } } ] diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_error.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_error.json index 676bb08aa..40e58257d 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_error.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_error.json @@ -1,5 +1,5 @@ { - "parent": "overdrive_that_matters:block/matter_replicator_working", + "parent": "overdrive_that_matters:block/matter_replicator", "texture_size": [32, 32], "textures": { "1": "overdrive_that_matters:block/matter_replicator_base", diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_idle.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_idle.json index dc7a117ad..94e64e6cc 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_idle.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_idle.json @@ -1,5 +1,5 @@ { - "parent": "overdrive_that_matters:block/matter_replicator_working", + "parent": "overdrive_that_matters:block/matter_replicator", "texture_size": [32, 32], "textures": { "1": "overdrive_that_matters:block/matter_replicator_base", diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_working.json b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_working.json index db7a07bee..5f5466b60 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_working.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/matter_replicator_working.json @@ -1,329 +1,9 @@ { - "credit": "Made with Blockbench", - "parent": "block/block", - "render_type": "translucent", + "parent": "overdrive_that_matters:block/matter_replicator", "texture_size": [32, 32], "textures": { "1": "overdrive_that_matters:block/matter_replicator_base", "particle": "overdrive_that_matters:block/matter_replicator_base", "texture": "overdrive_that_matters:block/matter_replicator" - }, - "elements": [ - { - "name": "body", - "from": [15, 0, 0], - "to": [16, 11, 16], - "faces": { - "north": {"uv": [0, 2.5, 0.5, 8], "texture": "#texture"}, - "east": {"uv": [0, 2.5, 8, 8], "texture": "#1"}, - "south": {"uv": [15.5, 2.5, 16, 8], "texture": "#texture"}, - "west": {"uv": [8, 9.5, 16, 15], "texture": "#1"}, - "up": {"uv": [0, 8, 0.5, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [8, 8, 8.5, 16], "texture": "#1"} - } - }, - { - "name": "body", - "from": [0, 0, 0], - "to": [1, 11, 16], - "faces": { - "north": {"uv": [7.5, 2.5, 8, 8], "texture": "#texture"}, - "east": {"uv": [8, 9.5, 16, 15], "texture": "#1"}, - "south": {"uv": [8, 2.5, 8.5, 8], "texture": "#1"}, - "west": {"uv": [8, 2.5, 16, 8], "texture": "#1"}, - "up": {"uv": [7.5, 8, 8, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [15.5, 8, 16, 16], "texture": "#1"} - } - }, - { - "name": "controlpanel", - "from": [0, 11, 1], - "to": [8, 16, 6], - "faces": { - "north": {"uv": [4, 10.5, 8, 13], "texture": "#texture"}, - "south": {"uv": [4, 13, 8, 15.5], "texture": "#texture"}, - "west": {"uv": [8.5, 0, 11, 2.5], "texture": "#1"}, - "up": {"uv": [4, 8, 8, 10.5], "texture": "#texture"} - } - }, - { - "name": "computer", - "from": [8, 11, 0], - "to": [16, 16, 6], - "faces": { - "north": {"uv": [0, 0, 4, 2.5], "texture": "#texture"}, - "east": {"uv": [5, 0, 8, 2.5], "texture": "#1"}, - "south": {"uv": [0, 8.5, 4, 11], "rotation": 180, "texture": "#texture"}, - "west": {"uv": [5, 0, 8, 2.5], "texture": "#1"}, - "up": {"uv": [0, 8, 4, 11], "texture": "#texture"} - } - }, - { - "name": "canisterlight", - "from": [5, 11, 11], - "to": [14, 15, 15], - "faces": { - "north": {"uv": [11, 0, 15.5, 2], "rotation": 180, "texture": "#texture"}, - "south": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, - "up": {"uv": [11, 0, 15.5, 2], "texture": "#texture"} - }, - "forge_data": { "block_light": 15, "sky_light": 15 } - }, - { - "name": "canister", - "from": [14, 11, 11], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [15.5, 0, 16, 2], "rotation": 180, "texture": "#texture"}, - "east": {"uv": [8, 0, 10, 2], "texture": "#texture"}, - "south": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, - "up": {"uv": [15.5, 0, 16, 2], "texture": "#texture"} - } - }, - { - "name": "canister", - "from": [3, 11, 11], - "to": [5, 15, 15], - "faces": { - "north": {"uv": [10, 0, 11, 2], "rotation": 180, "texture": "#texture"}, - "south": {"uv": [10, 0, 11, 2], "texture": "#texture"}, - "west": {"uv": [8, 0, 10, 2], "texture": "#texture"}, - "up": {"uv": [10, 0, 11, 2], "texture": "#texture"} - } - }, - { - "name": "canister", - "from": [3, 11, 6], - "to": [5, 15, 10], - "faces": { - "south": {"uv": [10, 0, 11, 2], "texture": "#texture"}, - "west": {"uv": [8, 0, 10, 2], "texture": "#texture"}, - "up": {"uv": [10, 0, 11, 2], "texture": "#texture"}, - "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} - } - }, - { - "name": "canisterlight", - "from": [5, 11, 6], - "to": [14, 15, 10], - "faces": { - "south": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, - "up": {"uv": [11, 0, 15.5, 2], "texture": "#texture"}, - "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} - }, - "forge_data": { "block_light": 15, "sky_light": 15 } - }, - { - "name": "canister", - "from": [14, 11, 6], - "to": [15, 15, 10], - "faces": { - "east": {"uv": [8, 0, 10, 2], "texture": "#texture"}, - "south": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, - "up": {"uv": [15.5, 0, 16, 2], "texture": "#texture"}, - "down": {"uv": [0, 0, 6, 1], "texture": "#missing"} - } - }, - { - "name": "pipe", - "from": [0, 11, 7], - "to": [3, 14, 9], - "faces": { - "north": {"uv": [1, 12, 0, 13.5], "texture": "#texture"}, - "south": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, - "west": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, - "up": {"uv": [0, 11, 1, 12], "texture": "#texture"} - } - }, - { - "name": "pipe", - "from": [0, 11, 12], - "to": [3, 14, 14], - "faces": { - "north": {"uv": [1, 12, 0, 13.5], "texture": "#texture"}, - "south": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, - "west": {"uv": [0, 12, 1, 13.5], "texture": "#texture"}, - "up": {"uv": [0, 11, 1, 12], "texture": "#texture"} - } - }, - { - "name": "frame", - "from": [15.5, 11, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "east": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "south": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "west": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "up": {"uv": [2, 15, 2.5, 15.5], "texture": "#texture"} - } - }, - { - "name": "frame", - "from": [15.5, 15, 6], - "to": [16, 16, 15], - "faces": { - "east": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, - "west": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, - "up": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"}, - "down": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"} - } - }, - { - "name": "frame", - "from": [0, 11, 15], - "to": [0.5, 16, 16], - "faces": { - "north": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "east": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "south": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "west": {"uv": [0, 15, 2.5, 15.5], "rotation": 270, "texture": "#texture"}, - "up": {"uv": [2, 15, 2.5, 15.5], "texture": "#texture"} - } - }, - { - "name": "frame", - "from": [0, 15, 6], - "to": [0.5, 16, 15], - "faces": { - "east": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, - "west": {"uv": [0, 15.5, 4.5, 16], "texture": "#texture"}, - "up": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"}, - "down": {"uv": [0, 15.5, 4.5, 16], "rotation": 90, "texture": "#texture"} - } - }, - { - "name": "body", - "from": [1, 0, 0], - "to": [15, 1, 16], - "faces": { - "north": {"uv": [0.5, 7.5, 7.5, 8], "texture": "#texture"}, - "south": {"uv": [8.5, 7.5, 15.5, 8], "texture": "#texture"}, - "up": {"uv": [0.5, 8.5, 7.5, 15.5], "rotation": 180, "texture": "#1"}, - "down": {"uv": [8.5, 8, 15.5, 16], "texture": "#1"} - } - }, - { - "name": "body", - "from": [8, 7, 0], - "to": [15, 11, 1], - "faces": { - "north": {"uv": [0.5, 2.5, 4, 4.5], "texture": "#texture"}, - "south": {"uv": [4, 2.5, 0.5, 4.5], "texture": "#texture"}, - "west": {"uv": [3.5, 2.5, 4, 4.5], "texture": "#texture"}, - "down": {"uv": [0.5, 4, 4, 4.5], "texture": "#texture"} - } - }, - { - "name": "body", - "from": [1, 9, 0], - "to": [8, 11, 1], - "faces": { - "north": {"uv": [4, 2.5, 7, 3.5], "texture": "#texture"}, - "east": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}, - "south": {"uv": [4, 3, 7, 3.5], "rotation": 180, "texture": "#texture"}, - "up": {"uv": [4, 15.5, 7.5, 16], "texture": "#1"}, - "down": {"uv": [4, 3, 7, 3.5], "rotation": 180, "texture": "#texture"} - } - }, - { - "name": "body", - "from": [1, 1, 0], - "to": [2, 9, 1], - "faces": { - "north": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"}, - "east": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"}, - "south": {"uv": [7, 3.5, 7.5, 7], "texture": "#texture"} - } - }, - { - "name": "body", - "from": [14, 1, 0], - "to": [15, 7, 1], - "faces": { - "north": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"}, - "south": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"}, - "west": {"uv": [0.5, 4.5, 1, 7], "texture": "#texture"} - } - }, - { - "name": "body", - "from": [2, 1, 0], - "to": [14, 2, 1], - "faces": { - "north": {"uv": [1, 7, 7, 7.5], "texture": "#texture"}, - "south": {"uv": [1, 7, 7, 7.5], "texture": "#texture"}, - "up": {"uv": [1, 7, 7, 7.5], "texture": "#texture"} - } - }, - { - "name": "body", - "from": [1, 10, 1], - "to": [15, 11, 15], - "faces": { - "up": {"uv": [0.5, 8.5, 7.5, 15.5], "rotation": 180, "texture": "#1"}, - "down": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#1"} - } - }, - { - "name": "body", - "from": [1, 1, 15], - "to": [15, 11, 16], - "faces": { - "north": {"uv": [8.5, 9.5, 15.5, 14.5], "texture": "#1"}, - "south": {"uv": [8.5, 2.5, 15.5, 7.5], "texture": "#texture"}, - "up": {"uv": [0.5, 8, 7.5, 8.5], "texture": "#1"} - } - }, - { - "name": "body", - "from": [3, 1, 3], - "to": [13, 2, 13], - "faces": { - "north": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, - "east": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, - "south": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, - "west": {"uv": [10.5, 13, 16, 13.5], "texture": "#texture"}, - "up": {"uv": [10.5, 8, 16, 13.5], "texture": "#texture"} - } - }, - { - "from": [-2, 10, 7.1], - "to": [0, 14, 8.9], - "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 8]}, - "faces": { - "north": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "south": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "west": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "up": {"uv": [8.5, 8.5, 9.5, 9.5], "texture": "#texture"}, - "down": {"uv": [8.5, 11.5, 9.5, 12.5], "texture": "#texture"} - } - }, - { - "name": "pipestuff", - "from": [-2, 10, 12.1], - "to": [0, 14, 13.9], - "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 13]}, - "faces": { - "north": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "south": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "west": {"uv": [8.5, 9.5, 9.5, 11.5], "texture": "#texture"}, - "up": {"uv": [8.5, 8.5, 9.5, 9.5], "texture": "#texture"}, - "down": {"uv": [8.5, 11.5, 9.5, 12.5], "texture": "#texture"} - } - }, - { - "name": "pipestuff", - "from": [-2, 10, 12.1], - "to": [0, 14, 13.9], - "rotation": {"angle": 22.5, "axis": "z", "origin": [0, 14, 8]}, - "faces": { - "north": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, - "south": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, - "west": {"uv": [8.5, 13.75, 9.5, 14.75], "texture": "#texture"}, - "up": {"uv": [8.5, 13.25, 9.5, 13.75], "texture": "#texture"}, - "down": {"uv": [8.5, 14.75, 9.5, 15.25], "texture": "#texture"} - } - } - ] + } } \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/models/item/matter_replicator.json b/src/main/resources/assets/overdrive_that_matters/models/item/matter_replicator.json deleted file mode 100644 index ea799161f..000000000 --- a/src/main/resources/assets/overdrive_that_matters/models/item/matter_replicator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "overdrive_that_matters:block/matter_replicator_working" -} \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/models/item/matter_scanner.json b/src/main/resources/assets/overdrive_that_matters/models/item/matter_scanner.json deleted file mode 100644 index 82efee943..000000000 --- a/src/main/resources/assets/overdrive_that_matters/models/item/matter_scanner.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "overdrive_that_matters:block/matter_scanner_working" -} \ No newline at end of file diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..8eed2559c9d05e66746b37bf5f05d2c10ed3a87a GIT binary patch literal 992 zcmV<610Vc}P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1RfPSRQ^B!00G=dL_t(o!|hcuu7W@ieQOAz zB)e3Gk~5fi0}EqkWkO+N=~+C079PRMGjISKDK}Q^hEi$xg&DFSD1!MFFEK7V^JaG5 zPG;GDzlY~}SS%JG91aJZ&u4JXp|u78%w{vJ*XzRPbUGnP5&(GNw*m3l<#Nes({){> zX^QLh$^alq5_q0hB$`gAx$C+`kTgwE<(hWWZ@1gA?RJ~fKiSyh@yG$dwrylt2HUn< zSCM5|vF^&Zlu|F1yhELDAO46oR;v{w2l`bBO}>5jY`I+Ge!oLX3E%hOI1V`H1xagN zYDUv{JRU=9-HSh9z<>b**k-eV)*5jf!}tAGBq=3=AOPna^Z7hCZ9<4*t&}S5(YFbU zW;MZa8~`ZhH`&ZtZrTChcs#Oq2R408gkhLlaU7SDn}?}eQ=lk{O2N!HZ4d;(Qvs5l zDsM|BB}~b`g%AQ(UFDzTB;0Pd+I#&5qprldJMDacw$(Su*cD2t=K+3I%{SnjLkQ7d zfj%e{_(e5cdua5ZNgJE6OAnZwK0Rd7c%>kpDyxpUN_AF12my;; zwJ3^8N;H8gpG+ntUy9SDTGNAMRSl-JpRR%uhGF>fBrBzAhZOD82>%0{r$KMUHF)O$ O0000NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Y z-fvqHzXCa&1s;*b3=DkxL735kHCP2G$X?><>&pIuk%iSnf6~Xsw?I9to-U3d8s}5{ zHu@bl5NOla)PHbksGEwj3NyQJpCjP8C=oK_+qVWOOkKfjrKK>Rk z?RV_`1G!H(2k*Vq6vwC$S6gzO!67>^k>Q&Dne$d5H_`>o{yA(+nzyYtl>49P{Tct5 zlGk2Z*kmVrfl=eu*3ZAhHd`^)OK7DE2A%V~WL~oT{>Nb5myEl%G*nIaG>2v9V{^A; zwF$dLj0>**-=ZLXdX-Gm>9o&+O&NE1rv6xFS<{+elD&$tW1ZiW7ynXT+`P5< za8k3yPe#*486VFblmrGCgKCLuL`h0wNvc(HQ7VvPFfuSQ(ls>FH82V>u(UEVv@$W! zHZZUB=#8QwH$NpatrE9}!pS$k12t&CZ79jiO)V}-%q;-vG0`hgcGGEItgVhr!d;&t;ucLK6TZ+u)S| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..abf5835e7c0e22fb843360b14939cb803c51ad65 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}^}7s=rW6$wadC0||NsA{$glH2)r=)Ue!&b5&u*lFI7!~_ zF1+8iBz^^QI14-?iy0XB_Jc5^1#7ShP>{XE)7O>#1tSZqiTNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#})^mS!_!N|gDqCe?l<6EE}R!&I{FOdo#> znD#sN{(;=5n}hdWYKmjjh^sBR&ft(8n8m{^O1%u9cUNSFPe*a^z?n}m9TNTo)@g|8G$cKfOw(>2%s>!KREmJX3!xv#e=NFv(uU*s;!U%8P#~FK*u2 zd^oAu;wPi&qKuE{4oU(8j6t=;HKHUXu_V9nO2EgL*e9`-+>x5;5L+G=B5^xB<2=?^qA-x80s3Bgcz7w bnHpJ{m_sayITjxV)WhKE>gTe~DWM4fd7j`j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..34de073d7578c6630a930efc9f790af6c306c1aa GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#})^mS!_!N|gDqCe?l<6EE}R!&I{FOdo#> znD#sN{(;=5n}hdWYKmjjh^sBR&ft(8n8m{^O1%u9cUNSFPe*a^z?n}m9TNTo)@g|8G$cKfOw(>2%s>!KREmJX3!xv#e=NFv(uU*s;!U%8P#~FK*u2 zd^oAu;wPi&qKuE{4oU(8j6t=;HKHUXu_V9nO2EgL*e9`-+>x5;5L+G=B5^xB<2=?^qA-x80s3Bgcz7w bnHpJ{m_sayITjxV)WhKE>gTe~DWM4fJ2T;y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..279fbd66345e8c45685c128dc5fe3e136fbcd406 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Fdh=f{}&QM1Ru9#_j+G_nSZ`F5E{;>=Z}nCv zyj8zpjsO4ha)lO;qW=q)m`wI-RG698*D_J>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}74)xVX6f|NlRML+1fdHDgJTUoeBivm0q3PLj8~ z3-7lriC=*n&H|6fVg?4j{UFR}!5XXr6l5>)^mS!_!N|gDqCe?l<6EE}R!&I{FOdo#> znD#sN{(;=5n}hdWYKmjjh^sBR&ft(8n8m{^O1%u9cUNSFPe*a^z?n}m9TNTo)@g|8G$cKfOw(>2%s>!KREmJX3!xv#e=NFv(uU*s;!U%8P#~FK*u2 zd^oAu;wPi&qKuE{4oU(8j6t=;HKHUXu_V9nO2EgL*e9`-+>x5;5L+G=B5^xB<2=?^qA-x80s3Bgcz7w bnHpJ{m_sayITjxV)WhKE>gTe~DWM4fV;$fr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..17a29e59e835d3766db09f776d3c3f8cb607fd2c GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Ebv={#I{= z!dvwl*7*M~FIQ;sDEhx(iOFQYMunMaeJvC9PM%c!@N44Fs)JrZlO`G;aQ*mgo$2Fm z0n>iR-anB0baU|DOHFZ%8gaEH*BKnL0}~mp>7O}o6>=k8(CnYX#-w@MdPBMYiQb>_ zk12WWrG-s)vKJUNZf*ViOKh_hW4(k{s$kGL&r9Yd%kO^-)_uviYfD4bgimu=c0M+D zOIDk(Tg13fhU;R*=Kn1U;-^>1G@VZSEZCHBhiB@KWtKIq2`1UA7(3SaO?mMz<;Bfg zn-3>7Tl{1+U6k?h+(AiTfHA0+xJHzuB$lLFB^RXvDF!10BO_fyBV7Zd5CcmqBSR|_ z18oBXD+2?DbBW$48glbfGSez?Ybcz2^E*(32Hb{{%-q!ClEmBskRB6V14CT{lMn+_ cD^nvY6LW|qF~{P=fO;4_UHx3vIVCg!0AnrUp#T5? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..0de11693e8ba99689a1895303818cf61da2dce9f GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}OYm17CxVX6f|Nr0Xw7MRsnz1CvFPOpM*^M+1C&}C0 zh4LKxCX@Xd6=tUOwM^7Ic~bGiuZcga4tfPmnrM8$_2aj7rjNe` zO#2;s|3L23&B1#wHN`P%#MPEuXK=_4Ok}vGf9AYZ$c=PCvwsd7ljd#f4dwnPdVj`0 zrsTDk7B<<*USQO?we|BavCUSD^%7dCf{#bF<;B007dLNh zKAhBS@srVXQO3t}2PJ_4#-Li_8c~vxSdwa$T$Bo=7>o>zjC2i+bPbF`3@ojT46RHI zv<(cb3=9~~C3>T1$jwj5OsmALp>Xoe??4S2a2rZ8b5n~;5_1bcdQ5Z;40R1mLJUl; bOpUBe%psP<9E%SF>S6G7^>bP0l+XkK4in;e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..91cd0100f54f6b01bb210bcf00c6ac43294ba2e6 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Z#Kpz+|Ns9hmhC{37#K@}{DK)Ap4~_Tagw~< zU3kB3N&E`ra29w(7BevL?FV5-3)Wy2pdfpRr>`sf3q}@J6a7ga8{Y!;uzI>UhG?8m z?c3;g*g&97UsM0V5$4pabF13(HhQbNbvrwyYRm9X;HqFwJ64vQW4%#Lx;Rdeztvlz z@K*hXHU9t0%N1HYivBNHVlvsUQDJ6UU&}Y!K9q>07{Tt9wWXZrYC zz_j17_YdSg-5k94Qd1nGMqF*lbq0s*z(j^?`e)8th1^INH2deUF=^hm-cas;qW5R~ zV@h6oX;*=RTU$T>65DLWSTCWKDj0Om^OAYV^7|iybzd^>+R{)p;nN(JosZ4k zlGP^c7BMcA;ksC{`G1Ro_~}(LO{dd73pQok;hFklnPp9Df=Tu&#*TGNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}NN|Ns9@bo{OYRWp_Z`2{mLJiCzw;v{*y zyYPP7lK2(K;VkfoEM{Qf+YiEw7OcT4Ktc8rPhVH|7mO^dCi;^;HogVwVfA!z4AD5B z+PBf~uz^6EzNY?zBh0B;=T^1nZS+=k>vncZ)t2F(z*WJVcC0Kp$9kihba9*_f2+4b z;jQ`&YyAJ0mn*b*6#ZYY#ALExqr%LzzLtr4Cr>JV_%-oo)j_YINfV6^xPJV$&h+uO zfN8&D?;ps0x;c37rKUJWjkwy9>kJOrfr$*)^v|5P3b~OkX!g%xW752By`kLyMDNe| z$CSMG(!wS?*$a#sx3+%%CAQg$v0g$eRWRtB=Oy!!<@Y}Z>%L^%wWXnI!lyYbJ0F|7 zC96%?En-|K!*#J@^ZynF@zbkhnog&E7HrD6!!z~AGRvCQ1e5Glj2-Lzro8x<^5W*L z&4-hkEq*eZF3R|L?w}+vz!+3ZTq8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}%xPUm}-$6r)b#Kpz+|NsB3ua>+5s%9(+@(X5gcy=QV#7XjY zcj5iECGjhe!&%@FSEbv={#I{= z!dvwl*7*M~FIQ;sDEhx(iOFQYMunMaeJvC9PM%c!@N44Fs)JrZlO`G;aQ*mgo$2Fm z0n>iR-anB0baU|DOHFZ%8gaEH*BKnL0}~mp>7O}o6>=k8(CnYX#-w@MdPBMYiQb>_ zk12WWrG-s)vKJUNZf*ViOKh_hW4(k{s$kGL&r9Yd%kO^-)_uviYfD4bgimu=c0M+D zOIDk(Tg13fhU;R*=Kn1U;-^>1G@VZSEZCHBhiB@KWtKIq2`1UA7(3SaO?mMz<;Bfg zn-3>7Tl{1+U6k?h+(AiTfHA0+xJHzuB$lLFB^RXvDF!10BO_fyBV7Zd5CcmqBSR|_ z18oBXD+2?DbBW$48glbfGSez?Ybcz2^E*(32Hb{{%-q!ClEmBskRB6V14CT{lMn+_ cD^nvY6LW|qF~{P=fO;4_UHx3vIVCg!0Jp&7Qvd(} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..681ec375fe5d71c2da2b8bfa6189a49bf19e5a4e GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}{teNqmbx~1K5f>NN|Ns9N70-VRRLxitE__Qmzv@jHR5VZt}{4f2PQIH(?4_GD&$7GpxHl%jY;#i^@ei)6TLs< zA5-$$OADLqWG^sk+}is2m)K@2#(D{@RKcKgo|nu^mf!yvtoxF2*OrE=37_V$?0jtQ zmaH~mw}^3}4A;eq&Hq~z#80o1X*!+uS+FVN4$ssd%PebJ6HKyKF?Ou;oATmc%8Q$~ zHXlxEw)n|tx+vr0xr36x0Ao-sag8WRNi0dVN-jzTQVd20Mn<}ZM!E(@AqJLKMut`< z2HFM&Rt5$P=Mue9H00)|WTsW()=)V4=69e54Y&;@nYpROC5gEOAU!6!28Ox@CLso< cR;ET)Cgu=JVvfa!0rfC=y85}Sb4q9e07HJ{kpKVy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..d43023269072d40d66cae2e6bd3c19e9ffb50da8 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Fdh=f{}&QM1Ru9#_j+G_nSZ`F5E{;>=Z}nCv zyj8zpjsO4ha)lO;qW=q)m`wI-RG698*D_J>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}gA-n73HQXD-;zKadC0||Nno&+MT69)r=)Ue!&b5&u*lFI7!~_ zF1+8iBz^^QI14-?iy0XB_Jc5^1#7ShP>{XE)7O>#1tSZqiT|P{Z(Yqw>N78{a=XQT|c3Mopd1Osvc7LQ1xwQ^ej@ zgVPTjlJT63kFmB4X)DB zFOsC^tCunDXkk*wV%VCcJ2{H=LcV3ABF}-3+L8*BeGVI(RN2hS#Nx!!kn$&fQ&o)D zm71jY$5}rtW?Z7Zi?eH8#It!!0Rms!v`xj%3o~5ne}6A|Q*c?)v^P`!Rz79jalY>S zlh^N_z7oyvO=~!}QfL0o*1LD47`nIm+_<{(?mBDcR+hbQAKY@^ zF5JH*IVh*|%LJJvpZ72Y24-D8rWL3?g>#m1z^A_+eDY@=KQ>wwK3i7tzy_AmwU;iZ z*A+>7JeiQs(96J*=fb;)@zAk04uc$q9qJZ&41N9k&CdJqxEDQm#};t%&+jYsj4NxV ztS^~z{{t|tR7+eVN>UO_QmvAUQh^kMk%5tsuAz~xfl-KorInGPm5G72fq|8Q0mHdO zZxju=`6-!cmAEw&PQLjas6hj6LrG?CYH>+oZUIP-iLQa6u7OF2fvJ_Lk(G%##FCg} R@nJwc44$rjF6*2UngE9i4fg;5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..e085d837fea02be27c38edb2db9ae0138e4a7f53 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Ebv={#I{= z!dvwl*7*M~FIQ;sDEhx(iOFQYMunMaeJvC9PM%c!@N44Fs)JrZlO`G;aQ*mgo$2Fm z0n>iR-anB0baU|DOHFZ%8gaEH*BKnL0}~mp>7O}o6>=k8(CnYX#-w@MdPBMYiQb>_ zk12WWrG-s)vKJUNZf*ViOKh_hW4(k{s$kGL&r9Yd%kO^-)_uviYfD4bgimu=c0M+D zOIDk(Tg13fhU;R*=Kn1U;-^>1G@VZSEZCHBhiB@KWtKIq2`1UA7(3SaO?mMz<;Bfg zn-3>7Tl{1+U6k?h+(AiTfHA0+xJHzuB$lLFB^RXvDF!10BO_fyBV7Zd5CcmqBSR|_ z18oBXD+2?DbBW$48glbfGSez?Ybcz2^E*(32Hb{{%-q!ClEmBskRB6V14CT{lMn+_ cD^nvY6LW|qF~{P=fO;4_UHx3vIVCg!05#j=2mk;8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/batterybank_frame_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..fea965e2324c3b2954eacc66c5f746dcf6c11108 GIT binary patch literal 1228 zcmV;-1T*`IP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1Ro>p^;(z!00PKKL_t(o!@XC%Zt^e`JwcgE zBqV2n0UmKY&IKct&!(B0GN5Dl-avOe_)K6 z1vK`0J!q{RnZ1tI_)tm#0JPR--u@3kYmIoZSO5UJ-7YxiD9aK;2$W@M7D_3NObCJP zc8k;L1OOP1#}_0RV-ATB=y0*msN3zD@!{bC0Py|&?aYNv^7#08CL&3a001VF36dni z@p!x-SQJGB;J*uq)#-FH<9@%#e!q8QA(Pu6<@R@yB);N!MykmL(bLnDiGegt zaX1{zXuH6lqZs)5`f@gYd3iBwnm}t}pOusnoO4JijS>Jx#yM}?JWW%x-j5Ui^l6&9 z1nz;u;Q-FLlPNxIYj>KmU@#b9Fc>(py0r55sZ$QX3FfjXIG&{_whnC5$P**JkRm`{0sp2{QN{w6!`e~Xe>l&nwoDaJa%lDLX>40*6X#o zeuWUovdn277-Oia3IGg|)oN8+i2PDa-?q$@V#b(r_m^eqScL9%LRD3UL4zI7T5dgfsy`38?;k}jnX7}%j zPMZXZqQGXe2{x|OpteeYB0kh9|A`AiPdfjN(0ULu#<1J%YH!rIZRG$k8jY~sZqFer q{7DuZk4JNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R0kEiErAt59EGFC`@>CMH(t#gPP5!B`UH7tG-B>_!@hljQC0!qT5{GZ4t(Ebxdd zW?8eR=RLG}_)Usv`Qj4Z5@vQ<1?O+cZuo-U3d8t128wB|dkz{8f%7jQx# zwI^ECP;IB$kYyY^N-*Fl=CNsky|Ku{~9c zL3zJ|NAgldhNe7`8j;g24cTFS9lGi-mTpb+Rxs+R&41g*Fp;U=ks*Nd)CCqpwFh&a zpH^JK;(SM&WsSrY#w$iG%o!P%CvDGdOIzXpgZXKZ=qvf(&zKjjE$%+r_lXVYG1U^+ zh?11Vl2ohYqEsNoU}RuqsB37bYh(~&U}|M-WMyEaZD3$!V34)S_AQEr-29Zxv`X9> zq`$X;A?LrG?CYH>+oZUIP-iLQa6u7L^25+fk8gjm8@s9Xlr!{F)a=d#Wzp$P!v CAh~1! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..c0046cb5001d03b885677b84532e0439a9eef163 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R24tJi5@II+IIUPrf8Oib*|(o-Po8B2ovf*Bm1-ADs*lDyqrSo$+=1_C*p1s;*b z3=DjSK$uZf!>a)($X?><>&pIuk%d)Kwu+~#2`F^d)5S4FAv?^kLs$L9(yeLU3PwG(`ET18CNkAKG6Zm*y1-(n_F&HQ z(~2utobPC}tdY3Fc*UrNIV0opr0uzFX)FAHFh4C4eI@_<8S|pG#ob5yKCuBkrdr|} zQIe8al4_M)lnSI6j0}tnbqx)5jSNBzOs$NKtPG5_4GgRd46;_)zD3cHo1c=IR*74K z^!HX!5Np6~D9OxCEiOsSEdc2;(KRsCH825LVgy8%5K9;fmCJy77(8A5T-G@yGywqE Cs=O}% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..a88e41fa3a6f94cf83795c0e65bef058e1473181 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R15B)vz@ZM!mxq8rREY_#`aV( z2Ic(<9?44;8JhA$YD7-AG-QYQb?Bi2e4}+(xpUXO@geCyJ CLc5Ou literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..fe247efcc6923ee321e71c991269376eb0eaba09 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R0kT-G2`*HK?zFH~GBCML$ntrQ1T!B`UH7tG-B>_!@hljQC0!qT5{GZ4t(Ebxdd zW?8eR=RLG}_)Usv`Qj4Z5@vQ<1?O+cZuo-U3d8t128wB|dkz{8f%7jQx# zwI^ECP;IB$kYyY^N-*Fl=CNsky|Ku{~9c zL3zJ|NAgldhNe7`8j;g24cTFS9lGi-mTpb+Rxs+R&41g*Fp;U=ks*Nd)CCqpwFh&a zpH^JK;(SM&WsSrY#w$iG%o!P%CvDGdOIzXpgZXKZ=qvf(&zKjjE$%+r_lXVYG1U^+ zh?11Vl2ohYqEsNoU}RuqsB37bYh(~&U}|M-WMyEaZD3$!V34)S_AQEr-29Zxv`X9> zq`$X;A?LrG?CYH>+oZUIP-iLQa6u7L^25+fk8gjm8@s9Xlr!{F)a=d#Wzp$Pz< CZo20H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..4c89b2e339a29e5c47ddf98c672830f2008be306 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1PW@Tq(=U87~Z)#y9CMITS5dImcg0UpXFPOpM*^M+1C&}C0g{42^W+0HmS>O>_ z%)r2R2!t6$HM|;tg6t)pzOL*q7+F{)Wvh6)nt(!QJzX3_G|o@GXw7$6frl-jFW`hg zYEQJNq1sNztJ*F}?=INt%wgy>&AGGfhKSRZmH&l4o;2$>;1h}4w|c!4X?ds zzRy3^?fG`@_j4v2c7+tOt)IKnc_XWKM5mAToWiE!)^BmY*-lwrVc5XlQgewdV|%I? zgYtd_kL0C_3{80=H6o{58nVOuI&{@vEZv&stzgtsoBy_rVIot#BSQe^sS7NIY7gc- zKdrce#rcjl%NmI*j8}|Wm@_giPuiZ_mbSwG2lLY+(O2@npD{05TikuL?-Lu)W2z;t z5hW>!C8<`)MX5lF!N|bKP}k5<*T^8mz|_jv$jZP-+rYrez#wat?OPNLx%nxXX_dG& zNPlky1+fO)hLX(O)Z&uF+yamu6I}yCT>}%4B}PDG39*E+P`M1Khr!d;&t;ucLK6V8 C2DNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R2)l_24tCRJZw?-3^5B)vz@ZM!mxq8rREY_#`aV( z2Ic(<9?44;8JhA$YD7-AG-QYQb?Bi2e4}+(xpUXO@geCx7 C%ezNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1PGXIeI%5(Mg^+vPzh>3}%7HI1NRWOzW`2{mLJiCzw;v{*yyRh_U+zbSAI14-? ziy0XB4uLSEsD@VqP>{XE)7O>#1tSZqq-+&WR})a^tfz}(h{pM;7p?gYEAX%-^aY#{ zNbQLhHB{T_cvaga>D>ieojDAhra5=E-4JoQvhu&s$CGCL27DrM`_@EjTz>0Wx#6|f z%=h`Hx;@{{{eI45!>*7*w)JyYI&Wmvj_CB!o>SOV-1;r;Ux%*xi=|uBycLXkYV+T=F-&BtcVr0QJavJ^Q0>8- z=cg4{usGk*W?3U~h4G3}3v))sGDJ_cP{2Ym2*&_I+XldQ7#% zHKHUXu_VKYk@7?@fa8(A3`X&V?=85m@(vVDu9AvZrIGp!Q0 z2I=pupdi+O+fb63n_66wm|FnSW1?$dsB2&Xvcw38EFqRK7Altk^)Pt4`njxgN@xNA DuTs4) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f07c0bcb78d353ba2f70a22d41f84c244364ec GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R19Q&ZC1TwPyZUr|vgCMKq}ex@f-1!GB&UoeBivm0q3PLj8~3rl~-%|IZBv%n*= zn1O-s5C}7hYIrpO1=&kHeO=jKFtV^p%2x4oH35ardb&75B)vz@ZM!mxq8rREY_#`aV( z2Ic(<9?44;8JhA$YD7-AG-QYQb?Bi2e4}+(xpUXO@geCyS C#JxWN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddc8f23b3ebe750d3ccd4b4923d88ebe55f48e4 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1gIIlief&ZZF)^`}>u;=qDi}+G{DK)Ap4~_Tagw~Fdh=f{}$)Qnrexs|hG{*3-o?MC1I_i`IOH6?oVZ`T|Y} zr1nIM8mjGdysGVz^zMSK&K!nL)0{ioZiqNtS@~b+<4LoA13r@JL>&$k3E0QX_J@r6D`auR~Y;#nP>5-U>!NwfS$`7$!2+J2C`tp1QzdsP`#!M&J*HaX z8c~vxSdwa$T$Bo=7>o>z40R0+b&U){3{0(zjjRlev<(cb3=FbX*}g^5kei>9nO2Eg zgY@@SP!MatZ79jiO)V}-%q;-vG0`NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R2K#C-O8>m~K|^$X0ViHV6Vv#;I`RKZvh=X1n&#Zuc0h^p)_xm}M4ZA`L+1Afp>AaCuJEGG^dro0faqG9Z-)yHWuP|(2Z>hP&ma#om zj6r$7f=BXFMTVw4ks6WHEe+XWejU2%FP3gi^HwnGsm*`e#xRko-jN}I^V9_vL$wEU zo}X4+!Qy;Jn`Mo}6~-$@EzB7imnUt{ZA)9>|AYByk?1S=-_MvAtu5|8+V_bK=rPq2 z*NBpo#FA92T|Sg2eE)WhKE>gTe~DWM4f Dq>R12 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..40eb3fd8337bef514611924eaf37e41dc92e28c5 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1fGmYlFz(KtW#qBY-P1s=A9zJL<~ zsXfu6hH5((Etyv2<&iw}MemZT{OfhKWq|jtl{ur!KGBQ;SOya|=LvOmqzlbq!2FmKXt%CBzcOLgg}`9tKZWKbLh*2~7YY CO}tM4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..23da7f9ffabf31f28e340b7493495ca10dc68915 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1fy?WY{rUmu&^%u)0iHV8b)@ADes$eV$@(X5gcy=QV#7XjYcVX$zxEToKa29w( z7BevL9RguSQ4OyKpdfpRr>`sf3q}@JN!co%t|p++Sx*^#SyCLFqW#xaNk0;Ig4fsUj_N|H5xct_$a>Hw{ zneX#Yb$h;@`~95BhFu|rZ0qN)bl%9S9ntBdJ*Tj#xb<7yZ?;pGR~R<1x71u>%h;YO z#-O}k!6SL8B12Q2NR7zpmWJ#wzYbmX7fZLMc`F$8)aJi!W0=TP@5m6qdFld-q1uBv z&rd6^U~#^q&9X+~3gZ={7UqnM%agX}wxzA`|H1sUNc5Hb?`O=5))sdk?fb+A^q6Xi zYeY#(Vo9o1a#1RfVlXl=GSoFR)HN~)F)+0(l#)#GBC(mW&0LILvDUbW?Cg~ z4btCRK|!nmx1l66H?_DVF}DDu$3)k_P}jf&WQh?FSwbvfEL1K7>S6G7^>bP0l+XkK DEqcC` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..48b69e966b58a4c017fbffe2584c5cf8319fff37 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1)^mS!_!N|fYDO<(U)dUne>*?YcqH%ueMQgsp3OsBHeE}x~ zQhTCB4b^r!Ue$Ie2BucVMpgz!+6D$z1_oKHY~P}2$jwj5OsmAL zLHc_uD2O%SHk4%MrWThZ<`#hTnCKc9>Kd4UEHMHiONb?mh00|>Jq(_%elF{r5}E)I C&%8?j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/red.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2972bd63c03f9cf2c389aa8c9df10a12c45a5e GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R2qr64y+Nuj>JzD-_MOib*R%wm6_3dWKkzhDN3XE)M7oFs2|7nc5vn}I+MXMsm# zF#`kNArNL1)$nQn3bL1Y`ns~eU}RyHl&#|FY61$K^>lFz(KtW#qBY-P1s=A9zJL<~ zsXfu6hH5((Etyv2<&iw}MemZT{OfhKWq|jtl{ur!KGBQ;SOya|=LvOmqzlbq!2FmKXt%CBzcOLgg}`9tKZWKbLh*2~7aG Czq^b8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/white.png new file mode 100644 index 0000000000000000000000000000000000000000..5c18d98053d63e0e8861781b15afbea7f3ad6cd1 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU@8gn3ua&_n|#&+#7pva zcVYP7-hXC4kjGiz5n0T@z;_6Q8AUa`8i0cAC7!;n>@OHuSS4kvc)FSx7#IaST^vI! zPEVb*H}|lCKbt8ersL-9xbLrt&#=C4ZANmF~}JAC7<|Y_&81G zh5ywhU6uzEJ=?VEoKEn)ez@dFB)^!A{N$GKZPpFq*G1g;ml*syX>`Z3`9N}Ll|!do zfGQ7ztbo%rrq@O;in>j6FB|Bn&U4vhW42$+)`Vm6)m?2S46$G91-3u<<8kIFuU*#U z4Uc*639a$u*J-}B=$g9!#4s_>$-0TFj(_o9uNCC9T4kYF8Pn)v6-uVOXD$M95ASsxJHzuB$lLFB^RXvDF!10BST$7 zLtP_-5Cc;yVFVdQ&MBb@0KGiO{{R30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..4c42c8feedeabb783fa43b52696b89eaf1c8b67d GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgAs65i;tHe_5)w>JO$!PN z{{R1fe}nwn-HP?~^*2|`i;0OHYn}QEsDiO1$S;_|;n|He5GTpo-G!w;<7Oa`!&%@F zSKvp)cTs zKx$94sG-_U$E(^dN$)P$>day2G|joQ?S_ccm6iX6KAtq|H{cVA+qWiKoq)$RFq?)P&h8+L^hvaO%H(s?7Rc0{L-_MF0|;?{3*zu8V%USZh4-coakEn|DC z7=!YD1&`#ViVRJ8A~hnXTN<*%{5o{iUo734=B;4VQ=9*`jbS2Fy(2>a=cx-UhH4My zJU^|tg2nlcHp?1`D~wl+T9`93E>GH?+m^P%{|EEaBGFg!zn?KLT3g(GwC@ue&||74 zt`Q|Ei6yC4$wjF^iowXh$WYhNP}j&H#K6?b*vQJjNZY``%D^CNmF-&;4Y~O#nQ4`{ zHAsJN1qHDN+=i0O+|=Td#M}aq9ur*yLtO(CkR?VyWC^i^u~4}TsE5JR)z4*}Q$iB} D5SPCi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/item_monitor_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf1c567fd4ed2f52de573b163aea5869d734aca GIT binary patch literal 956 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 N;OXk;vd$@?2>=$`P&NPn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..fd57404a0ead44832d127595362bba711a5dd60e GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qM}Sk)j~IQ_y4=ik4;FlQBqS= zyEfsG2G9t`k|4ie28U-i(m3lZNwZ>B$1uo8>Ann=SWYi+^g#(u+{_e0hGIKvhV(;ZAN z4tw8JX^J|n{NOL&n$o8xT#Y_9(I1~Ik5R9-cbz=%*$#nz5+DFvsPm*?aEDT`M*ERZ|!F)m8L zL23JS=_aNorb~*7OXLKCCR#0+%v{N`FC$Y^@Z=?1#mpF)B`JI<-3863Zl_xQ@VUI4 z^TFkn-Ic1>7nCkD;ePL!pCA6D^<}j5l^af-{tS8cD?WYwko!i4hvCc4Q^~RMm+p8z zR&F>SCH(H&o63FcSLQBqow7Gr=G48N>?XF6dg(a~XMWyibew8y3XbQ$~^BCglY zVf^&7NHUMX@ZDpch{)}H2FGf982(MNWi_ynm>$XRwfLX<0?S{^rr9!_Ylw3B87`{N zQ1LwBzmWEWL&t7-*fSksO~`rr(Q5u}_D8A*%qDx9T|T)m?exUAt=&>Rw|_nod^^iW z-1G<2+21NmtmQ8@1Ji(NiEBhjN@7W>RdP`(kYX@0Ff!3KFa)9yLo+J_5Yjd$Q6~TZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..99755e503643ac70c17a818790bc222acca5fccd GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4q9T!+Hqn-T_y4=ik4+FNs#a4| zyFG<_H_!;ik|4ie28U-i(mTst!G01T}kPj4T;PGA&yg}o^8`~E% zct2DesbKhUwySy4q4H;eiv>66FjX+|GmEh6E>(g}wFGi67r}Sh+Jj=)A;mqwkT$){bx~1*e#o=i~n=i&r@;kUQ`(E=s^b zY5R5QCZ;B)ONxq1u_@DX$%U{c;*)p7Kh;sQEE~?K^ z@jT(bkoJQ^$8LDoGaX`0$a(tFYW{8ZN2&+RCVQG)KDjXM^u)KV-BLZbe?Ag?JIhDh z^as<~-zrS3qt`2WB&At9l@zCJK8a4Q4De+Gu4q9RLM2U|y1_y4=ik4-SKuvSx3 z`>=(>4rl~pNswPKgTu2MX&_FLx4R2lV%m;cAcwQSBeIx*fp0$uGg`0)s{jSrOFVsD z*D1n`B?>&Po*h;O#*f~8_;>!+9}bRNyV9#qPwbp@ zKAY!SF^CMV(fD@Rx5*=~EM~MjxB#k587zs8`#&PM-JdunHfS!r9N;a$U@>u;jX~WWRDf zLgoW+MzDjY!rpr8#EX@P^YQfTOv6Wd6=^c;pWKkqX-&Oi8c*1BK14E_ue*K6l6 ze)?G?na5!G?lDh9<*#MaY#GiqM7jJ77u9E| zc%JZINc+K|V>dkPnGUfg?DlReEYpIn%Bdg9yGZmFKzKOYIco#i8L z`h)50Zxtri@)w(dF|JzT8c~vxSdwa$T$Bo=7>o>zOmqzlfhfe#%*p_Sv<(cb3=FC! z&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dQ3tLOsq_SmY6~;nVn}@1=Pdf M>FVdQ&MBb@04B*$I{*Lx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/green.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9f49dcdceaadbc353ef449956702cd6b678608 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4q9WfE$>1Dm_y4=ik4OaJki%Kv5n0T@z_%ZS87)|YRe*x*C7!;n z>@OHuSS;9TO>A}n^*r@-aSZV|zI1AD*%AewR?iMA1LH^UKKwg>>kkLVtzGHWrzdt! zI-kvRt?|@Gfs3;z2>e{)dqP+~W!ADtQ{PQll{(z%P7HEf599+y8hE@{1aHuI@W%GV z4BihFM=BUTob76!bg2AU;9|iII!qNz{LCWkx=WA8T3ax=vEOj#{ZO?(&ag$pbO+Om z!`?SlnxalCKlsbHru3-^SEG+j^v5U5W7MndT_?|bc36dvOX2M2ZMiOHS6FggSF&HZ z9wGCAHzU}=Q(hc&9aip44>~U~+~|8`v9%*yO2H}S<@xx3%HmZH3*-)bjEfR* zP}+W7x{0ZY>5`)25;=jOiB=0HGgq?g%gEFeJbB4hF*8PHNeW*|cR};1+o_g6d@e8N zd~kVXcctp}1*OYOxZgYG=Z8OOeHkr%<%UzIKSQ4ViceoZI&0l8T?T)Ki0id; z7(e|ilFVZ;eD|0qB62&Q!LiyNhJTZ6Sq&^CrbqI7E&ivz!1C9!X|@dK8lqf&hKuSm zR6I}kFQon8(6JjH_DqLZ6LOw@w3>gL{gLVcv&o)jmrpKCJ3aAjYqwO-?VpbX-_G(8 zH~qnM_O}WXYx#@Kz%-y*;u=wsl30>zm0Xkxq!^40j7)S541p-b(9FsJgtQF|tPBjQ zCeMG1q9HdwB{QuOw+8NW>VZHF8gLs*GILXlOA>Pn5PD2P3{0#{5tgiKQ+^KA!{F)a K=d#Wzp$P!koKQpn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf6dc6258783d4eaa8084ab896e0736a8dd0bb6 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4q9U_pr>r*JbpOBG{MZDenY+}~ z)GC@vO@Kx)mIV0)GdMiEkp|)e*psVEpLahkxg9{o&xawJW{)^u*3d z=d*dPHJ;iiaB=nofuBo!PYBDW%vu&{>bohcQinU;i9wF*fqbAy1CRHL;0+oN-q^mF z!TX`&NCm@(vt7-T4wXL(Tr9XjhpB>zpIL-mcj@t1YYQef_8acJAFB4p8MbJc?qGUx z*!!kRQ`BkY2Y>n2ls+}#YV@&*{`h2hjC!@b>*RUQ4y*8SDV+VhE!V~D3QMl*O7<() zBV<1CW&}HUD(tPdPWMy3;dkHORPJNHGIx>dl)b?+r|#`!H?fV>OV43A^YcEVzopr0Dp#3!~g&Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..251aec9fb8e5e7349f7a5bd9f50de7cfdb1ec0d2 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qN2ve%C4?P_y4=ik4-2q&sS4Z zi+h|s8E6D!NswPKgTu2MX&_FLx4R2lV%m;cAcwQSBeIx*fp0$uGg`0)s{jSrOFVsD z*D1n`B?>&Po*h;O#*f~8_;>!+9}bRNyV9#qPwbp@ zKAY!SF^CMV(fD@Rx5*=~EM~MjxB#k587zs8`#&PM-JdunHfS!r9N;a$U@>u;jX~WWRDf zLgoW+MzDjY!rpr8#EX@P^YQfTOv6Wd6=^c;pWKkqX-&Oi8c*1BK14E_ue*K6l6 ze)?G?na5!G?lDh9<*#MaY#GiqM7jJ77u9E| zc%JZINc+K|V>dkPnGUfg?DlReEYpIn%Bdg9yGZmFKzKOYIco#i8L z`h)50Zxtri@)w(dF|JzT8c~vxSdwa$T$Bo=7>o>zOmqzlfhfe#%*p_Sv<(cb3=FC! z&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dQ3tLOsq_SmY6~;nVn}@1=Pdf M>FVdQ&MBb@0Knc--2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8508b67bf64419de1c9d94834184658988c102 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qN235VtG5o-T&`4KQe*psVEpLahkxg9{o&xawJW{)^u*3d z=d*dPHJ;iiaB=nofuBo!PYBDW%vu&{>bohcQinU;i9wF*fqbAy1CRHL;0+oN-q^mF z!TX`&NCm@(vt7-T4wXL(Tr9XjhpB>zpIL-mcj@t1YYQef_8acJAFB4p8MbJc?qGUx z*!!kRQ`BkY2Y>n2ls+}#YV@&*{`h2hjC!@b>*RUQ4y*8SDV+VhE!V~D3QMl*O7<() zBV<1CW&}HUD(tPdPWMy3;dkHORPJNHGIx>dl)b?+r|#`!H?fV>OV43A^YcEVzopr04j=6_y7O^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfebcf17e6015982586897ddfbd1469fe2574f7 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qM|ic3wPM9b^pKH{Mdwfrc>0^ z)a3UaQ2`pkSQ6wH%;50sMjD8d@OHuSS;9TO>A}n^*r@-aSZV|zI1AD*%AewR?iMA1LH^UKKwg>>kkLVtzGHWrzdt! zI-kvRt?|@Gfs3;z2>e{)dqP+~W!ADtQ{PQll{(z%P7HEf599+y8hE@{1aHuI@W%GV z4BihFM=BUTob76!bg2AU;9|iII!qNz{LCWkx=WA8T3ax=vEOj#{ZO?(&ag$pbO+Om z!`?SlnxalCKlsbHru3-^SEG+j^v5U5W7MndT_?|bc36dvOX2M2ZMiOHS6FggSF&HZ z9wGCAHzU}=Q(hc&9aip44>~U~+~|8`v9%*yO2H}S<@xx3%HmZH3*-)bjEfR* zP}+W7x{0ZY>5`)25;=jOiB=0HGgq?g%gEFeJbB4hF*8PHNeW*|cR};1+o_g6d@e8N zd~kVXcctp}1*OYOxZgYG=Z8OOeHkr%<%UzIKSQ4ViceoZI&0l8T?T)Ki0id; z7(e|ilFVZ;eD|0qB62&Q!LiyNhJTZ6Sq&^CrbqI7E&ivz!1C9!X|@dK8lqf&hKuSm zR6I}kFQon8(6JjH_DqLZ6LOw@w3>gL{gLVcv&o)jmrpKCJ3aAjYqwO-?VpbX-_G(8 zH~qnM_O}WXYx#@Kz%-y*;u=wsl30>zm0Xkxq!^40j7)S541p-b(9FsJgtQF|tPBjQ zCeMG1q9HdwB{QuOw+8NW>VZHF8gLs*GILXlOA>Pn5PD2P3{0#{5tgiKQ+^KA!{F)a K=d#Wzp$PyM*;60@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..545872e04e132d6ba614bacd1f40ae6e5e428b07 GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qM}FHe4mT?-T&`4KQ`e)60e$? zTGT4@yFeotOM?7@862M7NCR<_yxm>c64Q3n0y&%o9+AZi41D`Rn9+hYSOqA^UgGKN z%Kn0pg~fvPiES=O&r?qq#}JR>OQ-ghEm7cU_3W@RFn;vz!@u*l{%~;I+Lc~?dSd6K z^VvMt8c%H$xHx-)z|SSVCxqowW-W^}_1%q=MnY*{cDxF`V! zrR~?Ho0yuIE-5N5krN1-XtiK6b0y2Zj7&|zlb382Gh<|yr0}J57c`%`ooe~R=kjvS z2bWiNSE^oLP`b>7`@Lg+e)yBtm(kK!Za8)NGvwK?`1JKd?i(2%hA%r$CCA2Jy5sp+ zx#4`2@VjqsD)+HpnY+k!%HCj^Q}=eVo7hI`rROl5`FWqwasI)lv)296W$y9uq-|heWnfS> zdH!1z4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7&|?x}U}9wow8Ru*$?QDKDxe+) MPgg&ebxsLQ07Jo2SO5S3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..d66c0eb50013388384af9039e446e1013982613d GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{KaIC&U#qt`2WB&At9l@zCJK8a4Q4De+Gu4qM`>4b3b;jaR0yC{MdwZWfRoY z)buX5{{5I-t7nImf$^hvAO4-c^@oGw)~@vG(-S)< zozLdE)_7{8z{S}U1b!~@Js~WgGHY3+sqdz&N*(TWCk8pL2l9a;4Lsf}f;VV9cw_rw z2JeT8BNYrE&UQ6VI#m8FaIxS99i|EDCpB!w@fyP)~h?NrMjK9`qs zKDfNHyHfS~g3@Is-0vOp^TVICzKoW>a>J?9pCQkF#iy?ya^J}CFnrm0Dmga((jCvo z$_?kEgx`I8Q@M}*%G^b+Q}zbSoVvG@-NZIhFFl9h%+LFbj`I&bowe?lE`vWq#P!-a zjGulMN#-#azI)6Q5xJeu;8<-B!@o(ktOgbm(qt`2WB&At9l@zCJK8a4Q4De+Gu4qM~f&ImN2W-T&`4KQTst!G01T}kPj4T;PGA&yg}o^8`~E% zct2DesbKhUwySy4q4H;eiv>66FjX+|GmEh6E>(g}wFGi67r}Sh+Jj=)A;mqwkT$){bx~1*e#o=i~n=i&r@;kUQ`(E=s^b zY5R5QCZ;B)ONxq1u_@DX$%U{c;*)p7Kh;sQEE~?K^ z@jT(bkoJQ^$8LDoGaX`0$a(tFYW{8ZN2&+RCVQG)KDjXM^u)KV-BLZbe?Ag?JIhDh z^as<~-zrS3qt`2WB&At9l@zCJK8a4Q4De+Gu4qM`{(^0QPF-T&`4KQ^I7UPet# zZL#y3gFqt~OM?7@862M7NCR<_yxm>c64Q3n0y&%o9+AZi41D`Rn9+hYSOqA^UgGKN z%Kn0pg~fuc*2HEPP|s6O7sn8f<4dRZmMu}>Y4z-|GBAGh?!&+HxBhT&+}f31eR^W& zr1RN4*BVc46u3Bhg22xuz9)p`Q)VrTH1*w-RjI?B?!+L+^*}yQq=CnKMeqiV2XAa& z%;5b{aioIb!`ZIpNr%dx1uhocpu<$b#Lq0kuDkSjthEJ`8~Y7+-Vas#;|yCgOm{H7 zIP85>r77yP@`Jy8Yf7J*a5ehaM1Op;JVw3R-gWZ4XNOhzxD?KQ-j?fPc7-L^btU_i z>k%>^cr$_>JQeoVTPJ>e*J0((^q}(+!;QX27F#>Qr4*cEUY?Ktrz~FOut4s>$G9i~ z2c_-TrJISFPbJ63U%KP@ zSh?YRl<>Q6Zz}h(Uzxkeb;{mgnN#<6vYXgO>ZRu}ocVd5(Q*F4r?b}m(q-^xh`3%m zhw;?)FK#IZ0z{o_`zz~Q+49%nC}Q!>*kackf{rydB@paHj`Br`X)xFj*R0HMbu#K6SL6k*A#Hs$9)Jq(_% KelF{r5}E*h3Q>#z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_bottler/white.png new file mode 100644 index 0000000000000000000000000000000000000000..dcde675d4395091d7ff7cb14dc669998841703f4 GIT binary patch literal 893 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 G&;$T&@k4q5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fff0276998721987d4bb8a82917e35b15a343b GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNbeY&zS(aH5W0$N&HT+uPf{ke zz|+Ms#N+teiTk||JBS?rtv}@-b5V$*hRDuX6PJZrE?wd)LIn&N&&pr0KX`7T=A9>t z_+(p8C#i3o94k9_SNQ}zzpr<-zk_nNz+x9KCgo z`Rb}jh8e65iQSJBSF`fx3Y?XFB&L_VW?#m~V?PV0%x%}u=A7nwWv(R8LMRqWVH{x_*-i*NvbD~?ZdRFDJ*uzUT+=ail+qbVqGKUe2QE9 zz=W2bL*93s>V!|LNK8`jG7Pvk(??_N6hjq9H5RR%8rPHiPPZ(5(*3oNS&MC%W3JU! zUTNnpzGKUOKfWxnf%)d88E(bx({3!_)v$kPuzBsw#AJ_02{pWGh6mn1?Y}SM%+#*E zLPEiq^9)CuiqmRN(enYbznd8@Njxzt;CbW&Zs%Vd>b@(wRRdxfBrX-qHCqrS8|HM% z>dX9dzy2PN<_&m|@Qi8eBC#DSV%TF!HT?y|PHZSeNOdZTE_%}>cptHiCL zaPrOXKn)sj8%i>BQ;SOya|=LvOmqzlbq!2H3{0#{&8!TKAeKx@X3qlZVeoYIb6Mw< G&;$V0C`AAO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..805667fcb0fae65d94a5e1d07969fce4c451ff3a GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNbO{ke zz|+Ms#N+teiTk||JBS?rtv}@-b5V$*hRDuX6PJZrE?wd)LIn&N&&pr0KX`7T=A9>t z_+(p8C#i3o94k9_SNQ}zzpr<-zk_nNz+x9KCgo z`Rb}jh8e65iQSJBSF`fx3Y?XFB&L_VW?#m~V?PV0%x%}u=A7nwWv(R8LMRqWVH{x_*-i*NvbD~?ZdRFDJ*uzUT+=ail+qbVqGKUe2QE9 zz=W2bL*93s>V!|LNK8`jG7Pvk(??_N6hjq9H5RR%8rPHiPPZ(5(*3oNS&MC%W3JU! zUTNnpzGKUOKfWxnf%)d88E(bx({3!_)v$kPuzBsw#AJ_02{pWGh6mn1?Y}SM%+#*E zLPEiq^9)CuiqmRN(enYbznd8@Njxzt;CbW&Zs%Vd>b@(wRRdxfBrX-qHCqrS8|HM% z>dX9dzy2PN<_&m|@Qi8eBC#DSV%TF!HT?y|PHZSeNOdZTE_%}>cptHiCL zaPrOXKn)sj8%i>BQ;SOya|=LvOmqzlbq!2H3{0#{&8!TKAeKx@X3qlZVeoYIb6Mw< G&;$S}l||J6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c9d9c66fc640bc65a633716188fd8142d958e0 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZAO-|&6GiGegiGuH|Nr0K-ma~!t*;u)1JuJ<666=m;PC85 z8iVP|pKT z7sn8f<8LSK_de_(a{Raclz+@cA&MFzJ7Y~;7HYY4iLVG1Fl0O{f5HCXxrLf{o-E>% zZ9Sc&zHxG_?A%@D6ZHJP-rc(XXJFAx7WVyn91hifs(pWNd&sZr^8;s2`RZ`=)-~p< zt0Ea@usS4mKT=%H%Ga~AYQf#S*NuM5gI@?tFx}fM$I!lR>+jWkqPt`_dGkK7&?)gV zVJNog7r6Xtu^ivk%`CI#eCIj0TYtrM-LFd+kH6(QpL?>H@nOY>eJptv{IBO-uf4Z; zAJdK?t{0LF9A3})%Dw8YDRyYsdRhE9DH+1eV5TZ?R`!vYUhlEjzKknR z1!K-L9BnF2t2sr_2h9F%X1FBr#H@hlkq@|?e{rb$uIN?`h-HwtR4~_UL6~fq(RdP`(kYX@0Ff!6LG}1LN3Nf&>GBUI>G0-+Jure@UIG5;+q9HdwB{QuOw}!&W zH@^clXuxeK$;?eHE=kNS0O>K&H89jQFbOd*u`)HYGBko%GAWro3#f;|)78&qol`;+ E00hiLSpWb4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..beeef7432fe7e4f665537c534e8cff1683591a8f GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNbe=j3K(=V)eW`~Uy{_V#vdZS4o~eWE};j3q&S!3+-1 zZlr-YN#5=*yx+DYeg$$k3p^r=85sEXgD|57Yp@DXkiEpy*OmPRBMXZK&)kPsmjLxV z@N{tu@i_i=;(qVL4kE{Y>reT|Toj_HA+j^p#ATtDOPBbHPys{6v+@`051w17dFRO@ zKH1jON$MLX$I8y#RX#z_@9W*I>wg9o&17NUzsKQF?WfxJ_qK=px;{T}=9I4vM{iwY zzPc)sVFs&1V)rA()vSCyJF6Dl&3oPGw>$d)0%_q7`c9S>n0}GuJ zKNE&xn|^`IuNKSkUERzwYtDC`bG!9dT-W`&gz@-WuJgGkiy0qQeAvg5XTkq^-u2ph zi}x|@2;zDn$-v?DoUh!g?wVqUhOL*ykCT!i+ze)_0%v6(iRmS;*_ZM0*w4Z#a~pLT zB!bQg?EEBtEhm)?!=cm}|9_ zSK7IY@7VI+k1tDXV7_^2hFfv_v>OX}HS8Z6Y+gGvG1=o$LJhB);eq#0`|ry*Gqr24 zkWet@Jj2nZ;LzucpmwH+xZuVy6=i^)qq$AiAx1@%@%~ohB=+G z`ZE9AufNBmc>^9KJY(9rNNmT781|S_O@9Hg6B~*dd#vC8VW0bAqP#?i%`;&1tCqM% zl%ynn-Y6P!^HVa@DsgKl zoP6^;P=f~ChLX(O)Z&uF+yamu6I}yCT?3O40~0G#Gb=+Qh$WMf*|UIp7(8A5T-G@y GGywn?C`4rd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/green.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0743c0bbc1759aea63a464a89c387630db21b7 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNajk}Kn%Cgm9~@&Et-_V#vdZEern&NG2}7)yfuf*Bm1 z-ADs*lDyqrc)x8){0ii77I;J!GcfS&2Vq7F)?gK&AbW|YuPgftMiv$ep1BXNE&=L! z;OXKR;&J@##Qolf9Yl`*)}Qi^xhOllhij(j+LFet9*i<-`Bfa*Z&MGn#sbxe~-hV+E2Cb?`;qHb$x!|%qd?Tj^4V) ze05bM!wgo3#O_Cmt6BMac2+I8oA>?UvC2NpUd zekKgXHvIyZUoDp7ySkZW)|~G==XUF_xUTzk3FGm%T<3F77BfDq_^^*9&w~H;yz901 z7Vl%)5ybUEl7YkPIbXR~-8IDy4O=gZA15V4xEah;1&>7%iBilK_58jIFWjqAyMr(2dj>Hb>Cti`s>G1qD< zue5U)-?8PtA77T(z9`;ssXVK5|;|*nk@*E4RbnW z^=1CKUw@BB^9DRfc*eAKk=TwEG3+s=n*IV}CpHu__E^9F!#?-LM0tr2n`gl2S1oak zC`m~yNwrEYN(E93Mg~Skx`sx&21X$UmR3fFRwf481_o9J1`OvCy-_se=BH$)RpQoA zIQiyxpau=N4JDbmsl_FUxdk9SCb|ZOx&|g81}0XfW>$tq5KAT{vu6SIFnGH9xvXNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNbez2&y~%5%o^4*dWBzrDR(TU&cV*^2`}J&Ywme!&b5 z&u*lFI7!~_F1+8iBz^^QI14-?iy0XB_Jc5^1#7ShP>{XE)7O>#1tSZK1<%}vSC;_w zJn(dJ4DmSrcH(~T!ww?Hf9p^A$6OSms3Ed5*2HC@mP?oTickSV#<^w>sCnnf zB0kyH(@E+ZC&$Xp-Bmt8&+qHqt?PdV7R_W~-@nJ0gRssd+aABpKDui2OJ@z~G8DRUcj z86<+v3hewOel03famH$y0$J??FaFjVOp@w}WBV{IY6^>;vDaJ2xZ){+yI9vqIiKRz zJ}{xB=aBaur#j)&DiV_vybJ^G&GgY&JH=4NQH@1wr^fZ zl~>xii|^R--;Xa#Y+$~5X@*;I`?MPics1-F8f;!WGcnoYQ9=!`n&E->Py6r7I5V|t zuaHnM<~+mErsA}kQ}lem?C)lVOA=4a3V0s*fZO>Ohq~{IZq`!Bs^odKf%i{an^L HB{Ts5n2kse literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6a2076728edc682e159435585f3e0e9583b5b3 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNc()6?ACTwPUF{Qv*|_V#vdZEdSnmlc3|7)yfuf*Bm1 z-ADs*lDyqrc)x8){0ii77I;J!GcfS&2Vq7F)?gK&AbW|YuPgftMiv$ep1BXNE&=L! z;OXKR;&J@##Qolf9Yl`*)}Qi^xhOllhij(j+LFet9*i<-`Bfa*Z&MGn#sbxe~-hV+E2Cb?`;qHb$x!|%qd?Tj^4V) ze05bM!wgo3#O_Cmt6BMac2+I8oA>?UvC2NpUd zekKgXHvIyZUoDp7ySkZW)|~G==XUF_xUTzk3FGm%T<3F77BfDq_^^*9&w~H;yz901 z7Vl%)5ybUEl7YkPIbXR~-8IDy4O=gZA15V4xEah;1&>7%iBilK_58jIFWjqAyMr(2dj>Hb>Cti`s>G1qD< zue5U)-?8PtA77T(z9`;ssXVK5|;|*nk@*E4RbnW z^=1CKUw@BB^9DRfc*eAKk=TwEG3+s=n*IV}CpHu__E^9F!#?-LM0tr2n`gl2S1oak zC`m~yNwrEYN(E93Mg~Skx`sx&21X$UmR3fFRwf481_o9J1`OvCy-_se=BH$)RpQoA zIQiyxpau=N4JDbmsl_FUxdk9SCb|ZOx&|g81}0XfW>$tq5KAT{vu6SIFnGH9xvXNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNc3zgr?>gIMAc(f|Mdx3{-zYinPaWGM;M!&nmJ7tG-B z>_!@hljQC0!uxGY;#VMtv%n*=n1O+BKL|5gum-CD1=&kHeO=jKFtV^%@XUR9bqP?< z15X#n5Rc<;C+_z?>>zUdxBirW%taxJ8X`MmO{J!4Zy8dTi(M%Th{d*h^)qbjde{Xxpuj}&zXHNO*aP-zS z=BukB8D_9LBz8YiT+PbYv$JZ!-MrV0e#?Vj2uv{D+bqY>zHaO9)qJA6WH)*9KCsX! z@iSp4w&@qR{A#fr-_^}5v*vu~Ik#JX#dY1UOBj#8aHnvXxMsL{5UBY!p&f&DsWczk(gfcntd4`kNqs1GPhBe zK_cj^z|K$N*P=2NXRMYfkkvl$;%}|NB&nV_whz;yrm)xHOdpN4Qw&uc)mXH4YFtn5JKeJMN%z-6W-Yd5j=5G_ zd8M7Z_>L|A{rIxP2IiZWX1Eo%PrI>zSHu3H!RECy6O%n2CDib$86J55wEw=0GgG_v z3JC>c&NCcsDo(38Mb8J!{%&TtB=N+ofaj49xSfA-sQa$yRt<<{khoMZ*K9$UY?#w2 zt1t7<{rY=6nm6DFH82V>u(UEVv@$W!HZZUB=#8QwH$NpatrE9} z!pS$k12t&CZ79jiO)V}-%q;-vG0`<&snLP`rhr!d;&t;uc GLK6UryG51& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..402a62071b292b055e61b4bed996aaac5f1becb4 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNcZ%YOZO>m`fLXa4{HzrDR(TU)z%zV&vX9>$U&zhDN3 zXE)M7oFs2|7v67M62AgDoCO|{#S9F5`$3q|f;CtLD9B#o>Fdh=f{}&Af@ki-t4n}- z9(cMqhIkx*J8{4FVF!`pzxAj5V=f9&)DYPjYvQs{%cVOb_8*~kYwQSdd^qwRd-FXL&Mg~;>StJ5N-xDRe`gzkHqwn*X+yqc6^Tg-UWNhpX8LHXonolssK%nTQ{#Ga-|3d6PrAPrGHbCdbIi5c z$}8>M#dmD^@5h%VHZb43G{dd9ecFu$yc+fo4K}ZxnV9VHD4~W|&G5kcr~UV3oSE9S zS4b!rbDrU7Q*m0&DSAF&_IESGC5b0y1w4;@!0r5tL)~{pw`xEvgT$qRxn>K(WW$_J zS$&y*?$_Vr(Yyf<5}q+_T_m<+MGSjPsiwbx*oh6rj6K%x|FF+}F;QM3#O4_=`c+F@ zBT7;dOH!?pi&B9UgOP!ek*=YUu7OdAfu)s^p_Pe&wt<0_fdRw0L~j%gx%nxXX_dG& z6i&YR9jHMAZbM0CZfbE!Vr~IQkBP2NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNdEwM5`qF8}pZzW@LKx3{-zYin=6r3f;Vu_VYZn8D%M zjWiG^$=lt9_uH1luRsoGfk$L90|VcF5N5Ps4ORgPvX^-Jy0X7uWMQ%3nfvhS5}=+3 zo-U3d9>?EK-0ywZLFD*v{VD&Li$WANM0UoSxGdCi=@MTNDqzTXR{nzh!E*~W?>t$= zC);{DNqytwSlPL|$|vageZ9MN{m;OnnJn!4_c$D?{Z#w@-u94R*XIY$obuJ-=&fta zS64+c%wTm$?0%%Unw76-XVrqcd9NG&mIuEOm|(iMS&pH7-PYf$`9ycgZt~`RV4+ju zXTnfy(=TxO)nYlmtD9M7&H2uAZnyr5>$+c;Fdl!)bw2lGG2_FE5Bpg1Ecjo~yIy;5 z@jj*N;F}>t9`!YTr`&l?;Zlf-P zM9^7*ou9<7MP(|^SS?c^t9{_b-&%u7Qay2OAErf3VX-szdg~ZhJSA`!>l!KNQ{37I zCbaY%^1kC#Cwy8(Vv>TFVZgnaJ{oJM7^*m`v1skoxSrg1x@GB;?yrT+T5QW4bFH@W zN;`M)9b5kU@nwk(%r`I1a4T+~c4GmrhW$f>&1+{SCVMtgXE@qaoK|y+o)4J)-OO-F;)z)S&m$jjJOAQP_g&Gg8W77Maj9Ug*@7_HFsD;i zU*@0t_4jx*Z@`0uXG~iciS1Ys!yZ$r=`SF5VnZ=wkM;XM>~mjCl$Qvxc?OJr)e_f; zl9a@fRIB8oR3OD*WME{ZYiOivU=(6tX=P++Wn!RhU|?lnz;G_n8%0BIeoAIqC2kFc zlW%?pYS4h&P?DLOT3nKtTL98yqHAENYhV&$U}9xzW@Tsuv1C#*dlpa+gQu&X%Q~lo FCIAK|M=1aR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..27f68247b0ae2ef92159ead44d6b98efd439b8c2 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNdExqH=`sf3q}?e3!b?TuPy=V zdEn{d7~*mK?Zo}whaE(Y|JI-KkGUvBQA1>BtclA)Etf9w6`=x#jA!L9*dIK%Q1i}{ zMSQZYr<2q-PL7qGyQ_SHp5NEITi5>#ESkx}zJHIyq1sQi@9%97`E`AM;LIss9gg0* z#(Z^EB*P3=hs5qjimO@qdUjSVxSRL7(QkS13xNrydzp5S!SKT$m4h>r`iytQ?L%12tR0Yn;J`&SQUb8RbHNyk%pZ4FEab{}Q zULm1i%z1{RO~q+7r|9{B+273!mn5E;74SUr0k`un4t3uZ-Kqhx3=)?L=9(=ClMQn^ zW%XtLxnF;eNAm_eNO;Dyb&=SP6*25FrJDW%Vkb5fGxk`&|HD4_#YB0D5SwSf=vOUq zjVMV;EJ?LWE=mPb3`PbNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNbOqP8+ud48(ml>h(#x3{-zYirvrue=1*!&nmJ7tG-B z>_!@hljQC0!uxGY;#VMtv%n*=n1O+BKL|5gum-CD1=&kHeO=jKFtV^%@XUR9bqP?< z15X#n5Rc<;C+_z?>>zUdxBirW%taxJ8X`MmO{J!4Zy8dTi(M%Th{d*h^)qbjde{Xxpuj}&zXHNO*aP-zS z=BukB8D_9LBz8YiT+PbYv$JZ!-MrV0e#?Vj2uv{D+bqY>zHaO9)qJA6WH)*9KCsX! z@iSp4w&@qR{A#fr-_^}5v*vu~Ik#JX#dY1UOBj#8aHnvXxMsL{5UBY!p&f&DsWczk(gfcntd4`kNqs1GPhBe zK_cj^z|K$N*P=2NXRMYfkkvl$;%}|NB&nV_whz;yrm)xHOdpN4Qw&uc)mXH4YFtn5JKeJMN%z-6W-Yd5j=5G_ zd8M7Z_>L|A{rIxP2IiZWX1Eo%PrI>zSHu3H!RECy6O%n2CDib$86J55wEw=0GgG_v z3JC>c&NCcsDo(38Mb8J!{%&TtB=N+ofaj49xSfA-sQa$yRt<<{khoMZ*K9$UY?#w2 zt1t7<{rY=6nm6DFH82V>u(UEVv@$W!HZZUB=#8QwH$NpatrE9} z!pS$k12t&CZ79jiO)V}-%q;-vG0`<&snLP`rhr!d;&t;uc GLK6V$_C^!{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/red.png new file mode 100644 index 0000000000000000000000000000000000000000..a896934f19ca0d6b0d066b2322bf71e9a8367121 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNa@M^$N(l0v6~?EnA&+uPf_!@hljQC0!uxGY;#VMtv%n*=n1O+BKL|5gum-CD1=&kHeO=jKFtV^%@XUR9bqP?< z15X#n5Rc<;C+_z?>>zUdxBirW%taxJ8X`MmO{J!4Zy8dTi(M%Th{d*h^)qbjde{Xxpuj}&zXHNO*aP-zS z=BukB8D_9LBz8YiT+PbYv$JZ!-MrV0e#?Vj2uv{D+bqY>zHaO9)qJA6WH)*9KCsX! z@iSp4w&@qR{A#fr-_^}5v*vu~Ik#JX#dY1UOBj#8aHnvXxMsL{5UBY!p&f&DsWczk(gfcntd4`kNqs1GPhBe zK_cj^z|K$N*P=2NXRMYfkkvl$;%}|NB&nV_whz;yrm)xHOdpN4Qw&uc)mXH4YFtn5JKeJMN%z-6W-Yd5j=5G_ zd8M7Z_>L|A{rIxP2IiZWX1Eo%PrI>zSHu3H!RECy6O%n2CDib$86J55wEw=0GgG_v z3JC>c&NCcsDo(38Mb8J!{%&TtB=N+ofaj49xSfA-sQa$yRt<<{khoMZ*K9$UY?#w2 zt1t7<{rY=6nm6DFH82V>u(UEVv@$W!HZZUB=#8QwH$NpatrE9} z!pS$k12t&CZ79jiO)V}-%q;-vG0`<&snLP`rhr!d;&t;uc GLK6Vn+(ljh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/white.png new file mode 100644 index 0000000000000000000000000000000000000000..1244d5e8416af596f1edabcb32f9013de8ee0aeb GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l+X?E32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNdE|Ns9FA3i*I@SwfDU0Yi_K`L%KPy=I0kY6x^!?PP{ zAWo9Ey9-ywg)d=14rhT!WHAE+-+mBgv|tTZ0SdC0c>21szhGoxvEZ5e@ahtvp8K9I zjv*e$-%i}`bvQue*l(_-`U=yvSe7c3iRky2sjhKbOvsaCI+gGz!?TuUL?6B<%UloJQuWJw2TZO!+JF(8B;qitGJ1;Pt z`Do+hlig8e6M9}MqtMR4;(dR>`s!Dn%zd}T=iQ$8oaxZV2erI+isa^1#QlHT@r&z$ zmu5l&gMvn^)gA4hk?jhLzUVxBpq?I}%Wz|=!>MpF6+!4Nng1feBe{ zC#LS-aL$eUV9e8o*Ebl{ozwfI`0dMVAv|ZAZ`I^Uo3)8t zU4Hg)rZL+ahixX$E?!!wT$aIn%HKjKCp+Z9AX) zVgF?YR=za70PU>C?o*`)LZ^RXNo?e?7C*4#^SS+utW}*`oj3Sx2gbf?iEBhjN@7W> zRdP`(kYX@0Ff!6LG}1LN3Nf&>GBUI>G0-+Jure@UIG5;+q9HdwB{QuOw}!&WH@^cl zXuxeK$;?eHE=kNS0O>K&H89jQFbOd*u`)HYGBko%GAWro3#f;|)78&qol`;+0F(Yn Ay#N3J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb8664cc000dbde16f64062f7291fb11d6db4cd GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|emUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lrRYJ32_C|MMXtwYHIcM z^`@q#At50N2?_51cbgxZASNdE=eWw--HLbD$^ZZVzrDR(TU-00piU-G4`WG?UoeBi zvm0q3PLj8~3-7lriC=*n&H|6fVg?4j{UFR}!5XXr6l5>)^mS!_!N|g5!87;a)g?eZ z4?JBQLp+YZow(oou!G3)-}+PjF&Bj>YKZKNHE~&}<VT@vQs>`-A5eYTkLW zh)=flbdvhU$+5C?ca=}j^ZR;t>-wL8MKf90_wR8yRQsv+{k`oWzpl>@oH^yI!_iyU zn6IviWSGI~kl6i5aWyMn&(5j^ck^C1`YjKBAuz#oZ?haj`?{^aSM!PPlHKIZ`@lk{ z#LtAG*rs3L@~g#id{;NK%$oC^=iF}n71wpYE@3?Wmg{`($zsNb6(9Do z28p1v0y{s6UyI6AoUvM_Kvw&}i@&u7lcaj$*gi~)n!;jd?Df_$u6Rn|F4i?t&ZoGw z4@_w3IplrEsZRK`io_%ZFT;R)GkrAHPBBz*RAbTFsc}8I?{v%3C*5BQnYGxKIp$hz z<&}2s;ybqd_v6bF8<=lin&DR5KJCT=UJd()2AkK;OicE8lu*N~W_aNJ)BgK1&P?sv zD`@5OplEf3U0-i@c;CBASq3*k)TQwk-LE=)uT(bpXvSCiA ztiH@Y_v`QRXx@Ma3D20eE)v_ZB8EMtRMTHT?8Js*#vbeUf7s`~m?$q1V)G0b{i-Fd z5hW>!C8<`)MX5lF!N|bKNY~Iv*T5*mz|zXd(8|O>+rYrez<}XgqBn|$-29Zxv`X9> z3Mb$E4%DClx1l66H?_DVF}DDu$3)k_P}jgD#K6SL)Xd7z2x7^kWcDne9tKZWKbLh* G2~7YQc}FP# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_decomposer_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..0827be2c603e3663d577c16fb8d12727afd5e93d GIT binary patch literal 1689 zcmV;K24?w*P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1S1SI*B(9q00fmuL_t(|+U;6BPwPAwJ-O<_ zQmPJCrKsx0A1I=k_y?_`&inwRf|xoncVa>UiJ3AN)DDQ1DM7FowknELWr#wTjCqIm z+Hz7SO>W$aZj-YR?0ot7JddB_1}IUYM2Qk5N|Y#3qC_DvpU*L$&!Ou&bX{lv7X=jn zXfzs7RTcDjxm*^807chzsHzIvwiyYwZR6?bsSpJGq6d_OLgoO^^Dr0;Fc=Krd0z2y zz;d}{vtOk6XCcsNG*}qW+5S_=V&wn09cmA z+UT)mS(6rkL;^&z=Le#yDlE$iy-4($$z%dmRdIfP&JwC&7@1xq zPK8MmvULRzLQ>TN{eB<4UT=-OEO>u^&vgFF%ggo&;1!TmD2Y^Ln&uiQNjN+_%=F?k zKjkJM&+?X3C}pW42_cykFdmQP5I_jY9Zw<>X+rZn4_8-LN;D^Enug(U7|?81IeM2D2%upht1B`2zvLhtg{fWjqzbf$8(0V^gRGRWPZdO;T75e@D z+MuKDQV4i{en!1shhZ4(hmgI!Jpe$xUWe#=27a2yAhmzPW-bR$O8F3T}iL^GcR{yf{ZrJI>(Xe71EFh_sv25Bhp zW=MvaIXO8206aWAY;2Dju|Fmt?d*#n$qXqp6!{#$f1e;~|NZP-Bq+MBX9@vc0lx3! z@$oUpV`h{e{uU><0z_sdDZXW`-?AX}3z6Au2GcZS`%TltY&P2s0%WP?r%{QPwOLnz zod^Nn_u;y(a8ROw(*(E+A)vI|?NEicNeQm&f-j#xK0f~K5TJuL41*~l33TSE9scJD jh`KtFwBwYp3yJVQNW|INCpW=_00000NkvXXu0mjfGxZVp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/black.png new file mode 100644 index 0000000000000000000000000000000000000000..6b96845a428f5a96a6ac40243778005308e96c17 GIT binary patch literal 896 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 TgdFr%o3 zR|8Oxy~NYkmHh=H3yXzN`nwm$fqEW!x;Tb-9PgdlJ#DoDk1OZWqZ(yzRE_`tUpc)c z{X*vR4Pn_L+teA4H0<4ZPp2WY>E}+(BG2!~|K{!4dioN3#d^k$zq5WXWV4ZD3*Via zUA5lByTf>IOpI2|a zTOzyuF~>dj&F>$|Ypc9Xyx%UNHvh0%lGXlvGvf|%hw=r#bnCrvNbwH1I!n>VU?lE{Um@r(r zl-015p@i#$cEdlmA8!(7Gs*|g$Xd`<@v!03o33=$2_h9Sms7bm>oMfZo|%>X;qPU} z)AEd0o1T3BoO?xQj@YD{!c`UQ&-WgXP1Rifc9G1SX`AMn~GTK{%NsQB9Ni`io>k;qt7k34X?`AL5w*R3C6>Z@GP2WX{pa%(2by9&G9`=f2!n z!}O)K#IW~2qxMbVI(pOTqYiCY8rIrTuG1`W6kC7HRY#U+Wk1qeMRAqFN^re;=#77$C! Tgd|rRctjR6Fz_7$VMb96 zuLhtXdx@v7EBgyZ78VPk^mi|g1NA)eba4#vINm$8d)jIR9#_t#M>Wdcs2czOzjAs@ z`i0Er8^W?hwy857Y1q5-o=!t()6bonMV{Y}|IOR8_4Fn7iuH^ge`oz($YvwQ7QQ<- zyK2uZQ_jGD(L4wCuWng+zpAWZwap5z1}%m!41Zo(C@!gae%-Ltde&_Y1Ze!Z=FxQ8j>wq5bgm*iy++*-yFk!fK zDXU>ALkZUh?S_ABKi(wFW|R+}k+q(*Ju@r&!{5t{ zr{x*1Ha+?LIroar9I;6?g{vyqpYJ^&o2t3|?IM{u(>BdD$yYnFkuB&$rt#g9+1aP` z-+5O~=b!G?*x#hd{nKKrL?A==6^CoNAq}&S{?u{Q3i}+x<)9GV^Jimsp!J80>y9sV zE_MsIM;^!tvbJEp@~=s7!sS_66a0)>Kg2QrsXpM&-g5i4$eg2-nPZ#ZJ=oM?&V9MD zhUrUdiDB=5#+T^^BIPAsy1)dWTH+c}l9E`GYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+ z46F3H zi;0Q-zrpbTfoDQO!vFvOLqb9fXY9Ov`*wYOeNj=7`~ThM$0lrLVEE6#(B9szrlzK? zt<5l1)A4hQTj=#8K!X@dg8YIR9G=}s196hP-Ca1^?oF)%aySb-B8wRq_zr`!ry;cI=T6Nc&+o_o=Iz;f`VxD^dd7~wvwkmRvyo#9-<_LX zwda;8XW+kRo&)<=x2(KhRo1ZDW`$RS7Q+{YKd&z;pH@C_k}<=fa&Zh>!-mJ7S8u&r zBD?-E$36DV?;px*tGrFT-!7r#Aj9a$7^go!Ws~W7xmvSZk4$71{TD5eVNxhC6k=oy zC~QI6>%-1d_a2Z<)m;8|k<6TFo93G2s~y?M7W5(0_-@JU>{I&h zyep^kPxorNskJeU9OBP>AmNv#~qS`a{Nb$Co-6 zyM@~$599<{TQFbw*CaUM@~o^0e#WdH;+X$bA8==HxqVw?&e6%tvCZ!uZ0a!QzT8;D z^rf}Lu=hXX%X9;g@)9pyU;$t45KGL2 SBUFHT7(8A5T-G@yGywo7%~dS` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..5bac999dc41edb1493790ff5a69e581f8ac33dd1 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K99C&U#Ks}Ec8SubkeJ zej)SuhOlgrZR(6i8usqIr_&JH^mC_Xk>~g0fAjWiJ$;G2Vm)KW-&wyGvf0S7h40SI zuG(|Ulr!*OG|z$kt6NsyuPSR;ZL`9wL5txF!=Kj|l}{@lILVmdP`NmUtzpCC&#SlI zEs6G-fx#sa*$zkWQ^0FpR&pHyj-o>tw$y@i~fri$S^4s7z!~m z29!8B|50px#Gt{uqKKt1h+~egq-&(;B^eRsM+#Pbn}1j>$!dSTnQ@0auU~}~N0$bx zWI&@{U#;)Ul?;;#SOu0(d^cqVbN1P=-+4W$+nBaI%=KaCI-tip;oZ(F_ZU1FOc*X* z%4%53P{Q>=yWt<(k2eXk8Rdg#WG(2bc-ZjiO;rcx7@xhGUw=I=Gf+U4>om}b6;+( zVfxZqV%Yni@nyP!NO_5uE-(S8mbgZgq$HN4S|t~y0x1R~10xe%14AGRF*LI>03mGy z11kfAs>$=;qG-s?PsvQH#I1q*oO&Qog9hA&lFZ!H;*!MN0)!ru5Can{Q!^_=3y39V S!VxM!Jq(_%elF{r5}E)^TU6x$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..74fe917efae5db4c748821a0a482c5a005b4a08a GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K99C&U#|rRctjR6Fz_7$VMb96 zuLhtXdx@v7EBgyZ78VPk^mi|g1NA)eba4#vINm$8d)jIR9#_t#M>Wdcs2czOzjAs@ z`i0Er8^W?hwy857Y1q5-o=!t()6bonMV{Y}|IOR8_4Fn7iuH^ge`oz($YvwQ7QQ<- zyK2uZQ_jGD(L4wCuWng+zpAWZwap5z1}%m!41Zo(C@!gae%-Ltde&_Y1Ze!Z=FxQ8j>wq5bgm*iy++*-yFk!fK zDXU>ALkZUh?S_ABKi(wFW|R+}k+q(*Ju@r&!{5t{ zr{x*1Ha+?LIroar9I;6?g{vyqpYJ^&o2t3|?IM{u(>BdD$yYnFkuB&$rt#g9+1aP` z-+5O~=b!G?*x#hd{nKKrL?A==6^CoNAq}&S{?u{Q3i}+x<)9GV^Jimsp!J80>y9sV zE_MsIM;^!tvbJEp@~=s7!sS_66a0)>Kg2QrsXpM&-g5i4$eg2-nPZ#ZJ=oM?&V9MD zhUrUdiDB=5#+T^^BIPAsy1)dWTH+c}l9E`GYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+ z46Fwr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..294e74ec96c5be6004754c3e6bfc373768d7cf67 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K99C&U#?NMQuIw)uSy(KD(%-!}4%G9=)5S5w<9P4X?rEzPcw9M`9@Qv&qiX#B|H|nt z=@&AeZwSj4*{05Tq+##QdpZrFO+R;P7I}U@{x@&W*3*~RE7mi1{GIiCA)AdHTlntW z?5aJtOgRJpMe`ikzq)1R{i?Et)ix`<8nhU`F#LIaQTep;fs>3G4wZ{z*cvuG{=9nY z-4faLk2&tKZ+`z!UR&jD;{A3BB?lQsN5(k)`6-)B&&$=C-Fjpqv*^EQfee#EfuRs1 zV?c?6^B=|5M+_RgD~ebOgE;2+O1eghUXl@EexzX4xA}+FlC1XUn;Cb=^ZHd-adc_0 zN(MCQ_0{^mT*)x0fK_1m#CKC>FlV0)`<>U5x{Ybe!(1PBt^<0!6W;B-a*x4-!Gz(` zrL2af3?*D2v>X1h{dkiwn^8V^M%IF^iiZuK-gKq2P7tYxxtz+iS&t!K_ROs84}UK+ zo|b34+Vte}=iDngbHpaq6t1dZf4=vCY^vt+w~J)vOxrZqBwy{wMz)|2nZ|cZW@n$$ zf9G8}oqxJlV}Fw-_fLzh5`hfeR~)Y8hBVAR`cubIE9`R&mxDrd&!3Imfz}@~t~ijgYKdz^NlIc#s#S7PDv)9@GB7gHH82FC5JNL70}#?S zFt9Q(sG2gTe~DWM4fYe7^w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..37cbeb5d343638ca1de957b58bf373bce1c3c305 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K99C&U#F-_~2kLp`>EamTalChG_q5dtJg%Hek7|^?Q8oVmf93R+ z^b48KH-u%2Y*S}E(y({uJ)MTork^`Ci#)#{|C_gG>*-7E73�{?7Wnkj+MpEqr%w zcGaF+rksKQqInMNU){3uepOk+YMT{a4O$Fe82-GzsC-)az)8johswnSrfr&QlCO4TBU{jiOyj#Hv$Id> zzw@q~&OhC&vA;=^`=`ZLi9m+#D-PFkLmFlu{i)-q74|uX%RwQ!=g-FOKdlz2)|8kvT^vGsiZ+d$6g)ocnTP z4bzv_62spAj4#s-M9NFNbb$##wZt`|BqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu z7+4t?R85}$7DYpDeoAIqC2kGe=hOp%8Z_WGlw{_n7MCRE79jMPgcz7unVMM{T0kr@ T6OK>;>S6G7^>bP0l+XkK5vEks literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..88d6248e1cc4bbe0d35bfd52eb5c64906ea810c7 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K99C&U#*Zs_}{!eTTfqNuUOC6@psnmg={u*Y~j0e zv#a*pGUW{X7tM2E|LT^N_p8bpR@lcI%Oe%%cCI1u{$u1%^V5 zi~%JM&VLkJA2Dd~t|($D4C0vME9n|3dPzov`H_NE-{v1yOS0OZZ)V&f&+AuV#nGj~ zDjCqI*H`QNawWs00#jl!JK_I>~~&I>Nch=4|9Fkxen;@PI$NT$~^`T1`~!$ zm$Dj`GL&$A&~Et0_Tx>$Y)1Lu8CeUuDjqg`defE8Izgl&=5i|6W<7>{*)y}UKm5JS zcv_zEYSWX?pL4J1%n_SZQ@E;v{rTPlvZr~xbFB; z=VG^Td*p$fAZrWeEB~4VCtRMDHNnrA^+O!@Bx%i_AGXnK`!k-GfaX=G>PX zYnZ;YmKgT_XMCA%AW~l9r3*{|swJ)wB`Jv|saDBFsX&Us$iT=%*T4{nLJZBU3_wWR zz`)ADplb5`wFr%o3 zR|8Oxy~NYkmHh=H3yXzN`nwm$fqEW!x;Tb-9PgdlJ#DoDk1OZWqZ(yzRE_`tUpc)c z{X*vR4Pn_L+teA4H0<4ZPp2WY>E}+(BG2!~|K{!4dioN3#d^k$zq5WXWV4ZD3*Via zUA5lByTf>IOpI2|a zTOzyuF~>dj&F>$|Ypc9Xyx%UNHvh0%lGXlvGvf|%hw=r#bnCrvNbwH1I!n>VU?lE{Um@r(r zl-015p@i#$cEdlmA8!(7Gs*|g$Xd`<@v!03o33=$2_h9Sms7bm>oMfZo|%>X;qPU} z)AEd0o1T3BoO?xQj@YD{!c`UQ&-WgXP1Rifc9G1SX`AMn~GTK{%NsQB9Ni`io>k;qt7k34X?`AL5w*R3C6>Z@GP2WX{pa%(2by9&G9`=f2!n z!}O)K#IW~2qxMbVI(pOTqYiCY8rIrTuG1`W6kC7HRY#U+Wk1qeMRAqFN^re;=#77$C! TgdFr%o3 zR|8Oxy~NYkmHh=H3yXzN`nwm$fqEW!x;Tb-9PgdlJ#DoDk1OZWqZ(yzRE_`tUpc)c z{X*vR4Pn_L+teA4H0<4ZPp2WY>E}+(BG2!~|K{!4dioN3#d^k$zq5WXWV4ZD3*Via zUA5lByTf>IOpI2|a zTOzyuF~>dj&F>$|Ypc9Xyx%UNHvh0%lGXlvGvf|%hw=r#bnCrvNbwH1I!n>VU?lE{Um@r(r zl-015p@i#$cEdlmA8!(7Gs*|g$Xd`<@v!03o33=$2_h9Sms7bm>oMfZo|%>X;qPU} z)AEd0o1T3BoO?xQj@YD{!c`UQ&-WgXP1Rifc9G1SX`AMn~GTK{%NsQB9Ni`io>k;qt7k34X?`AL5w*R3C6>Z@GP2WX{pa%(2by9&G9`=f2!n z!}O)K#IW~2qxMbVI(pOTqYiCY8rIrTuG1`W6kC7HRY#U+Wk1qeMRAqFN^re;=#77$C! TgdYj<$PKtAHHN0*}aI1_r)EAj~ML z;ne^XWH0gbb!C6S$iiYFl>Y9;aiE?@o-U3d9>;s9c28Taz~jof^r%MJ8&%`~|5r|L zNxzW!d_!2a$ToGxBMp0Z-qUFaZTh)Wv&i%N@xOU{ww}JkUa_9B@XGWy%@&FPi7T{?#oj?^l&IthQO<)u6@jh2hWZi^`{!51eGoaHw1y!`86j@#ocB z@0Q4}f6Q@@ee?T=^4cnI6YsZ6C^^V5Ix@!T&rjK8dS0&9?A9X_nMMCa3uKrS3Jir9 z83Rfjoc}1cK4Q?|T~WkR7{oEhSJE|7^pcDS^CJbTzRf?ZmSnX*-^{o}p4YF!ila+| zRWhJaudmkk#9_IS6a~;s*o$zkwm3s^x3?>Yh zE@d?=WhmkLpxy9~?Z=yh*^KhRGqM(RRXl9?^rkDFb%IDm%;i+B&3X*^vS(&xfB1Wu z@w7bS)utz(Kj&W2nIkr-rf^jS`}4gAWK%Vlzg;9VXWFK@Ci!YdHnIhM$TYrNGCTW} z{yXo=>HO2Z8vC0xxqn)0l?Y_$zT$8#H>6?q(VsewT4A4KxEvIsd;VxVezKh+1^*;{Vk7MXK&GIMP6y9b*(%(*W& z)-Zi(Eivr<&-gOkK%~6HOBa{`R7+eVN>UO_QmvAUQh^kMk%5tku7M#Cg&3My8Gw+s zfq|8QLDl5>Z&5Vl=BH$)RpQpbeNH_Ps6hj6LrG?CYH>+oZUI7%Nr-`om8qGPp#{Ve TGvNpopdJQKS3j3^P6F-_~2kLp`>EamTalChG_q5dtJg%Hek7|^?Q8oVmf93R+ z^b48KH-u%2Y*S}E(y({uJ)MTork^`Ci#)#{|C_gG>*-7E73�{?7Wnkj+MpEqr%w zcGaF+rksKQqInMNU){3uepOk+YMT{a4O$Fe82-GzsC-)az)8johswnSrfr&QlCO4TBU{jiOyj#Hv$Id> zzw@q~&OhC&vA;=^`=`ZLi9m+#D-PFkLmFlu{i)-q74|uX%RwQ!=g-FOKdlz2)|8kvT^vGsiZ+d$6g)ocnTP z4bzv_62spAj4#s-M9NFNbb$##wZt`|BqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu z7+4t?R85}$7DYpDeoAIqC2kGe=hOp%8Z_WGlw{_n7MCRE79jMPgcz7unVMM{T0kr@ T6OK>;>S6G7^>bP0l+XkK9ko=- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_reconstructor_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..2c82e00730258baf17836ad560a5e3caef391da3 GIT binary patch literal 1670 zcmV;126_33P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m-4Cf@;}zdhR3?3vlo2>pH^i^YO5#?WXqAiG~I7OdazgZOzio}ah>EHoO8 z*v1%(ZQ5uwg5x+00IJoh1^~_k94s@$vD_z=_XutJP|Bjpr9Zi610& zz;}{%E+VVF>$;>C7={7Q^P+o$!9b(yWLU#6A_EiN-rnfC_8l(|043k|6K6ou1yW}) z39jqHb=~NAwOU~^nV{F}N%#5j@qx3mGwJr%*VkyZT6lSR!C&`@#_c!`wD~!$bsfI%!?tYz zz~SK`06^DugkcC>*8u=w7-GBKVm_b4aU6tU7`2n(lM7gu6>|XT^}i%V(=rVxj<4J8?lpoKKufdPEcWue zF_Mm{BZ{PHs!21T2yv!m0~|lLr18n(z_xAJwvBqdE={V}>mVM1Kc>Nm2BdSoEv3Z( zz*u%dD7K*&=Hro)0r;7hAyYew;ygqJB_Yj4$Ox*lPYULhoGTMlMVi#an39FfW`n_C zpaH<`?QP-ZPT2+W$mXX8_Y*ky$$|ZZp;h}R{q_JVl?q(fCI8oCm6XSUJEi2Sm` zcUD9#N!(hkrtuM8W+nJeC6)N(h6kVF70vckkd^!}#*_o?UIRQoKNoty>FKGoJo)UA z@cH=((=?^BzJC@3zY9r95{)CaN&2)_aREx;Xs;Xusj$dbWU{bcucK6$++#kUM;RWU zm60O&nWt|70C;+O$`wn*Y%^~vT;d|I66gcw;^IQf3VQnnCDse_2Gk_?k}^QM-PWel zDVohD^6bUjKFbZn_E}ZkG#9wKx`Jt%JGFwFn;W&D+h{c4c^;#pWf6C99A~F`B*Q24 zdcB=sD1H_*#&CIg8LKMstCeM0xVyWPSHN^S#d5iX<2dkrA9-A&-EK!!-|=`X^?58x z`Q+pzamh~5$e)jh*gEC8FR!(49){aUI z!$7CgQT|tOApR-&jeI{3C&|U~6j%?M&1Rto@Z6&OUrB^`1>{|lh+AYyQ{^VL&(nXT z0KS%AL;-m}mQ?x-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|va$-2k}`pTf$slzn;)C-|NnoXp8c&rMT|+_ z?k)mTH}UEKIh+L^k;M!Qe1|}oQB=dL0Vv2`;_2(k{(_N(jag^r&U02kJzAbFjv*e$ z&rZpn-lD+K_A|L)&qeU+6=F3b)Y677jeXHVPgR%zHO#QgXN z3A z?*?CPVsiQUAUZcDL!rg$gh0wqj{{5X9M-AtTyf&pB!;=3KN)lGJX?{po%@4iID`C- ztqNbI9UiEqtCi_4NGU6vdU8^Go!V5U^V4SR_|1^uojUtYE`t$2+XYcK=KPiVR=;=} zj^_abQnkc2q9i4;B-JXpC>2OC7#SED=^9w-8d-)I7+9H@S{WK>0~rPe`IAK6p=ij> zPsvQH#H~T@{2EZg(tz7gl9`)YT#}eu0McWkYhb8rU=m_rW@TV(Wnu!c#INvOB~TB8 Mr>mdKI;Vst0Ib>RHUIzs literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8d6363ed772ad5eba60f77bb7e7c0035e46e84 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|28I(gwQ2(c1Kt1cHa|Au|NsAIlrqGCiWrl; z-CYExZsOGeaySb-B8wRq_zryn4zne`JZ>f^aFfy}!;-e9To_K-|@sQ;xFxx?24nZJrho9ZyAD`_*jJE%9L z-VMIo#N_hxL3D0RhC++g34xTK9tW1%IjmFPx#GmHNepv6e=_FWdA1^HJNF04a0dAu zTNS=aJ3LTJS1Z$9kWyAS_2i`XI<=`x=cmos@tYyRJ9YM*Tm~b4whN+e%=s(zt$y(| z9M1y=q-u$4L`h0wNvc(HQ7VvPFfuSQ(lxNuHL?sbFt9Q)wK6o&1~Lo`@+XPBL(!0% zpOTqYiCcr*`8A+~r2)60Br`X)xFj*R0Hnu6*T7KMz$C=L%*w#n%ESa>iC^KnN}wJF MPgg&ebxsLQ020ON+5i9m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8921b159927dc8c78797810fb3d0ce51f3a98e GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|*-ol4mI{G^f$slzn;)C-|NsB4{+u5`MT|+_ z?k)mTH}UEKIh+L^k;M!Qe1|}oQB=dL0Vv2`;_2(k{(_N(jag^r&U02kJzAbFjv*e$ z&rZpn-lD+K_A|L)&qeU+6=F3b)Y677jeXHVPgR%zHO#QgXN z3A z?*?CPVsiQUAUZcDL!rg$gh0wqj{{5X9M-AtTyf&pB!;=3KN)lGJX?{po%@4iID`C- ztqNbI9UiEqtCi_4NGU6vdU8^Go!V5U^V4SR_|1^uojUtYE`t$2+XYcK=KPiVR=;=} zj^_abQnkc2q9i4;B-JXpC>2OC7#SED=^9w-8d-)I7+9H@S{WK>0~rPe`IAK6p=ij> zPsvQH#H~T@{2EZg(tz7gl9`)YT#}eu0McWkYhb8rU=m_rW@TV(Wnu!c#INvOB~TB8 Mr>mdKI;Vst0LP5#umAu6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e436ecbc7d665b97f596d738393dae479c8c40 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|B6S^tIi-Ptf$slzn;)C-|NsA6Ov$!DMT|+_ z?k)mTH}UEKIh+L^k;M!Qe1|}oQB=dL0Vv2`;_2(k{(_N(jag^r&U02kJzAbFjv*e$ z&rZpn-lD+K_A|L)&qeU+6=F3b)Y677jeXHVPgR%zHO#QgXN z3A z?*?CPVsiQUAUZcDL!rg$gh0wqj{{5X9M-AtTyf&pB!;=3KN)lGJX?{po%@4iID`C- ztqNbI9UiEqtCi_4NGU6vdU8^Go!V5U^V4SR_|1^uojUtYE`t$2+XYcK=KPiVR=;=} zj^_abQnkc2q9i4;B-JXpC>2OC7#SED=^9w-8d-)I7+9H@S{WK>0~rPe`IAK6p=ij> zPsvQH#H~T@{2EZg(tz7gl9`)YT#}eu0McWkYhb8rU=m_rW@TV(Wnu!c#INvOB~TB8 Mr>mdKI;Vst0MOOyGynhq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..d2315cea9c7c77bd91cd27cbb41a1f80c62e464c GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|R(6g?rWS#Lf$slzn;)C-|NsBC$r}DZMT|+_ z?k)mTH}UEKIh+L^k;M!Qe1|}oQB=dL0Vv2`;_2(k{(_N(jag^r&U02kJzAbFjv*e$ z&rZpn-lD+K_A|L)&qeU+6=F3b)Y677jeXHVPgR%zHO#QgXN z3A z?*?CPVsiQUAUZcDL!rg$gh0wqj{{5X9M-AtTyf&pB!;=3KN)lGJX?{po%@4iID`C- ztqNbI9UiEqtCi_4NGU6vdU8^Go!V5U^V4SR_|1^uojUtYE`t$2+XYcK=KPiVR=;=} zj^_abQnkc2q9i4;B-JXpC>2OC7#SED=^9w-8d-)I7+9H@S{WK>0~rPe`IAK6p=ij> zPsvQH#H~T@{2EZg(tz7gl9`)YT#}eu0McWkYhb8rU=m_rW@TV(Wnu!c#INvOB~TB8 Mr>mdKI;Vst0DGnBlmGw# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/green.png new file mode 100644 index 0000000000000000000000000000000000000000..f54c4e2adf538220c431726cf5fad4c5c305e802 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|{%KOq5n_RXf$slzn;)C-|NsApIVQ0{MT|+_ z?k)mTH}UEKIh+L^k;M!Qe1|}oQB=dL0Vv2`;_2(k{(_N(jag^r&U02kJzAbFjv*e$ z&rZpn-lD+K_A|L)&qeU+6=F3b)Y677jeXHVPgR%zHO#QgXN z3A z?*?CPVsiQUAUZcDL!rg$gh0wqj{{5X9M-AtTyf&pB!;=3KN)lGJX?{po%@4iID`C- ztqNbI9UiEqtCi_4NGU6vdU8^Go!V5U^V4SR_|1^uojUtYE`t$2+XYcK=KPiVR=;=} zj^_abQnkc2q9i4;B-JXpC>2OC7#SED=^9w-8d-)I7+9H@S{WK>0~rPe`IAK6p=ij> zPsvQH#H~T@{2EZg(tz7gl9`)YT#}eu0McWkYhb8rU=m_rW@TV(Wnu!c#INvOB~TB8 Mr>mdKI;Vst0Jb%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..e2182f82d45c8faf05a4b26a80351247628b5e3d GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|<}1(XPuvg~80h|gxB0ON|NsBDzvr+9sE9Gi z+ucQA>Ly+tAcwQSBeIx*f$tCqGm2_>H2?+KOFVsD*&bFjBn-6{=Rg_s}z zV4Sv;A^760Z3>Njto<)K4Nfx^mRXlFiZD+YjhKU%sy(p!#rfPYWO-wF7A4KQIWGJ*)oe)U*>2YAGox?iyohwfKn#3^I^Cx4@oo6eOwsU`w3}=wv zu~p%#w8I0nbhR?w1u12PQ%_E6uTz`Kbbi{59lse8yi;f2$z?F&XS*Qk#+<)W-|81n z!|^;|K&qCwMwFx^mZVxG7o`Fz1|tI_BV7YaT_ej70|P4)Q!7IQZ6L$IAb*m`I}{DM z`6-!cmAEy?onHe=SQ>B}N-}d(i%Sx73qX2IbPWu34NO7|%&ZKItxQZHmiQIEs|4y{ N@O1TaS?83{1OPcT>(c-L literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..0243b8bf31290c48c6914b09dbf9293dadb92823 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|&CS(?g_(hYf$slzn;)C-|NsAlU!9AAiWrl; z-CYExZsOGeaySb-B8wRq_zryn4zne`JZ>f^aFfy}!;-e9To_K-|@sQ;xFxx?24nZJrho9ZyAD`_*jJE%9L z-VMIo#N_hxL3D0RhC++g34xTK9tW1%IjmFPx#GmHNepv6e=_FWdA1^HJNF04a0dAu zTNS=aJ3LTJS1Z$9kWyAS_2i`XI<=`x=cmos@tYyRJ9YM*Tm~b4whN+e%=s(zt$y(| z9M1y=q-u$4L`h0wNvc(HQ7VvPFfuSQ(lxNuHL?sbFt9Q)wK6o&1~Lo`@+XPBL(!0% zpOTqYiCcr*`8A+~r2)60Br`X)xFj*R0Hnu6*T7KMz$C=L%*w#n%ESa>iC^KnN}wJF MPgg&ebxsLQ0F9#S{r~^~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..e44577df0497e779207dad798a72d2903277bb5f GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|85_hRrwa!L2D<;>ZGLRR|NsB@rE0JP6)`4x zySoTX-NdT{vL>4nJ@ErnSMo|r~2B08&iKnkC`wK=EHfEifJI`4G^=NszIEHu} zKRYFRdW!-_+sibkZJ+=Df4g9^TEfkl{JVdb^;K3fxiC9qNVF#=ojq-{Tcu&E5cA_7 zjMJ7f1Yf+hO`)-mwf{w@!D*(#GV4-C5$5R!43FgN6x6&kYts|hF6MVLM0p}(%Y-?~ zvoyM*xsPay2+3W$DtYj)5p(cTwFg$exF78B|2;3xMJ!;ZF+*1`^FQx|=?D1!DF2LB zxHmUiJl0|NhKB!@Pmlke)-APwy}?rF?ID@+Q2$FUa)+-8GJh41Hq~KJSJGy5cTjIg zy&HVFiOJ>XgXr9t422e}69OqeJq|3jb6BUobH#~YlNjcD{$$L#^K3=ZcJ2?7;SBOS zwkmv;c6gwcu2!bIAf>Eu>d8s%b!tU|?lpYGr7k4P+P?zopr0Ltg;F8}}l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c9cf06298a1996c45440caf9df156354ca5bac GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|>#dheGwKZt40Qj$+x*ys|NsBbQoT_MRK%F% z?d~ElbrY`+ki%Kv5n0T@z;_6Q8AUa`8i0cAC7!;n>@OHu*qC)@?mTA&)T8C;;uzv_ z{OpwM=`9KzZ7m1{?gboR8(Zk2|uLd=hU zFiu;_5Pb30HigDM*8Ufr2B(<{%dAToMVO}_Fg%j4Q&98HtW8f~yO`h25ao%CEfeM_ z&(i3M=02h+A|!Y1s^r1HM$ExW)gD;=;(oBh|M$E&7qNhu#tdD(%>TR-rXS$@qx>^k z;ojV6@mPo58yfysK0W?>TDQ~!_6AFxw})iPL;Wwc$Q`~W$oy42+Ej-@T}hkK-9fz} z^=|OxCMK7k52ABpG89^@P6(v@^f<88&S9PU&J`zqO=6hq`I9l{&a)Ls+qpkThBL_T z*sAbV+Tnp(x>}j;f|RntsV673*QrfqIzMg3j^7Lk-l?yBqRwgD8OZ*DoRRZ-e Nc)I$ztaD0e0szA<>ze=o literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3a829adb6e87e4b3025d93fde1e4761e830d4e GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|&vN;X#_|LP2D<;>ZGLRR|NsAG4)A*e6)`4x zySoTX-NdT{vL>4nJ@ErnSMo|r~2B08&iKnkC`wK=EHfEifJI`4G^=NszIEHu} zKRYFRdW!-_+sibkZJ+=Df4g9^TEfkl{JVdb^;K3fxiC9qNVF#=ojq-{Tcu&E5cA_7 zjMJ7f1Yf+hO`)-mwf{w@!D*(#GV4-C5$5R!43FgN6x6&kYts|hF6MVLM0p}(%Y-?~ zvoyM*xsPay2+3W$DtYj)5p(cTwFg$exF78B|2;3xMJ!;ZF+*1`^FQx|=?D1!DF2LB zxHmUiJl0|NhKB!@Pmlke)-APwy}?rF?ID@+Q2$FUa)+-8GJh41Hq~KJSJGy5cTjIg zy&HVFiOJ>XgXr9t422e}69OqeJq|3jb6BUobH#~YlNjcD{$$L#^K3=ZcJ2?7;SBOS zwkmv;c6gwcu2!bIAf>Eu>d8s%b!tU|?lpYGr7k4P+P?zopr09!ihasU7T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..df95d30f88357bf37b3832e5e94cb876ac7a95bf GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|Pns4SDd-Fg40Qj$+x*ys|NsB5{a&vQRK%F% z?d~ElbrY`+ki%Kv5n0T@z;_6Q8AUa`8i0cAC7!;n>@OHu*qC)@?mTA&)T8C;;uzv_ z{OpwM=`9KzZ7m1{?gboR8(Zk2|uLd=hU zFiu;_5Pb30HigDM*8Ufr2B(<{%dAToMVO}_Fg%j4Q&98HtW8f~yO`h25ao%CEfeM_ z&(i3M=02h+A|!Y1s^r1HM$ExW)gD;=;(oBh|M$E&7qNhu#tdD(%>TR-rXS$@qx>^k z;ojV6@mPo58yfysK0W?>TDQ~!_6AFxw})iPL;Wwc$Q`~W$oy42+Ej-@T}hkK-9fz} z^=|OxCMK7k52ABpG89^@P6(v@^f<88&S9PU&J`zqO=6hq`I9l{&a)Ls+qpkThBL_T z*sAbV+Tnp(x>}j;f|RntsV673*QrfqIzMg3j^7Lk-l?yBqRwgD8OZ*DoRRZ-e Nc)I$ztaD0e0stX4?708{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..d5536cab81d2fa77ee3d68e8493321dd45eeb218 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|xytinvL>4nJ@ErnSMo|r~2B08&iKnkC`wK=EHfEifJI`4G^=NszIEHu} zKRYFRdW!-_+sibkZJ+=Df4g9^TEfkl{JVdb^;K3fxiC9qNVF#=ojq-{Tcu&E5cA_7 zjMJ7f1Yf+hO`)-mwf{w@!D*(#GV4-C5$5R!43FgN6x6&kYts|hF6MVLM0p}(%Y-?~ zvoyM*xsPay2+3W$DtYj)5p(cTwFg$exF78B|2;3xMJ!;ZF+*1`^FQx|=?D1!DF2LB zxHmUiJl0|NhKB!@Pmlke)-APwy}?rF?ID@+Q2$FUa)+-8GJh41Hq~KJSJGy5cTjIg zy&HVFiOJ>XgXr9t422e}69OqeJq|3jb6BUobH#~YlNjcD{$$L#^K3=ZcJ2?7;SBOS zwkmv;c6gwcu2!bIAf>Eu>d8s%b!tU|?lpYGr7k4P+P?zopr032BBPyhe` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/red.png new file mode 100644 index 0000000000000000000000000000000000000000..c00d69b8ef8420879bc1b07ab66a63c7be2f8df9 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|lav(dWTgWG1Kt1cHa|Au|Ns9S9Ls=4GcYE3 zySoTX-NdT{vL>4nJ@ErnSMo|r~2B08&iKnkC`wK=EHfEifJI`4G^=NszIEHu} zKRYFRdW!-_+sibkZJ+=Df4g9^TEfkl{JVdb^;K3fxiC9qNVF#=ojq-{Tcu&E5cA_7 zjMJ7f1Yf+hO`)-mwf{w@!D*(#GV4-C5$5R!43FgN6x6&kYts|hF6MVLM0p}(%Y-?~ zvoyM*xsPay2+3W$DtYj)5p(cTwFg$exF78B|2;3xMJ!;ZF+*1`^FQx|=?D1!DF2LB zxHmUiJl0|NhKB!@Pmlke)-APwy}?rF?ID@+Q2$FUa)+-8GJh41Hq~KJSJGy5cTjIg zy&HVFiOJ>XgXr9t422e}69OqeJq|3jb6BUobH#~YlNjcD{$$L#^K3=ZcJ2?7;SBOS zwkmv;c6gwcu2!bIAf>Eu>d8s%b!tU|?lpYGr7k4P+P?zopr05l-!Z~y=R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler/white.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a874dafee1d1824dff29eec029c4462b9e6cb5 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%fh@Ck8MQ&anYgW>-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|A3l6IckWzZV4(Z|-R8$8{Qv)d%cHVeKt+s6 z-tH~}Q#bMI06Clm9+AZi419+`m{C;2s{ts;UgGKN%Kn0pg^gKf=FW3gKs{QXE{-7{ z$Inj5p5CIs(e^UUY1`-j|KBc{td?+dCjai=Wqp;EOfJk084~S@NoP;n>{e;mD#ZNw z2jjG*48a#~ZBuCMW9@&@X>gjUu*|xYQG|K=0mCEtIt4ZF%-Zw>wu|}Q3{jrQ*fL>` z@+^(6XznALB0_T4u1X&KYs4J9RPBM)FYX6B{D04ja}f)eY0S{o%lywfVfq2SKgvI& z74FTA7LRqV!bbPmcpj?Htyr?_6=>*Cd9yoKa*w7#LWYm|7VcXagAr2Kkdj-l1s7 z%}>cptHiBA?)(~1!qR}-P?DLOT3nKtTL98yqHAENYhV&$U}j}tY-M5svBa-J zPcbpEtqctRf#M7da&mI@_4Nq}38to|Z+9!6ULYG780h|gxB0ON|NsBL&1mHVRK%F% z?d~ElbrY`+ki%Kv5n0T@z;_6Q8AUa`8i0cAC7!;n>@OHu*qC)@?mTA&)T8C;;uzv_ z{OpwM=`9KzZ7m1{?gboR8(Zk2|uLd=hU zFiu;_5Pb30HigDM*8Ufr2B(<{%dAToMVO}_Fg%j4Q&98HtW8f~yO`h25ao%CEfeM_ z&(i3M=02h+A|!Y1s^r1HM$ExW)gD;=;(oBh|M$E&7qNhu#tdD(%>TR-rXS$@qx>^k z;ojV6@mPo58yfysK0W?>TDQ~!_6AFxw})iPL;Wwc$Q`~W$oy42+Ej-@T}hkK-9fz} z^=|OxCMK7k52ABpG89^@P6(v@^f<88&S9PU&J`zqO=6hq`I9l{&a)Ls+qpkThBL_T z*sAbV+Tnp(x>}j;f|RntsV673*QrfqIzMg3j^7Lk-l?yBqRwgD8OZ*DoRRZ-e Nc)I$ztaD0e0sv7c>t6r> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_recycler_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..35519c71e7cf14cbfb14e28da57f52efae5834bb GIT binary patch literal 1199 zcmV;g1W@~lP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$UEuM4iPI=L zvpdet_sz~oHk%D}cCJU9RXEI(-dJC0sttbpp*gt7-PB4?RKk-MA0d22gK&$ zz3aM}f;k!F2*NNVZ90_FY|tFwoY#Kmy6*5vShdL@Nf-n{o^ZBpBT14U;gyjuj4av_ zD8dZ@qA2R-fGWd@W9TIUD%@Tc&+`BP$K#O*P7tJ2=8dY)iEcGCO*7wIhVyF~X|-Bu z8D6i~agwmFjdKTN%kW1&GL(?63pkEbNzDKd$8pXXbu8LTIgaBPzVB<1S!V|rWAJ?+ z&*xLg&ax~p#>Owl9|!(_2L#k~ZNHKvf#W!E90y5~{C)(A_xPqeeG`^-#Wc-7kORd= zLba*r?MCFfZhkS%vaGc$1^~k_`pNQFvcpI$GYq->o#pN zC=8pzTNcAGNNqU|f}6m8#5#bbr9ab={0}PB`bFl(x=%Ip;(yAZ$mihE=4bVmIl513KA!8k6y7 z#bU-Q&P8VCtD-AS#k#WJ?}=(c7Ln7L3B{`_9CISlX-XJly-dn;ChUU$D2nn)IRNZ- zyToB3=Hkj6m_8cE8`@d7e~t6S`et{0}y3J#AX5v^D?$ N002ovPDHLkV1gTKC|&>n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/black.png new file mode 100644 index 0000000000000000000000000000000000000000..35f5fc8307ecd54a3ed37fe1b67aae43486193b7 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cuGmh$;c=i+Y&AzAuT5-_y7NY-u{_xK%I;w zL4Lsu4$p3+fjCLt?k<9lw%YCjaySb-B8wRq`1XS^qXlcQ3Q&-}#M9T6{RJZni0X`P(FWBvx;0ey{ntNUH6583Y;XWwCTXJxqK&+u72?8gWF1%}sO9At=6 z-XQdH!+B-4*%9Be1&S^xoOWFDtMX}QO9j!wpA)C?h%)f`Gt4~MwExh$quVOk zMXn|WZN0-BdE)-FZ0=BoeS8etWPA^$hq0Te|K1~cf79+T3x;Di8V?`l%lLcj0^^*r zjm+!T#+-P_@m}%d&vX9IKYsr&Zc%BmRwvcuCv$-{|I~VhmPLI2&lZ1w0}L_M64!{5 zl*E!$tK_0oAjM#0U}U0eUT$c9tKZWKbLh*2~7Zb#O)&h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a03db2be1ebac3c38f20034708fff7f716c8ac55 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cKpbS+Y+v!StTbY_y7O@fCElBK%I;w zL4Lsu4$p3+fjCLt?k<9lw%YCjaySb-B8wRq`1XS^qXlcQ3Q&-}#M9T6{RJZni0X`P(FWBvx;0ey{ntNUH6583Y;XWwCTXJxqK&+u72?8gWF1%}sO9At=6 z-XQdH!+B-4*%9Be1&S^xoOWFDtMX}QO9j!wpA)C?h%)f`Gt4~MwExh$quVOk zMXn|WZN0-BdE)-FZ0=BoeS8etWPA^$hq0Te|K1~cf79+T3x;Di8V?`l%lLcj0^^*r zjm+!T#+-P_@m}%d&vX9IKYsr&Zc%BmRwvcuCv$-{|I~VhmPLI2&lZ1w0}L_M64!{5 zl*E!$tK_0oAjM#0U}U0eUT$c9tKZWKbLh*2~7ZJ!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cqZ8@Wjd-J+Y%mSAulH<_y7O@b5E<*0d+E# z1o;IsI6S+N2I3@nySoTJ+G@KC$l)yTh%9Dc;M)(vj25iHDnLQ@5>H=O_7{vSELIwm zuLOSw>Jj#IaSX9I-8zY}tVMyx#gilN#-Urk=WmnjkyyR0`Mu^Z&$fduM~?VRiHTGZ zkBYPN+O+-xi;L?QhEJjfPL@oi9rDp1e*YD1?7pGRQ8jVKpM&|Gdz@bH-Ok3~zm6?o z^#e8OiLr-GzvWMMS;ufi^VO6kuI_iOK4iaZoPCGUot5E^Kf`DBupb}v7Z_fDagZTO zd4tf)4d<2FW=DL>7AU%)aN2RnugaTUTn}vIEfquye@>jnBg(+%&oJ|3)BZ#2j&7@D z7rB}kwDk^i#8>{(Fz){Y|^WEEta6XgqwFFXQjA3ygEh zHZreU8*}0z$9u(-KhOC;|M>mCxJ9MKTAfsrpUef;{8Q^0S{Cv7KU@6$4KT!1OI#yL zQW8s2t&)pUffR$0fsu)>fguou7@AobfRMINoH!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cnTHQiqy0n+Y&CARU{`T_y7O@Es<=0fjSvW zg8YIR9G=}s196hP-CYD9ZMEG6vL>4nJ@a+d-Mhn(p6`&w{iKnkC`wK=E7AuX( zSAxF-^$2^qIEGl9Zk@zf)}p}U;>nSBYIPJLPSLMwvt_L>qmI|VUKPOJ(5oO@>XP9}iY5$>hN4Hh7 zi(E|%+IojM^2GgT+1#NF`}i2P$@m^h4`Vk`|Gh`@{-)hw77WL3G#)<8m+|-51;#mL z8=2RwjXCj<?)FK#IZ0z{o_`zz~Q+49%nC}Q!>*kackf{rydB@ upaHj`Br`X)xFj*R0HMbu#K6SL)WXWd0Afk-RgEb?Jq(_%elF{r5}E+-y6?yU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..81176af74af6ce31507c6ac51e38a1a07a95fead GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+c$!++SlT)q+Y)YQVlF2q_y7O@g}+u^1nOig z3GxeOaCmkj4a7@OHuSgbTA zUkUyW)FbTa;uvCax^)s`S&IUXizi3kjYGG7&)+85Be8m0^Lx!-o^1zRjvVos5)-K+ z9u;TjwQ2nY78lnq44*^|oGh72JLIE3{QfK2*nLBrqiW)eKL_(W_c*=YyPb`}e;r%G z>IZ7l6JrmXe#@WivX0@3=Bp`7T;1-IQtHxJ1fH-e}>QMVLv|TFEG6R;vhqm z@&=)o8_p}U&5rn%El_kp;k4tDUzInzxE|QZTPlba{+u|CN0fojpJC?7ru~Q39o<&R zE^;+7XzLy3$P@RUWpjrz?BiqDCgXc3J&fH%{r4Wp`Naf?cewK}OLKbZ@x`KQ)1v@GKDf42Dh8(@g3mbgZg zq$HN4S|t~y0x1R~10xe%14AGRF*LI>03mGy11kfAs>$=;qG-s?PsvQH#I1q*oO&Qo vg9hA&lFZ!H;*!MN0)!ru5Can{Qwu8-1BfNTS2d;p^)Pt4`njxgN@xNA*|P7% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/green.png new file mode 100644 index 0000000000000000000000000000000000000000..00f13214e37b395af7671d7dc43580f8cb7e31d6 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+czVQ1_@+o6+Y;^+CMG8*_y7NY({;ao19dW% z1o;IsI6S+N2I3@nySoTJ+G@KC$l)yTh%9Dc;M)(vj25iHDnLQ@5>H=O_7{vSELIwm zuLOSw>Jj#IaSX9I-8zY}tVMyx#gilN#-Urk=WmnjkyyR0`Mu^Z&$fduM~?VRiHTGZ zkBYPN+O+-xi;L?QhEJjfPL@oi9rDp1e*YD1?7pGRQ8jVKpM&|Gdz@bH-Ok3~zm6?o z^#e8OiLr-GzvWMMS;ufi^VO6kuI_iOK4iaZoPCGUot5E^Kf`DBupb}v7Z_fDagZTO zd4tf)4d<2FW=DL>7AU%)aN2RnugaTUTn}vIEfquye@>jnBg(+%&oJ|3)BZ#2j&7@D z7rB}kwDk^i#8>{(Fz){Y|^WEEta6XgqwFFXQjA3ygEh zHZreU8*}0z$9u(-KhOC;|M>mCxJ9MKTAfsrpUef;{8Q^0S{Cv7KU@6$4KT!1OI#yL zQW8s2t&)pUffR$0fsu)>fguou7@AobfRMINoH!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cpA;#W47$nu`S_xeQV|9=Jrb+8HNV&V<=J-7<;W4ADKU{M z;!$ySUYpimU~zH%!thDdz{!%Sv_n4n!|%VMjoml2IjSbk_;WD7bC1*Oz1!Is{MWH1 ztbU*-Ju&vM>9_pJF6$VsXug`V#MS+-)rahNjkE7Cy0bFe@n`s~9`@sd{sP16FAg$9 zDQ^&Zx#7Gr+w6#M*#bou6iz!X`Bizdi|c`nyrqI@;m?WFctjca{26ARY}$Wl-O+88 z>>^hagSOsbjy!SySvGel!#+NSZ8E-x(!!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cve&tHa1os+Y+9amo6tK_y7NY@njw+piah; zAirP+hi5m^K%69RcNf7&TWxm%Ih+L^k;M!QeEUI|(SkKt1t`c~;_2(k{(_N(#Y$uH zmEi9{J;I(Yjv*GOTPHD=wJ7kocyi?3ICSgx{B4pw605g0zt{Zb*>=$7$Pu3@F_9|b zQE_%&o7P`oadG{^@JZCb$&#tGLq7V$@4upr-8Zy3swU3(b1=VikJIbD+u0cW*Rdt6 zexN2jG4`lm(RzM8Vc)%~v3hwOKav+ppvvohTAXZWlh_Tz*80>kSs4l+b3 zZxDL9;k+{2?1*pK0!0@TPCG97Re7_E>w%5DrGjYT&xzA`L>c(}8D^er+J9)>(QTFN zB3BcGw%%cmJaPY7Hg_n)K0bzRGQNk>!`MyKfA5jJziD@v1;eo$jfW5OW&AyMfpJdR zM&@;EV@^Eec&~W!=Q;o9AHV+>x2UvOtCMQ-lexf}e`-BL%OXDiXN$kT0fv}riEBhj zN@7W>RdP`(kYX@0Ff!3KFa)9yLo+J_5Yjd!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+c*ZXjNn0y+Y)g3f6k$0zx&QzFU+L<;0@TS^ z666=m;PC858ivK9p%7f+778;5TFp1)19M`HE1=J%SvJlhVs9691MB_>iu zJSxu4Yt#A*EH18J7(R&_I9W24cF0G6`2AP3vHONLN7cj`e-7q%?s0m(cRL${|2npW z)eqF9C&nH&{gyx3WgWv6%~w;FxVqo9`jGvuarPZXcUFcw{tTbh!+w0wUtoCs#X*KB z9PbrR{ygXZ{Nwlk;ue(_YjsjhelizW^G~g3Xj#PP|7`L1H^2~6Epd$~ zNl7e8wMs5Z1yT$~21X{j28KWsVrXV%07BXZ237_JRg>qxMbVI(pOTqYiCY8rIrTuG v1`W6kC7HRY#U+Wk1qeMRAqFN^rWRHv1`tbvuWC#I>S6G7^>bP0l+XkKz%KBs literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8801784a64b65c931fd8cd769610f4416509ff GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+crGxTw#I7Vu`S_~4ZGyz-;ui(`nz>DEb%Wi1LkE}k5DHxAwUJ%5{IkHqS2&F?jTdA1#NIda5jN=&4R zcvPI7*QWIsSX^AcFnkg{v6Ej+~f3m?{+o@|8;B$ zs~@OIPmDcm`YnI5%Q}WDny;oTadp3I^&$IRbMa_U0|G3 zwvl<=+L#j$Io>Ot{CUp*`N!}7#Vsl=*6O61{A4b$=AT;6(6Wfn|Jma2Z-61DTH+c} zl9E`GYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+46FgTe~DWM4fP(bkO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fc70d08f06e9b8ccc6d3c4fcad044b400022a3 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cwSE7eU#02Y)kl|XdXE^x&QzFzd4%S0o2J@ z666=m;PC858ivK9p%7f+778;5TFp1)19M`HE1=J%SvJlhVs9691MB_>iu zJSxu4Yt#A*EH18J7(R&_I9W24cF0G6`2AP3vHONLN7cj`e-7q%?s0m(cRL${|2npW z)eqF9C&nH&{gyx3WgWv6%~w;FxVqo9`jGvuarPZXcUFcw{tTbh!+w0wUtoCs#X*KB z9PbrR{ygXZ{Nwlk;ue(_YjsjhelizW^G~g3Xj#PP|7`L1H^2~6Epd$~ zNl7e8wMs5Z1yT$~21X{j28KWsVrXV%07BXZ237_JRg>qxMbVI(pOTqYiCY8rIrTuG v1`W6kC7HRY#U+Wk1qeMRAqFN^rWRHv1`tbvuWC#I>S6G7^>bP0l+XkKwFmJZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..886e51ba8852c818f57a91f7dca4ea3f222ffb0f GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+cwQ`@^q^txu`S^T^4jF&;OkH}&M2EP3u%xJ+HtO68dFY)wsWq-lQ!eXT{ z`AYD2pdMjQ7sn8b)2)*j%UTq8Ts%4QZXCMxd;T`b9*Nc4n%`^w@@zZka^#55l$b~r z@u)aEuTASOu(-H>VfZ9!;AF{E+94nP;rCzB#_k*1990u%{5hE4xyR}C-tBA*{_EHh zRzFaao)~-B^jrR9mvszRG+#|w;_80a>O=Os#@Tlm-B}s#_%nP~5Bu>!e}Uok7Y7-l zls5>y+;Co*ZFa=BY=NQ+3a1^H{Hna!#r42O-cmud@aM#7JfaMI{tPouHtj#O?&!8k zc9E-zL0j)IN1nL0#_9>c96$-rux4%!1+AjmE==`7-_>h%|ErCp=A-D|Fgy4-vC2QwZt`| zBqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t?R85}$7DYpDeoAIqC2kGe=hOp% v8Z_WGlw{_n7MCRE79jMPgcz7unOazx7(gruzN#?=sE5JR)z4*}Q$iB}&HM5l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..c3fd8854a4576ccc292189eb3d54bc5e8f1b1f3c GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&lA8w~#+c%~>!%vPRrY)g2wT&tX%-2eaoj~n#?O=n;% z3GxeOaCmkj4a7@OHuSgbTA zUkUyW)FbTa;uvCax^)s`S&IUXizi3kjYGG7&)+85Be8m0^Lx!-o^1zRjvVos5)-K+ z9u;TjwQ2nY78lnq44*^|oGh72JLIE3{QfK2*nLBrqiW)eKL_(W_c*=YyPb`}e;r%G z>IZ7l6JrmXe#@WivX0@3=Bp`7T;1-IQtHxJ1fH-e}>QMVLv|TFEG6R;vhqm z@&=)o8_p}U&5rn%El_kp;k4tDUzInzxE|QZTPlba{+u|CN0fojpJC?7ru~Q39o<&R zE^;+7XzLy3$P@RUWpjrz?BiqDCgXc3J&fH%{r4Wp`Naf?cewK}OLKbZ@x`KQ)1v@GKDf42Dh8(@g3mbgZg zq$HN4S|t~y0x1R~10xe%14AGRF*LI>03mGy11kfAs>$=;qG-s?PsvQH#I1q*oO&Qo vg9hA&lFZ!H;*!MN0)!ru5Can{Qwu8-1BfNTS2d;p^)Pt4`njxgN@xNATS@Qx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator/red.png new file mode 100644 index 0000000000000000000000000000000000000000..090a51be2a8abb5c785e225b0915b69dd22fa6f5 GIT binary patch literal 674 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..28d2f8fce46f223a6331d40884722f1e60fb03ab GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiVO@V>gaW7Yio;%i5=S#E+;4V|Nno>y(Kq+su@dy{DK)Ap4~_Tagw~< zU3kB3N&E`ra29w(7BevL9R^{> zI$@*VVFQ6Se+9V%ff}qEk1%OY+w_seah{f#R%OPOrQAaP56;BC66Kz7rp<+oNm$fk9`R@_hY%9(#m38x9tTE4TemIil#ew9hi~2%DXwrDQk-+r^Mz< z+ANc&mq+>UJM?7nvaipy->eRszOU)6*`e@)ej~3Z6F-Z(Pk*j%v0}xEfQS>TuD|`Z zJL2{!&Uajl;_+Wn_pO|7`D&q?L*Gv~OD4a{<5kC^=T^C2Zr=T1M%9F`wrR{S;yC*r zpEHbkS#5Ipe_ZCFgnjN3wy%Tgk}O2p4*&Qe-}b}ay?Fzdkn?guV9=?SxJHzuB$lLF zB^RXvDF!10BNJT%Lm&zNh$Tn7EcXKSFnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKin5(lQ|y$rwY9~>#ExwVmy?tG|Nnoe$Q3Q1YQ~ZvzhDN3XE)M7oFs2| z7v67M62AgDoCO|{#S9F5he4R}c>anMpdfpRr>`sf3q}?eE3MjFMz?`_WISCQLp08} zPT1&o*g&AoUqS9bpa$#4BTSmpHhpAqoTnwGRhe;RDYuaSgEO(OM7bxNX>(y?QWo}c zUC8{(xp4ZCJ{IQv?VI=ivAZwNAe5ZbUVP`xyshaSOaJhGvQO~Wlu%j9({Q|UN&>&! z>5EGHyBe}Z;vVkWV_(9}{aCK2w6a*&ZF_-3gCWzQqUjD^2WF(M@@|fD%G#pIDY5yI zHp}Gc<;@?`wK%b|}1{-^lC9#LuGc)1RwbtXOd(AmYTT>uI^teJkf%zFO$!(D&2LlF6^~c-67!xmE6$n|D8$Q8nSKZ5s27IL^Mu z=L}Zt$# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa3208ac59ff98424377a0c0a2998d2e8ae2bbd GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKibU!#ExwVmy?tG|Np;DzpfxqHDgJTUoeBivm0q3PLj8~ z3-7lriC=*n&H|6fVg?4j!ywFfJby(BP>{XE)7O>#1tSZKl~(O7quW3|GM+AuAsXjf zCv5aPY#`9)uON3IP=j^j5hl%Pn?ABQ&eIaps?4~ulv~LE!I{`sqTCbCw7IY`DGU3! zE@Xb?TsZwm9}DyT_RahM*xi?B5K7KzFTV3;-q!SvrGI!o*(dmGN~kR5X*gavC4pb= z^hKrpT@BeHaSwOxu`l7~ek|8hT3M{?w!Ofi!I0@t(R2r|12a-rc{fKnWo^;ql-PVp zn`QF!@+kj(hn_56_VtCe?IR;)M?5OHGF^|#-4 zN8CQe`HqWGJpN1SzLoPWUoCWV==djgyy{r=+$#6W&AT7WsG9KAHjVj39B1F- zbA~Z5t4%KdkIOuiu+Lq>_H|HQl7&dy;U7Qb+kV))H*eq)a$XJ!Y1INSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKimdD$%`9!TwY9~>#ExwVmy?tG|Ns9SF)l@*YQ~ZvzhDN3XE)M7oFs2| z7v67M62AgDoCO|{#S9F5he4R}c>anMpdfpRr>`sf3q}?eE6pdDlM{h@WISCQLp08} zPT1&o*g&AoUqS9bpa$#4BTSmpHhpAqoTnwGRhe;RDYuaSgEO(OM7bxNX>(y?QWo}c zUC8{(xp4ZCJ{IQv?VI=ivAZwNAe5ZbUVP`xyshaSOaJhGvQO~Wlu%j9({Q|UN&>&! z>5EGHyBe}Z;vVkWV_(9}{aCK2w6a*&ZF_-3gCWzQqUjD^2WF(M@@|fD%G#pIDY5yI zHp}Gc<;@?`wK%b|}1{-^lC9#LuGc)1RwbtXOd(AmYTT>uI^teJkf%zFO$!(D&2LlF6^~c-67!xmE6$n|D8$Q8nSKZ5s27IL^Mu z=L}DT}O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/green.png new file mode 100644 index 0000000000000000000000000000000000000000..315af6be85f02ce480b624a60283c87987f9b2e7 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiu}{0JmV#_wY9~>#ExwVmy?tG|NlQTg8;~4#*!evUY z-fvqHzXCa&1s;*b3=DjSL74G){)!Z!AbW|YuPgftMiv$;t=d~gw}E()w~+sXGqJBkxhI@yb75mr7WQ#n z$o$H=aQcxx7Uuo!oA>{*yD!fml$_IEeCN%)t?3<0|L}gYPw>~2P+7{;aJ+I#0>9kp zi%R>u8nQ*=9`4#>U&77(SgxnEvRKz`dx1lPA=9Cv=?-28W~8q2ZjN%w+M>xRvH6lV z%jD_hQU3c5Jz2c$>oe^)tHY-6YkF&TD7>KG$m_|(&!X4=!Z@=x1 zxP6NA9T%f`{Fl^yE9YCjTIlA`_tVXi$*=Nw)v@TgRqmIYcR!d>HQ}pm8uN=d&c4Uz z3}aqan_T`Mmw6~*pSy(Z>!7+M3z4?NKYqx!{jhg$-oPc~yj&0%bgCt;5hW>!C8<`) zMX5lF!N|bKMAyI&h(Zj_tPDU%+rYrez@TdK{I@6?a`RI%(<*Um;6A4w2-Khfx1l66 oH?_DVF}DDr$0WqS#LCpd%ESm_$q_Hhy+Az-p00i_>zopr032)SPyhe` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..359e37a6c13113c22970070c46a30b036e597f8c GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKip*D@GoE)qTU%R9OzhZ}a5*`-|NsBTuBop9s%9(+@(X5gcy=QV#7XjY zcj5iECGjhe!&%@FS21szhGoxvC@2UIXMxiN5<2|F+}5h z>x7MdhYbYU{1xO51ZuEuJi??oZPP~<$9Y;}T9p}BmU0XEKR6TnN|bxTnKl0@Eu-@bYOAG`bV3_{5{?ZtQA%-fpYvGfn`C;J3{O$n8yJPpSyrzG&p zoxZ5FzpEizB<|s^J@zHs+>hmYN-K+X-L@AvG#D}+Dw^)#bzny7D(~hfr>rfSoD!Qa zX|qh8ULNJY@6eOQ%f3F-ezQ7k`o5;OW{1KH`i;DvO#CeBKK;46#flXt0wPYVy8iat z?ugr`INxzGipPIR-M4bS<*S8m4t+n}ESdZ&k5?Uwo?GR9xq0`48C4U$+NLqTh~w;g ze9kcDWwpuW|8bdz685=E*uD;`OR^AYJN)B^eA^Fu_vQ^;Le9$tfkCHQ;u=wsl30>z zm0Xkxq!^40j7)S541p-b(9FsJgtQF|tPBjQCeMG1q9HdwB{QuOw+8NW>VZHF8gLs* qGILXlOA>Pn5PD2P3{0#{Ev!roA(nhyq^tnc!{F)a=d#Wzp$P!hJnY#3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..1837845b6c567a2fe0681df16484366ae71e063a GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKikh3NtE!5%wY9~>#ExwVmy?tG|NlSZo^Ka`su@dy{DK)Ap4~_Tagw~< zU3kB3N&E`ra29w(7BevL9R^{> zI$@*VVFQ6Se+9V%ff}qEk1%OY+w_seah{f#R%OPOrQAaP56;BC66Kz7rp<+oNm$fk9`R@_hY%9(#m38x9tTE4TemIil#ew9hi~2%DXwrDQk-+r^Mz< z+ANc&mq+>UJM?7nvaipy->eRszOU)6*`e@)ej~3Z6F-Z(Pk*j%v0}xEfQS>TuD|`Z zJL2{!&Uajl;_+Wn_pO|7`D&q?L*Gv~OD4a{<5kC^=T^C2Zr=T1M%9F`wrR{S;yC*r zpEHbkS#5Ipe_ZCFgnjN3wy%Tgk}O2p4*&Qe-}b}ay?Fzdkn?guV9=?SxJHzuB$lLF zB^RXvDF!10BNJT%Lm&zth$UYaDJuZ=FnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiZV8cB`y)w*47pi6FasgTux5z|NsB|PYq51RWp_Z`2{mLJiCzw;v{*y zyYPP7lK2(K;VkfoEM{QfI}E~%$MaXD00r4gJbhi+Uof(;SZO}FoSX>MBjf4f7@~2$ zb;3r!!v+Fv{t9vj0yS7S9%0g)w&^2_<2)@ft;&omOSy&oADoGOCCWYFOq&ZEld`an z>q6#N&V|#D^szASZ{NKCkKKKF2BGAf_ToEl=50;ySo(+elYN4}ri98;o`&O) zPG3~o-_?*U68CV|9{Un*?#FUHrIp3HZrckS8Vs2Z6-{^WIxr)3m3MQLQ`QzuPKnKz zv{@!kFOTxycj(FDWnZ6ZzgZnNeP7dCvqRwp{YG9-CVm!mpZ;9kV#SIR0TCxwU4Q#+ zcf{>eobR|8#pA!E?przE^3_5&hrXX~mP~$?$E%J-&#iL5+`Rk2jH(G=ZPS=v#BugL zK4%#7vfAYG|G3OU3H#h7Y+nb}C0U5H9scn{zU_y-d-Db^A?M|Sz@Sqtag8WRNi0dV zN-jzTQVd20MkcxjhCmczXl7*qLfQrfRt5%Dljpxh(U6;;l9^VCTLbqw^+2Eo4Y&;@ qnYpROC5gEO2t6ht1}0Xf7FH&P5KF!;QdR)!VeoYIb6Mw<&;$UPr0dK8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..503049339804bf4e4c5442983fdd5facf34e2d24 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiq=~%S!_O2TU%R9OzhZ}a5*`-|NsA+Nj*scs%9(+@(X5gcy=QV#7XjY zcj5iECGjhe!&%@FS&=r&M~jHioZh{pNW z2^;+m8wj-dE65!P)L`9sgh_MSrjIO+^R&dYDl@Ju7^N#K_| zeNkzDS3|Z)+{0aa>`S=0AItTWRu=2JZ7*L&Y-px@?Sz9zYB{pBu zW|=&_Jj#FHp(l%%eSN0=W_8%~eNAu84uu!=8+kpM_*v9_`g3)Q6)R2zM4VW4{q48i z5w}lqzT;vPkN=XoZ{>W;R}0-7`hL1uGWk^=uR0bzx61u;^X>;TswRB3O=Er$$JzJz zoMFt%YLm~oi}eH~PnWFgXa_{R_VwjcKH%^SFcoREIHz3xfiI1!PC{xWt~$(697w|>_h+n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..d423c056557248e324df7e856c819bb0a3c0efe5 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKik{{2Ur*)J*47pi6FasgTux5z|Ns9gDJ^e+su@dy{DK)Ap4~_Tagw~< zU3kB3N&E`ra29w(7BevL9R^{> zI$@*VVFQ6Se+9V%ff}qEk1%OY+w_seah{f#R%OPOrQAaP56;BC66Kz7rp<+oNm$fk9`R@_hY%9(#m38x9tTE4TemIil#ew9hi~2%DXwrDQk-+r^Mz< z+ANc&mq+>UJM?7nvaipy->eRszOU)6*`e@)ej~3Z6F-Z(Pk*j%v0}xEfQS>TuD|`Z zJL2{!&Uajl;_+Wn_pO|7`D&q?L*Gv~OD4a{<5kC^=T^C2Zr=T1M%9F`wrR{S;yC*r zpEHbkS#5Ipe_ZCFgnjN3wy%Tgk}O2p4*&Qe-}b}ay?Fzdkn?guV9=?SxJHzuB$lLF zB^RXvDF!10BNJT%Lm&zth$UYaDJuZ=FnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKik>trxLP$;TU%R9OzhZ}a5*`-|Ns9RA9MK*RLxitMEaevRe{d%Dl_>XwGi@$xOv=JO zt_zu8ITubp(#OKQzkT!mKX&)!8HAE^+KcbJnYT5)W9c8>PxcA^ni48Yc^ZyaPD$XG zJAF}Ue^*1cNZi9+d+bZNxgX2*lvWn&x@|9TXfR|tR5abe>%ffERo=}}PFY(tIVCn< z(q@@Fy*$c)-=QaqmwkPv{bqI8^nFcl%?^bZ^c#6SnfO`Mefo2Cixn$Q1Vo%zb^YzP z-4VA>alYeX6p#Osx^Lxt%U28C9QuB`Su*)m9hr!d;&t;ucLK6U{0PVB@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..75902915ee6064fe7780f0c31e0bd50a57f9c83f GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKigK0brz%d-*47pi6FasgTux5z|NsA?qBoWSRWp_Z`2{mLJiCzw;v{*y zyYPP7lK2(K;VkfoEM{QfI}E~%$MaXD00r4gJbhi+Uof(;SZUSXGP(`aBjf4f7@~2$ zb;3r!!v+Fv{t9vj0yS7S9%0g)w&^2_<2)@ft;&omOSy&oADoGOCCWYFOq&ZEld`an z>q6#N&V|#D^szASZ{NKCkKKKF2BGAf_ToEl=50;ySo(+elYN4}ri98;o`&O) zPG3~o-_?*U68CV|9{Un*?#FUHrIp3HZrckS8Vs2Z6-{^WIxr)3m3MQLQ`QzuPKnKz zv{@!kFOTxycj(FDWnZ6ZzgZnNeP7dCvqRwp{YG9-CVm!mpZ;9kV#SIR0TCxwU4Q#+ zcf{>eobR|8#pA!E?przE^3_5&hrXX~mP~$?$E%J-&#iL5+`Rk2jH(G=ZPS=v#BugL zK4%#7vfAYG|G3OU3H#h7Y+nb}C0U5H9scn{zU_y-d-Db^A?M|Sz@Sqtag8WRNi0dV zN-jzTQVd20MkcxjhCmczXl7*qLfQrfRt5%Dljpxh(U6;;l9^VCTLbqw^+2Eo4Y&;@ qnYpROC5gEO2t6ht1}0Xf7FH&P5KF!;QdR)!VeoYIb6Mw<&;$TwkL$4j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/red.png new file mode 100644 index 0000000000000000000000000000000000000000..e0823b70032af29a047fb6d7671ad1e6fdd29a05 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiY6&3bSlVdYio;%i5=S#E+;4V|NsA+8sBFDRWp_Z`2{mLJiCzw;v{*y zyYPP7lK2(K;VkfoEM{QfI}E~%$MaXD00r4gJbhi+Uof(;SZUSXGP(`aBjf4f7@~2$ zb;3r!!v+Fv{t9vj0yS7S9%0g)w&^2_<2)@ft;&omOSy&oADoGOCCWYFOq&ZEld`an z>q6#N&V|#D^szASZ{NKCkKKKF2BGAf_ToEl=50;ySo(+elYN4}ri98;o`&O) zPG3~o-_?*U68CV|9{Un*?#FUHrIp3HZrckS8Vs2Z6-{^WIxr)3m3MQLQ`QzuPKnKz zv{@!kFOTxycj(FDWnZ6ZzgZnNeP7dCvqRwp{YG9-CVm!mpZ;9kV#SIR0TCxwU4Q#+ zcf{>eobR|8#pA!E?przE^3_5&hrXX~mP~$?$E%J-&#iL5+`Rk2jH(G=ZPS=v#BugL zK4%#7vfAYG|G3OU3H#h7Y+nb}C0U5H9scn{zU_y-d-Db^A?M|Sz@Sqtag8WRNi0dV zN-jzTQVd20MkcxjhCmczXl7*qLfQrfRt5%Dljpxh(U6;;l9^VCTLbqw^+2Eo4Y&;@ qnYpROC5gEO2t6ht1}0Xf7FH%k5KE4DS?&euVeoYIb6Mw<&;$Tbt?SnS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base/white.png new file mode 100644 index 0000000000000000000000000000000000000000..5522d9c364507410caf7a9fbcc9e06f4179bfcc8 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKiavb!@ZiA%ZEbBaF|lJ?!sX=T{{R0!$LE|CP&H#okY6x^!?PP{AWo9E zy9@8PEs0-&9L@rd$YKTtzQZ8Qcszea3Q&-}#M9T6{RJZniIL^}&)2ht4vXooM|G}BqSEAe#&a}C(F)0iC zxGrRVX5QBHj-`KiKiMbvYf7jr&B5@CQ?XfT6=6)>KQ(9T9>$bhXp}~;pP|b{lpEnh8kbLji&X36ANdA#aa^xP`<%gwtV%&401)i#a!MI2|} z<8y{FFRM*1|BuT&l(5fT!uEAgU6O@J+uNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPAVUP3!CH z6A}{C)YOWKir(&4yt__bTU%R9OzhZ}a5*`-|NsC063^TYRLxitMEaevRe{d%Dl_>XwGi@$xOv=JO zt_zu8ITubp(#OKQzkT!mKX&)!8HAE^+KcbJnYT5)W9c8>PxcA^ni48Yc^ZyaPD$XG zJAF}Ue^*1cNZi9+d+bZNxgX2*lvWn&x@|9TXfR|tR5abe>%ffERo=}}PFY(tIVCn< z(q@@Fy*$c)-=QaqmwkPv{bqI8^nFcl%?^bZ^c#6SnfO`Mefo2Cixn$Q1Vo%zb^YzP z-4VA>alYeX6p#Osx^Lxt%U28C9QuB`Su*)m9hr!d;&t;ucLK6U^-t9U7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_base_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..ea760acea02a9058df2dea7c23fef59d23c5b8a3 GIT binary patch literal 1224 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 pNoHylY44$rjF6*2UngFco<@Nvo literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9c3d1c058ab145df07c9a71addbbf9461932fc GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3_``VA~kKtwuB3270JoT{r~^pafUKGP$y$a zkY6x^!?PP{AWo9EyNlqXt+u;>9L@rd$YKTtzWpG~Xu%q+0u*E~@$_|Nf5FJYVx?EL z{o5g+9wAQ`#}JFtt&I(JUMbB65syyzs=*;6S}?mz2+~^wu3H5j`&Q8iBu8) z_3K;Uq}oU&&x0`hW9|& zL0>ba-EG-#?yGgiFs=x`qUqV)x2rT^<|DQ81A&YT--QqS=@Y&8hdtwrX_Z04HI6kd zR&PFc98{b3SE^-~RElLsh`oMvAmg0p%Ir%v{r;q^E2+gGGmpV&GHZQnYr50!F$e=KF^(h?(zHo`URf~q9RXad}1uH=AT;6D0+*}@T0|kU`#QnmbgZgq$HN4 zS|t~y0x1R~10xe%14AGRF*LI>03mGy11kfAs>$=;qG-s?PsvQH#I1q*oO&Qog9hA& qlFZ!H;*!MN0)!ru5Can{Qwu8-s3iuhvg?3)7(8A5T-G@yGywo4N9L;l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..90435a1ce54b3b90d6bac9d0c6ea162ca2390fe5 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(45k(~mbMPZwuBp+n9Iq@{r~?z#JXP_sFSfI z$S;_|;n|He5GTpo-9_-xR@+@b4rhT!WHAE+-+mBgv|tTZ0SdC0c>21szhGoxvC^yB z{_PM@kC3N}V~EA+)=7+IEebp?o*cOmiEsb<-{x`a3EkfOUh|h{+d-EjM|`HlM5>7Y z`t>bvQf;f6g4QDT3F{jKPYJGY{&S-#e!VJ__{MO7FG_|#o9_!%wqC2w=Vh1|!+Rj? zps$(I?zZeV_tiRM7*_;e(e&)@+f|w{^O0Klfj~xv@4^TE^oid4!=7=*w92628pj$J zt2duJ4ysN2E7h_~D#fxR#9lu-ka5m)W%ebTet%NdmDFO8na5x>nYF$(wmbJTpT?@g zOR{#dZ~*nK3^lS0IhM0p&adIi@cUM2yf3wUZ2?2iM&|Z**$cm#7cyJCO=6FU z-Z|m0;63L_pXbg$_xSyP{en*gQIV%IJ~0+p^G~g36ure~_|alNFs2w(OI#yLQW8s2 zt&)pUffR$0fsu)>fguou7@AobfRMI pNoHylY44$rjF6*2UngEI;<>vqZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/green.png new file mode 100644 index 0000000000000000000000000000000000000000..c9635e31d5627a1c3682f61bff90196c4dd4ccca GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3?6Y3zA2K&wuC!{iOI>y{r~^}K>mG3piah; zAirP+hi5m^K%69RcNf7&TWxm%Ih+L^k;M!QeEUI|(SkKt1t`c~;_2(k{(_N(#Y(Sg z`?o_tJwl!?jv*GOTPHD=wJ7kocyi=MB)({ryNwuwN3R;WUC#-J}JSDio`Ol4}`1Ptx;v2&Sz9<>~Y`!m4*?O%ypO;}?4DW%k zgT7`;yW6tg+*j+2VO$Y>MboppZ&zu;%tvbF2Lc%xz6&4t(X3` zFUi`;zG=e#v)9E|G1SO1qxMbVI(pOTqYiCY8rIrTuG1`W6k qC7HRY#U+Wk1qeMRAqFN^rWRHvP)iJ0W!C}qFnGH9xvX!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3`Vo}m@PYXY)iOa- x&QzFo4z{}57fz6 z666=m;PC858ivK9p%7f+7dh{U&l{crQQ^@MJ3ey{n{grCjC6!{?5n`_&9mqK6xib5bO}{@W>q=@d$joCfn#@|?8rz-wnNMTY z;U!r+**8ttfA+fADux!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3>6iHjg6JZwuI;9rOV05{r~^}(IU+qK%I;w zL4Lsu4$p3+fjCLt?k<9lw%YCjaySb-B8wRq`1XS^qXlcQ3Q&-}#M9T6{RJZni%YxnUB=U4+JtYd>20Or%&|WANGthrd0+F*ErU= zSiSk&aZqjAU#XT|QYn@lA@=&wfsAvWE3+@z^!t;tuA~-&%sd98$*lFQvE8|!`7~A? zUXrzweba>fXRnK`VyKa2$g!N&a()e8hTpeJ<9(^+YYP~9HZr%j%U<}^ypY-AZ4!G- z^v(%~1@Ade`aF03xySGS>lb_~h>ARw@rkj(nty6Nqv$O@!;cpGficCPTH+c}l9E`G zYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+46F!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(4Dky^($vL>4nJ@a+d-Mhn(p6`&w{iKnkC`wK=E7Aw7~ z?cWXo^$2;oIEGl9Zk@zf)}p}U;>nR4k@)tn|7{+(p3v>h?=^pUwjFdia>Qp!Or(nV zuV3E+C)Kv9DQGQXpRm3`@RZ;R=RY@^;@7J(iEj)S_@ZR^v-!SIW$U%-d|rlmF}w%D z4*HrY?QY9{b6>49hH*vk6;03XzFnmWGaspy9|&Y*_%3|lPoL<$KkON2OsfnUu5qk! zv3m2lGvmPT}dqlnRyIGlUeIqW4m)d^J%O) zyd-NU`=$x|&t4Z>#ZV*5kYhQk<@_4H48L!c#`{vs*A_7JY-Db4m%Z?-c_FjK+a&gw z=$#V|3*K{{^m*?5bC2Ku*Dv@~5EXeU;}c_nHUHFlM$ub*h952V17nIowZt`|BqgyV z)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t?R85}$7DYpDeoAIqC2kGe=hOp%8Z_WG qlw{_n7MCRE79jMPgcz7unOazxKrJy~m0bta!{F)a=d#Wzp$PyW+vg?# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..16a81187047da12c7f576cfb86480cc2ff060ab6 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3=7Prt+85oY)klL!!9{Fx&QzFE4>M?2I^!i z3GxeOaCmkj4a7@OHuSgiD_ zwtqVW)Fb5S;uvCax^)s`S&IUXizi2JMB>}O{=$7$Pu3@F_9|b zzkYoSoK)MYrl7TmeZu+%!Bc`Ood4WtieInFB)&0R;ER&s&*u9=m95vR^LZKO#qb^o zJLqesw7V_)&3(1b7{(RBS2R7l`*xKk%zUI)ejt#M;k)pGKYgP2{;+49F|9IaxW=)@ z#p=!Hj)Q8`{z|p%l1j1c2(j0X4rHA3T$z2zrr)2GbtSbJWacp#O=hicjqT3;%%`#H z@RF>Z?3*U+KYLwl6+?|ILyqOFmh)@)GW@<(8t+RjUt7S?vyr*IUG~DS=7r1_ZEO^g((&xGJ&pm$sU%%i}K~&_aj8BXO*8EfJ8AWgL8Gf|b4~!`W)e_f;l9a@f zRIB8oR3OD*WME{XYhVaOA% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..6d61619956b3154f5499f774f22b844643841927 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(43|@QA7%3$+Y){#nnzAf?*IS)k}Q5jK%I;w zL4Lsu4$p3+fjCLt?k<9lw%YCjaySb-B8wRq`1XS^qXlcQ3Q&-}#M9T6{RJZni%YxnUB=U4+JtYd>20Or%&|WANGthrd0+F*ErU= zSiSk&aZqjAU#XT|QYn@lA@=&wfsAvWE3+@z^!t;tuA~-&%sd98$*lFQvE8|!`7~A? zUXrzweba>fXRnK`VyKa2$g!N&a()e8hTpeJ<9(^+YYP~9HZr%j%U<}^ypY-AZ4!G- z^v(%~1@Ade`aF03xySGS>lb_~h>ARw@rkj(nty6Nqv$O@!;cpGficCPTH+c}l9E`G zYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+46F!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3>V8MJ!qJFY)kloyf!&Gx&QzFKT@1_9;lPC zB*-tA!Qt7BG!Q4r+ucR*(N^1CKn`btM`SSr1K)lSX0%`pRsjmKmw5WRvcF(tVX@My z+WzejP>+zOi(`nz>DEb%Wi1LkE}k5@5s7dA`rqbp>j~Z7{9f~yXWK!SBS(Cu#6+ry z|N8YUa8hlnnu69M_6h471WyUBaQ<_nDSo{wllaDPfiFsiKb!9hRkmKM&gW&A7sGoX z?4Yli((bnGH}};#V;ENiU(xjJ?%P$GF!PaG`GG)2hVQ}${`867`@^1b#UO_ zQmvAUQh^kMk%5tku7M#Cg&3My8Gw+sfq|8QLDl5>Z&5Vl=BH$)RpQpbeNH_Ps6hj6 qLrG?CYH>+oZUI7%Nr-`om8pf53Dgn;R@rqxJq(_%elF{r5}E)qrs|de literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..5520342a2426eee93dc4eab03a5833241d8f77aa GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3@Hi|vz6x@+Y%lv*D5C`_y7NYqtC1BfI1mV zg8YIR9G=}s196hP-CYD9ZMEG6vL>4nJ@a+d-Mhn(p6`&w{iKnkC`wK=E7Aw7~ z?cWXo^$2;oIEGl9Zk@zf)}p}U;>nR4k@)tn|7{+(p3v>h?=^pUwjFdia>Qp!Or(nV zuV3E+C)Kv9DQGQXpRm3`@RZ;R=RY@^;@7J(iEj)S_@ZR^v-!SIW$U%-d|rlmF}w%D z4*HrY?QY9{b6>49hH*vk6;03XzFnmWGaspy9|&Y*_%3|lPoL<$KkON2OsfnUu5qk! zv3m2lGvmPT}dqlnRyIGlUeIqW4m)d^J%O) zyd-NU`=$x|&t4Z>#ZV*5kYhQk<@_4H48L!c#`{vs*A_7JY-Db4m%Z?-c_FjK+a&gw z=$#V|3*K{{^m*?5bC2Ku*Dv@~5EXeU;}c_nHUHFlM$ub*h952V17nIowZt`|BqgyV z)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t?R85}$7DYpDeoAIqC2kGe=hOp%8Z_WG qlw{_n7MCRE79jMPgcz7unOazxKrJy~m0bta!{F)a=d#Wzp$PyqPv|ZH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/red.png new file mode 100644 index 0000000000000000000000000000000000000000..504d2c441a93438ee037ea01afe882f908b71efd GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3~lnV6O`nSZ3(ZIm6DT_`~UxcW!U?PK%I;w zL4Lsu4$p3+fjCLt?k<9lw%YCjaySb-B8wRq`1XS^qXlcQ3Q&-}#M9T6{RJZni%YxnUB=U4+JtYd>20Or%&|WANGthrd0+F*ErU= zSiSk&aZqjAU#XT|QYn@lA@=&wfsAvWE3+@z^!t;tuA~-&%sd98$*lFQvE8|!`7~A? zUXrzweba>fXRnK`VyKa2$g!N&a()e8hTpeJ<9(^+YYP~9HZr%j%U<}^ypY-AZ4!G- z^v(%~1@Ade`aF03xySGS>lb_~h>ARw@rkj(nty6Nqv$O@!;cpGficCPTH+c}l9E`G zYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+46F!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(40rC_dGqGYu`S`JPMwmIll%Ywf782Ll|Y@0 zB|(0{3=Yq3q=7g|-tI1fkG9(G0&+MDJR*x382I*sFrx))unJI+y~NYkmHh=H3yYOr z)%I_PfO>>HT^vI!PPa~CENfBVaq;BHjYxd^*Z($;TTkfr=J%SvJlhVs9691MB_>iu z{MWBtzxK=WyrCd)pC9fUxweeO5=U0BQ;SOya|;l9OhODytV}JeOrVw+u*$9j>S6G7^>bP0l+XkKX_D<6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_halted/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..806a49690ad469db05e906fe505aa15979b0eedb GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!Ysfi#1%+~goGp{B-Gc} zo0^&y6&1Pv-)(+uf|{C|n3&jB28RC(3^!NHzucjCY)km@xiWHca{vGT_t0IO1k}k` z666=m;PC858ivK9p%7f+7dh{U&l{crQQ^@MJ3ey{n{grCjC6!{?5n`_&9mqK6xib5bO}{@W>q=@d$joCfn#@|?8rz-wnNMTY z;U!r+**8ttfA+fADuxEX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1S>4ZV6^@K00Q$#L_t(o!@X9$Zt5@?J*hHR zOv#XLRAQ%6JMjdhvhoJ)h9fdDb;y)~p(Ch_JVHcO`T|Ui)Da{k#6*TzsLC7U4wc;` znBes19?7y}JNEhhtxcy>0Dxf_V2r^q3;+OQ3;=L{e~&8c_j~xh4*&>)07;S{iXz$OC}RnadCa!N~)HAb{`t zuq>-!0u>}l0?g-gWLYL!yWJLTKA+>Sp##9x)z#4rlu}$@Ul-KM7(0-%YERXg&KSe{ z`@2{ylNk&KS)27~PK@=~jFS)_aZQB5VX0xfS*XvpuXf~UgZQI}1 zK$@ln$vw|g)>TuUazNd397&t!)P?Z&CN|=ez)79&i|Z%#@_?7WC7r0VVO)O()0}g z{eB;&X-bRGcs%~nK$&&(9^63q8m4^K;>QJRV~tZ+@9?gWV>lSN)iWyYN@$@W9(+AITl}&$%v+qj(of0f1KqLqq002ovPDHLkV1juBOxFMa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7e75d57325b7c9b0676be1a1ca9f0752a9492c GIT binary patch literal 1271 zcmVEX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1S>4ZV6^@K00Q$#L_t(o!@X9$Zt5@?J*hHR zOv#XLRAQ%6JMjdhvhoJ)h9fdDb;y)~p(Ch_JVHcO`T|Ui)Da{k#6*TzsLC7U4wc;` znBes19?7y}JNEhhtxcy>0Dxf_V2r^q3;+OQ3;=L{e~&8c_j~xh4*&>)07;S{iXz$OC}RnadCa!N~)HAb{`t zuq>-!0u>}l0?g-gWLYL!yWJLTKA+>Sp##9x)z#4rlu}$@Ul-KM7(0-%YERXg&KSe{ z`@2{ylNk&KS)27~PK@=~jFS)_aZQB5VX0xfS*XvpuXf~UgZQI}1 zK$@ln$vw|g)>TuUazNd397&t!)P?Z&CN|=ez)79&i|Z%#@_?7WC7r0VVO)O()0}g z{eB;&X-bRGcs%~nK$&&(9^63q8m4^K;>QJRV~tZ+@9?gWV>lSN)iWyYN@$@W9(+AITl}&$%v+qj(of0f1KqLqq002ovPDHLkV1juBOxFMa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/black.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e4c04bb01029c8d16b42453634c928e0b4231e GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiWBlN=`;b;nEaloaXxk8MlWVZfj0MdEmPhlP2^~@UJ|*b``h$8Eays^@)aIst9)$P?Bnrp>co&` zL2G=bn}1+@b2i#yb9JQtFZ1e}&*%65-?)HBD`D>P@bWd$7dqS=+>{y383XLTEeM@< zd9G-5qXJ{BiHj8f(-Q5|SGg}19sO01aOl|2iB2I=XB{`nJm5SZm-t}uJ@(wBuVVWT zbS3X<2dT1!DuKNb_mu6fo;g~>@Abp?l`m_G>%{jqN9`XNYkgfm*}h@&q*=e&we?D;luxmb z0S2IIiEBhjN@7W>RdP`(kYX@0Ff!3KFa)9yLo+J_5YjdNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiWBiw^iS;|Jasr4b3V!Il2G;{}=jNrvUXZmIV0)GdMiE zkp|)3mt9_Zpw`2i~)Av7KBc_ zJXbWjQGqem#6^n#X^HmftK1ihj{Yi0ICSjiM5mCbvyK~O9&nzIOMI~S9(!)mSF!yE zx{`M_1oPiJw-lTxYaZTcKEKQ;YOxe!t)-x-AB%}&Sob#d?*?9v7#`IvFLr$Q zo%N0E5&tRa#s?U_ard5Wm+IK{XJ*^fV+OB28nC9;WXy3%X8WGt$Dnt*NKA$=;&$2t zV-}k{v-`b?rQHlK&m67c_xj=c%9l08b>e%QqxKJswZ5*OY~L_>(yZU?+Ipo^%BR@J z00U69#5JNMC9x#cD!C{XNHG{07@6oA7y?mDo^hr!d;&t;ucLK6Ut Cu<*+O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..e00d6e6778fe779acd6e9a62d0677215b46b3e7a GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiV1vRw>g__1Kp1C<}QxIl2G;|G&>*UIx^|SQ6wH%;50s zMjD8d?NMQuIw)uSy-%ertF;l4yZ@T z)5S4F<9zDGjb6--0&VW^TBf{9n#j>)y(Dr=_qXYHSk9F+ zg4Xy{pU?0Azi|PNR>Iun;pJ-AVcpx*zZ-ZxVt7=yyx8&G zch)zuNBpOx8y{f!#@&0iU8-Z(pP6k_j~TrBXuz6UlQG97neBUmAA{cMA~6}hh}&ro zj9F~*%$-|L6(D__lYwMLxDW75= z0}Mdb64!{5l*E!$tK_0oAjM#0U}U0eUmi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc3324cab2ff62e537324bc704c8220cb36c817 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiWCuxK^a5?bw!Z!K@-VIl2G;|4+SA{}rf*u_VYZn8D%M zjWiG^$=lt9Ut$--O(2J}z$3Dlfq`#72s2u+2CD!C*-JcqUD;nSvand`OxZd89Z-*w zr;B5V#`)BV8@-qv1=`%-wM==JG?AmpdP(G#?r+oYu$(Jt%2#-lt@5#DvyaEasS`t% z1+DR!ZvKJs&Dm&+&DD|mzs##^KA+$Jf8zokt%SMD!^_u1U+8dia8qV9XAH3Wwjgxc z<+-BKjS7shCN5I^PfN5d=Y#PFzYd9mZW z@2qcRkN8hXH$K4djl1`3yHv-nKQr5=9y56L(SS9zCS#6EGTZkAKL)+iMPf315x3JG z7_->qnceSAEbV4^dFE&hzt<1nSH7$%t`pze9JPO7to3#MWc!B6lV<&9*VZeYQa;5# z1{i>?)FK#IZ0z{o_`zz~Q+49%nC}Q!>*k zackf{rydB@paHj`Br`X)xFj*R0HMbu#K6SL)WXWd1Y*hZSv>7PJq(_%elF{r5}E*$ C>+-k& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffc9c824aedfddb660f70b863010e9a82a4099a GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiaww!p73p;n@OHuSgdrW?414%s7J}u z#W6(VeCouFUd)aHZSL<{ro2m<$kAlIByvmlx9N9S&XqLfD?G|p`Pj1A$K&DDi6P5^ z*7!^}|G@a>Y_!GZ>PY=x=G8Ty&+q@gaRHB3!rbNI#-FvoOs$#8NB*vz?xcxb_vU)B`YiSKQW+CMPX`nrCyeZ%BQvwpK{>y=I^pJE>a z3_#Tq*NBpo#FA92y9uq-|heWnfS>dH!1z4Y~O#nQ4`{ zHE^F(4+Lt^fZI@#nVVW%l9*e7&|?x}U}9xzVP#?hv1Iuyo_3%f22WQ%mvv4FO#tI) B@pJ$H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/green.png new file mode 100644 index 0000000000000000000000000000000000000000..3baacb4b8c3b076115072a7db250b1bba8f830e9 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiaupPQo`u^4OMer!X-&Il2G;|BEO$e+KGdED7=pW^j0R zBMrn!@^*LOm)ON{6UgB#@Q5sCVBp&i!i*NI!74yO_7YEDSN0c-EG$+!Q+7^&2h^kF z>EaloaXxk8MlWVZfj0MdEmPhlP2^~@UJ|*b``h$8Eays^@)aIst9)$P?Bnrp>co&` zL2G=bn}1+@b2i#yb9JQtFZ1e}&*%65-?)HBD`D>P@bWd$7dqS=+>{y383XLTEeM@< zd9G-5qXJ{BiHj8f(-Q5|SGg}19sO01aOl|2iB2I=XB{`nJm5SZm-t}uJ@(wBuVVWT zbS3X<2dT1!DuKNb_mu6fo;g~>@Abp?l`m_G>%{jqN9`XNYkgfm*}h@&q*=e&we?D;luxmb z0S2IIiEBhjN@7W>RdP`(kYX@0Ff!3KFa)9yLo+J_5YjdNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiavZ_8zlkr;cq2*Xvs=Cnxv+|Nn=JCaeYOVJr#q3ubV5 zb|VeMN%D4g;g{IOa1+SkEbxddW?IC(HA=09Nd%{%^3sizAXry zc6qL7bfW@etci;h|I-rf(^t7K79IUnkZ|bO&xuYUQD+@D$~@paAD8%G@jdq3q_1N8 z4|FB(Y6#}PcWzJeUe@#1($_q^(R_ZHQPg57##&23Q9l+F$FS~g>fa5#9x*(sTVCw= z?mO!n*(3f_(v1%=eB(9)#smBaneKcTAt;v|NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiZkzqOh^C^4ON}yu5TdIl2G;|C_xl^#bZ)ED7=pW^j0R zBMrn!@^*LOm)ON{6UgB#@Q5sCVBp&i!i*NI!74yO_7YEDSN0c-EG$+!Q+7^&2h^kF z>EaloaXxk8MlWVZfj0MdEmPhlP2^~@UJ|*b``h$8Eays^@)aIst9)$P?Bnrp>co&` zL2G=bn}1+@b2i#yb9JQtFZ1e}&*%65-?)HBD`D>P@bWd$7dqS=+>{y383XLTEeM@< zd9G-5qXJ{BiHj8f(-Q5|SGg}19sO01aOl|2iB2I=XB{`nJm5SZm-t}uJ@(wBuVVWT zbS3X<2dT1!DuKNb_mu6fo;g~>@Abp?l`m_G>%{jqN9`XNYkgfm*}h@&q*=e&we?D;luxmb z0S2IIiEBhjN@7W>RdP`(kYX@0Ff!3KFa)9yLo+J_5Yjd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..5825dce8cd32561695f31b4c1f82d9c6571f3765 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiV0(p-9?Vv141p!>0(#$;tiy|Nkrdr#nDBj3q&S!3+-1 zZlr-YN#5=*{1UquZUQ-+1s;*b3=DkxL735kHCP2G$X?><>&pIuk%h%dXUfj$?|^!g zJY5_^G|s0^+~~#ZDA4Bqu4T%*q=_6&)=MI{bbp(Ehvi&JQ@+BZY?Y5Kn|(YUPMsLC zENG3-bn_34Z_Y+rY_5*f|7BiX^ZES#{~H(ZXeG>D9$vmC`a*}BgPSs=Ib(p`w*{fo zF3%N>Zd725HF1&Re_En_`YQLuqNBeG5)K{vIngO3>a62NnFpNb;}Rb%zQ>-M^i^#C zfv)6T4Z-~P&h1Iw%Xc?W@7}mW_{kwtJBZfzH%ZnY~ zeP?|md&GZAy72*qZ`{3S+od{o{h8S|^_an{j|Qx%H5qeUlG(l|_%Z06E)tXBi@2Tk zz?j7*&+LA0Vre(S%QHu7_`QDkzVc;Fah>?y=BWJxW38|2C)+nno;2$>yS85Gl=3O| zF~9&+Epd$~Nl7e8wMs5Z1yT$~21X{j28KWsVrXV%07BXZ237_JRg>qxMbVI(pOTqY ziCY8rIrTuG1`W6kC7HRY#U+Wk1qeMRAqFN^rWRHvCJ;-O&*EtZ>S6G7^>bP0l+XkK D;sEm7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..813bbcbd49b614f422acce6f7c920aedc1a05055 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiXNn*|arQ3y*CHpKRDACnxv+|Nn0bxI2M*7)yfuf*Bm1 z-ADs*lDyqr_$78R+yrts3p^r=85sEXgD|57Yp@DXkiEpy*OmPRBMXa_&Xk?g-vRX~ zdAc};Xq-=-xY3K*QJ~HJUCWerNfSAmtd~S?>HaqT4$HZcrhJ7**(x7fHv4!yoH{XN zSE<68-<*xM*jyc{|I56(=JWae|2Hn+(Mp)RJiL5O^o0&L2RCI#bH)I>Zwo@F zU7jl%-KfAAYvLls|FlH=^i}SQMMr-XBpf>SbD~p7)LF-kG7mV<$0a^ke2+ah>8sfO z16|3x8iM)no!gVVm-YO$^feD}G@oB)6t!52vDQ*h)Q`o)F|2!=`ga4bM+}eZmKQs| z`_B4C_K5$KbmIdI-?)3vwo7&F`ZKd_>M?^?9}QSjYcl4zB(r@_@MF+BT_h&M7jZl7 zfia6sp4t80#L{ktmuHUF@O%C6edWuV;yUrY%~AUY##&$3PquHEJZaW%c5S`VDdkh_ zV}JpuTH+c}l9E`GYL#4+3Zxi}42(>44Ge)O#L&#j0EDy+46FgTe~DWM4f D#k})D literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..288521e05137f56aedf381d012bed7549c836d74 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOib)@3h$$AzGGX$4@L9H$;tiy|NpFqPyE=;*J4ghR)EPIL;1I_tPm<^kvVxWosG@3H45eHGh( zpeuP-Loolnb9<8avYx+|zUJYL=JU&pq83Xr)>;aR`mvZehIMaK|8C&*h~ZJ)@?yt# z-&xfguou7@AobfRMINoHNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOib)z`J@L8bB}EaKakfZCnxv+|9`XGQ?@`oj3q&S!3+-1 zZlr-YN#5=*{1UquZUQ-+1s;*b3=DkxL735kHCP2G$X?><>&pIuk%h%dXUfj$?|^!g zJY5_^G|s0^+~~#ZDA4Bqu4T%*q=_6&)=MI{bbp(Ehvi&JQ@+BZY?Y5Kn|(YUPMsLC zENG3-bn_34Z_Y+rY_5*f|7BiX^ZES#{~H(ZXeG>D9$vmC`a*}BgPSs=Ib(p`w*{fo zF3%N>Zd725HF1&Re_En_`YQLuqNBeG5)K{vIngO3>a62NnFpNb;}Rb%zQ>-M^i^#C zfv)6T4Z-~P&h1Iw%Xc?W@7}mW_{kwtJBZfzH%ZnY~ zeP?|md&GZAy72*qZ`{3S+od{o{h8S|^_an{j|Qx%H5qeUlG(l|_%Z06E)tXBi@2Tk zz?j7*&+LA0Vre(S%QHu7_`QDkzVc;Fah>?y=BWJxW38|2C)+nno;2$>yS85Gl=3O| zF~9&+Epd$~Nl7e8wMs5Z1yT$~21X{j28KWsVrXV%07BXZ237_JRg>qxMbVI(pOTqY ziCY8rIrTuG1`W6kC7HRY#U+Wk1qeMRAqFN^rWRHvCJ;-O&*EtZ>S6G7^>bP0l+XkK Dd|&hn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..5373ec72cf746d1dc5581b7fdf79b99d565401cb GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiV0AVPdxOoMT(UqvcxVYeu-TSH-Q|^0*}aI1_r+UAk1jN8ms~oWH0gbb!C6S$iiZ!GiB%WcR)Q# zo-U3d8s}3dZuDYy6limQ*D~c@(nO9X>m`v}y1z}o!*Z^qDPQ4Hw#vtr%|0Fvr%nu6 z7PQ7^y7>pjH)o?QHdjaL|1z(x`Fwu=|BVZHv=Zhn4=-O6eWAn6!A+UboH4-e+k((( zm*owl-S_~*H}2lE?NS}P{>*Hfdd%R}M+4T>nv6Lv$!y;f{22637m3O6Mcht% zV9a8ZXLi3gv9z1v<(Z>3{9ZqNU-`18xK4a;bJYHUvDVl1lkFQOPnz|cU0bhoO8FG~ z7+?UZmbgZgq$HN4S|t~y0x1R~10xe%14AGRF*LI>03mGy11kfAs>$=;qG-s?PsvQH z#I1q*oO&Qog9hA&lFZ!H;*!MN0)!ru5Can{Qwu8-6Nn|tXYsTH^)Pt4`njxgN@xNA DsWtOE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/red.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa274491f750e6b2c15ae210356235d0fa4c6bd GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOiZjzUUq_#{IMd=Y#PFzYd9mZW z@2qcRkN8hXH$K4djl1`3yHv-nKQr5=9y56L(SS9zCS#6EGTZkAKL)+iMPf315x3JG z7_->qnceSAEbV4^dFE&hzt<1nSH7$%t`pze9JPO7to3#MWc!B6lV<&9*VZeYQa;5# z1{i>?)FK#IZ0z{o_`zz~Q+49%nC}Q!>*k zackf{rydB@paHj`Br`X)xFj*R0HMbu#K6SL)WXWd1Y*hZSv>7PJq(_%elF{r5}E+# C((w2I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_replicator_offline/white.png new file mode 100644 index 0000000000000000000000000000000000000000..3fac40572da01cadc9489598084f03b62240c534 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOib*~ojY&dyg9Zd{M4yaa&mJ2|NjqL)Yc8u!&nmJ7tG-B z>_!@hljQC0!Y{Fl;UO>_%)r36AA}h#Sc6r7g6t)pzOL*q7+F}Xbf)Z_{tl=| z$q3OPa{hWW6MEOZT_wcUaDqH03Ki%2xTBRPqAzr~Ik+h^nllF2eOnMZ z?ebjF=tc#`SQ8g1{--6{r>}BfEIRtDAmPxlpA(%zqRu*QlzG5;J}&XW;(P45NngeG zALvTn)ey{o@7$i`y{zZ2rLTE-qxt+Yqo~DFjJ1}6qJAtUj$z%~)V~{eJz{uNx4hW# z-FMbEvPb->PAQ*a z9|H_P)e_f;l9a@fRIB8oR3OD*WME{XYhVaOA%NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfgLP8P}66)*g zO-)UUii+I-?>0X+K}}6fOib+NYWbHt6pw8QKR#DRPEPLs|NnCm|4#twVJr#q3ubV5 zb|VeMN%D4g;g{IOa1+SkEbxddW?IC(HA=09Nd%{%^3sizAXry zc6qL7bfW@etci;h|I-rf(^t7K79IUnkZ|bO&xuYUQD+@D$~@paAD8%G@jdq3q_1N8 z4|FB(Y6#}PcWzJeUe@#1($_q^(R_ZHQPg57##&23Q9l+F$FS~g>fa5#9x*(sTVCw= z?mO!n*(3f_(v1%=eB(9)#smBaneKcTAt;v|EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1S>4ZV6^@K00Q$#L_t(o!@X9$Zt5@?J*hHR zOv#XLRAQ%6JMjdhvhoJ)h9fdDb;y)~p(Ch_JVHcO`T|Ui)Da{k#6*TzsLC7U4wc;` znBes19?7y}JNEhhtxcy>0Dxf_V2r^q3;+OQ3;=L{e~&8c_j~xh4*&>)07;S{iXz$OC}RnadCa!N~)HAb{`t zuq>-!0u>}l0?g-gWLYL!yWJLTKA+>Sp##9x)z#4rlu}$@Ul-KM7(0-%YERXg&KSe{ z`@2{ylNk&KS)27~PK@=~jFS)_aZQB5VX0xfS*XvpuXf~UgZQI}1 zK$@ln$vw|g)>TuUazNd397&t!)P?Z&CN|=ez)79&i|Z%#@_?7WC7r0VVO)O()0}g z{eB;&X-bRGcs%~nK$&&(9^63q8m4^K;>QJRV~tZ+@9?gWV>lSN)iWyYN@$@W9(+AITl}&$%v+qj(of0f1KqLqq002ovPDHLkV1juBOxFMa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/black.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6e46b603ba9738b06ec1c993a6379105a37adc GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|Ns9lDJd&0EiWo6AucW@ zC#O^sA}j)-PjtQcC>>({v$HCZ&QIonuV%k=Bs z#(QlAw?3q2w--tXE%0W~jd*0x^SFXj>eeX- znu_|4Eo7W@SnOkg#dGTi+vm$#JX3Gra$sFhLnniQ%^J6L*z*ti)ag8WRNi0dVN-jzT zQVd20Mn<}ZM!E(@AqJLKMut`<2HFM&Rt5$P=Mue9H00)|WTsW()=)V4=69e54Y&;@ wnYpROC5gEOAU!6!28Ox@CLsnUR;HF#hGq~;rmI(c0qSA!boFyt=akR{0HPHq+yDRo literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..cee8075bc64d919a690136036d322a21d3f44da2 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsB5rPH9R->IyUrLIwC zXgqDoebs275sW24e!&b5&u*lFI7!~_F8mU^7;XYNoCO|{#S9F5`$3q|f;CtLD9B#o z>Fdh=f{}&AT42%HTN*$;(>+}rLp+YZopO6xvjUH6BeRsmR~5UjLrQV8zg~Ucb)8sL7&X&DqA{TBcw3 zHr{J1xb-1DyS-3CXn{9-Zp0&lp2roODu*~WSnd$oV5M2SLG{5CWBuZ+aM`5V?6JX7Rkuz# z&{WiSY$4;M!(tx`ES_6G*gjv@;+c8_mjmm9B8SHX!jBHC)t8;Qud>SXYwgB&r_SEh zxL~#Pfn$GrjCA@^)`Hm^x;hv$y%g9q7}X{}Dl5Im9>@^64@Mv)(cD_PZUkU*R#A}a^O7i)v)NbC3liwiC-g5nQ z8h_D2do{0DpAE12%3VuZJ1NQ3AvW*pdizV}(kz;5pC41n0LGeXiEBhjN@7W>RdP`( zkYX@0Ff!6LG}1LN3Nf&>GBUI>G0-+Jure@UIG5;+q9HdwB{QuOw}!&WH@^clXuxeK w$;?eHE=kNS0O>K&H89jQFbOd*u`;!^GBkr&GF`pm3s4V(r>mdKI;Vst0OV;ac>n+a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..f2bbe05d30b33e0b87584b0977ddbea630c9b862 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|Ns9VXRVlOuk2?i9d0I< z=c;y}H&PC01Y=2%UoeBivm0q3PLj8~3%|rJhMPbRXMsm#F#`kNeh_A~U=3CQ3bL1Y z`ns~eU}Ryj7FcxlmIhGIbWaz@5Rc<;r`(>_tia>i$SftXRqXfw`&OLycHFS~Y>;0( zZ8djEF_UNKB{qYo=;hY~ub0aT9^5?TM2pk1*T3g6STVG$*ROLiYO-ipbGEU#mg(2M zjrZCLZhc74ZZDJ&THwu|8}Z1X=Wzw6${~&omOF$tSZNk-P<`;kSid+cTsEmT`z`MT z%PYroWL~-C=1*jHT_yd%%4ONwJLmGA?qlm=NMoJT?lM{S;OE3;FDGWsn)3CD`^u*$ znC;HkoImeV{MbO+*%hii=f_ksfU%}p;u=wsl30>zm0Xkx zq!^40jEr;*jdTr+LJTaej0~+z473dltPBho&Lw)IXvob^$xN%nt)X!8&F?@B8gLs* wGILXlOA>PnKzdAc4GeV+OhODytV}Jf49y^xOjob?0@TCc>FVdQ&MBb@01?V6T>t<8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..294ec49158db6a28f4f4db58a9dd287b09179097 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|Ns9llwToS-pC)5B9N9R z+SI#lx%^+C5sW24e!&b5&u*lFI7!~_F8mU^7;XYNoCO|{#S9F5`$3q|f;CtLD9B#o z>Fdh=f{}&AT42%HTN*$;(>+}rLp+YZopO6xvjUH6BeRsmR~5UjLrQV8zg~Ucb)8sL7&X&DqA{TBcw3 zHr{J1xb-1DyS-3CXn{9-Zp0&lp2roODu*~WSnd$oV5M2SLG{5CWBuZ+aM`5V?6JX7Rkuz# z&{WiSY$4;M!(tx`ES_6G*gjv@;+c8_mjmm9B8SHX!jBHC)t8;Qud>SXYwgB&r_SEh zxL~#Pfn$GrjCA@^)`Hm^x;hv$y%g9q7}X{}Dl5Im9>@^64@Mv)(cD_PZUkU*R#A}a^O7i)v)NbC3liwiC-g5nQ z8h_D2do{0DpAE12%3VuZJ1NQ3AvW*pdizV}(kz;5pC41n0LGeXiEBhjN@7W>RdP`( zkYX@0Ff!6LG}1LN3Nf&>GBUI>G0-+Jure@UIG5;+q9HdwB{QuOw}!&WH@^clXuxeK w$;?eHE=kNS0O>K&H89jQFbOd*u`;!^GBkr&GF`pm3s4V(r>mdKI;Vst0O$uSrvLx| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..d73971e07b71c5a31e94df51e71832bda8ad2521 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsAQY-VL{Wv8WUpl@Vq z) z^mS!_!N|g5EwJe9Ee)Wa>7Fi*As)xyPPsj;S%Js3ky%P&tJv@V_pLbZ?YLp}*&x4o z+G_5SVkXbdOKb*F(aWy~UN4swJh*wvi5912uYb>DuwrOguV3e4)MU}H=4@keEz_@i z8}GFh-1?B7-Cigmw7{D^H{y{&&*KVCl|vjGEO!WPu+l8vp!(p6v3_w@xNK5w_FLWw zmRFAF$h>mN&7a8Zx=Q+imCLfVch2QK-N)9$kj6Tv-DR@u!Ow}yUQW!MHRbCQ_mxji zFx#E6Ie*@#__2YyZFraa$%Vr0d8HkOdWD{k9D8n6$b8zfyu<0D0(*kQhnWJks#~WV zXe#PEwvchsVX=<|7SF98Y@aV{@l3se%Yk)4k;CHx;YWwn>dVgDS6SuxwRYpXQ)lmL zT(DaDz_GtQMml{dYr*UdT^)>>UJ7g)jB1k~m6hJ(@)uYTz;*ESL>Y%a`}K~hFRb;y z^jk_{iEIu->jkEeCyFNF>sekfIdGo%YFPB_ON_;y83r#J1C46m9&lji$#0NmZ@K(1*nI?)78&qol`;+0Ct@!>;M1& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/green.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1d91ee890b324ff9ec9ef030b9d558dcf32cb9 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsB*8YS+PC}HU>><}y( zm?iBJ%GeDwg0UpXFPOpM*^M+1C&}C0g)-PjtQcC>>({v$HCZ&QIonuV%k=Bs z#(QlAw?3q2w--tXE%0W~jd*0x^SFXj>eeX- znu_|4Eo7W@SnOkg#dGTi+vm$#JX3Gra$sFhLnniQ%^J6L*z*ti)ag8WRNi0dVN-jzT zQVd20Mn<}ZM!E(@AqJLKMut`<2HFM&Rt5$P=Mue9H00)|WTsW()=)V4=69e54Y&;@ wnYpROC5gEOAU!6!28Ox@CLsnUR;HF#hGq~;rmI(c0qSA!boFyt=akR{07n`s4gdfE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..041e93126d64d20bb3cb7d175c7b38272e90535c GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsAQICY!JfX>E{2;x4rhT!WHAE+-+mBgv|tTZ0SdC0 zc>21szhGoxu@+c#_Lc@v&vZ{0#}JR>Z>QXz)~vwe+Q=*=u~qE%|NB;)_jcT{`fQM2 zJZ&|1NimaW=Os3SsOaU_1Fx6M3Le}%11CSaY_qxR&YH zy^Z(U3T}N!&u%Z25L)2Po*VJVpyzP~r^+FY4VF8EHdtvEZ%}>k#8|&LD_l0IHv28_ z1j{SOb7Wq*EAvQGq={;=@dVTGg#n z4m1_@9b3pa>9E+x0*mL?54O*jwRoo9z~#WYpvd8If$*clYV~Dj?yIcw{93#5-Kn#8 zH7-~!ec;&N9wVK;l(k^?hOQ3AOfLmC4Mw%ekIG8#arp}@2;e$+dZLWOpZ$7A)fd+K zU-~VjutYY8q4fe&$P-1A@bxS&m>f7yd^Ie3_9ez*&kTbXje$nBZx1-I^W-;3v$tG- zoyK2u&|b~!)n~)2zH--+)=o+?b%@RTy59bhxipLB+ULhqGJvtBTH+c}l9E`GYL#4+ z3Zxi}42+C)4UKdSj6w`7t&9w@#bE@c1! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b0068c7a04258da48e96f25837e874b8d9506c GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsAAQj$|sQ<9Jnm7Sf^ z(NQm-r|Awfg0UpXFPOpM*^M+1C&}C0g)-PjtQcC>>({v$HCZ&QIonuV%k=Bs z#(QlAw?3q2w--tXE%0W~jd*0x^SFXj>eeX- znu_|4Eo7W@SnOkg#dGTi+vm$#JX3Gra$sFhLnniQ%^J6L*z*ti)ag8WRNi0dVN-jzT zQVd20Mn<}ZM!E(@AqJLKMut`<2HFM&Rt5$P=Mue9H00)|WTsW()=)V4=69e54Y&;@ wnYpROC5gEOAU!6!28Ox@CLsnUR;HF#hGq~;rmI(c0qSA!boFyt=akR{0MH*S`v3p{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe8e18354c895b1ca47aaff42bd424da2822ad6 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|Ns9VGg~-mnW#^rKuEt( z_Ez!MwRcT`MlhBH`2{mLJiCzw;v{*yyYNfwVz>$9a29w(7BevL?FV5-3)Wy2pdfpR zr>`sf3q}?eYk@^)Z)pJaO!stg4DmSrcFOH(%?doOjm%OKTg86=zi-8PZ^sR*&j$I$ z(^hkr6f=2tUSczdie7#_@Ortd;K9vPPP8~Jd;NPJgB3%|di^>Vqb7@nHD?=(YnguC z+jy_7;MRxq?Dj$lp#|RTxe<>HdLCDBsvP3jV7WtRgOz6S2Gs{ojP;AN!ex_cv)}Sg zu)K0SN9L7FZvI4O*HzLFtX!6@y>l+_={~j|hBVeW?JkpL4}MNu_Htt8tSMigxUYPA zg4ynj&H3{_#g7ftZNt0VPc9U0&nxXP)GPFS+LU@OS5RMeSS?)F zK#IZ0z{p6~&`8(7D8#_h%E-{l#6a7?z{zopr08%0>&Hw-a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..66d7c7f7653e07eed911c7413a9d7affd7728a2a GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|Ns9#%VgqGi`fm@6@3P+ zTWnWtxMVXMXar+PkY6x^!?PP{AWo9Ey9>X>E{2;x4rhT!WHAE+-+mBgv|tTZ0SdC0 zc>21szhGoxu@+c#_Lc@v&vZ{0#}JR>Z>QXz)~vwe+Q=*=u~qE%|NB;)_jcT{`fQM2 zJZ&|1NimaW=Os3SsOaU_1Fx6M3Le}%11CSaY_qxR&YH zy^Z(U3T}N!&u%Z25L)2Po*VJVpyzP~r^+FY4VF8EHdtvEZ%}>k#8|&LD_l0IHv28_ z1j{SOb7Wq*EAvQGq={;=@dVTGg#n z4m1_@9b3pa>9E+x0*mL?54O*jwRoo9z~#WYpvd8If$*clYV~Dj?yIcw{93#5-Kn#8 zH7-~!ec;&N9wVK;l(k^?hOQ3AOfLmC4Mw%ekIG8#arp}@2;e$+dZLWOpZ$7A)fd+K zU-~VjutYY8q4fe&$P-1A@bxS&m>f7yd^Ie3_9ez*&kTbXje$nBZx1-I^W-;3v$tG- zoyK2u&|b~!)n~)2zH--+)=o+?b%@RTy59bhxipLB+ULhqGJvtBTH+c}l9E`GYL#4+ z3Zxi}42+C)4UKdSj6w`7t&9w{GPE{p&G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..0532b209b2cf8b016285243feae190025aec5447 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsAgI)V3AI^W6w?%feQ z?+W-Gu06R4G=i}t$S;_|;n|He5GTpo-GyIb7XwI!v%n*=n1O+BKL|5gum-CD1=&kH zeO=jKFtV^%3oJT&O9QB9x~Gd{h{y4_Q*KXdR^V}MWR{ZHD)#&TeJjp;J8oEgHpnlY zwwk-7n8~yA5}QF(^z!S0*UM!E4{n}vqQz<1>)-PjtQcC>>({v$HCZ&QIonuV%k=Bs z#(QlAw?3q2w--tXE%0W~jd*0x^SFXj>eeX- znu_|4Eo7W@SnOkg#dGTi+vm$#JX3Gra$sFhLnniQ%^J6L*z*ti)ag8WRNi0dVN-jzT zQVd20Mn<}ZM!E(@AqJLKMut`<2HFM&Rt5$P=Mue9H00)|WTsW()=)V4=69e54Y&;@ wnYpROC5gEOAU!6!28Ox@CLsnUR;HF#hGq~;rmI(c0qSA!boFyt=akR{024zlMF0Q* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..e21b6d9bd592e41a653ff9ebf28b0788b1be83c5 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsAgs<`(?_4MWOr8~2l z-n1{xo12jbG=i}t$S;_|;n|He5GTpo-GyIb7sE{;hqJ&VvY3H^Z$Ah#TCfJI00r4g zJbhi+Uof(;SPLvVdrJeTXS%10V~EG`w^MFUYgXWKZDf{`*edq>|9vaYdpmAeeKyE1 zp0=91q?pOG^AejuRP^%ef!E7r1rKhXa-zj)+3Vl)7_1mt*6Y`~7&TcmtU23QT+8(9 z-o|@v1-Cw=XSWwh2rckt&y9Fw(DS&0Q{@oH2Fo2n8>}>oH>f^%Vys`B6)u}poBft| zg5{OtIWn(Ya`PuLyRMRcVCAxG?VWRZPxrC)Fr=~0X?K|{d+>AOvX>JxXHEI~#C_${ z6U=sJY|fweDSm9AZX4d^esZC3dtPaWpI-ZA zFa4HMSR$Ll(0YL>a*chU%6{ZYbPa{I>hFEU2lKMT$)95?ek+Q8NgUmEpd$~Nl7e8wMs5Z z1yT$~21Z7@hDN#uMj-~4Rz`+aCI;FD237_J4CfNPQ8eV{r(~v8;?__&`Q~?^1`W6k xC7HRY#U+Wk1t2{px(0^21|}f}CRV1FR)%H}OQx$=d;#iV@O1TaS?83{1OWB>Fem^3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..1494026afe22b16842f570fb863794fb0d7fa990 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsA=Am5X&I4wY`Bto{a zKxIjR;*55n5sW24e!&b5&u*lFI7!~_F8mU^7;XYNoCO|{#S9F5`$3q|f;CtLD9B#o z>Fdh=f{}&AT42%HTN*$;(>+}rLp+YZopO6xvjUH6BeRsmR~5UjLrQV8zg~Ucb)8sL7&X&DqA{TBcw3 zHr{J1xb-1DyS-3CXn{9-Zp0&lp2roODu*~WSnd$oV5M2SLG{5CWBuZ+aM`5V?6JX7Rkuz# z&{WiSY$4;M!(tx`ES_6G*gjv@;+c8_mjmm9B8SHX!jBHC)t8;Qud>SXYwgB&r_SEh zxL~#Pfn$GrjCA@^)`Hm^x;hv$y%g9q7}X{}Dl5Im9>@^64@Mv)(cD_PZUkU*R#A}a^O7i)v)NbC3liwiC-g5nQ z8h_D2do{0DpAE12%3VuZJ1NQ3AvW*pdizV}(kz;5pC41n0LGeXiEBhjN@7W>RdP`( zkYX@0Ff!6LG}1LN3Nf&>GBUI>G0-+Jure@UIG5;+q9HdwB{QuOw}!&WH@^clXuxeK w$;?eHE=kNS0O>K&H89jQFbOd*u`;!^GBkr&GF`pm3s4V(r>mdKI;Vst0Oso~KmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/red.png new file mode 100644 index 0000000000000000000000000000000000000000..50ea1416b5ffe122bd4838104dd034dfd7157ee2 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C+22@Ck7R(jg%s2?+_N zrlv(jMfLUd|8Fq-f8eRDtt}=drlzJQCnvX+f#E*`!|mI*|NsBrC@0gUAeSvEUM?dw zU0Ly^`GpBUBN$79{DK)Ap4~_Tagw~{XE z)7O>#1tSZKwZNjYw={ryrhB?LhIkx*JLUGYW(6MCMrJ9Atzy6b-?!qtx8sJ@XM_CW zX{)(QikUn+FR>X!MK8Y|c)eU!@ZjbtCt94Az5YFq!HS_}y?&jGQIkc(nzN0?wM@V6 zZM@f3aO*>Qc6*_O&;oDv+=xd8J&!9mRSt1%u-qZE!Ai4ugX)7P#`?us;j&4!*>8C# zSYA1vBlF57H-93t>niC7RxZod-Z_`|bRSy}LmKOxc9+Sr2R|n+dpR+4)|9VL+*dw5 z!EATN=KOh|;>QN+w&7jwCl?C0=aqIC>J@rEa_qTPA@ga^@(!nq3hW6IA7%>Fs&1Wf zpsA?u*h0ohhs8b?SUk6WuzkL)#WVE=E(g{HMGlV(gdZJNt1mlqUuBi&*V>KmPMy80 zalvZo1IPaM80qw-tOc_-bagOhdMU7JFse;{R91SA%U@tY0N26O6J;F!?AJT0zOdH+ z(r+n+C9*jTtrwU=o+z4xuV;C|w(wHWd#pzo^qnaY1!-F^BAlcTGs2=xfnHBG^{z>SX|5W z>)ytDZ3VYJq-VDmN(e3RX3vdyWYF`tf>Y%X#|FzCLL00!i#Mn~cw($yoE0vcRGa;l zcY@`W<2f>~Typa#GP|yleqiOYZ0((Mc~AGT^)RHd&S`gC;R0`i?DRoOD?1V}ZqU>j&HC%UV2BZ{TuZT~OrkxIp;PVYT|QGxt?id48?k`0mu% zyBZg)mOgOoZ;z2qU&>lAdqY}(qv{K5 z{V)BNQdlCJ!_azxDddTwN%(q}7fcSEC%zgMJ^K=4v1f+Ci^f2s+P4QB*m?3Bq}f}p zzfR*XI%u!v_3E?XRbRPlNoyx1nL5PgeO+&V$y}O6bM5nEDjC37Q!R0gC`m~yNwrEY zN(E93Mg~Skx`sx&21X$UmR3fFRwf481_o9J1`OvCy-_se=BH$)RpQoAIQiyxpau=N y4JDbmsl_FUxdk9SCb|ZOx&|g81}0XfmR5#l5KE@3S9}5LVeoYIb6Mw<&;$Si7&EK@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/matter_scanner/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..e68b47dcc9ec12fdbe2917c94f389b7886f2ec6a GIT binary patch literal 815 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 Zf%cd{Ea@}Pvjgg3@O1TaS?83{1OWdw-dq3x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4c8ec83dd08e512e221ab3bf58b8ef3d4f17fe GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}^}7s=rW6$wadC0||NsA{$glH2)r=)Ue!&b5&u*lFI7!~_ zF1+8iBz^^QI14-?iy0XB_Jc5^1#7ShP>{XE)7O>#1tSZKwZs~+ASs|8R!&I{FOdo#> znD#sN{(;=5n}hdWYKmjjh^sBR&ft(8n8m{^O1%u9cUNSFPe*a^z?n}m9TNTo)@g|8G$cKfOw(>2%s>!KREmJX3!xv#e=NFv(uU*s;!U%8P#~FK*u2 zd^oAu;wPi&qKuE{4oU(8j6t=;HKHUXu_V9nO2EgL*e9`-+>x5;5L+G=B5^xB<2=?^qA-x80s3Bgcz7u anF8%GfmqUKo@WQt!{F)a=d#Wzp$Pya%im`J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..8a801ae351d06f02b255266e611cffd5d0882962 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#})^mS!_!N|g5EwM%{ND8Qj)zif>MB{vF z-$uW~1_EvRn)(lpFsEjnTh*So(OcE6+u12qTZVrER|Rw0v9jbG>y2vC#c_)Kt=`tjR3)5qTe zru~k+e<1hi=HR`Tn&KEW;%ZB-GdN@iCNf;pKXcwH|63HqPp^_`I-T}euqopX&(t5wENfa5OtM!ocC7Q8^5S30i<`GL zA5Lnv_{nIxDC6U~gOb1iV^A$|jVMV;EJ?LWE=mPb3`PbNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#})^mS!_!N|g5EwM%{ND8Qj)zif>MB{vF z-$uW~1_EvRn)(lpFsEjnTh*So(OcE6+u12qTZVrER|Rw0v9jbG>y2vC#c_)Kt=`tjR3)5qTe zru~k+e<1hi=HR`Tn&KEW;%ZB-GdN@iCNf;pKXcwH|63HqPp^_`I-T}euqopX&(t5wENfa5OtM!ocC7Q8^5S30i<`GL zA5Lnv_{nIxDC6U~gOb1iV^A$|jVMV;EJ?LWE=mPb3`PbNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}Fdh=f{}&AT4Ie@kQ7i4tEY=&h{pNU zzKwo|4FuZsHT54HVNT6Dx2ipFqqnMCx3g2KwhaFSt_tR~V`a%X)*IENi{ljeTfG$u zZ`E&DLKxCX@Xd6=tUOwM^7Ic~bGiuZcga4tfPmnrM8$_2aj7rjNe` zO#2;s|3L23&B1#wHN`P%#MPEuXK=_4Ok}vGf9AYZ$c=PCvwsd7ljd#f4dwnPdVj`0 zrsTDk7B<<*USQO?we|BavCUSD^%7dCf{#bF<;B007dLNh zKAhBS@srVXQO3t}2PJ_4#-Li_8c~vxSdwa$T$Bo=7>o>zjC2i+bPbF`3@ojT46RHI zv<(cb3=9~~C3>T1$jwj5OsmALp>Xoe??4S2a2rZ8b5n~;5_1bcdQ5Z;40R1mLJUl- aOo8^8KrHDq&$9#SVeoYIb6Mw<&;$VBf8Im@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/green.png new file mode 100644 index 0000000000000000000000000000000000000000..9413a72ec95e5f3e29769eef9163f2a02be80f9b GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}74)xVX6f|NlRML+1fdHDgJTUoeBivm0q3PLj8~ z3-7lriC=*n&H|6fVg?4j{UFR}!5XXr6l5>)^mS!_!N|g5EwM%{ND8Qj)zif>MB{vF z-$uW~1_EvRn)(lpFsEjnTh*So(OcE6+u12qTZVrER|Rw0v9jbG>y2vC#c_)Kt=`tjR3)5qTe zru~k+e<1hi=HR`Tn&KEW;%ZB-GdN@iCNf;pKXcwH|63HqPp^_`I-T}euqopX&(t5wENfa5OtM!ocC7Q8^5S30i<`GL zA5Lnv_{nIxDC6U~gOb1iV^A$|jVMV;EJ?LWE=mPb3`PbNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}cn1xW$*uzI>UhG?8m z?c3;g*g&97UsM0V5$4pabF13(HhQbNbvrwyYRm9X;HqFwJ64vQW4%#Lx;Rdeztvlz z@K*hXHU9t0%N1HYivBNHVlvsUQDJ6UU&}Y!K9q>07{Tt9wWXZrYC zz_j17_YdSg-5k94Qd1nGMqF*lbq0s*z(j^?`e)8th1^INH2deUF=^hm-cas;qW5R~ zV@h6oX;*=RTU$T>65DLWSTCWKDj0Om^OAYV^7|iybzd^>+R{)p;nN(JosZ4k zlGP^c7BMcA;ksC{`G1Ro_~}(LO{dd73pQok;hFklnPp9Df=Tu&#*TGNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}OYm17CxVX6f|Nr0Xw7MRsnz1CvFPOpM*^M+1C&}C0 zh4gnPbqH#X8 zZ=>H~1A#VuP5lQ)m{YUPt!mHP=&kD3?d+7QEyF*7tAaW0SXpw8^+q-6;y6YAR&RyE zTlE{(`2R02S7`Al`oCa_$z;Dqg_&u6Efe)lo>ctsYvRwUgI+Emw! z(|*U^Kal%$bMW3vO>vAGakVAa862_$6B(}QpE++8awA>P?4QHNqte;`|1ApQr&q}|olg5K*pzXHXX=k-mNl&jCfTbPJJ$J4dGRmh#m!rr z4<|KS{A4s;l=1Q0K}leMF{qZfMwFx^mZVxG7o`Fz1|tI_BV9uyT?3;K14}C-Ln{*l zZ36=<0|SP0iQXt0a`RI%(<*UmD4cxrJ5YlL+=i0O+|=Td#M}aq9ur*yLtO)t5Can{ aQ=mO25KH>Z^X!0n7(8A5T-G@yGywqVZs0%w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..cba2b8d85e28f7b145923c4f3429502a40bafae9 GIT binary patch literal 648 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 aOo8^8KrHDq&$9#SVeoYIb6Mw<&;$SjDBjKh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/red.png new file mode 100644 index 0000000000000000000000000000000000000000..585d173ba0ef5352284aeda817aef817b94eb1c3 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}gA-n73HQXD-;zKadC0||Nno&+MT69)r=)Ue!&b5&u*lFI7!~_ zF1+8iBz^^QI14-?iy0XB_Jc5^1#7ShP>{XE)7O>#1tSZKwZs~+ASs|8R!&I{FOdo#> znD#sN{(;=5n}hdWYKmjjh^sBR&ft(8n8m{^O1%u9cUNSFPe*a^z?n}m9TNTo)@g|8G$cKfOw(>2%s>!KREmJX3!xv#e=NFv(uU*s;!U%8P#~FK*u2 zd^oAu;wPi&qKuE{4oU(8j6t=;HKHUXu_V9nO2EgL*e9`-+>x5;5L+G=B5^xB<2=?^qA-x80s3Bgcz7u anF8%GfmqUKo@WQt!{F)a=d#Wzp$P!z#NNjM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/white.png new file mode 100644 index 0000000000000000000000000000000000000000..72788586a570d581af4e8c89183edf0bb9e50780 GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU@8gn3ua&_n|#&+#7pva zcVYP7-hXC4kjGiz5n0T@zz1aW?Ps)L4ORgPvX^-Jy0X7uWMQ$ESR)oB#lXPW>*?Yc zVsW~5l3~{!2Ladnr({i@=532K)G)lmn}uEF=*fk8;ig2B{&gR6A( zizMm!>SatjT9_2F7`A5VPL5)|kZ;+j$aCPMwxq&jpTh$){%|IOx@>Ur(-5pobW z_oV9EmEwT9mWhIYGGe%MzdA7e`n%`n2e;g} z3-@nH4$A5LGC^j^=RHh;fmxT2X$5Le;hbe0@aeAypZuA}kBwG^&z4m@uz{s??WN1< zbw$!1PbTCu^fIvIx$rJxJanv$!yt!Yhq^@`Ltp=Xv-3VY?nMvYu?3v`^ZQCYr1BG{{W0D)e_f;l9a@fRIB8oR3OD*WME{ZYiOivU=(6tX=P++Wn!RhU|?lnz;G_n z8%0BIeoAIqC2kFclW%?pYS4h&P?DLOT3nKtTL98yqHAENYhV&$U}9wow8sQuNuPP1 Q9Z(O0r>mdKI;Vst0BOYwz5oCK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..b34e5a1efcee96760cc3b5822bc7c2ff5b33b1de GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfgLPE5)wM|V; z6A}`{#Kh#}cn1xW$*uzI>UhG?8m z?c3;g*g&97UsM0V5$4pabF13(HhQbNbvrwyYRm9X;HqFwJ64vQW4%#Lx;Rdeztvlz z@K*hXHU9t0%N1HYivBNHVlvsUQDJ6UU&}Y!K9q>07{Tt9wWXZrYC zz_j17_YdSg-5k94Qd1nGMqF*lbq0s*z(j^?`e)8th1^INH2deUF=^hm-cas;qW5R~ zV@h6oX;*=RTU$T>65DLWSTCWKDj0Om^OAYV^7|iybzd^>+R{)p;nN(JosZ4k zlGP^c7BMcA;ksC{`G1Ro_~}(LO{dd73pQok;hFklnPp9Df=Tu&#*TG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/mattercapacitorbank_frame_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6e5e7fcfa5486ca3b7855dec8a4f17e81a3ea4 GIT binary patch literal 1228 zcmV;-1T*`IP)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m$Z01m$aI0aKA00007bV*G`2j~F=1UDkauf(JP00PKKL_t(o!@XC%Zt^e`JwcgE zBqV2n0UmKY&IKct&!(B0GN5Dl-avOe_)K6 z1vK`0J!q{RnZ1tI_)tm#0JPR--u@3kYmIoZSO5UJ-7YxiD9aK;2$W@M7D_3NObCJP zc8k;L1OOP1#}_0RV-ATB=y0*msN3zD@!{bC0Py|&?aYNv^7#08CL&3a001VF36dni z@p!x-SQJGB;J*uq)#-FH<9@%#e!q8QA(Pu6<@R@yB);N!MykmL(bLnDiGegt zaX1{zXuH6lqZs)5`f@gYd3iBwnm}t}pOusnoO4JijS>Jx#yM}?JWW%x-j5Ui^l6&9 z1nz;u;Q-FLlPNxIYj>KmU@#b9Fc>(py0r55sZ$QX3FfjXIG&{_whnC5$P**JkRm`{0sp2{QN{w6!`e~Xe>l&nwoDaJa%lDLX>40*6X#o zeuWUovdn277-Oia3IGg|)oN8+i2PDa-?q$@V#b(r_m^eqScL9%LRD3UL4zI7T5dgfsy`38?;k}jnX7}%j zPMZXZqQGXe2{x|OpteeYB0kh9|A`AiPdfjN(0ULu#<1J%YH!rIZRG$k8jY~sZqFer q{7DuZk4J Date: Thu, 4 Jan 2024 12:46:19 +0600 Subject: [PATCH 19/37] Chug xp --- .../textures/block/essence_storage.png | Bin 1775 -> 1274 bytes .../textures/block/liquid_xp_flowing.png | Bin 2437 -> 3440 bytes .../block/liquid_xp_flowing.png.mcmeta | 5 ++ .../textures/block/liquid_xp_still.png | Bin 2437 -> 4489 bytes .../textures/block/liquid_xp_still.png.mcmeta | 45 ++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_flowing.png.mcmeta create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/liquid_xp_still.png.mcmeta diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage.png b/src/main/resources/assets/overdrive_that_matters/textures/block/essence_storage.png index bf0d329201779959851ae6129fdde23bf7c78429..093e2bc63a0215235618d627ac547c95efe2ecee 100644 GIT binary patch literal 1274 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

@Rs6`?Po@ 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 delta 2412 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 Date: Thu, 4 Jan 2024 14:06:23 +0700 Subject: [PATCH 20/37] Microwave oven painting --- .../advancements/MachineAdvancementsData.kt | 2 +- .../mc/otm/datagen/blocks/BlockModels.kt | 4 ++++ .../mc/otm/datagen/blocks/BlockStates.kt | 2 +- .../mc/otm/datagen/items/ItemModels.kt | 2 +- .../dbotthepony/mc/otm/datagen/lang/English.kt | 2 +- .../dbotthepony/mc/otm/datagen/lang/Russian.kt | 2 +- .../mc/otm/datagen/loot/LootTablesData.kt | 2 +- .../otm/datagen/models/MatteryModelProvider.kt | 4 ++-- .../otm/datagen/recipes/CraftingTableRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 1 + .../ru/dbotthepony/mc/otm/datagen/tags/Tags.kt | 2 +- .../dbotthepony/mc/otm/compat/jei/JEIPlugin.kt | 4 ++-- .../mc/otm/compat/jei/MicrowaveRecipeCategory.kt | 4 ++-- .../mc/otm/recipe/MatteryCookingRecipe.kt | 2 +- .../mc/otm/registry/MBlockEntities.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 4 ++-- .../ru/dbotthepony/mc/otm/registry/MRegistry.kt | 7 +------ .../textures/block/powered_smoker_base/black.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/blue.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/brown.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/cyan.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/gray.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/green.png | Bin 0 -> 628 bytes .../block/powered_smoker_base/light_blue.png | Bin 0 -> 628 bytes .../block/powered_smoker_base/light_gray.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/lime.png | Bin 0 -> 628 bytes .../block/powered_smoker_base/magenta.png | Bin 0 -> 628 bytes .../block/powered_smoker_base/orange.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/pink.png | Bin 0 -> 628 bytes .../block/powered_smoker_base/purple.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/red.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base/white.png | Bin 0 -> 625 bytes .../block/powered_smoker_base/yellow.png | Bin 0 -> 628 bytes .../textures/block/powered_smoker_base_mask.png | Bin 0 -> 1022 bytes .../block/powered_smoker_interior_0/black.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/blue.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/brown.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/cyan.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/gray.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/green.png | Bin 0 -> 634 bytes .../powered_smoker_interior_0/light_blue.png | Bin 0 -> 634 bytes .../powered_smoker_interior_0/light_gray.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/lime.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/magenta.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/orange.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/pink.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/purple.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/red.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0/white.png | Bin 0 -> 661 bytes .../block/powered_smoker_interior_0/yellow.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_0_mask.png | Bin 0 -> 1078 bytes .../block/powered_smoker_interior_1/black.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/blue.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/brown.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/cyan.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/gray.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/green.png | Bin 0 -> 647 bytes .../powered_smoker_interior_1/light_blue.png | Bin 0 -> 647 bytes .../powered_smoker_interior_1/light_gray.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/lime.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/magenta.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/orange.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/pink.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/purple.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/red.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1/white.png | Bin 0 -> 644 bytes .../block/powered_smoker_interior_1/yellow.png | Bin 0 -> 647 bytes .../block/powered_smoker_interior_1_mask.png | Bin 0 -> 1078 bytes .../block/powered_smoker_interior_2/black.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/blue.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/brown.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/cyan.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/gray.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/green.png | Bin 0 -> 637 bytes .../powered_smoker_interior_2/light_blue.png | Bin 0 -> 637 bytes .../powered_smoker_interior_2/light_gray.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/lime.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/magenta.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/orange.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/pink.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/purple.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/red.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2/white.png | Bin 0 -> 634 bytes .../block/powered_smoker_interior_2/yellow.png | Bin 0 -> 637 bytes .../block/powered_smoker_interior_2_mask.png | Bin 0 -> 1078 bytes 86 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 5906c96cf..46ec8e585 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -203,7 +203,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter CraftEntry(MItems.POWERED_BLAST_FURNACE, "Big Microwave Oven", russianName = "Большая микроволновая печь").make(serializer, it, translation) - CraftEntry(MItems.POWERED_SMOKER, "Small Microwave Oven", + CraftEntry(MItems.POWERED_SMOKER.values, "Small Microwave Oven", russianName = "Маленькая микроволновая печь").make(serializer, it, translation) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index e831fc197..eef2d1183 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -28,5 +28,9 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { colored("matter_replicator", "idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline")) colored("matter_replicator", "error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted")) colored("matter_replicator", "working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) + + colored("powered_smoker", "idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base"), "_idle") + colored("powered_smoker", "error", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_2", "particle" to "powered_smoker_base"), "_error") + colored("powered_smoker", "working", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_1", "particle" to "powered_smoker_base"), "_working") } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index ee2725561..94331ac0b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -102,7 +102,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.POWERED_BLAST_FURNACE) provider.block(MBlocks.POWERED_FURNACE) - provider.block(MBlocks.POWERED_SMOKER) + provider.block(MBlocks.POWERED_SMOKER.values) provider.block(MBlocks.STORAGE_POWER_SUPPLIER) provider.block(MBlocks.MATTER_RECYCLER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 52797e34f..98cf841e3 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -179,7 +179,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace_working") provider.block(MItems.POWERED_FURNACE, "powered_furnace_working") - provider.block(MItems.POWERED_SMOKER, "powered_smoker_working") + provider.coloredWithBaseBlock(MItems.POWERED_SMOKER, "powered_smoker", "_idle") provider.coloredWithBaseBlock(MItems.PLATE_PRESS, "plate_press", "_idle") provider.coloredWithBaseBlock(MItems.TWIN_PLATE_PRESS, "twin_plate_press", "_idle") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index cbea1fe86..d53c34646 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -463,7 +463,7 @@ private fun blocks(provider: MatteryLanguageProvider) { addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Twin Plate Press") add(MBlocks.POWERED_FURNACE, "Electric Furnace") - add(MBlocks.POWERED_SMOKER, "Microwave Oven") + addBlock(MBlocks.POWERED_SMOKER.values, "Microwave Oven") add(MBlocks.POWERED_BLAST_FURNACE, "Induction Furnace") add(MBlocks.MATTER_RECYCLER, "Matter Recycler") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index c8d77d378..07b83405e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -466,7 +466,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.POWERED_FURNACE, "Электрическая печь") add(MBlocks.POWERED_BLAST_FURNACE, "Индукционная печь") - add(MBlocks.POWERED_SMOKER, "Микроволновая печь") + addBlock(MBlocks.POWERED_SMOKER.values, "Микроволновая печь") add(MBlocks.MATTER_RECYCLER, "Перерабатыватель материи") add(MBlocks.ENERGY_SERVO, "Энергетическая помпа") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index e42a1bcff..ecbea7fde 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -162,7 +162,7 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values) lootTables.tile(MBlocks.POWERED_FURNACE) - lootTables.tile(MBlocks.POWERED_SMOKER) + lootTables.tile(MBlocks.POWERED_SMOKER.values) lootTables.tile(MBlocks.POWERED_BLAST_FURNACE) lootTables.tile(MBlocks.MATTER_PANEL) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index af597596c..8d188eb5e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -126,10 +126,10 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } - fun colored(modelName: String, suffix: String, textureKeys: Map) { + fun colored(modelName: String, suffix: String, textureKeys: Map, baseSuffix: String = "") { for (color in DyeColor.entries) { exec { - val model = withExistingParent(modelName + "_${color.name.lowercase()}_$suffix", modLocation(modelName)) + val model = withExistingParent(modelName + "_${color.name.lowercase()}_$suffix", modLocation(modelName + baseSuffix)) for ((key, value) in textureKeys) { model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 5c1f2280b..a8f4909c8 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -448,7 +448,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(MItems.MACHINE_FRAME) .build(consumer) - MatteryRecipe(MItems.POWERED_SMOKER, category = machinesCategory) + MatteryRecipe(MItems.POWERED_SMOKER[null]!!, category = machinesCategory) .rowAC(Items.FURNACE, Items.FURNACE) .row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET) .unlockedBy(MItems.MACHINE_FRAME) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 4dd3e6afc..23780a432 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -284,6 +284,7 @@ fun addPainterRecipes(consumer: RecipeOutput) { MItems.MATTER_CAPACITOR_BANK, MItems.BATTERY_BANK, MItems.MATTER_DECOMPOSER, + MItems.POWERED_SMOKER, ) for (list in blocks) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 879d3f3f4..4efdedf5c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -197,7 +197,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.MATTER_ENTANGLER, MBlocks.POWERED_FURNACE, - MBlocks.POWERED_SMOKER, + *MBlocks.POWERED_SMOKER.values.toTypedArray(), MBlocks.POWERED_BLAST_FURNACE, MBlocks.STORAGE_BUS, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt index ce94da256..8774e026f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt @@ -68,8 +68,8 @@ class JEIPlugin : IModPlugin { registration.addRecipeCatalyst(ItemStack(MItems.POWERED_FURNACE), RecipeTypes.SMELTING) registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.SMELTING_UPGRADE), RecipeTypes.SMELTING) registration.addRecipeCatalyst(ItemStack(MItems.POWERED_BLAST_FURNACE), RecipeTypes.BLASTING) - registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER), RecipeTypes.SMOKING) - registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER), MicrowaveRecipeCategory.recipeType) + registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER[null]!!), RecipeTypes.SMOKING) + MItems.POWERED_SMOKER.values.forEach { registration.addRecipeCatalyst(ItemStack(it), MicrowaveRecipeCategory.recipeType) } registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.CRAFTING_UPGRADE), RecipeTypes.CRAFTING) registration.addRecipeCatalyst(ItemStack(MItems.ITEM_MONITOR[null]!!), RecipeTypes.CRAFTING) MItems.PLATE_PRESS.values.forEach { registration.addRecipeCatalyst(ItemStack(it), PlatePressRecipeCategory.recipeType) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/MicrowaveRecipeCategory.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/MicrowaveRecipeCategory.kt index 622c59349..dd93d7796 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/MicrowaveRecipeCategory.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/MicrowaveRecipeCategory.kt @@ -42,7 +42,7 @@ object MicrowaveRecipeCategory : IRecipeCategory, IDrawable { } override fun getTitle(): Component { - return MItems.POWERED_SMOKER.description + return MItems.POWERED_SMOKER[null]!!.description } override fun draw(graphics: GuiGraphics, xOffset: Int, yOffset: Int) { @@ -95,7 +95,7 @@ object MicrowaveRecipeCategory : IRecipeCategory, IDrawable { } private val iconField by lazy { - JEIPlugin.helpers.guiHelper.createDrawableItemStack(ItemStack(MItems.POWERED_SMOKER)) + JEIPlugin.helpers.guiHelper.createDrawableItemStack(ItemStack(MItems.POWERED_SMOKER[null]!!)) } override fun getIcon(): IDrawable { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/MatteryCookingRecipe.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/MatteryCookingRecipe.kt index 57d4646de..138247afc 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/MatteryCookingRecipe.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/MatteryCookingRecipe.kt @@ -80,7 +80,7 @@ class MicrowaveRecipe( experience: FloatProvider = ConstantFloat.ZERO ) : MatteryCookingRecipe(input, output, count, workTime, experience) { override fun getType(): RecipeType<*> = MRecipes.MICROWAVE - override fun getToastSymbol(): ItemStack = ItemStack(MItems.POWERED_SMOKER) + override fun getToastSymbol(): ItemStack = ItemStack(MItems.POWERED_SMOKER[null]!!) override fun getSerializer(): RecipeSerializer<*> = SERIALIZER override fun toFinished(id: ResourceLocation): FinishedRecipe = SERIALIZER.toFinished(this, id) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index b63e48283..338da079f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -87,7 +87,7 @@ object MBlockEntities { val POWERED_FURNACE: BlockEntityType by registry.register(MNames.POWERED_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_FURNACE.newBlockEntity(a, b) }, MBlocks.POWERED_FURNACE).build(null) } val POWERED_BLAST_FURNACE: BlockEntityType by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_BLAST_FURNACE.newBlockEntity(a, b) }, MBlocks.POWERED_BLAST_FURNACE).build(null) } - val POWERED_SMOKER: BlockEntityType by registry.register(MNames.POWERED_SMOKER) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_SMOKER.newBlockEntity(a, b) }, MBlocks.POWERED_SMOKER).build(null) } + val POWERED_SMOKER: BlockEntityType by registry.register(MNames.POWERED_SMOKER) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_SMOKER[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_SMOKER.values.toTypedArray()).build(null) } val STORAGE_BUS: BlockEntityType by registry.register(MNames.STORAGE_BUS) { BlockEntityType.Builder.of(::StorageBusBlockEntity, MBlocks.STORAGE_BUS).build(null) } val STORAGE_IMPORTER: BlockEntityType by registry.register(MNames.STORAGE_IMPORTER) { BlockEntityType.Builder.of(::StorageImporterBlockEntity, MBlocks.STORAGE_IMPORTER).build(null) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 11b002f9c..85be76b6b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -114,7 +114,7 @@ object MBlocks { val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> PlatePressBlock(color, isTwin = true) } val POWERED_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } val POWERED_BLAST_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_BLAST_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } - val POWERED_SMOKER: PoweredFurnaceBlock by registry.register(MNames.POWERED_SMOKER) { PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } + val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } val MATTER_RECYCLER: Block by registry.register(MNames.MATTER_RECYCLER) { MatterRecyclerBlock() } val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 437ffb988..efffde65a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -78,7 +78,7 @@ object MItems { val POWERED_FURNACE: BlockItem by registry.register(MNames.POWERED_FURNACE) { BlockItem(MBlocks.POWERED_FURNACE, DEFAULT_PROPERTIES) } val POWERED_BLAST_FURNACE: BlockItem by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockItem(MBlocks.POWERED_BLAST_FURNACE, DEFAULT_PROPERTIES) } - val POWERED_SMOKER: BlockItem by registry.register(MNames.POWERED_SMOKER) { BlockItem(MBlocks.POWERED_SMOKER, DEFAULT_PROPERTIES) } + val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> BlockItem(MBlocks.POWERED_SMOKER[color]!!, DEFAULT_PROPERTIES) } val STORAGE_BUS: BlockItem by registry.register(MNames.STORAGE_BUS) { BlockItem(MBlocks.STORAGE_BUS, DEFAULT_PROPERTIES) } val STORAGE_IMPORTER: BlockItem by registry.register(MNames.STORAGE_IMPORTER) { BlockItem(MBlocks.STORAGE_IMPORTER, DEFAULT_PROPERTIES) } @@ -112,7 +112,7 @@ object MItems { machines.addAll(TWIN_PLATE_PRESS.asSupplierArray()) machines.add(::POWERED_FURNACE) machines.add(::POWERED_BLAST_FURNACE) - machines.add(::POWERED_SMOKER) + machines.addAll(POWERED_SMOKER.asSupplierArray()) machines.add(::ANDROID_STATION) machines.add(::ANDROID_CHARGER) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 636762b46..08f700b0e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -279,12 +279,7 @@ object MRegistry : IBlockItemRegistryAcceptor { event.register(Registries.POINT_OF_INTEREST_TYPE, PoiTypes.BUTCHER.location()) { val old = reg[PoiTypes.BUTCHER] ?: throw IllegalStateException("POI with type ${PoiTypes.ARMORER} does not exist") - - if (old.`is`(MBlocks.POWERED_SMOKER.defaultBlockState())) { - old - } else { - PoiType(Streams.concat(old.matchingStates.stream(), MBlocks.POWERED_SMOKER.stateDefinition.possibleStates.stream()).collect(ImmutableSet.toImmutableSet()), old.maxTickets, old.validRange) - } + PoiType(Streams.concat(old.matchingStates.stream(), MBlocks.POWERED_SMOKER.values.stream().flatMap { it.stateDefinition.possibleStates.stream() }).collect(ImmutableSet.toImmutableSet()), old.maxTickets, old.validRange) } event.register(Registries.POINT_OF_INTEREST_TYPE, PoiTypes.ARMORER.location()) { diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/black.png new file mode 100644 index 0000000000000000000000000000000000000000..aebe0254f73c9c9d9eba7eff03ee6acfd02c63c8 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfCB&6q=ny#Je zBQLKkCMG5$BQGZ>r>3SB5)x8WR3s%O`~UxcQ&UrIZS91F1l2ib_W<=UmIV0)GdMiE zkp|)~6X;AYJc_Vkc@Pa{+(e9Ia%!e2saHUlW32MzSovXM};;Z2O&w)M@B6_ktV!1X? zP)?huQ`c3p)^+KPAVUxHs5dJzRJ?U(g>;lGZM9*XWXWanF`B_3TS@TS!wl!!mMu y0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBe4I!5Jm9c@60)wZkpUXO@geCx!EzKbS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9be548bba8f8f9fcdce18c8c36316cf5d0e9a49b GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhIH7n+sny#Je zV{AHGOiWDAphr$lPEAcMBqXG$s7PC<`Tzg_rlzLa+S&;T329N64gvKrmIV0)GdMiE zkp|)~6X;AYJc_Vkc@Pa{+(e9Ia%!e2saHUlW32MzSovXM};;Z2O&w)M@B6_ktV!1X? zP)?huQ`c3p)^+KPAVUxHs5dJzRJ?U(g>;lGZM9*XWXWanF`B_3TS@TS!wl!!mMu y0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBe4I!5Jm9c@60)wZkpUXO@geCwL9?xa~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c18419d4ae319c79c33db89246ed61c8c52763 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfA%;o2qny#Je zQ{=88CMK5dpdu$Hr>3SB5)x8WRFq(&`2YWZQ&UrIZS91F1b%~CWM1MG8=my~NYkmHh=H3!8~?%eLg-K%v*3 zE{-7@=SwFj@*Q#zU^w4!aKoaeB`qy>jruXGEH6qqHEEdEGW=N(!Lvw%$FuohK(ONn z36@QN8q_>Q-pCydlG_6>r^HAsr=4TWuI8S#p_tjAk&%RucU7FvIz_<;%x8 z4i`%s_6A2<*e3j8*ZpE|v47grqaqKtYUn9;zIelHe2iIWT_B6eqgkwL|7iW|usL;D zfuXK}QHX)5m4Ts^sfD(Ift7(l=iC#|Q8eV{r(~v8;@0rv yKtVK6g9hA&lFZ!H;*!MN0)!ru5CbzSQzI)=Lx?4QWo)3Nz~JfX=d#Wzp$Py&3C-yM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..9973d3d63f761c3193e20f2ffa01fd7109fbf00d GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHe%GYaOJny#Je zBi1%iOiWC;vRO_}PEAcMBqXG$s7R==>i_@$rlzLa+S&;T2|eYrHv#o9mIV0)GdMiE zkp|)~6X;AYJc_Vkc@Pa{+(e9Ia%!e2saHUlW32MzSovXM};;Z2O&w)M@B6_ktV!1X? zP)?huQ`c3p)^+KPAVUxHs5dJzRJ?U(g>;lGZM9*XWXWanF`B_3TS@TS!wl!!mMu y0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBe4I!5Jm9c@60)wZkpUXO@geCwofzR~- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..55a1310e36bde4c01f9e5c03876968d52e4b34b6 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHaT&E}b!uAS>+ z=j0|PCT3x6FDECbrluAW5>ixDWMXdp|NnneQ&Vki?SzDcyz3@QfO;59g8YIR9G=}s z196hP-CcMZHwPvIIh+L^k;M!Qe1}1p@p%4<6rdn`iKnkC`wK=EHWTBPZOOlZLa#kt z978nDmrhXRJLDk1aK7Q-hDA+FT3YNH^^!Jx=!_enkGLyQl&(kg`nwPu*kRop1?Rq+1jK%WT_J=q?yT$?8- zr%lwU>nd66y7Wenp@(_Yn-v)<-nz3wI!czd+AvPC3%NhVyO9mydHC zE|xaz4UV+1P58sE`^Da3|Fow^MILU|&{OPu@rKv<7_-p2Ko*lnvsl;u(fZe6bLz0h z`A_{f>?c$&WG&Hp^v!BM`xY+OY`&g=*OpuSy);%eJ)5XresoiMRk xf@q)y4Y&;@nYpROC5gEO2t6ht24+^KMpmYV5KH{Z*g#2v!PC{xWt~$(6959h&Q|~c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/green.png new file mode 100644 index 0000000000000000000000000000000000000000..2c25355f5f03902541e0dac5106545c1a9271f83 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHf4LqzA9ny#Je z6Ot<SBq=8+r>3SB5)x8WROB8b{{R1fQ&UrIZS91F1fS}Ovw?aTOM?7@862M7 zNCR<_yxm=R8aD?f138=p9+AZi419+{nDKc2iWHzAdx@v7EBgyZ7B&;(mTk$ufkLl6 zT^vI+&X-P5$>ztkfDcp)SDFNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHg7yI0LKHC;Q` z$9l_cF)=aI#mD62Yp2p3A$v_Tgfk$L90|Vb-5N14{zaj-F$X?><>&pIuk%i5~xMf@NZ=ld? zPZ!4!jq{}w6!{K02r!&)IJjX^(~_1JyGH$(RhAc}oSHODYZ?A5h~QbI!QA1utu4n$Nz4%Qc&?C*ZZ^7Jn~|RZY((s+S+#RI4MncN@^#swJ)w zB`Jv|saDBFsX&Us$iT=%*T7KMz$nDP)XKon%G5&Jz`)ADpmXkt=O`L-^HVa@DsgN0 zaiAa?s6hj6LrG?CYH>+oZUI7%Nr-`&m8p@HsUgG?zcMyZQeg0O^>bP0l+XkKjv~<% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..908a83fadc4588d6e4b5e20b305b278c6fdbb141 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHg5a#H7+ny#Je z)6>%|CMH%_S0*PXr>3SB5)x8WR8&@$_y7NYQ&UrIZS91FgawbUI|21DmIV0)GdMiE zkp|)~6X;AYJc_Vkc@Pa{+(e9Ia%!e2saHUlW32MzSovXM};;Z2O&w)M@B6_ktV!1X? zP)?huQ`c3p)^+KPAVUxHs5dJzRJ?U(g>;lGZM9*XWXWanF`B_3TS@TS!wl!!mMu y0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBe4I!5Jm9c@60)wZkpUXO@geCyPCDFqG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..31c617e1f3469e24436c2fb7e64160ba801f5c7a GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHh0CJN0nHC;Q` zCx5qun3!0~N>MpEIW;x4kdTm~qN2EYBLDyYH#IfY*49o)NN8cP-wxEnSQ6wH%;50s zMjD8d8OY%*@Q5sCVBk9p!i>lBSEK+1*-JcqUD;nSvap#Lw`@!P4HSCq z>EaloalUkdBHtkg0fzGp2RAHgTGG;D*Qg(}%JQO=QO!^TfTgp z<8ZOGVQ+Axg>AwgcHJ-b7W=0?Ju32WtA?Ip=ZiPI#>be2)&;VdJetM2_K()T4x3Yl zHO_zPzhOV2dLe6x)}wD$^Vzp>xn}eA1iZG~;_s!gs_EH8_41>eYIOwnZUcH-wZt`| zBqgyV)hf9t6-Y4{85o)98W`#t7=;*^S{WExnObNY7+4t?bk05T97RKJeoAIqC2kEr z4irQKHE6(XD9OxCEiOsSEkNio2{ACUGBvU?HGo+1f|0iasE5JR)z4*}Q$iB}Nte&% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..2abb254b92438a22951724148b18ac164fd9437c GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfE7_`qbHC;Q` zXP5nYF)^_fmhYp2p3A$v_Tgfk$L90|Vb-5N14{zaj-F$X?><>&pIuk%i5~=<~+lT%gcv zPZ!4!jq{}w6!{K02r!&)IJjX^(~_1JyGH$(RhAc}oSHODYZ?A5h~QbI!QA1utu4n$Nz4%Qc&?C*ZZ^7Jn~|RZY((s+S+#RI4MncN@^#swJ)w zB`Jv|saDBFsX&Us$iT=%*T7KMz$nDP)XKon%G5&Jz`)ADpmXkt=O`L-^HVa@DsgN0 zaiAa?s6hj6LrG?CYH>+oZUI7%Nr-`&m8p@HsR6{27mU0eKs^keu6{1-oD!M<^hVJ$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ffb882c8a4bce82f0bbad887e75158f83bdbfd GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhqMe)otHC;Q` z=WB_8n3&kzOg=d|IW;x4kdTm~qN4Ljy#N3IH#IfY*49o)NHEx08OY%*@Q5sCVBk9p!i>lBSEK+1*-JcqUD;nSvap#Lecl+H3lw_o z>EaloalUkdBHtkg0fzGp2RAHgTGG;D*Qg(}%JQO=QO!^TfTgp z<8ZOGVQ+Axg>AwgcHJ-b7W=0?Ju32WtA?Ip=ZiPI#>be2)&;VdJetM2_K()T4x3Yl zHO_zPzhOV2dLe6x)}wD$^Vzp>xn}eA1iZG~;_s!gs_EH8_41>eYIOwnZUcH-wZt`| zBqgyV)hf9t6-Y4{85o)98W`#t7=;*^S{WExnObNY7+4t?bk05T97RKJeoAIqC2kEr z4irQKHE6(XD9OxCEiOsSEkNio2{ACUGBvU?HGo+1f|0iasE5JR)z4*}Q$iB}#@W!D literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..c650f32c45e8a69b931fc5333ee76a9eb5496182 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhqWVg&SHC;Q` z=X3WeF)^__wX@{p`>BlBR#{$@a%$2rt!4PLAcAL+29Ia+!GK`L z4-zb!{xqn0h`f))T!$#S?jv=Mv$S0dDNQ~87khovqCybmbTh3PO{`O`54V$kgX*6?O}%VZOfOB za~v*~HtY?Kw6IP1!>;?q-eUi>r$~8R-fci{tCqM% zl%yncptHiD0 z$AN-qpau=N4JDbmsl_FUxdjM4CLso9R;ET)rUnp8UNG`@0QE3NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHgrWSi%iny#Je zQ=+y~OiV0OX{MZ8OY%*@Q5sCVBk9p!i>lBSEK+1*-JcqUD;nSvap#Lw`@!P4HSCq z>EaloalUkdBHtkg0fzGp2RAHgTGG;D*Qg(}%JQO=QO!^TfTgp z<8ZOGVQ+Axg>AwgcHJ-b7W=0?Ju32WtA?Ip=ZiPI#>be2)&;VdJetM2_K()T4x3Yl zHO_zPzhOV2dLe6x)}wD$^Vzp>xn}eA1iZG~;_s!gs_EH8_41>eYIOwnZUcH-wZt`| zBqgyV)hf9t6-Y4{85o)98W`#t7=;*^S{WExnObNY7+4t?bk05T97RKJeoAIqC2kEr y4irQKHE6(XD9OxCEiOsSEkNio2{ACUGBvU?HH28=SH=cP3JjjEelF{r5}E)IW6)** literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/red.png new file mode 100644 index 0000000000000000000000000000000000000000..193e63917b769b31b04d54cdd5c1dc07939f2378 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfIWu)erny#Je zGe=cPOiZj-Q4R>y)YL*kLW+utTI6N^|Nn1lYO1ZRosf{wW4re|P!D5CkY6x^!?PP{ zAWo9Ey9-a_=D=hihqJ&VvY3H^?=T269?xHq0u*E~@$_|Nf5FJYW@6m3E%`T4=(VSd zV~EE2(g})uha3bL&Nm#~u&8NCON(8je#|P%i&9Qa8m6@je-=dWEYjfdY(5we?D#=~ zWz(MqH4l+Da>olV7!(=pKB>oii17heTBVSn)(q3RiW?=q3f})5=rbXrC)*>IYx4x< zw23-(T_tN>m);06^e~Tlvm!&qTX$ASN6FGw8^%eNTqYl*84R+O1iwAZaK3H%@^OyC z#nOho!I2iW34hpizt~&spZ4^q$iuA~dWxMd-tZb9V-{K$$YSzn7VFwSTK_t1P94@b z|Ed3m{e1GbWnj=b_r!A)4Y~O#nQ4`{HT*bG x5DnCz0k@$fGdH!kBr&%Dp~ob|z|6|j$ja0ZVu@cF8z?C-c)I$ztaD0e0sw)t&m8~& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_base/white.png new file mode 100644 index 0000000000000000000000000000000000000000..84edb77d3eb219201a3be89eb2a6c5d8647215ec GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHgX9XmG9)O77! zpa1{=i;0OnfBsxfPEJitEhHqQsHo`1jT@$>rrO%t2?+`EAC7=DGL{7S1v5B2yO9Rs zBze2Lu=Ho#3MxQqZ=K_UZd%8G= zXq+#dpvZT~L4e_W!@&)n+8!KDc8%f_VpdsRloIF&y39UBUL?9%gUk6+fu~{ik&as`119ztHdnk$T(uk9rZK#kDzNvOJJeK zzDGY?tznC{A;0o(mW&H;`*A`#Bue}TCZPgOjh?11V zl2ohYqEsNoU}RuqqHAENYhV;&U}|MxXk}`lZD3$!V9+`D#B&r4x%nxXX_dG&{5Vh$ w4b-3kx1l66H?_DVF}DDr$0WqS%*xcr%G3a2$qPo_4xkNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHe>&yt>JYPxo= z&!6KeVq#)XwkXKS$*HNSg@l9@6%}1wA@~3Pe^XOaZEfv@goJcf7myytk|4ie28U-i z(m`M*WyomKUX*nlwyn8U8GY;8~=>=w`4Hm+uCz)aL9H34a}_sAd=bgqSx-PvDWawcY^=3teins2pkdBh2tu~C4EV)cRMl%>>D+zvknBjce^5x?k zhl`~RdxIk_Y!m*l>wdAf*gx&*QIUsRHS`oaU%cTpKE^DxE|A6K(Ja=rf3*H}*ql17 zasE^P4f_ez3t3CF9(}W#&%TArHJh&|;I-uze=m(yP0uE(mml3!t0TB~8_?UTC9V-A zDTyViR>?)FK#IZ0z{o_`z);t~D8#_j%D~Xd)I!_9z{nC}Q!>*kaclT- ypdcEkK?80>NoHEX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01m?d01m?e$8V@)00007bV*G`2j~F=1}_AaJq>OE00H_*L_t(o!`)Xss)Ilfo(-uL zgn%hiZYfA$Q>OF)+vWhNa)aC;l?SlR0rm(6f?%E6#zGcWNIkDwiN?2XVtyX)195j9 zoo~LG*-c2ArU(`&ih^*?;dDB+>=|P)1|&^W+-|qznU~`@#>HYWiojG49LE92ajagd z>l*61Zszm(oCHAtd7gvmE`-1+ike`B5IF7oxCwnEZJg(MZdSnLUXIb_d0!k@s1(Z@P1(Z_%KmjSGwE|Mg zmI6}B`!09}w%d7E0ZQq;0;V<`YEc_dO7VKVBBd1XQlK5^t+sppMuIU$7-OVwd~25^ z2`P$#FvdudB&4+wjg78*O7@+m>-D;sZ#Elj2*h!WW2I$`ks%VC^ZVl%5fQ$K(OpoM z$T(Yh;LD#8;R$6#)y62x7wx;hXXmE&#m?4atXWL4qex6D`4|c z-}kL$cU>3u`#nBY1AQrY=AarV!Z07*qoM6N<$f;BYCy#N3J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/black.png new file mode 100644 index 0000000000000000000000000000000000000000..605ec8b4761a3e82791852e971aae33b37efa0f9 GIT binary patch literal 634 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 G2~7aqh}v!d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd62ecb647560f4340d8615145a2afd7fa2f4e0 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHgDdYbF%%Cxn$ zO-)VJ)YQt#@Fdh=f{}&I#Ju_T@<%|S@18D>AsXjn zCm3cQHV|lCFB$bn_x}QoEyW#o;}z2R8U1etU5K%|!ddYl?fu+Mnb#x?`0iX=xa|Kb z^|_BuR6Rbvd-->kZVv^egGSq{gp=NiG%O8fSf)OkbHYaD*$w6A0$vpeIPKNqH`B7; zwnVKxzif_sLEn?r!FhU&av7(+9dB7qm~nIMjajlMdGr+(+!<6DIsA>DudrL(^RRt; zkK{SU;{g>ibw5*B!&p}7^Jlo_@|K-H3NUpstG4e439A%v29IA(tYExvMNiq&3U7CS6=_RRkh#b?>F{+{JK3< z9~cCxC9V-ADTyViR>?)FK#IZ0z{o_`z);t~D8#_j%D~Xd)I!_9z{nC} zQ!>*kaclT-pdcEkK?80>NoHNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHhmcT1$K6xG(& zHZ?U>Q&WqZClV48l8}%PHc?1XQBh1xtf;8y|Ns9s?AKg?su@dy{DK)Ap4~_Tagw~< zU3kB3N&E`ra29w(7BevL9RguSQ4OyKpdfpRr>`sf3q}?;6Z7WV%O3%SzI(bjhG?9R zonV-K*g&9ly=2rQ-Tw4jOH*5>9$6(y%m`VVU}D&IucpXE&6e3wTu^;IvnZ-%QJX z+Y+_*{IWUj1$|Fe2j}TA%4MAPcD!XdVaCn1H)hG6k8-#DuoeC;oM zxRoxwa_irT)(reXt0tT@F+9e6#I`jdN%xJ%%Bn2cHs_7nU3vZMR@Hu!zu(yR@$2?b zeP9r%mbgZgq$HN4S|t~y0x1R~10xe%14CT{qYwjAD+5C-Qwwba11kfA&bcR^qiD#@ zPsvQH#I51Sfr4nD1`W6kC7HRY#U+Wk1qeMRAqHkvrbbq#rVvYZSt@~C#o+1c=d#Wz Gp$PzWLD)P1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..9e466451aa2120f55d128d662e11df2ced816d9f GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHg9*{@$=IZs<# z+tk!lO-*gC>6DO=kc5PU2?p(oii%=lVnszo|NsBr7}|FcsG6}P$S;_|;n|He5GTpo z-G%qtmc*|>4rhT!WHAE+-yslY6xHx*01C2~c>21szhGoxGcj+zz5EeS=)0$jV~EE2 z*a?Q&hYbW;*Gon{(*3_cV@q+z-FSs`en$VBK^J1Iu5ea-NP9nbQ|2`Z1HL=g7B2h0 zN`3C56IG9o?_U0$rQ1V6>7dc}D&eHJA`MG}8J4Nf=A5umd3Hnjxqw#%0#19i_|3HJ zw=Gd?&o7(fUeNbsb#R^@qg=*mZ^v7f6K338dt;XDNgjPg1$PD&Mh<_Y=PT?M_dIOh z-XnQV@pwRmOx@2E)-aY;`urJgxjbju_e&qhUd#CG>d9uI-~5YDZ_}+j{f)Dl!Pox6 zhg<2=E4TigXwASMv}(dh6T@T7M{HXYl62pAtgOnCZFAnJ-IdqBZdL6!`TLE1AHQx7 z)dvQFYKdz^NlIc#s#S7PDv)9@GB7gHH89jQFbXj+wK6cYGPTe)Ft9Q(=$w1vIf{nd z{FKbJO57TL94LqeYS4h&P?DLOT3nKtTY%7G5@KLxWol$)Y6`Jrm!%TORScf4elF{r G5}E)-*xIWA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..df2906bb4fb310702e26c4f5c47837e21ae8fac0 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHg{mI&O<Q&T&i#2XS4l8}(FFN#M|QBh1xtf;8y|Ns9gKaySoRWp_Z`2{mLJiCzw;v{*y zyYPP7lK2(K;VkfoEM{QfI|Ravq8eTeKtc8rPhVH|7mO@yCg#nzmp=juefM;64AD3r zJHasfuz^79dda9qy8jnwY$@)z8?TVg&**frC7kqDq+w|=!!q^RoD()G&u%C`7x1b;z-g}*znPZ( zwk2xq`DJt53;Ld{4$jkKl*>5n?Rd*_!i<}1Z_JWC$)m5R;Lf1J$l-7Fe1+ZOo`>z* zdnC^(9uKIHsr#A28pg6ppFhJbm*-6Te(3|*YZ;$iJ=rYun}6}?ZMv1Gzj0PG_}X9i za4TJU<<`Fwtr_@(R!ul*Vt9=Ch;3^^lI|Oil~q}?ZO$9DyYl+it*ZSdf4{Ns z`oJJiEpd$~Nl7e8wMs5Z1yT$~21X{j28Ox@Mj-~KRtAPvrWV=;237_JopVn-N70a* zpOTqYiCe>u0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBeO(B--vQz@Oiow&>&t;uc GLK6V}D%uDD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..27fd1cad5974c44c8277859f6ae6854c0ae7b8b9 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfccdxorJ4;(z z+tk!lO-=1=>4cDwkc5PUJ=raaii%=lVnszo|NsA2*le%~sG6}P$S;_|;n|He5GTpo z-G%qtmc*|>4rhT!WHAE+-yslY6xHx*01C2~c>21szhGoxGcj+zz5EeS=)0$jV~EE2 z*a?Q&hYbW;*Gon{(*3_cV@q+z-FSs`en$VBK^J1Iu5ea-NP9nbQ|2`Z1HL=g7B2h0 zN`3C56IG9o?_U0$rQ1V6>7dc}D&eHJA`MG}8J4Nf=A5umd3Hnjxqw#%0#19i_|3HJ zw=Gd?&o7(fUeNbsb#R^@qg=*mZ^v7f6K338dt;XDNgjPg1$PD&Mh<_Y=PT?M_dIOh z-XnQV@pwRmOx@2E)-aY;`urJgxjbju_e&qhUd#CG>d9uI-~5YDZ_}+j{f)Dl!Pox6 zhg<2=E4TigXwASMv}(dh6T@T7M{HXYl62pAtgOnCZFAnJ-IdqBZdL6!`TLE1AHQx7 z)dvQFYKdz^NlIc#s#S7PDv)9@GB7gHH89jQFbXj+wK6cYGPTe)Ft9Q(=$w1vIf{nd z{FKbJO57TL94LqeYS4h&P?DLOT3nKtTY%7G5@KLxWol$)Y6`Jrm!%TORScf4elF{r G5}E*t?%Tfr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfbce77439620435eb7146070b76669c15a2e82 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHfo)K+FH&D7S` zHZ?U>Q&US)=nn}ANk~YDl5JL0R1^~vD=I4b|NsA%zpbG_)r=)Ue!&b5&u*lFI7!~_ zF1+8iBz^^QI14-?iy0XB4uLSEsD@VqP>{XE)7O>#1tSZaiFxzw<&S_u-#uL%Lp09E zPB6?qY#`9OUNY*D?*9cETZ%jG#w(=rGy2~Qx)5V^g|p&A+WWbiGOtM(@ZGt#aM}M= z>T@5RsCs;S_ww&7-5v@`2aUE@2`9Z3X;>P}uuOe6=Y);Qvm46K1-vQ{aN4WIZ>D9x zZHZcYe%T!Ng1#rKgY)zlVBrMhOw;D=g)A<u_;q`z zJ}?MWOI#yLQW8s2t&)pUffR$0fsu)>fuXK}QHX)5m4Ts^sfD(Ift7(l=iC#|Q8eV{ zr(~v8;@0rvKtVK6g9hA&lFZ!H;*!MN0)!ru5CbzSQzI)=Q-~$IER{g6V(@hJb6Mw< G&;$U$OWAJ# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_0/red.png new file mode 100644 index 0000000000000000000000000000000000000000..6b45eb450bddd6b120bfa35808564f2ae2fc5744 GIT binary patch literal 634 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/black.png new file mode 100644 index 0000000000000000000000000000000000000000..244fb44029deb742db2c359f2358a1552ff4b140 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhY<&|Y*EaloaXxm!#=JuYBChg0t|_nO72H$TdHiDKvvxW)OVMMVHrpk>i8oH1JM!%2{tLaT z9w|u~SNIdYnt!=@zU4@{&93*q;tsD?Pnf6R(_<$Q9r4v6<0|vv$xj&y?hEoCXftX# zQGD!3jKv0#li{saDg`RXS2C;nud{llCX>(-eJ|+BttN+F`J-Y_IF8vrw{tlDmD7Uh z#rz}J0`vCvd~=K5#q;_>tj3-#`%6CYxpADD%WRRnUc~42e)bH#YEA>){jwUfeg&Ug zw2JH2rdcMY4M*fHF5H^gIpxxy6T%J5f?*w%A{tK{u1U7NI1q6{F!AdN3z61W)wAvy z=dPZW{-1H1!$jZElS!e#kWejgjVMV;EJ?LWE=mPb3`Pb9nO2Eg!;b?6(LfCva2rZ8b5n~;5_1a>dQ3tL%&bg}tW3=y VmULgV*aXzW;OXk;vd$@?2>`eU;QRmp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..0a895814bb25f27da69bdd7cf105d0e2b76ff166 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHgVO=s&F^k{2q zo0^)csi|q}G>3$QBqSuLYgQ;KD*nI0@c)5lQBjeYnArdS|Cc9jS`XC2SQ6wH%;50s zMjD8df-eC&OEp%uVhyDUuX49O(vlw`d-kLTTKqV@<+vc1?KJT`Q{eAi|6%&SdBef_LqF(bK^KQm)RnDy@=24{p=Zf)tm;p`(-s|{R%$0 zXcgD3O|wi)8;;0ZT(~u}bIPSZCxjcA1;aWjMKqo^T$5~jaUkM^VB*&k79y>$s%PCZ z&Rsn#{XgS2hl#$SCzC>fA)#908c~vxSdwa$T$Bo=7>o>zOmqzlbq$O{3{0&I46RHp zv<(cb3=BHwo_LO;AvZrIGp!Q0h93tCqJbJT;5L+G=B5^xB<2<%^q7Pgm|2+`S(%za VEa|>zu?eV$!PC{xWt~$(699|h;>`d6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..8ceb49cc116858b24cb4b215d770e8a4bbda0813 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHgT+%?i2RJ66V zO-)VJ)YKAe6hlHn5)u+3%;gmo760F0`2WDOsHjLxOzi*v|IMdNZUgl&mIV0)GdMiE zkp|)9LcDj`-@3ah3V-COW zC_Z*1#$toW$?#Syl>(LHE1A{(*I7MNlSycaz87@mR+B@o{86zd9LMaR+c_Nn%4xy$ zV*Zh9fq8p-zPUy3;(7fbR%6eW{Ux9H+&E6nWwuCOFXD51KYNB=HK&2@ep!uKzk*LL zTE%s1(<~Fyh9mM87jDh$oO0>U3E>82!LW`>5sjw}*Cg9s9Edm}nE3UCg-GkG>RI=U zb63ww|IfJ1VWMy7$)r$VNT`;$MwFx^mZVxG7o`Fz1|tI_6I}yCT?3;K15+ylLn~7Y zZ36=<1B1@FC!V8d$jwj5OsmAL;m3i3XrKlSxD6$lxv9k^iMa&`JtiRrW>%&~R;FeU VOS&&wYy#?G@O1TaS?83{1OR(`;z$4h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..112b19c2f3a169745e5311d98a530319ec6a171b GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHh2+9nEDHfw8Z zo0^)csi_GSR)vIwBqSsVW)vtYD*nI0@c)5lQBjeYnArdS|KF)3ECT9bED7=pW^j0R zBMrn!@^*LOm)ON{6UgB#@Q5sCVBk9l!i+m6X1@grvX^-Jy0X7uWMMP05Kh?zlxO(o z>EaloaXxm!#=JuYBChg0t|_nO72H$TdHiDKvvxW)OVMMVHrpk>i8oH1JM!%2{tLaT z9w|u~SNIdYnt!=@zU4@{&93*q;tsD?Pnf6R(_<$Q9r4v6<0|vv$xj&y?hEoCXftX# zQGD!3jKv0#li{saDg`RXS2C;nud{llCX>(-eJ|+BttN+F`J-Y_IF8vrw{tlDmD7Uh z#rz}J0`vCvd~=K5#q;_>tj3-#`%6CYxpADD%WRRnUc~42e)bH#YEA>){jwUfeg&Ug zw2JH2rdcMY4M*fHF5H^gIpxxy6T%J5f?*w%A{tK{u1U7NI1q6{F!AdN3z61W)wAvy z=dPZW{-1H1!$jZElS!e#kWejgjVMV;EJ?LWE=mPb3`Pb9nO2Eg!;b?6(LfCva2rZ8b5n~;5_1a>dQ3tL%&bg}tW3=y VmULgV*aXzW;OXk;vd$@?2>=-Z;|l-) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..56c3324e827926604033ace07e3bf87667e87271 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhgoZKv|?X|VF zO-)VJ)YMGOtwTaW5)u*&jLj4k760F0`2WDOsHjLxOzi*v|6LgqSb%yMOM?7@862M7 zNCR<_yxm>+C3Z2~1adeFJR*x382Ao?FyoGi*>8b@>?NMQuIw)uS=dZ0gj03_;=3j1}Z#hzKv+Mn@xWlW}6Xq%S^w>#6M|^e2xXOHZ@>7O_`-1!j+KgIG z6dyYhW3fTxWO%EUN`cDpmCWk?>#Uxs$t1Ky-wV2OtI45P{;1d!j$`)E?HrDO<+NaW zG5^T5z`VUZ-`t{i@w|QztFdRx{*q68ZXBoPGFv3C7xB5hpFKmbn$tjczpTcrU%@9A zt>U`1X_kp;!x4Fl3%6!=PPz2wgm441U|2_`h{n@~Ym#j*4n&*~O#FJnLZtOo^{jiw zxvOWT|7YChFwr;kWKt+FBveaWBT7;dOH!?pi&B9UgOP!eiLQa6u7OdAfvJ^&p_QqH zwt<0_fkEfo6VFjJXgD^oLw VCEXV-HUaf8c)I$ztaD0e0ss_y;SvA< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/green.png new file mode 100644 index 0000000000000000000000000000000000000000..a983f228d2dbb7d6c6fbd1fb431e0c43c6b0adbb GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfga%FsyB(=4* zO-)VJ)YRN##6v9LcDj`-@3ah3V-COW zC_Z*1#$toW$?#Syl>(LHE1A{(*I7MNlSycaz87@mR+B@o{86zd9LMaR+c_Nn%4xy$ zV*Zh9fq8p-zPUy3;(7fbR%6eW{Ux9H+&E6nWwuCOFXD51KYNB=HK&2@ep!uKzk*LL zTE%s1(<~Fyh9mM87jDh$oO0>U3E>82!LW`>5sjw}*Cg9s9Edm}nE3UCg-GkG>RI=U zb63ww|IfJ1VWMy7$)r$VNT`;$MwFx^mZVxG7o`Fz1|tI_6I}yCT?3;K15+ylLn~7Y zZ36=<1B1@FC!V8d$jwj5OsmAL;m3i3XrKlSxD6$lxv9k^iMa&`JtiRrW>%&~R;FeU VOS&&wYy#?G@O1TaS?83{1OTA~;#~j$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..bce45116a1d292cd6fe90da1cbac723618f86f91 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHg#x7;>ed`w$g z+tk!lO-;>k#?FwCkc5N;-R@P2ii-blF#LbuSyWUcCMNd(|9_zu^4EZR7)yfuf*Bm1 z-ADs*lDyqr_$78R+yrts3p^r=85sBuf-vKbiP>*~g6t)pzOL*q7+Kg%EQC{b0p%I~ zdAc};Xq=CourcqDfrzU-k88?nc?I{>bsoQ1`K+Bz%~JH3r_FYWZ{m#;=Z-wPx&K11 zsz*vv#ufgAujXHFo^Lr)ZnNwCueigj)f46^`1IIGL`Qse$hgXUc=A(*g8PE}2ilBU zP81(I5@WGJT4-ck#S_5Ua6g%l?v2d~O`4<}zC(uNU#Ty`McpubR_9cfYL0tY5(= z7p>yDwP}`#X~PkDiwn1Ac22qU=Y((rvtU?9rHIDUhHH{-FAhYU5KR1f!a}6=RrRcU z#<{C!rT=H#<}lGW^kh;fFeFqp{{{Zh=Hkl#m4QL$+!N1HH00)|WTsW(*6`y%K{QZ<2Hb{{%-q!ClEmBsgdUR+12ZdABP&xg Wh$Y<@Ej9u5FnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHgDdYbF%%Cxn$ zO-)VJ)YQt#@NynuQbOM?7@862M7 zNCR<_yxm>+C3Z2~1adeFJR*x382Ao?FyoGi*>8b@>?NMQuIw)uS=dZ0gj03_;=3j1}Z#hzKv+Mn@xWlW}6Xq%S^w>#6M|^e2xXOHZ@>7O_`-1!j+KgIG z6dyYhW3fTxWO%EUN`cDpmCWk?>#Uxs$t1Ky-wV2OtI45P{;1d!j$`)E?HrDO<+NaW zG5^T5z`VUZ-`t{i@w|QztFdRx{*q68ZXBoPGFv3C7xB5hpFKmbn$tjczpTcrU%@9A zt>U`1X_kp;!x4Fl3%6!=PPz2wgm441U|2_`h{n@~Ym#j*4n&*~O#FJnLZtOo^{jiw zxvOWT|7YChFwr;kWKt+FBveaWBT7;dOH!?pi&B9UgOP!eiLQa6u7OdAfvJ^&p_QqH zwt<0_fkEfo6VFjJXgD^oLw VCEXV-HUaf8c)I$ztaD0e0svsVNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhmcT1$K6xG(& zHZ?U>Q&WqZClV48l8}%PHc?1XQStu`hW`&di;9ZG#Kivp|NkiMz8_EzV@Z%-FoVOh z8)+a;lDE4Hzr-$vn?Md{fk$L90|Vbd5N6ylG5al0kiEpy*OmPRBMX~}g>cF)pghAr zPZ!4!jq|Y+Hs&2N5OI~~aZPzGui&1#&f^y=pS9DeS&AO>wAn84O}ug9+>vKD_h0B$ z^+-v|xWb?C)%?rN^DRfpZFar?6?b^Gdcr&fpB_7j=!mZl8CRJPPkzc!a9@!BK$}s^ ziQ;2NVk|a@oD6TZQYlb5zLHtpf1TAcHJOB#=zBp|ZZ$dd${!Vb!g0+0xt+uDubdW4 zFXkV)7MQoU=bKyfE}qv9Vm0<`*NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHg9*{@$=IZs<# z+tk!lO-*gC>6DO=kc5PU2?p(oii-blF#LbuSyWUcCMNd(|9^e=$$mgRj3q&S!3+-1 zZlr-YN#5=*{1UquZUQ-+1s;*b3=Dh+L6~vJ#O${~LG}_)Usv`Qj4W&>7Q!jJfbtCg zJY5_^G|tCP*qC?7K*Uv^$2H}(yn=h`I*(theAZ5Yx7qdnSKQ&%>Iw4{e0uC8q9eXKWL#xFJoza@!F@sg18qhv zCyI|9iLuxqax%QtN~J*M_)2DV|8-W+)MOG`qVEM=xz*&*D}Pk%3CA(}=XMUqzj9hI zy_kRGT43JZo^Ni^yLetdh}GD$Wq-*hJ~xh2bD1rY*Ngbv-p`()SIudlyI)pg*011` zi&k;n+BD0=wBd-n#f4ilJEvUwb3(X*Sum`lQbglv!!^ma7Y8Cv2qu0#VIk7`s(RKv zNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHg{mI&O<Q&T&i#2XS4l8}(FFN#M|QStu`hW`&di;9ZG#Kivp|DQLxeKJrFV@Z%-FoVOh z8)+a;lDE4Hzr-$vn?Md{fk$L90|Vbd5N6ylG5al0kiEpy*OmPRBMX~}g>cF)pghAr zPZ!4!jq|Y+Hs&2N5OI~~aZPzGui&1#&f^y=pS9DeS&AO>wAn84O}ug9+>vKD_h0B$ z^+-v|xWb?C)%?rN^DRfpZFar?6?b^Gdcr&fpB_7j=!mZl8CRJPPkzc!a9@!BK$}s^ ziQ;2NVk|a@oD6TZQYlb5zLHtpf1TAcHJOB#=zBp|ZZ$dd${!Vb!g0+0xt+uDubdW4 zFXkV)7MQoU=bKyfE}qv9Vm0<`*NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfccdxorJ4;(z z+tk!lO-=1=>4cDwkc5PUJ=raaii-blF#LbuSyWUcCMNd(|9?i&DQ|#!7)yfuf*Bm1 z-ADs*lDyqr_$78R+yrts3p^r=85sBuf-vKbiP>*~g6t)pzOL*q7+Kg%EQC{b0p%I~ zdAc};Xq=CourcqDfrzU-k88?nc?I{>bsoQ1`K+Bz%~JH3r_FYWZ{m#;=Z-wPx&K11 zsz*vv#ufgAujXHFo^Lr)ZnNwCueigj)f46^`1IIGL`Qse$hgXUc=A(*g8PE}2ilBU zP81(I5@WGJT4-ck#S_5Ua6g%l?v2d~O`4<}zC(uNU#Ty`McpubR_9cfYL0tY5(= z7p>yDwP}`#X~PkDiwn1Ac22qU=Y((rvtU?9rHIDUhHH{-FAhYU5KR1f!a}6=RrRcU z#<{C!rT=H#<}lGW^kh;fFeFqp{{{Zh=Hkl#m4QL$+!N1HH00)|WTsW(*6`y%K{QZ<2Hb{{%-q!ClEmBsgdUR+12ZdABP&xg Wh$Y<@Ej9u5FnGH9xvXNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHfo)K+FH&D7S` zHZ?U>Q&US)=nn}ANk~YDl5JL0RQ!K~;r|2AqM{-(F|q&u{|7H(p8(XuSQ6wH%;50s zMjD8df-eC&OEp%uVhyDUuX49O(vlw`d-kLTTKqV@<+vc1?KJT`Q{eAi|6%&SdBef_LqF(bK^KQm)RnDy@=24{p=Zf)tm;p`(-s|{R%$0 zXcgD3O|wi)8;;0ZT(~u}bIPSZCxjcA1;aWjMKqo^T$5~jaUkM^VB*&k79y>$s%PCZ z&Rsn#{XgS2hl#$SCzC>fA)#908c~vxSdwa$T$Bo=7>o>zOmqzlbq$O{3{0&I46RHp zv<(cb3=BHwo_LO;AvZrIGp!Q0h93tCqJbJT;5L+G=B5^xB<2<%^q7Pgm|2+`S(%za VEa|>zu?eV$!PC{xWt~$(69Bj%;?n>C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/red.png new file mode 100644 index 0000000000000000000000000000000000000000..37df4f00314d5e841b6a34381797a1755a4b8796 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhas4Dd;%4utB zo0^)csj0Qd%Y=l4BqStM%19|HD*nI0@c)5lQBjeYnArdS|DSrWS^)JhmIV0)GdMiE zkp|)9LcDj`-@3ah3V-COW zC_Z*1#$toW$?#Syl>(LHE1A{(*I7MNlSycaz87@mR+B@o{86zd9LMaR+c_Nn%4xy$ zV*Zh9fq8p-zPUy3;(7fbR%6eW{Ux9H+&E6nWwuCOFXD51KYNB=HK&2@ep!uKzk*LL zTE%s1(<~Fyh9mM87jDh$oO0>U3E>82!LW`>5sjw}*Cg9s9Edm}nE3UCg-GkG>RI=U zb63ww|IfJ1VWMy7$)r$VNT`;$MwFx^mZVxG7o`Fz1|tI_6I}yCT?3;K15+ylLn~7Y zZ36=<1B1@FC!V8d$jwj5OsmAL;m3i3XrKlSxD6$lxv9k^iMa&`JtiRrW>%&~R;FeU VOS&&wYy#?G@O1TaS?83{1OT*%;amU! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/white.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5812fcac057a21e410259745596140fc76d4b7 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhy|NsB|`EzY; zZBtWIH8r&xH*SQ4gd`*+96NSQQBm>#4Tk>@Jd28o#Kgp2?RBdFYG5o0@(X5gcy=QV z#7XjYcVYa`q21szhGoxGqDg(*#(qm_~+^3 z7@~1LcEZNILk1$Q@;t67ujLioQ`dR?V&$`TIyFntW1cqKCBBI_PMkaP?B@Opy{aB5 zNf}r86TX^%xp}_jNV(0f_rKx}uU1c(r{L3LClMX-)gj|5^Wn))84B(T@*ik3YB^DS z>`08o29cBDtyU@pD#uqctNX9BdZs3m&=P$w=*q1ohhF)kVox}Z**~{)IR2H>g6YNl zBi91+_V#>pi{8ca`a!J5o-O-JKJmG6oSMsQk-T2S=k|W~483Yj1Ks_y8nb={pIo$x z>(-`OCZ-KXj?{y)>qZD?iuH< zo|XQeaht$(Epd$~Nl7e8wMs5Z1yT$~21X{j28Ox@Mj-~KRtAPvrWV=; z237_JopVn-N70a*pOTqYiCe>u0|n7Q4H|G8N-}d(i%Sx73lMrtLJZ8TOpUBe%^;R^ TU$oc+)WhKE>gTe~DWM4fP($Y# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..255cd226db32a58721a5209ced77b2c3ed0e2063 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgVG!UG;tHhy99Ma=ML}Cz z+tk!lO-=3U3b~Mwkc5PU!?UCn6&3&AVEF&Qv#6*@Oib+m|Nr5C#U2CoFqQ=Q1v5B2 zyO9RsBze2L@JsAsxC!KN7I;J!GcfQS1YyP<6SLm}1=&kHeO=jKFtV_jSO}-=0?IS| z^K@|x(KsJFVPoDQ0})qw9@muD@(S*$>pXt3@>x5bnx*J5Pn+!$-^3dy&K-GnbN_{2 zRgaXUj4S*JU(LVVJl}Gp+-BGNUvY<5t0&A;@aeIWh>rN`ka3my@Z_fq1@{H{540Jz zoG3naB*tQc$jR_lE0qG3<13lf{nuGNQ z^kV*zYk_%td%n3v@8Ws=AXa0~mi;B4_}n;7&1JSoUN7Qvdp~=IUNxtI?tWQ~S-*l$ zE?UKPYtt+f(}pAR78h>K?3{Ax&k5lMX2GzIN)e5x4c8>wUL1%xA(;5}goQ}!tLjMRkf@q)y4Y&;@nYpROC5gEO2t6ht24+^KMpmX~ W5KFo*T5JO9VeoYIb6Mw<&;$VB4&~GU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_1_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..ee71f13c105787c5fe6efd9a416e29059a1f3c16 GIT binary patch literal 1078 zcmV-61j+k}P)EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01mUzbOHr?AFy3iZO z&>BP=h;?vft2zss;l;yrU@w}Ow+7g zpRG~aP`3u6D9Z0Qn+*Yg$z%dbX{%>&&T%@O{sYiG(`s?AerioaD`TOU^+#HuJ24%{QJC<3pFAE9;`=`71VB@8##o5~+qMw|0c_iTtp#1w z!0$T9f(JoRUjtnVQIP>DrNV%evKl~L@WEg}J_S@{U^<=ZcfsLssQqs~pEtIi5JF)< z2=RU!uGj0z>#EkPV_-ZU>jU7Nzw~7+FvhUo?*RamQaqneLMg@Vb^`!hE*D||K$0Yi z#y8n=xy&E>+g~?+tKJhRrQn?Fso|?4EN1RF4j5yNHPh*L!K<^c)q>(jLRI?}XToB! z$o-z@wGx|`0It`o;;<|WVHm=)tlU?uk1z~B&RPL58jVUrXgC~}reQXkv-Rimxs~K{ w&TC&*Ip-<^mSri~Mp2}&@ox52AhOo|0U{4yN!$&L5dZ)H07*qoM6N<$f>Ax|o&W#< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/black.png new file mode 100644 index 0000000000000000000000000000000000000000..db4ac751951b3dc69642758dec16a73caf6e09c6 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhY<&|Y*z_jdt z>+O3+yX1a8y>q#ktJ&cI(?J8%S%zj?KOMMmiuvv2O70IACT=;+(G*SgQZu&Y_*%g6V_5&})q{N4MIg zy1s3tAJjzZUP;gOIl$q#v78}&ikIX5ef14>Q-v19%gCPiTD&?XF4QtN^2--the!N# zGTyH5oO0>U3GoJI!!VBu8O^5+*R**qPTV*_`Pi$Cg&JH}`*o_o>zOmqzlbq$O{3{0&I46RHpv<(cb3=BHwo_LO; zAvZrIGp!Q0h93tCqJbJT;5L+G=B5^xB<2<%^q7Pgm|2+`S(%zcEYV$N%m&oM;OXk; Jvd$@?2>|2}*8~6n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3646e4f6c9fa08b48684f08c0e0be12fe1618d GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHgVO=s&F^k{2q zo0^)csi|q}G>3$QBqSuLYgQ;KD*k6+C@Lxv6BGOY|9`b#u^CVUV@Z%-FoVOh8)+a; zlDE4HU;bVLe;|jmz$3Dlfr0M;2s36~>*NFqvX^-Jy0X7uWMMP0OiAu~3KaV8>Ealo zaXxl};`&1dBCYxz?lT_C@0rq|mh-2H&)-AMa6*VMOLIz6-_PX*SErtTB%t$$foa+Q z*4y`tcFFyGdgpR6SF^(brh^8ivkc9)emZdB6!Y83mE0dLOx$vy&8Q_}y`*sR!vir( z+PO--9`?&TXPd*k^VN*mMGbs;lBp|}vQB(e*X4UsuvGuQokKgj1=9zAq1PH^j&8L} zb$#1PKd6b+y^@~mbAZEfV>v_m6fej9`|2C&rV1^Hmytd3wRm+(T&QJk#e}6- z>V1C#gFv;!HKHUXu_VKYh@7?@fa7+RTHXd4(<85nfVJ@Fhx zLvDUbW?Cg~4L=SPL<2Qwz-=hW%uOvWNz5%k=rIW~Ftai>vNAP?Sfabkm<_0h!PC{x JWt~$(699<~*-QWc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..46b2a1582075f8f773f3e3a1898076e7db1f3ad8 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHgT+%?i2RJ66V zO-)VJ)YKAe6hlHn5)u+3%;gmo75@Vj6cveyiT(foUv=k&_dpGdB|(0{3=Yq3q=7g| z-tI1Z`FjogfgH{PkH}&M2EGFz%$RkplM^V&UgGKN%Kn0ph0Vk=CAsSkk=-wCZ=b&v-1qXG()w&Yvbee-Aao2_eEP%_&KJKbIF=oqGO}fX*KVre*(I zZ{IW8CHM2`oy)~s%?<~c4jP!wGBn%z>A;0k%x@=Ga(}omam#@=qn3#ElETRk55z2K z=PLDj*e~;(Z4UF!S2Jc8HSpz0rmk4ZI`LIqm+wizQvLsS4(;p~OdtG(UTc&&y45b# z^=&Ktpe9oHN_wu(0S?EFHQe$6jqL)Zn_>uT#Bd%i64YwahUU6P8}7 z_x%YB0@V`Nh?11Vl2ohYqEsNoU}RuqqHAENYhV;&U}|MxXk}`lZD3$!V9+`D#B&r4 zx%nxXX_dG&{5Vh$4b-3kx1l66H?_DVF}DDr$0WqS%*xcr%G4ZUiS9CEHlQ8`Pgg&e IbxsLQ0MOal{{R30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..ece7aab060b9a74c1192d42785cc754103cb9a2d GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHh2+9nEDHfw8Z zo0^)csi_GSR)vIwBqSsVW)vtYD*k6+C@Lxv6BGOY|Nj}|$>Kl_j3q&S!3+-1Zlr-Y zN#5=*eEE9~{DB<>&pIuk%i5~G9|g|DNyLUr;B5V z#`)L@it7&7C2PT+I##m<}44&N4LH`su)hQ_OECS8{*2FmcO)Hlvn^^^(HL4-dpF zY3C~Sde|@XoNW&C&Q~*L7d7zZNv5t?$~y5?U6=1k!BYMIb`I_A7EB-fgapJ}a%Ew-9EY#q-+OJc+X3N^Fd9}*NBpo#FA921GbWnj=b_r!A) z4Y~O#nQ4`{HT*bG5DnCz0k@$fGdH!kBr&%Dp~ob|z|6|j$ja0lVu|iDV>X~322WQ% Jmvv4FO#mK++7NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhgoZKv|?X|VF zO-)VJ)YMGOtwTaW5)u*&jLj4k75_6Z6crVTiHZIH|NmY5&zC?Aj3q&S!3+-1Zlr-Y zN#5=*eEE9~{DB<>&pIuk%i5~G9|g|DNyLUr;B5V z#`)L@it7&7C2PT+I##m<}44&N4LH`su)hQ_OECS8{*2FmcO)Hlvn^^^(HL4-dpF zY3C~Sde|@XoNW&C&Q~*L7d7zZNv5t?$~y5?U6=1k!BYMIb`I_A7EB-fgapJ}a%Ew-9EY#q-+OJc+X3N^Fd9}*NBpo#FA921GbWnj=b_r!A) z4Y~O#nQ4`{HT*bG5DnCz0k@$fGdH!kBr&%Dp~ob|z|6|j$ja0lVu|iDV>X~322WQ% Jmvv4FO#mbV+A#nC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/green.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfe438ae9ffb3e7ac5ce316dc67ca586c3547fc GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfga%FsyB(=4* zO-)VJ)YRN##6vYzWlug{y+|Afk$L90|Vay5N6D}*2xJJWH0gbb!C6S$iik~nUdV~6e#rF)5S4F z<9zG{#r1~_L|XMb+-E$N-!r8_E$2@YpTCEi;e-%jmgbbCzMsnru1-DwNI>Tg1Jknq zt+($P?UMWX^v>mCu4ab=Oa~22XBnDp{dC~MDdxA6E4e>hn7HLYn^8-|dP(8rhX-Po zv~!huJ?xix&Nhd6=c^gBiyHXyBvV%`Wu5q{uFLnNV5$CpJBN053#JeLLa#N-9NlV{ z>iV{oeozysdnG;B=KzP}#&U-ADPE5I_tiJlO%+-YFC%;6Yw_xoxKPX7$S+@n9Uk$| z$#}cIbIPSZC&U|=4Z}PtWHg^PT+`;cIC0|yNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHg#x7;>ed`w$g z+tk!lO-;>k#?FwCkc5N;-R@P2ii-ak7>bID#Kgq@|Np)^mS!_!N|g9VwsZM^%N-d-P6S} zMB{wy1jY4-3`AP>JKSeHmftg_K`rM`6Q93_n&E^HVV35Uq`sfa3$9K*|42aR4+GP( z|E;(08SRq$`Si}^Vy;bEb_=Et{z9)c${gKl zm+Jbqm3~kYse2_o*XIC-iEBhjN@7W>RdP`(kYX@0Ff!3KFw`|L3NbLXGBC6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHgDdYbF%%Cxn$ zO-)VJ)YQt#@~x?8#*!evUYzWlug{y+|Afk$L90|Vay5N6D}*2xJJWH0gbb!C6S$iik~nUdV~6e#rF)5S4F z<9zG{#r1~_L|XMb+-E$N-!r8_E$2@YpTCEi;e-%jmgbbCzMsnru1-DwNI>Tg1Jknq zt+($P?UMWX^v>mCu4ab=Oa~22XBnDp{dC~MDdxA6E4e>hn7HLYn^8-|dP(8rhX-Po zv~!huJ?xix&Nhd6=c^gBiyHXyBvV%`Wu5q{uFLnNV5$CpJBN053#JeLLa#N-9NlV{ z>iV{oeozysdnG;B=KzP}#&U-ADPE5I_tiJlO%+-YFC%;6Yw_xoxKPX7$S+@n9Uk$| z$#}cIbIPSZC&U|=4Z}PtWHg^PT+`;cIC0|yNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhmcT1$K6xG(& zHZ?U>Q&WqZClV48l8}%PHc?1XQSm`%ar7(>!$-3PBFioT*>|6!o)2H+KgHv)=LT}KRgh# zq@AnO>tVmlbGA9mJ73M1UDUvrCz-lpDeJ^nbzQzE1xxk++c~teTQGg_7kaHx=IBp{{{Zh=Hkl#m4QL$+!N1H zH00)|WTsW(*6`y%K{QZ<2Hb{{%-q!ClEmBsgdUR+12ZdABP&yLh$XtqjM;#C7(8A5 KT-G@yGywqd_SyIV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..493bbaaebb07beb161d5fc1a58cf26589dd6f061 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHg9*{@$=IZs<# z+tk!lO-*gC>6DO=kc5PU2?p(oii-ak7>bID#Kgq@|NnowX*y6n17k^$UoeBivm0q3 zPLj8~3t#?T1Aicgv%n*=n1O-s00=W?UF+lo3bL1Y`ns~eU}Rx4u}n$sdI}W!?&;zf zqH#WUg5vr^1|qHc9quz8%kP=epqBHeiO=6d&2U19FiUevQs2+z1y`q@evMp^abr0{`V=q6{rl=0>ZS@Uh?kK)@wIq$N?fRAZseCQ!VZu4 z=VZKH-#O*dpA+H@%!Xke6*8Jn8?I^dT%5RZg7UFf8w)kKuJ-Fxui3ITYhEpLOvQwy zSL%I#0)s%c#5JNMC9x#cD!C{XNHG{07@6oA80s1rg&3Gx85mlbT4);>SQ!{}&OPxQ zMMG|WN@iLmZVf*U6hs3xXuxeK$;?eHE=kNSKNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHg{mI&O<Q&T&i#2XS4l8}(FFN#M|QSm`%ar7(>!$-3PBFioT*>|6!o)2H+KgHv)=LT}KRgh# zq@AnO>tVmlbGA9mJ73M1UDUvrCz-lpDeJ^nbzQzE1xxk++c~teTQGg_7kaHx=IBp{{{Zh=Hkl#m4QL$+!N1H zH00)|WTsW(*6`y%K{QZ<2Hb{{%-q!ClEmBsgdUR+12ZdABP&yLh$XtqjM;#C7(8A5 KT-G@yGywpwjM~!x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..7adf1e38dc39ec78c603863e824d6b79e55af170 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfccdxorJ4;(z z+tk!lO-=1=>4cDwkc5PUJ=raaii-ak7>bID#Kgq@|NpvMp^abr0{`V=q6{rl=0>ZS@Uh?kK)@wIq$N?fRAZseCQ!VZu4 z=VZKH-#O*dpA+H@%!Xke6*8Jn8?I^dT%5RZg7UFf8w)kKuJ-Fxui3ITYhEpLOvQwy zSL%I#0)s%c#5JNMC9x#cD!C{XNHG{07@6oA80s1rg&3Gx85mlbT4);>SQ!{}&OPxQ zMMG|WN@iLmZVf*U6hs3xXuxeK$;?eHE=kNSKNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfo)K+FH&D7S` zHZ?U>Q&US)=nn}ANk~YDl5JL0RQ%7tP*hYTCMNd(|9>&}YaT!ij3q&S!3+-1Zlr-Y zN#5=*eEE9~{DB<>&pIuk%i5~G9|g|DNyLUr;B5V z#`)L@it7&7C2PT+I##m<}44&N4LH`su)hQ_OECS8{*2FmcO)Hlvn^^^(HL4-dpF zY3C~Sde|@XoNW&C&Q~*L7d7zZNv5t?$~y5?U6=1k!BYMIb`I_A7EB-fgapJ}a%Ew-9EY#q-+OJc+X3N^Fd9}*NBpo#FA921GbWnj=b_r!A) z4Y~O#nQ4`{HT*bG5DnCz0k@$fGdH!kBr&%Dp~ob|z|6|j$ja0lVu|iDV>X~322WQ% Jmvv4FO#o?9+Bg6J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/red.png new file mode 100644 index 0000000000000000000000000000000000000000..88bdede3f24aa13703b51f20f9ea1a27d0955826 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhas4Dd;%4utB zo0^)csj0Qd%Y=l4BqStM%19|HD*k6+C@Lxv6BGOY|Gyja7h#|V#*!evUYzWlug{y+|Afk$L90|Vay5N6D}*2xJJWH0gbb!C6S$iik~nUdV~6e#rF)5S4F z<9zG{#r1~_L|XMb+-E$N-!r8_E$2@YpTCEi;e-%jmgbbCzMsnru1-DwNI>Tg1Jknq zt+($P?UMWX^v>mCu4ab=Oa~22XBnDp{dC~MDdxA6E4e>hn7HLYn^8-|dP(8rhX-Po zv~!huJ?xix&Nhd6=c^gBiyHXyBvV%`Wu5q{uFLnNV5$CpJBN053#JeLLa#N-9NlV{ z>iV{oeozysdnG;B=KzP}#&U-ADPE5I_tiJlO%+-YFC%;6Yw_xoxKPX7$S+@n9Uk$| z$#}cIbIPSZC&U|=4Z}PtWHg^PT+`;cIC0|yNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%vg0;tHhy|NsB|`EzY; zZBtWIH8r&xH*SQ4gd`*+96NSQQBmUX%$cr3qXN`qR?pC&$k4>iLHA;K)pDM@`lmls@}dj64s&L0M*W&c}m z-!s}J_w(tU%f(#H4hNVH8ko*9G~4>=z=c!HZzorBf4DGl%YindmWcI|!pRR0#4Ks& zD)oBUFY}yj4)e}eGiDbx@a0LSu2{-C@l{=y?@7T@{r`3j?d%pzAN+-0Ym_;<)h^Zb zZ7cntCQ|oGdalm_4#$n<4Czz69QW_5Z>XCpv>;wa_QcoX)hThImbsB%z6d)!;-8c8 zc75lROMgy?H!vH9c~r<~K5e+B&2w?$#tF*DUTrMY;JVtcQ@v)(+N^oC%rO-cmR_m% z{Rs>L)e_f;l9a@fRIB8oR3OD*WME{XYhb8rU=(6tYGq((Won^qU|?ln&^hBp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/powered_smoker_interior_2/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1c915c8b6be27eac1cc2e3e65cb881237ad4bde2 GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHhy99Ma=ML}Cz z+tk!lO-=3U3b~Mwkc5PU!?UCn6&3$8FccLPiHV8*|NsAyiRwk52F8*gzhDN3XE)M7 zoFs2|7ry+x2L3<}XMsm#F#`kN0T5=)y4J}F6l5>)^mS!_!N|g9VwsZM^%N-d-P6S} zMB{wy1jY4-3`AP>JKSeHmftg_K`rM`6Q93_n&E^HVV35Uq`sfa3$9K*|42aR4+GP( z|E;(08SRq$`Si}^Vy;bEb_=Et{z9)c${gKl zm+Jbqm3~kYse2_o*XIC-iEBhjN@7W>RdP`(kYX@0Ff!3KFw`|L3NbLXGBC6EX>4Tx04R}tkvmAkP!xv$rb>%c94sQ@kfA!+#TSmHibb$c+6t{YnB4RQO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGiZ9h?+hq{MTRLW>v=T<*tz&;N7pxq#5DGS%#f0jg#h z=|o)2z=x)?xH-)yYJ8HR|+Nrd?Im->4rtTK|H%@ z>74h8!>lYR#OK5l23?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*yDtNMH#`q#!~@9TikzAxgVOiitFx$36Tbjz2{%nOqex zax9<*6_Voz|AXJNHH%Y|Zc-=?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-Kunk;XcQknqxZDATpLEHP9LY~hC>DYDGy0}HFn9~}t+{h+pX2la$kMEqZ-9eC zV7x@x>mKh8cF*nKp7#8H0G6F{wGk}A8UO$Q24YJ`L;wH)0002_L%V+f000SaNLh0L z01mUzbOHr?AFy3iZO z&>BP=h;?vft2zss;l;yrU@w}Ow+7g zpRG~aP`3u6D9Z0Qn+*Yg$z%dbX{%>&&T%@O{sYiG(`s?AerioaD`TOU^+#HuJ24%{QJC<3pFAE9;`=`71VB@8##o5~+qMw|0c_iTtp#1w z!0$T9f(JoRUjtnVQIP>DrNV%evKl~L@WEg}J_S@{U^<=ZcfsLssQqs~pEtIi5JF)< z2=RU!uGj0z>#EkPV_-ZU>jU7Nzw~7+FvhUo?*RamQaqneLMg@Vb^`!hE*D||K$0Yi z#y8n=xy&E>+g~?+tKJhRrQn?Fso|?4EN1RF4j5yNHPh*L!K<^c)q>(jLRI?}XToB! z$o-z@wGx|`0It`o;;<|WVHm=)tlU?uk1z~B&RPL58jVUrXgC~}reQXkv-Rimxs~K{ w&TC&*Ip-<^mSri~Mp2}&@ox52AhOo|0U{4yN!$&L5dZ)H07*qoM6N<$f>Ax|o&W#< literal 0 HcmV?d00001 From ce8c257928728b573e11bd29f4da4101a6f86ef1 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 14:55:52 +0700 Subject: [PATCH 21/37] Some cleanup of code from previous commits --- .../mc/otm/datagen/blocks/BlockModels.kt | 37 ++++++----- .../datagen/models/MatteryModelProvider.kt | 65 ++++++++----------- 2 files changed, 45 insertions(+), 57 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index eef2d1183..665814ec0 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -10,27 +10,28 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK) - coloredMachine(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) - coloredMachine(MBlocks.ESSENCE_STORAGE, listOf("0", "particle")) - coloredMachine(MBlocks.ITEM_MONITOR, listOf("0", "particle")) - coloredMachine(MBlocks.MATTER_RECONSTRUCTOR, listOf("0", "particle")) + colored(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle")) + colored(MBlocks.ESSENCE_STORAGE, listOf("0", "particle")) + colored(MBlocks.ITEM_MONITOR, listOf("0", "particle")) + colored(MBlocks.MATTER_RECONSTRUCTOR, listOf("0", "particle")) - colored("matter_capacitor_bank", mapOf("1" to "mattercapacitorbank_frame", "particle" to "mattercapacitorbank_frame")) - colored("battery_bank", mapOf("1" to "batterybank_frame", "particle" to "batterybank_frame")) + colored("matter_capacitor_bank", listOf("1", "particle"), "mattercapacitorbank_frame") + colored("battery_bank", listOf("1", "particle"), "batterybank_frame") - coloredMachineCombined("plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) - coloredMachineCombined("twin_plate_press", "plate_press2", listOf("idle", "error", "working"), listOf("0", "particle")) - coloredMachineCombined("matter_recycler", "matter_recycler", listOf("idle", "error", "working"), listOf("0", "particle")) - coloredMachineCombined("matter_scanner", "matter_scanner", listOf("idle", "error", "working"), listOf("texture", "particle")) - coloredMachineCombined("matter_bottler", "matter_bottler", listOf("idle", "error", "working"), listOf("texture", "particle")) - coloredMachineCombined("matter_decomposer", "matter_decomposer", listOf("idle", "error", "working"), listOf("texture", "particle")) + coloredMachineCombined("plate_press", "plate_press2", listOf("0", "particle")) + coloredMachineCombined("twin_plate_press", "plate_press2", listOf("0", "particle")) - colored("matter_replicator", "idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline")) - colored("matter_replicator", "error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted")) - colored("matter_replicator", "working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) + coloredMachineCombined("matter_recycler", listOf("0", "particle")) + coloredMachineCombined("matter_scanner", listOf("texture", "particle")) + coloredMachineCombined("matter_bottler", listOf("texture", "particle")) + coloredMachineCombined("matter_decomposer", listOf("texture", "particle")) - colored("powered_smoker", "idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base"), "_idle") - colored("powered_smoker", "error", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_2", "particle" to "powered_smoker_base"), "_error") - colored("powered_smoker", "working", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_1", "particle" to "powered_smoker_base"), "_working") + colored("matter_replicator", "_idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline")) + colored("matter_replicator", "_error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted")) + colored("matter_replicator", "_working", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator")) + + colored("powered_smoker", "_idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base")) + colored("powered_smoker", "_error", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_2", "particle" to "powered_smoker_base")) + colored("powered_smoker", "_working", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_1", "particle" to "powered_smoker_base")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index 8d188eb5e..0075aa79c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -98,57 +98,44 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve } } - fun coloredMachine(blocks: Map, textureKeys: Collection) { - val base = blocks[null]!!.registryName!! - - for ((color, block) in blocks.entries) { - if (color == null) continue - + fun colored(modelName: String, suffix: String, textureKeys: Map) { + for (color in DyeColor.entries) { exec { - val model = withExistingParent(block.registryName!!.path, base) + val model = withExistingParent(modelName + "_${color.name.lowercase()}$suffix", modLocation(modelName + suffix)) - for (key in textureKeys) { - model.texture(key, modLocation("block/${base.path}/${color.name.lowercase()}")) + for ((key, value) in textureKeys) { + model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) } } } } + fun colored(blocks: Map, textureKeys: Collection) { + val base = blocks[null]!!.registryName!!.path + colored(base, textureKeys.associateWith { base }) + } + fun colored(modelName: String, textureKeys: Map) { - for (color in DyeColor.entries) { - exec { - val model = withExistingParent(modelName + "_${color.name.lowercase()}", modLocation(modelName)) + return colored(modelName, "", textureKeys) + } - for ((key, value) in textureKeys) { - model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) - } - } + fun colored(modelName: String, textureKeys: Collection, textureName: String) { + return colored(modelName, "", textureKeys.associateWith { textureName }) + } + + fun colored(modelName: String, textureKeys: Collection) { + return colored(modelName, "", textureKeys.associateWith { modelName }) + } + + fun coloredMachineCombined(modelName: String, textureName: String, textureKeys: Collection) { + for (state in listOf("_idle", "_error", "_working")) { + colored(modelName, state, textureKeys.associateWith { textureName }) } } - fun colored(modelName: String, suffix: String, textureKeys: Map, baseSuffix: String = "") { - for (color in DyeColor.entries) { - exec { - val model = withExistingParent(modelName + "_${color.name.lowercase()}_$suffix", modLocation(modelName + baseSuffix)) - - for ((key, value) in textureKeys) { - model.texture(key, modLocation("block/$value/${color.name.lowercase()}")) - } - } - } - } - - fun coloredMachineCombined(modelName: String, textureName: String, states: Collection, textureKeys: Collection) { - exec { - for (color in DyeColor.entries) { - for (state in states) { - val model = withExistingParent(modelName + "_${color.name.lowercase()}_$state", modLocation(modelName + "_$state")) - - for (key in textureKeys) { - model.texture(key, modLocation("block/$textureName/${color.name.lowercase()}")) - } - } - } + fun coloredMachineCombined(modelName: String, textureKeys: Collection) { + for (state in listOf("_idle", "_error", "_working")) { + colored(modelName, state, textureKeys.associateWith { modelName }) } } } From 26cb0c8cba154bc88eb06295416439b59af3a3f5 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 15:11:38 +0700 Subject: [PATCH 22/37] Implement matter recycler coloring --- .../mc/otm/datagen/advancements/MachineAdvancementsData.kt | 2 +- .../ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt | 1 + .../ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt | 2 +- .../kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt | 2 +- src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt | 2 +- src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt | 2 +- .../ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt | 2 +- .../mc/otm/datagen/recipes/CraftingTableRecipes.kt | 2 +- .../ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt | 1 + src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt | 2 +- .../ru/dbotthepony/mc/otm/block/matter/MatterRecyclerBlock.kt | 3 ++- .../kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt | 2 +- src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt | 2 +- src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt | 4 ++-- 14 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 46ec8e585..31e91d671 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -112,7 +112,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter russianName = "Повар с (не) идеальностями", russianSuffix = "А теперь давайте выпечем немного идеального хлеба") val bottler = CraftEntry(MItems.MATTER_BOTTLER.values, "Transfusing Pure Matter", "For those who loved to play with water in their childhood", russianName = "Переливаем чистую материю", russianSuffix = "Для тех, кто любил играться в воде в детстве") - val recycler = CraftEntry(MItems.MATTER_RECYCLER, "Refine and Redefine", "This is what waste recycling should look like", + val recycler = CraftEntry(MItems.MATTER_RECYCLER.values, "Refine and Redefine", "This is what waste recycling should look like", russianName = "Переработка и перегонка", russianSuffix = "Вот он, пик переработки отходов") val capacitor = CraftEntry(MItems.MATTER_CAPACITOR_BANK.values, "Modular Matter Tank", russianName = "Модульный бак материи") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 665814ec0..8e2094667 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -25,6 +25,7 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { coloredMachineCombined("matter_scanner", listOf("texture", "particle")) coloredMachineCombined("matter_bottler", listOf("texture", "particle")) coloredMachineCombined("matter_decomposer", listOf("texture", "particle")) + coloredMachineCombined("matter_recycler", listOf("0", "particle")) colored("matter_replicator", "_idle", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_offline")) colored("matter_replicator", "_error", mapOf("1" to "matter_replicator_base", "particle" to "matter_replicator_base", "texture" to "matter_replicator_halted")) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 94331ac0b..a380212f6 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -105,7 +105,7 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.POWERED_SMOKER.values) provider.block(MBlocks.STORAGE_POWER_SUPPLIER) - provider.block(MBlocks.MATTER_RECYCLER) + provider.block(MBlocks.MATTER_RECYCLER.values) provider.block(MBlocks.MATTER_RECONSTRUCTOR.values) provider.block(MBlocks.ENERGY_SERVO) provider.block(MBlocks.COBBLESTONE_GENERATOR.values) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 98cf841e3..895a98612 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -184,7 +184,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.coloredWithBaseBlock(MItems.PLATE_PRESS, "plate_press", "_idle") provider.coloredWithBaseBlock(MItems.TWIN_PLATE_PRESS, "twin_plate_press", "_idle") provider.block(MItems.STORAGE_POWER_SUPPLIER, "storage_power_supplier") - provider.block(MItems.MATTER_RECYCLER, "matter_recycler_working") + provider.coloredWithBaseBlock(MItems.MATTER_RECYCLER, "matter_recycler", "_idle") provider.coloredWithBaseBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator") provider.block(MItems.STORAGE_BUS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index d53c34646..f13227931 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -466,7 +466,7 @@ private fun blocks(provider: MatteryLanguageProvider) { addBlock(MBlocks.POWERED_SMOKER.values, "Microwave Oven") add(MBlocks.POWERED_BLAST_FURNACE, "Induction Furnace") - add(MBlocks.MATTER_RECYCLER, "Matter Recycler") + addBlock(MBlocks.MATTER_RECYCLER.values, "Matter Recycler") add(MBlocks.ENERGY_SERVO, "Energy Servo") add(MBlocks.ENERGY_SERVO, "desc", "Charges, Discharges or Exchanges energy of items") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 07b83405e..58c559903 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -468,7 +468,7 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.POWERED_BLAST_FURNACE, "Индукционная печь") addBlock(MBlocks.POWERED_SMOKER.values, "Микроволновая печь") - add(MBlocks.MATTER_RECYCLER, "Перерабатыватель материи") + addBlock(MBlocks.MATTER_RECYCLER.values, "Перерабатыватель материи") add(MBlocks.ENERGY_SERVO, "Энергетическая помпа") add(MBlocks.ENERGY_SERVO, "Desc", "заряжает, разряжает и передаёт энергию между предметами") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index ecbea7fde..7eb54a6b5 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -156,7 +156,7 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.MATTER_DECOMPOSER.values) lootTables.tile(MBlocks.MATTER_REPLICATOR.values) - lootTables.tile(MBlocks.MATTER_RECYCLER) + lootTables.tile(MBlocks.MATTER_RECYCLER.values) lootTables.tile(MBlocks.MATTER_SCANNER.values) lootTables.tile(MBlocks.PLATE_PRESS.values) lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index a8f4909c8..8cafab477 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -91,7 +91,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .build(consumer) // Машины - MatteryRecipe(MItems.MATTER_RECYCLER, category = machinesCategory) + MatteryRecipe(MItems.MATTER_RECYCLER[null]!!, category = machinesCategory) .row(MItems.MATTER_CAPACITOR_PARTS, Items.HOPPER, MItemTags.BASIC_CIRCUIT) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 23780a432..104a30860 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -285,6 +285,7 @@ fun addPainterRecipes(consumer: RecipeOutput) { MItems.BATTERY_BANK, MItems.MATTER_DECOMPOSER, MItems.POWERED_SMOKER, + MItems.MATTER_RECYCLER, ) for (list in blocks) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 4efdedf5c..b645b7863 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -193,7 +193,7 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.CHEMICAL_GENERATOR, *MBlocks.PLATE_PRESS.values.toTypedArray(), *MBlocks.TWIN_PLATE_PRESS.values.toTypedArray(), - MBlocks.MATTER_RECYCLER, + *MBlocks.MATTER_RECYCLER.values.toTypedArray(), MBlocks.MATTER_ENTANGLER, MBlocks.POWERED_FURNACE, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterRecyclerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterRecyclerBlock.kt index 13d2bcd0f..c09532a21 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterRecyclerBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/matter/MatterRecyclerBlock.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.block.matter import net.minecraft.core.BlockPos +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -20,7 +21,7 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class MatterRecyclerBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class MatterRecyclerBlock(val color: DyeColor?) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity { return MatterRecyclerBlockEntity(p_153215_, p_153216_) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index 338da079f..b48f4fb1d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -65,7 +65,7 @@ object MBlockEntities { val PLATE_PRESS by register(MNames.PLATE_PRESS, ::PlatePressBlockEntity, *MBlocks.PLATE_PRESS.asSupplierArray()) val TWIN_PLATE_PRESS by register(MNames.TWIN_PLATE_PRESS, { a, b -> PlatePressBlockEntity(a, b, true) }, *MBlocks.TWIN_PLATE_PRESS.asSupplierArray()) val GRAVITATION_STABILIZER by register(MNames.GRAVITATION_STABILIZER, ::GravitationStabilizerBlockEntity, MBlocks::GRAVITATION_STABILIZER) - val MATTER_RECYCLER by register(MNames.MATTER_RECYCLER, ::MatterRecyclerBlockEntity, MBlocks::MATTER_RECYCLER) + val MATTER_RECYCLER by register(MNames.MATTER_RECYCLER, ::MatterRecyclerBlockEntity, *MBlocks.MATTER_RECYCLER.asSupplierArray()) val ENERGY_SERVO by register(MNames.ENERGY_SERVO, ::EnergyServoBlockEntity, MBlocks::ENERGY_SERVO) val COBBLESTONE_GENERATOR by register(MNames.COBBLESTONE_GENERATOR, ::CobblerBlockEntity, *MBlocks.COBBLESTONE_GENERATOR.asSupplierArray()) val ESSENCE_STORAGE by register(MNames.ESSENCE_STORAGE, ::EssenceStorageBlockEntity, *MBlocks.ESSENCE_STORAGE.asSupplierArray()) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 85be76b6b..37af11b6f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -115,7 +115,7 @@ object MBlocks { val POWERED_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } val POWERED_BLAST_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_BLAST_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } - val MATTER_RECYCLER: Block by registry.register(MNames.MATTER_RECYCLER) { MatterRecyclerBlock() } + val MATTER_RECYCLER = registry.coloredWithBase(MNames.MATTER_RECYCLER) { color, _ -> MatterRecyclerBlock(color) } val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } val INFINITE_WATER_SOURCE: Block by registry.register(MNames.INFINITE_WATER_SOURCE) { InfiniteWaterSourceBlock() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index efffde65a..3bdbdf3ab 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -74,7 +74,7 @@ object MItems { val CHEMICAL_GENERATOR: BlockItem by registry.register(MNames.CHEMICAL_GENERATOR) { BlockItem(MBlocks.CHEMICAL_GENERATOR, DEFAULT_PROPERTIES) } val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> BlockItem(MBlocks.PLATE_PRESS[color]!!, DEFAULT_PROPERTIES) } val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> BlockItem(MBlocks.TWIN_PLATE_PRESS[color]!!, DEFAULT_PROPERTIES) } - val MATTER_RECYCLER: BlockItem by registry.register(MNames.MATTER_RECYCLER) { BlockItem(MBlocks.MATTER_RECYCLER, DEFAULT_PROPERTIES) } + val MATTER_RECYCLER = registry.coloredWithBase(MNames.MATTER_RECYCLER) { color, _ -> BlockItem(MBlocks.MATTER_RECYCLER[color]!!, DEFAULT_PROPERTIES) } val POWERED_FURNACE: BlockItem by registry.register(MNames.POWERED_FURNACE) { BlockItem(MBlocks.POWERED_FURNACE, DEFAULT_PROPERTIES) } val POWERED_BLAST_FURNACE: BlockItem by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockItem(MBlocks.POWERED_BLAST_FURNACE, DEFAULT_PROPERTIES) } @@ -134,7 +134,7 @@ object MItems { machines.addAll(MATTER_REPLICATOR.asSupplierArray().iterator()) machines.addAll(MATTER_BOTTLER.asSupplierArray().iterator()) machines.add(::MATTER_ENTANGLER) - machines.add(::MATTER_RECYCLER) + machines.addAll(MATTER_RECYCLER.asSupplierArray().iterator()) machines.add(::STORAGE_BUS) machines.add(::STORAGE_IMPORTER) From 8aa34b36459493ef02c587b78f8739fd71e0a3dd Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 15:57:12 +0700 Subject: [PATCH 23/37] Induction furnace and powered furnace painting --- .../advancements/MachineAdvancementsData.kt | 4 ++-- .../mc/otm/datagen/blocks/BlockModels.kt | 8 ++++++++ .../mc/otm/datagen/blocks/BlockStates.kt | 4 ++-- .../mc/otm/datagen/items/ItemModels.kt | 4 ++-- .../dbotthepony/mc/otm/datagen/lang/English.kt | 4 ++-- .../dbotthepony/mc/otm/datagen/lang/Russian.kt | 4 ++-- .../mc/otm/datagen/loot/LootTablesData.kt | 4 ++-- .../otm/datagen/recipes/CraftingTableRecipes.kt | 4 ++-- .../mc/otm/datagen/recipes/PainterRecipes.kt | 2 ++ .../ru/dbotthepony/mc/otm/datagen/tags/Tags.kt | 4 ++-- .../dbotthepony/mc/otm/compat/jei/JEIPlugin.kt | 4 ++-- .../mc/otm/registry/MBlockEntities.kt | 4 ++-- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 4 ++-- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 8 ++++---- .../ru/dbotthepony/mc/otm/registry/MRegistry.kt | 7 +------ .../block/powered_blast_furnace_error.json | 4 ++-- .../textures/block/electric_furnace/black.png | Bin 0 -> 1210 bytes .../textures/block/electric_furnace/blue.png | Bin 0 -> 1336 bytes .../textures/block/electric_furnace/brown.png | Bin 0 -> 1337 bytes .../textures/block/electric_furnace/cyan.png | Bin 0 -> 1349 bytes .../textures/block/electric_furnace/gray.png | Bin 0 -> 1312 bytes .../textures/block/electric_furnace/green.png | Bin 0 -> 1312 bytes .../block/electric_furnace/light_blue.png | Bin 0 -> 1337 bytes .../block/electric_furnace/light_gray.png | Bin 0 -> 1269 bytes .../textures/block/electric_furnace/lime.png | Bin 0 -> 1355 bytes .../textures/block/electric_furnace/magenta.png | Bin 0 -> 1317 bytes .../textures/block/electric_furnace/orange.png | Bin 0 -> 1354 bytes .../textures/block/electric_furnace/pink.png | Bin 0 -> 1292 bytes .../textures/block/electric_furnace/purple.png | Bin 0 -> 1338 bytes .../textures/block/electric_furnace/red.png | Bin 0 -> 1365 bytes .../textures/block/electric_furnace/white.png | Bin 0 -> 1087 bytes .../textures/block/electric_furnace/yellow.png | Bin 0 -> 1344 bytes .../textures/block/electric_furnace_mask.png | Bin 0 -> 2234 bytes .../textures/block/electric_furnace_mask.xcf | Bin 0 -> 10357 bytes .../block/electric_furnace_offline/black.png | Bin 0 -> 1167 bytes .../block/electric_furnace_offline/blue.png | Bin 0 -> 1295 bytes .../block/electric_furnace_offline/brown.png | Bin 0 -> 1295 bytes .../block/electric_furnace_offline/cyan.png | Bin 0 -> 1306 bytes .../block/electric_furnace_offline/gray.png | Bin 0 -> 1269 bytes .../block/electric_furnace_offline/green.png | Bin 0 -> 1270 bytes .../electric_furnace_offline/light_blue.png | Bin 0 -> 1294 bytes .../electric_furnace_offline/light_gray.png | Bin 0 -> 1225 bytes .../block/electric_furnace_offline/lime.png | Bin 0 -> 1313 bytes .../block/electric_furnace_offline/magenta.png | Bin 0 -> 1274 bytes .../block/electric_furnace_offline/orange.png | Bin 0 -> 1310 bytes .../block/electric_furnace_offline/pink.png | Bin 0 -> 1249 bytes .../block/electric_furnace_offline/purple.png | Bin 0 -> 1296 bytes .../block/electric_furnace_offline/red.png | Bin 0 -> 1323 bytes .../block/electric_furnace_offline/white.png | Bin 0 -> 1044 bytes .../block/electric_furnace_offline/yellow.png | Bin 0 -> 1301 bytes .../block/electric_furnace_offline_mask.png | Bin 0 -> 2234 bytes .../textures/block/induction_furnace/black.png | Bin 0 -> 1261 bytes .../textures/block/induction_furnace/blue.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/brown.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/cyan.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/gray.png | Bin 0 -> 1330 bytes .../textures/block/induction_furnace/green.png | Bin 0 -> 1381 bytes .../block/induction_furnace/light_blue.png | Bin 0 -> 1381 bytes .../block/induction_furnace/light_gray.png | Bin 0 -> 1326 bytes .../textures/block/induction_furnace/lime.png | Bin 0 -> 1381 bytes .../block/induction_furnace/magenta.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/orange.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/pink.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/purple.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/red.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace/white.png | Bin 0 -> 1307 bytes .../textures/block/induction_furnace/yellow.png | Bin 0 -> 1381 bytes .../textures/block/induction_furnace_mask.png | Bin 0 -> 2427 bytes .../textures/block/induction_furnace_mask.xcf | Bin 0 -> 8284 bytes .../block/induction_furnace_offline/black.png | Bin 0 -> 1183 bytes .../block/induction_furnace_offline/blue.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/brown.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/cyan.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/gray.png | Bin 0 -> 1250 bytes .../block/induction_furnace_offline/green.png | Bin 0 -> 1298 bytes .../induction_furnace_offline/light_blue.png | Bin 0 -> 1298 bytes .../induction_furnace_offline/light_gray.png | Bin 0 -> 1248 bytes .../block/induction_furnace_offline/lime.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/magenta.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/orange.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/pink.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/purple.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/red.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline/white.png | Bin 0 -> 1227 bytes .../block/induction_furnace_offline/yellow.png | Bin 0 -> 1298 bytes .../block/induction_furnace_offline_mask.png | Bin 0 -> 2427 bytes 86 files changed, 39 insertions(+), 34 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_mask.xcf create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.xcf create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline_mask.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 31e91d671..002648a46 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -194,13 +194,13 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter russianSuffix = "Смотрите, чтоб он не просыпался во все сундуки", englishSuffix = "Watch for not to spill it over all your chests").make(serializer, press, translation) - CraftEntry(MItems.POWERED_FURNACE, "One Big Resistor", + CraftEntry(MItems.POWERED_FURNACE.values, "One Big Resistor", russianName = "Один большой резистор", russianSuffix = "Каждый элемент электрической цепи способен испускать свет и тепло, единожды.", englishSuffix = "Any electrical element can emit light and heat, once.") .make(serializer, press, translation) .also { - CraftEntry(MItems.POWERED_BLAST_FURNACE, "Big Microwave Oven", + CraftEntry(MItems.POWERED_BLAST_FURNACE.values, "Big Microwave Oven", russianName = "Большая микроволновая печь").make(serializer, it, translation) CraftEntry(MItems.POWERED_SMOKER.values, "Small Microwave Oven", diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index 8e2094667..ab24c2edf 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -34,5 +34,13 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { colored("powered_smoker", "_idle", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_0", "particle" to "powered_smoker_base")) colored("powered_smoker", "_error", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_2", "particle" to "powered_smoker_base")) colored("powered_smoker", "_working", mapOf("0" to "powered_smoker_base", "1" to "powered_smoker_interior_1", "particle" to "powered_smoker_base")) + + colored("powered_furnace", "_idle", mapOf("0" to "electric_furnace_offline", "particle" to "electric_furnace_offline")) + colored("powered_furnace", "_error", mapOf("0" to "electric_furnace_offline", "particle" to "electric_furnace_offline")) + colored("powered_furnace", "_working", mapOf("0" to "electric_furnace", "particle" to "electric_furnace")) + + colored("powered_blast_furnace", "_idle", mapOf("texture" to "induction_furnace_offline", "particle" to "induction_furnace_offline")) + colored("powered_blast_furnace", "_error", mapOf("texture" to "induction_furnace_offline", "particle" to "induction_furnace_offline")) + colored("powered_blast_furnace", "_working", mapOf("texture" to "induction_furnace", "particle" to "induction_furnace")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index a380212f6..0bee7200b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -100,8 +100,8 @@ fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.GRAVITATION_STABILIZER) provider.block(MBlocks.GRAVITATION_STABILIZER_LENS) - provider.block(MBlocks.POWERED_BLAST_FURNACE) - provider.block(MBlocks.POWERED_FURNACE) + provider.block(MBlocks.POWERED_BLAST_FURNACE.values) + provider.block(MBlocks.POWERED_FURNACE.values) provider.block(MBlocks.POWERED_SMOKER.values) provider.block(MBlocks.STORAGE_POWER_SUPPLIER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 895a98612..d0dce2d4b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -177,8 +177,8 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.coloredWithBaseBlock(MItems.ESSENCE_STORAGE, "essence_storage") provider.coloredWithBaseBlock(MItems.MATTER_RECONSTRUCTOR, "matter_reconstructor") - provider.block(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace_working") - provider.block(MItems.POWERED_FURNACE, "powered_furnace_working") + provider.coloredWithBaseBlock(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace", "_idle") + provider.coloredWithBaseBlock(MItems.POWERED_FURNACE, "powered_furnace", "_idle") provider.coloredWithBaseBlock(MItems.POWERED_SMOKER, "powered_smoker", "_idle") provider.coloredWithBaseBlock(MItems.PLATE_PRESS, "plate_press", "_idle") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index f13227931..50973d88c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -462,9 +462,9 @@ private fun blocks(provider: MatteryLanguageProvider) { addBlock(MBlocks.PLATE_PRESS.values, "Plate Press") addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Twin Plate Press") - add(MBlocks.POWERED_FURNACE, "Electric Furnace") + addBlock(MBlocks.POWERED_FURNACE.values, "Electric Furnace") addBlock(MBlocks.POWERED_SMOKER.values, "Microwave Oven") - add(MBlocks.POWERED_BLAST_FURNACE, "Induction Furnace") + addBlock(MBlocks.POWERED_BLAST_FURNACE.values, "Induction Furnace") addBlock(MBlocks.MATTER_RECYCLER.values, "Matter Recycler") add(MBlocks.ENERGY_SERVO, "Energy Servo") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 58c559903..35dde11db 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -464,8 +464,8 @@ private fun blocks(provider: MatteryLanguageProvider) { addBlock(MBlocks.PLATE_PRESS.values, "Пресс пластин") addBlock(MBlocks.TWIN_PLATE_PRESS.values, "Двойной пресс пластин") - add(MBlocks.POWERED_FURNACE, "Электрическая печь") - add(MBlocks.POWERED_BLAST_FURNACE, "Индукционная печь") + addBlock(MBlocks.POWERED_FURNACE.values, "Электрическая печь") + addBlock(MBlocks.POWERED_BLAST_FURNACE.values, "Индукционная печь") addBlock(MBlocks.POWERED_SMOKER.values, "Микроволновая печь") addBlock(MBlocks.MATTER_RECYCLER.values, "Перерабатыватель материи") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index 7eb54a6b5..7867002b7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -161,9 +161,9 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.PLATE_PRESS.values) lootTables.tile(MBlocks.TWIN_PLATE_PRESS.values) - lootTables.tile(MBlocks.POWERED_FURNACE) + lootTables.tile(MBlocks.POWERED_FURNACE.values) lootTables.tile(MBlocks.POWERED_SMOKER.values) - lootTables.tile(MBlocks.POWERED_BLAST_FURNACE) + lootTables.tile(MBlocks.POWERED_BLAST_FURNACE.values) lootTables.tile(MBlocks.MATTER_PANEL) lootTables.tile(MBlocks.PATTERN_STORAGE) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 8cafab477..3e51f424a 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -443,7 +443,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(Items.FLINT_AND_STEEL) .build(consumer) - MatteryRecipe(MItems.POWERED_FURNACE, category = machinesCategory) + MatteryRecipe(MItems.POWERED_FURNACE[null]!!, category = machinesCategory) .row(Items.FURNACE, MItems.MACHINE_FRAME, Items.FURNACE) .unlockedBy(MItems.MACHINE_FRAME) .build(consumer) @@ -454,7 +454,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .unlockedBy(MItems.MACHINE_FRAME) .build(consumer) - MatteryRecipe(MItems.POWERED_BLAST_FURNACE, category = machinesCategory) + MatteryRecipe(MItems.POWERED_BLAST_FURNACE[null]!!, category = machinesCategory) .row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, MItems.MACHINE_FRAME, MItems.ELECTROMAGNET) .row(MItems.ELECTROMAGNET, Items.FURNACE, MItems.ELECTROMAGNET) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 104a30860..98ba05da7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -285,6 +285,8 @@ fun addPainterRecipes(consumer: RecipeOutput) { MItems.BATTERY_BANK, MItems.MATTER_DECOMPOSER, MItems.POWERED_SMOKER, + MItems.POWERED_FURNACE, + MItems.POWERED_BLAST_FURNACE, MItems.MATTER_RECYCLER, ) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index b645b7863..760ccb2e7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -196,9 +196,9 @@ fun addTags(tagsProvider: TagsProvider) { *MBlocks.MATTER_RECYCLER.values.toTypedArray(), MBlocks.MATTER_ENTANGLER, - MBlocks.POWERED_FURNACE, + *MBlocks.POWERED_FURNACE.values.toTypedArray(), *MBlocks.POWERED_SMOKER.values.toTypedArray(), - MBlocks.POWERED_BLAST_FURNACE, + *MBlocks.POWERED_BLAST_FURNACE.values.toTypedArray(), MBlocks.STORAGE_BUS, MBlocks.STORAGE_IMPORTER, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt index 8774e026f..c98c3ae30 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jei/JEIPlugin.kt @@ -65,9 +65,9 @@ class JEIPlugin : IModPlugin { override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) { registration.addRecipeCatalyst(ItemStack(MItems.CHEMICAL_GENERATOR), RecipeTypes.FUELING) - registration.addRecipeCatalyst(ItemStack(MItems.POWERED_FURNACE), RecipeTypes.SMELTING) + registration.addRecipeCatalyst(ItemStack(MItems.POWERED_FURNACE[null]!!), RecipeTypes.SMELTING) registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.SMELTING_UPGRADE), RecipeTypes.SMELTING) - registration.addRecipeCatalyst(ItemStack(MItems.POWERED_BLAST_FURNACE), RecipeTypes.BLASTING) + registration.addRecipeCatalyst(ItemStack(MItems.POWERED_BLAST_FURNACE[null]!!), RecipeTypes.BLASTING) registration.addRecipeCatalyst(ItemStack(MItems.POWERED_SMOKER[null]!!), RecipeTypes.SMOKING) MItems.POWERED_SMOKER.values.forEach { registration.addRecipeCatalyst(ItemStack(it), MicrowaveRecipeCategory.recipeType) } registration.addRecipeCatalyst(ItemStack(MItems.ExopackUpgrades.CRAFTING_UPGRADE), RecipeTypes.CRAFTING) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index b48f4fb1d..e92c1a96c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -85,8 +85,8 @@ object MBlockEntities { conf to selfFeed }) - val POWERED_FURNACE: BlockEntityType by registry.register(MNames.POWERED_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_FURNACE.newBlockEntity(a, b) }, MBlocks.POWERED_FURNACE).build(null) } - val POWERED_BLAST_FURNACE: BlockEntityType by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_BLAST_FURNACE.newBlockEntity(a, b) }, MBlocks.POWERED_BLAST_FURNACE).build(null) } + val POWERED_FURNACE: BlockEntityType by registry.register(MNames.POWERED_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_FURNACE[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_FURNACE.values.toTypedArray()).build(null) } + val POWERED_BLAST_FURNACE: BlockEntityType by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_BLAST_FURNACE[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_BLAST_FURNACE.values.toTypedArray()).build(null) } val POWERED_SMOKER: BlockEntityType by registry.register(MNames.POWERED_SMOKER) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_SMOKER[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_SMOKER.values.toTypedArray()).build(null) } val STORAGE_BUS: BlockEntityType by registry.register(MNames.STORAGE_BUS) { BlockEntityType.Builder.of(::StorageBusBlockEntity, MBlocks.STORAGE_BUS).build(null) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 37af11b6f..9e55611f0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -112,8 +112,8 @@ object MBlocks { val CHEMICAL_GENERATOR: Block by registry.register(MNames.CHEMICAL_GENERATOR) { ChemicalGeneratorBlock() } val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> PlatePressBlock(color) } val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> PlatePressBlock(color, isTwin = true) } - val POWERED_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } - val POWERED_BLAST_FURNACE: PoweredFurnaceBlock by registry.register(MNames.POWERED_BLAST_FURNACE) { PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } + val POWERED_FURNACE = registry.coloredWithBase(MNames.POWERED_FURNACE) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } + val POWERED_BLAST_FURNACE = registry.coloredWithBase(MNames.POWERED_BLAST_FURNACE) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } val MATTER_RECYCLER = registry.coloredWithBase(MNames.MATTER_RECYCLER) { color, _ -> MatterRecyclerBlock(color) } val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 3bdbdf3ab..c1ac8781c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -76,8 +76,8 @@ object MItems { val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> BlockItem(MBlocks.TWIN_PLATE_PRESS[color]!!, DEFAULT_PROPERTIES) } val MATTER_RECYCLER = registry.coloredWithBase(MNames.MATTER_RECYCLER) { color, _ -> BlockItem(MBlocks.MATTER_RECYCLER[color]!!, DEFAULT_PROPERTIES) } - val POWERED_FURNACE: BlockItem by registry.register(MNames.POWERED_FURNACE) { BlockItem(MBlocks.POWERED_FURNACE, DEFAULT_PROPERTIES) } - val POWERED_BLAST_FURNACE: BlockItem by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockItem(MBlocks.POWERED_BLAST_FURNACE, DEFAULT_PROPERTIES) } + val POWERED_FURNACE = registry.coloredWithBase(MNames.POWERED_FURNACE) { color, _ -> BlockItem(MBlocks.POWERED_FURNACE[color]!!, DEFAULT_PROPERTIES) } + val POWERED_BLAST_FURNACE = registry.coloredWithBase(MNames.POWERED_BLAST_FURNACE) { color, _ -> BlockItem(MBlocks.POWERED_BLAST_FURNACE[color]!!, DEFAULT_PROPERTIES) } val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> BlockItem(MBlocks.POWERED_SMOKER[color]!!, DEFAULT_PROPERTIES) } val STORAGE_BUS: BlockItem by registry.register(MNames.STORAGE_BUS) { BlockItem(MBlocks.STORAGE_BUS, DEFAULT_PROPERTIES) } @@ -110,8 +110,8 @@ object MItems { machines.addAll(PLATE_PRESS.asSupplierArray()) machines.addAll(TWIN_PLATE_PRESS.asSupplierArray()) - machines.add(::POWERED_FURNACE) - machines.add(::POWERED_BLAST_FURNACE) + machines.addAll(POWERED_FURNACE.asSupplierArray()) + machines.addAll(POWERED_BLAST_FURNACE.asSupplierArray()) machines.addAll(POWERED_SMOKER.asSupplierArray()) machines.add(::ANDROID_STATION) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 08f700b0e..dacee4476 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -284,12 +284,7 @@ object MRegistry : IBlockItemRegistryAcceptor { event.register(Registries.POINT_OF_INTEREST_TYPE, PoiTypes.ARMORER.location()) { val old = reg[PoiTypes.ARMORER] ?: throw IllegalStateException("POI with type ${PoiTypes.ARMORER} does not exist") - - if (old.`is`(MBlocks.POWERED_BLAST_FURNACE.defaultBlockState())) { - old - } else { - PoiType(Streams.concat(old.matchingStates.stream(), MBlocks.POWERED_BLAST_FURNACE.stateDefinition.possibleStates.stream()).collect(ImmutableSet.toImmutableSet()), old.maxTickets, old.validRange) - } + PoiType(Streams.concat(old.matchingStates.stream(), MBlocks.POWERED_BLAST_FURNACE.values.stream().flatMap { it.stateDefinition.possibleStates.stream() }).collect(ImmutableSet.toImmutableSet()), old.maxTickets, old.validRange) } } } diff --git a/src/main/resources/assets/overdrive_that_matters/models/block/powered_blast_furnace_error.json b/src/main/resources/assets/overdrive_that_matters/models/block/powered_blast_furnace_error.json index 74b94f7bd..f0e4d8e45 100644 --- a/src/main/resources/assets/overdrive_that_matters/models/block/powered_blast_furnace_error.json +++ b/src/main/resources/assets/overdrive_that_matters/models/block/powered_blast_furnace_error.json @@ -2,8 +2,8 @@ "render_type": "cutout", "texture_size": [32, 64], "textures": { - "particle": "overdrive_that_matters:block/induction_furnace", - "texture": "overdrive_that_matters:block/induction_furnace" + "particle": "overdrive_that_matters:block/induction_furnace_offline", + "texture": "overdrive_that_matters:block/induction_furnace_offline" }, "elements": [ { diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/black.png new file mode 100644 index 0000000000000000000000000000000000000000..436aa45952302688ca9cf3211de93d701ab74866 GIT binary patch literal 1210 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~v2OPlzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%ghMn*wiUQt$7UQSL?T3S|ITv9|t zTue+tN=imdOj1HZT0%lfT3Sw0Qd&+WlrR#rh(RYP4}Q(j(4 zN=jBiK}keJOjJ}{SXi`OS64wnSw%%nQBg%yRN{ZWjIy$-s;auCruMNd;X*jwo{|8TPY0ms`&Fbm{$?97)pnOtr;aK);@%7iDQJeAL9x4ND+!-n<`3=Zv& z=%X|ajrWbV{M20Es*E}8IU zl``y#Y0}F|kO_P1@WR63l!ew)hug1zm>u$uwB5*PTe?vpgfEI=;u3SAjomhH`rQ~m zdPoEuQ{0d>YZY6AR_2EA;|FKBZakhj!N>O-cFyw`_<=_~H$p3a6@FRSMnBkSZI!`-0x1aE3>rB4G>T z6~mrx@p}4u!Mm5MLpOh4E>n>q^qJT9$C=XQ_XVdhgg&UN=eKy;&@$7)>7j)GCwcqj zuY>lryo%eu-n`+PQ zaeD>$RWupP?S3txeW2jS0@=wmzhX~tnLp$ZP1#pjb!(g2WLuXxDvvcBEIll}CbTb7 z*(+~rpC4^pEaT;N@+A)vN+~~P|U zc0I2@md>CZJN>MqM_GsHALhw>6XUgA!2OC7#SFu=o%OT zQHY_Ll>rE88yHv_7*tK34@&0<4Y~O#nQ4`{HE^F(4+Lt^fZI@#nVVW%l9*e7&|?x} dU}0ryW@Tssu_T+bdo@rGgQu&X%Q~loCIIwlt=9km literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..e69428058693e1fecddbe21442e4c0c2aa0a9766 GIT binary patch literal 1336 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TQ%fKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXNgt@?)jTH5LA8Zqh`smdxzib@Ge z%86>~DM~6yDr(6}%HgUYGD24`Q$s6PRXtl%D_27^RaGrpMHQ$xTwNnaULjOVC(p>Z z$k?=4M>k(hJx5(LM^~>vK`~52GgnSNL|G+5RV_+EF;qh{MpiCZMK!BkS659vTSqV7 zz^F)1zd%JbSy4GrMJ@Y(zKo`Jo|bl=whj>G>l+qoXr-yDrD$rU85m}pnC2Q9W$Wl> zsA;4e+Y&A#8>FcftDzZNUth0pP^hk%s;igpEG=BEDYi#bNJFzq&!F&=g+#NV^nVAb z|2}fsx)}zBMH-rE|NsBzi0`fkh7n^)kY6x^!?PP{AWo9EyGwlW#XwykhqJ&VvY3H^ z?;r>>?wFYU7AVMG;_2(k{(_N(!-B8stM3~I2B!UyJ%Jn8=%dd-{oDxyo~=r%x_eV8*b(eAyz# z8wpBFCwVQuoH!xTvM(u;BSMRj!?~@oCMc)vY48gpRt7un=L{Jg{}L5M%qF(jx5#iD zacfJB>}rjaJHwcu$7GV*|-XKGsc zCWtX_n9-`lw_>JPzH*K5bSLQvO5%J@j}+J(JWEtWx}z7VJTL0fS~Y8uzK1}8Vs8ku z!=x!QH6JGI)_B+PYhBWmFR`0rG?kfea5KC(q`=H_;M|mggtwvJ@84uMJ#Lt_E6!el z!NG*Nz*v&F75WY%Hswln{URvRA3D7 zIbD2rPh!TjtF`;3uQ8-D?@&8%es|rvm#5e1fB!SbvyAbP)v+?gxFh=+8=rhP-LLt( z@p<^?eVzB&i~94nF4`OaEJ0w3mD~2alVzgs{4aQz#GqMVWy`EnydcZDq-9I)N|Rqd zUVeTmvA^X>oRzP8!w<(@k1lk~J#+c>-lV5H0@q*Zj^CFzS0?EIuTUJbslUv>%B7$E zuD-p0D@*x$n0sT^mzdYL`+oclQfkQg))uAm=Zp5)&AHC}Zs}QztIN$hefhr&luVk@ z%J9hHT63HM$1mHTR^|2foo5#+*x2Z>3b5b1v2m{ZVXGH$=JV&xOAfAbh}y;S$YGOw z?(VFa%ZhH*RaW--&W%!iw7_KDEx*w9tXZ|czm^KkzUReIXrOa_&fnVykN)g$di8tq zjgafb3pCe#-kdzY^vL0l8`hjieHor^^5Q#h>6UrSH8U*ww)~ySSuC5A=N7-Po=xE6 zo`x#Dg@5E59$rkiRw!V$e8YMN3*LZ^dH==MGi=F_GG|x0qZswUeB=B^*F#5st_G%V z)e_f;l9a@fRIB8oR3OD*WME{XYhVaOA%6o`(mqD=UIubbIx@b-ir$8D&bqRGrpkd9YC)!o0mgE{W=j4>vR($Vj@r_JCi3>0 zlELQ6k#^cq4!WV1ssYCGfu;(fR%$_Jib19d_8Jnd`tlB1Qtn1dcIx8oy1IcT3L%y% zVODApwpwA<>VAeY9=g*1^JP5sWrNL?LM(t%>ftsTekMxZM)KZ<^1ddDA=X-9_Ie>U z+5zUOK1K@1wuIZNi#upZdKfEv7%A7+*V}1G_?ap>OAA+PitW)9in5Row^p}N6Z>Q# z(QGLF-$ClXk6eVUrmwNW|NsA+w|2?{!-%mY$S;_|;n|He5GTpo-6g*GVxTUN!&%@F zS^Y0GqI z3EZWq5qalQrsvWeQEksPYwoVOtGoG@-tPbZ)8Cv)IMKHKZob>R&nJrG_E{Rs%ur>x zv2=Bn4UG9VgvY&~#yj^ggx6eafkBi+LilqX~4^+&A`ohDmUwazk7kE7+@}#&4 z$B_wcs~Hu1z51sXYzVw_C+afq(JLi~H*L?&X{caih_}dTU~1VY#OIZ|<@3p#YeQCV z?OK=rK8Rs~6!VddLJZ~WWA5l*>1O}^^{vy-&8`dyVhb1@l!f}vE?a2bciqay$oKB1 zzUNjyI96zeoh-Y%C-cY00=@4a z1Sgqa(>K%KU$ghsLWxYlr)rlzVq-w8dUMwYqomy?q#e7fV66>$L+u zlRWCSl~uIdd2l80eNmg0L)O~I)3&Ug`s$h$Ys%*BXG|t8k3YTb@k}czi&t^K|J6y% zHhZb~L!~g7@yfx@J}V6e$LCMfzJD<2IXh3q*6tij0DIZ~r(5Tpd6xJ4`Nz+ny>qhq zBaEjz$Yz|I{CMHARL$~ZuU~uTygFkO$Sz*{By?h&V^;0sx49Ctzr`?=Uf8U?cJAc| zZ$7Llc=!A8jS%r-1?{}o;n$0I%|2RpJ}l+;_sDVq7Dr!Moo5X)YJp2~>+=q|u%AAC zG5p1R#*mpkE!BEU|HwC-esECtkwT7NVtiwP$O8fU|F-j(GdAdC@S6G7^>bP0 Hl+XkK-hA#! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2c5929686d639b38841095d797c14528e7e799 GIT binary patch literal 1349 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRGfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXlzwIVfblF^Bhf#H%-iDD7)f}t_| z!BGMs(V`J?!eOz(zCps_Kr&b&Dp4jTSu{RPC^khbAzdsoUNAOAC@eZudkO$$(D&tmX1kwmKLto6x*XIB$!nslbprl z?)%9?qS;XTzk}3&A3340SUI49Q3?P5|5s&9QvwDSV@Z%-FoVOh8)+a;lDE4{lJ-tn zU~n>U7I;J!GcfQS1YyP<6SLm}1=&kHeO=jKFtTu1@Kt^FeZ#=OblB6yF~sBe+^N0s zvm7LjzjSDEzU;6dM?5Jdc+TDkt+c+Tm20Q3-L~f1>23f2&%bdu@x-C+Z_Cx^KUbdr z{Pg>I)^amc8E!0{7{M@YM?mL}ih2A^OBA|#6dV)`3>^fDWTre4n$$Gqz;rql_QNCs(UW%27uSPEi%eTOuN(eo1he zT8V%LTf#}9h#2O)O-$?&ml<8|gaopmiMYI7aG#gY1742{-5iRg0*nt-%tZQ(Z;D2q zd>WGL8XQs^+UCHMu|&{ww$-97b`c^BD~>S~u90B4x~;72`?t?G@BVrg_x8aAh66ed%nfcDGSX+o zHl6nSy&_rSgpJL-*AH|T+%nabRlI8;vU+9R9geJq&5SV@8docum%q_EVQY9Nc=9_Y zmC~L!PFp(i8RxzE)m6P>$GmsbO0KKCXWo0YpDJY1eO!Umbt-bNs%v z&DJahy{^{|_)PMst9rO1*y*2dt{?RE|1r!x@kDU ze8bjRRn^u#K6Aea)J)p3lHt_@mddv0)%yyIX71iC?UrUgci;Z`oD29$*1p{$-?MD# zKa0AWnl7K8a@o&>Rxt1U6Hw;md-;vrmU;8%D+wEZc9H$EWm59=fTNdRW$Wu7KJmv= z+(GtB_tbCSdhc6X#lPMC&cJBvQ5lWcEB~$*zB%`+@0xzu)TD>y=?{L_g-Yu@YmiY3 zT#{R#cgThP^y!D;FXl6bOqz1cc6!i1{sW#B1>F`Lvw|;#E6A`~964X#`N4AM78KT59w)_>TcoxN3=OL`h0wNvc(HQ7VvPFfuSQ(KRpxq7XwfD+3VHHZZU< zFsPb5ACx5!8glbfGSez?Yv4Yo9thN+0k@$fGdH!kBr&%Dp~ob|z{1MZ%*xONVo5e< R_iCUX22WQ%mvv4FO#qWM`zinc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..92fcc7f23ad209a436c0b739d6c4d756e2df7f74 GIT binary patch literal 1312 zcmZ{jc~DbV6vl4~VM~)*tEiY_Br93pd&x^)LVy5CNo0{FP^n7;5-Kn$A;c|=5(;Ux zcBG<$id1Svt&Sin$^cGPuu!!qpcc25MnD8DRz*;W>0>%m|LV*+=bLly_nR|w=bp_8 z@zG?z06zc#S*KMe;i|%u=Hr3aol#p)QL|g;_4P~UMbmH{oN^Mdc05%o?_EG>| z;Yapi09Hc)j2Hk=>;hnpd2e%~5&!}zAy%)!4QIl_P!#w&34_IiL}zits4Qy!2Zh1@t-&)x1WTZ*`PEfBVQ@sh%wIHz*O3-e(Y>D(*UIAzW z{Q-d79sX{qb7A>p<+mQ&`Z_Jt=zNH6N5K^h@M5Z8D(5-NE6m5!eRoxHh;2_Y+iN#} zs9r=^)#@2=!=6^(N$AM}{wEXL35`8NrqVH|c$Eh-a3M-dWdP3Rtqx}^gXhTjTU*W? z*Y=WqCO3U_gh10>s@q{n=qZc4#a(b~_R&ZB+>}gENC3;{X4*m1&LqkRd14^>+4bDU z%&RAEAMym7Qo+XBS?9(i&m)h0ALCea?4~@V0~{w`Bi76(U0k!cLAWQY$eewrqF}}C zhy8R_pkno}6X>1P(X-tt@*{*xUgpK##Y5f~lMgr{Vx2!Wxq&t@{JHG+*CxurbR(;5M?*LAjJ+>(frqv@Z4I$+sDDxQ5A*{SJ6=^* z)&IdVPR%SYUC4S+>)5z_T81# zE}(0kM(F}ykAJ;8&!zXFRkj?G`i8qwZ|pf}a=dX|pBJj+&rEI$^{i%O(d}5%=?nQ7 znSFn>#d-gJ5d2{OaPv|^dvWStRW5eRTE(jr+s2K$*f!1WW>4q2Rbgn{nFm;#cyN52 z2@7&6H3Z$mdfN>%41XdYk05KPlagB2XM-@7=_d1AMxuu>1u9j* Wl7ENf`ffRjGeD<_SJy=vzW4`A4(Bxh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/green.png new file mode 100644 index 0000000000000000000000000000000000000000..e042e7d856bd62981f349607758a315074982ba2 GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|O&pfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMWNQ622*tc0RHet}?bhGFG0F=5C^< zE<$FmB37Of7VhH44r10`QkEV-hPZ>Dyq&+KwU3y+zm&C)sD-o8Z)r;p30rR&=Rjq*5OwE36?+9=XLKJL(F7cChmKLto6x*XI0nn0fq=;NswPKgTu2MX&_FLx4TQ^tW94efE>;OkH}&M2EKzJ%(!D>_FJGJdx@v7 zEBgyZ77h!(s;|Cp7#Ns#db&7WHK|A!qla+5vlIjtwG=oLEunTP+hQUrrS49|lP zEh+mPW}7TdmC=c0dYBe;u#hP?Gb@O_vxs4uPUBI_2V&ZV4O?X#j_8V(9yqhLM*89G z7N&a*OtLH-E1P*3{F8zoRxA%%d-Ch9MPZ?lnI@(jEiG=F85QP+%+h}DkRMvUI>X=4 zWJ`KfF1NHo9K!+TcHRI6`|xv)%d_9t7x2ZLch+aC%F<8ZsohjJRzxUjY5V*+nvJpXK|C5ZKMzI z%C__>toiO_$?-I>BJWacgG&F**b{0WZ51vZ+9>nwiNPkP-GZ~8*j-4^*+2i?UoG~@ z9?}aQzV!G!XYSwrLI(zugGV39Y&dnWb@U3z z=oTCKuiL$L+x@S%>t5gf?)9{TA#cM8sTr<9C(d6w$5v*ruk^~{&+=J0t20DOw%nC{ zuU=XZtasnww9CCZ)#$$D1sdP39DaEBuE}NHAmWIQ0)?0w{yy;dIrBEy|<4z2F;nYi|L`x z0mZui(R=%K=~}hKHKHUXu_VJDR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f3fc4b84c2da2f8772814e999d3d85f1ad3154d4 GIT binary patch literal 1337 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRSfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXxl_n0j^rC-*gol&D-+M`p_tx?#i zn%}No(4k%2rC!*fS=6PLQlSMTQ!DjKdko8ab?c^U*G$u^o1s-RO{1t&HMv5kcDiy> znL+&w^QKuA&9e>bXKL3>*R7py)G$-8Zn{cxxl&@OdTOO+dX-92nNDVna$=ccLWySe zw02!x!}=MfjkAm!W@=VX)hy~%E9m&2FQZ>K!=!PRZfTEJahGmMw@GEcMfC*J%6^0L zUhU%UV_U)%;!9LhDs;1Ibuw$~>+ALFrt6gS7*_Nd)z5I27OvJ5+oLI@*SFTBai&6i z@h1z3WGQvZGA49a>9>Sp}^|9`2z{sUkzF_r}R1v5B2yO9RsBze2LBplsd zBLL)Z7I;J!GcfQS1YyP<6SLm}1=&kHeO=jKFtTu1@Kt^FeZ#=OwAa(cF~sBe+^O8r zvkgSr3mxK4H~lKP=F&gh`G$!SK)F zL>>L6C;M6WQnHlwIhd3mG_@RK;1Fk!@#%Qpz2&5H)Tx6lssedhqB822rY%t`6wqc) zI4Klyg3&x~BlCq620`<{D~!gMp5z|U7b@PsXld0U5zMa1;FBcmxM$0rMJtXzTD5J_ z%hgLaHBFSboM9%gZ1N}NRGBrQ*Y2;8xEdO4xGF4nF&kTlcuT^A0}QMjK)D;U&t1Fy zYuoEe-s=XlZi_UmaAPQ3!gJv6%{zCs--q*knb-2`?Xu&mj#)O`_eQ?5V5&5XzT~Ri*pCNKeeJ|GVwW-(Dxi)k}8KRjyWoMN)1*4y&7FI8Lv`5ek+^s$~JP}?%7-m_?q@Tul~Ml@7Up#w(!}%uDOyzsug<^kx3l<;#zUn9qn@#CPs@-+Rk8>CCfRpFek8#cs@a#c}#;(=8TXy~DTazvCYWPkh3b{soOZSs_ zolt1_lk2Z>gV&^#6+5SVs%P+PI(GK4f}USt?7<2N2afmko#_lwI^JE(9U&cJ|Ckpa zZl1s6+hS0HS1oakC`m~yNwrEYN(E93Mg~SEx(0?o6k=#*WdK6j1_o9J233>igE9j` zLvDUbW?Cg~4czC{1A!Ve;5L+G=B5^xB<2<%^q7PgSXh~wSs9u@EXn5VUJca4;OXk; Jvd$@?2>|v6894v| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9dd5e3f2499a7e19f2a0f5d66ab721f2ebc540 GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~uyFPlzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%FG&6KJL!a z!qu8$do+de^3uJ$Tt8VzG#g6)caZw;BlrLR|LgUw#Xz4kmIV0)GdMiEkp|)@OHuI4t<8zWTmlU|?G2>EamTaeVGn z?&?_vB5j!tEecl`Io=ZJDqADIeB+CZjklw=e@)sQ_wWDuo1Pm^v~7RueWqBh^3$`^ zo)#L`94oDhS8}|~*r}EJa@Rc8(8DI8hYy?x@M_SxVv;j8HH3FH(_xv0HBxa*0fv7T zC+56wdSlPRmy@|TOQJ35!K~J43@qXdQa&f1&E9mgIO^cRE?tg1MbTMlr=~4eE1$5E zCE%!7$ce^nF*BJjWHn6K7Idj`(}h>bN8TH07chug&XDkCXJzmSDt3&?zw&)f+Gf{R zM>2Qj@+%uJKAEGSqaG@*Wm$0hH+$);?K9kK?Jal?G<;|h;E|G;z>vIfQuBt(w!Z{g zO}aE*Bx^8wWHB0uYcakkeE#Iin(KLUzVV&6n*WQb;Tj_w2XB$%87KL$=Z8PfFnsm> zx3ugZ-UZ6`GQqEmp0y;t-aP*)Lz?oQrOii{dTyR?VZs?v^zd}>0j2)dU=6j6EFXm4 zsnn_`K3?)#ZC{1_6XQ~Y6X)yZGN0QsV_VHL*FAM5GlLi>a9;b$nlP97k8H>2t1c6+NOQcr zt#E?q@-^!cZ1@#gzTSV#+t9eG>k)&HXi`HxbJ>f+|2y`rk_RSY)e_f;l9a@fRIB8o zR3OD*WME{XYhVaOA%zopr04bmGy8r+H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..d93b5d86c3d731c63a89e332b08beef7179c13c3 GIT binary patch literal 1355 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRefKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMd!oMbg%a`Bq7}Q2&3I{fedsj&KHVAu^2|J_<`!|Z(r3wZ% zONO^8Mzkvjw@CRliugB)2DeBDG>O}%3)!X$IAw}DXNlXV3E8Cz*rf3LHVC!r>ISt) zg|x_owJC(O%K9`2dX$N{l?eXNmkDf^a4QiAYL*OXl?iQ?^Qn~ZDi`&slnkm>46RcQ zs#Wr@mhq|(JGLdKg!&%@FS#?Nw)IR4V1#W~nS;FZ(G9IkbnG{ZPDpT_0nX6r|;4ZHmhXl;4BBKQ4m z_vhBk>#v!ozrXrjMM4-uLin*H#)yYbs*fI3+Hp*3(lBabXgqL)!SO_4K$o`%R}fSD zF$RUD4@4NaKibQ*ybN9QCH@fKr7Lbh0xWI~nw&n20(xu(7K$gtUwZUs3bGqdbJ#I4 zs9=tVd&H~@jte9jRJ{`ld3U_zl1VtrCQxYXDr+Eo_MY1h6~jhz1xJ0QmMe}d4U=yK zSe#2SF4CJHA8gdME9^oF$B_oN)r<o_7&V< zVC4`#DigA8)ouN(($m|d#hmnCi!iKEV<=oC!SFWc?Ym50-QCx9vVX6SVqtj3c#C0+ z^TQh(UY%HHIk(yQu*1@87oFJ8GxBZ?DHPO_Xp7poYwg(uY!=c7RAnnzpFHi~BlF4U zzO~-P*oGy26JtBXK3X1_zIWcMtwrXH-Qwu)skcw& z%%7vgw1D;5PtJsS&Bmd}-94^8ee~e#?CtN{o~SPQUNMiC@nUm{-XlTFneX-OGM+xG z+kEGWUEQg)a?S@r-D?_Ws!jZJ=h4AL(XW14r=CCFW%R=+=f?`A`m;5+Cuk~6-IbEo zY4bOxG`p|yPvhD*CF|F@O?){?uE}4>T-ZT&#)$KU^a=KAkfmB`F0tJ-2?aR=EQ zhx;z?JlekD_um)q-q{&Fm0q*cdja2*Te)XfMlGH6Yw^Di1@bdHB2`{3uvlYNCK|c# z(iM4m_lYm{SOVC0WtML9pL4l+{;iqMdzFGC&o!=EbZ-5=xK zsZ$A->`x3jm2!V`3oo;Zh~?ey^q*(Jq$MWrc24yajP^|kG zyocdJTI3~}4Ib?ohwUvBoAX~f9@q;^;i@IB5hW>!C8<`)MX5lF!N|bKMAyI&h(Zj_ ztPDU%+rYrez@TdKd{CA^Xvob^$xN%nt%3WTdLU4P2Hb{{%-q!ClEmBsgdUR+0}Crt aGb=+Ah$Y#a-K&9m7(8A5T-G@yGywqB$_p9* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..58280c9496ae9fd1a930877ea6fbed1bd9eeb994 GIT binary patch literal 1317 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TQ-fKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMVqDrmeABSZP?Ct(#V^S6Hf*SFDj! zqM2K+TTr5vSEiGnu91|XnN(?5RApS!Xi(LlTiIk-U7=stpj%O@ou96r*r;Ebsv6&9 zRNZD--)7y=Y*N#pSJ|jv)nZcHWLTA^mXM+nm!+MOu929kmXM>DmZBP;tQ=dfQ_-%g z+iYCZVp`j3QP*Nt`#)c%R2yh}ZmW4+g?>?)Zb6w&L8U=ajd@v}RYkd8!Lcpjx%%lj zdg=A`^{r-g)h4CQrZp7?Mb6T~)tX{^G=(M`b|opre6o;eHkAJFAobrzu1q_>%BZ+P zudvCu`v3p`8-CS&1cnP^NswPKgTu2MX&_FLx4TPp$)2euKn`btM`SSr1K&XqX529` z`z=tAy~NYkmHh=H3x@??)mPs)3=B*=JY5_^JdV$u${l^nK%^}@YJsn#&X*+9X<|Lv z=Ib4}u4-D{DG4r#EBpE1KE<E=7z^cSA5d{KO_&eGGr)s*4L)=n3OYfB<#ZrOA* zN90M0t6+*GQ=|vuqJT*YW=)$j`6|y|9|niBhb0*VFV(AXaK8>|-R~kRvZHs7&gmwe z&ssAW6Jod~WH?P({~>V31tGp?I*ocYm*&$lRpu=)K-LYO=_8yLrlN4_MEoEpKq;(>tSR>$GfXsNQv+YaM5(w*KAYRo@`E^K0+l&ASRa zd#5#LOdTH-aoBoZieV@(=-SZCsdg@N z`JWF4erFOFe)zFN;DBt!;szGxDvq!3?=D~d{Kyr#m1260)))RX`WGB7{rdOU>C?qY zN{KUfG@s&_tmej>vt{k|>xD`GBDfy#wZ$pl*sc2f@BG=~i57l7$)@bf`kLw-{v@21 z?-Y$`@iN0AWUX4_8c~vxSdwa$T$Bo= z7>o>zOmqzlfhfe#%*p_Sv<(cb3=FC!&j;lLgofPwl+3hB+#0ygsRsfzXuxeK$;?eH mE=kNSKQHM24_fmo8w*}WR5hr!d;&t;ucLK6T2DF#>o literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..a36a44f2c6289a128e19187e269f1aa901dcd64a GIT binary patch literal 1354 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace/white.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7d68dd893bcfa554cc859cbaf5fd70e349b3a0 GIT binary patch literal 1087 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP-1d`Plzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%lj zdGqFVcXuyZv}pbM_3PHH>+0(2?CjjIVZ+9a8#_8WdV71@fk0RHf4L&u7#aI&L7tG-B z>_!@hljQC0VzBOx?h_z~v%n*=n1O-sAP6(=n3(+*D9B#o>Fdh=f{}&8g0JeU?;8dN zreIGO#}JR>bEoo7U!@?>#(R>*xXHjH>+-v8xwq^7{I4%hzc8ixOxF9;Cmud|_%KyM zbC!URf7H5h40x$?cG-ok43p0Ox&Fo;wT*;tV2cCZA{KS9){H^yDz^bkx#F-B-HurHqLbL(&~5 z9?J#WuUatlG6$4|+;hB={YTvp{a;cp9@86Bb*^R%^PFwS5)G@s?l zsVmyuwk_NKiC8={v}iTxWNuh9ciq}my{qP~(yinF7aJ3L_vZcL2R#Klcwf%BVU;NG zKzNRd?SpyDH>XVydGz7=hG{sKUO_QmvAUQh^kMk%5tku7M#Cg&3My8Gw+sfq|8Q zLDl5>pd^aWkei>9nO2Eg1NS-gK%fQ&lbu^5Ik!%_Gf!%Mz1+MynXWwP`3;H-npDUfU%$(-!_o~frke}b6u&`NuQLFZ% z7L5f>%Jb@Fk8KHW%@pY?R_rZStgo+M*Q>gqL1Ar|!u)#K`3-W5npM_zD?3XIS8Iyx z(G)s9SEeOXssBE53mTOdG{~>*R{a0}|AH@Ps)2#USQ6wH%;50s zMjD8d{ZFR~u#a-I>D>%BGP+Pk2;Z`Oq^znuI3zrPOW z)J+#}e^Y&G>0f#7^z_LE31JKg;m48~BOVGp-Snu^j_*^GhEWqkPLPm$$pwKt;ism zvt_mx>+#MKm8G6CM@}(BY+@0+-Y|RJ4aRFZ41(stR~U^izR7Lz7b>n`F8ZS6zuJPdR^HmRZ1qzwQ6|G>7qb{VCVvu6m64boeg4|Sl~K1(n7oyhmR5*k zI3Ug^y?`NcQBU)&b(_E6x%<85{wIN|jsA=cSxf@zrx-3AeD^SL>ApytRqsRk{H0hJ zo-xj1FcE%u<5Sd$^1BOavm#IA%+W2Gz_=pqtlNs5$f~oiP0s9KvyeWZ%9tqGx^#1Z zZmHVaAKi+~>iA&mfRZHGn&}>($lz(Bn?WWJSx_QkfZt|`1TOIxN z?$*82ZCx0)9I&xxJX5^jC7Yeou8kL8@2~p%>}|uImM?PWH*+e~PSA6)2~z+3q^Nvz zko~&Hb8Eiui?C5?(AL?+mNv`f)8_5Bm-BVCtt%_Icge2iPfBUv+t1Utu0L<4u^?ba zQd+0YU#IP{*PZ>|#3=9Xzq7S{wCegYG>YKdz^NlIc#s#S7PDv)9@GB7gHH82FC5JNL7 z0}#?SFt9Q(sG2+qlPgg&ebxsLQ0QFoZ!~g&Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..8e877c6fe4d9d6790557a2cb69d3e5bf850dfbc6 GIT binary patch literal 2234 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/black.png new file mode 100644 index 0000000000000000000000000000000000000000..304193fd89511cf94b77ef9e6738f74ac9e71e23 GIT binary patch literal 1167 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP-0_%Plzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%ghMn*wiUQt$7UQSL?T3S|ITv9|t zTue+tN=imdOj1HZT0%lfT3Sw0Qd&+WlrR#rh(RYP4}Q(j(4 zN=jBiK}keJOjJ}{SXi`OS64wnSw%%nQBg%yR6anMpdfpRr>`sf3q}?W3(*e~fFZ-c)avQt7~*k!?o{6CixfoKWKD$52pS5W@W|ad zYgT6Y^W^gX|K+0(9Lsr={r#xL_a{61^~LvC@iXk;XWz+SQ!&@g*^%RR!W-o$KkV4{ z88d8I`21mlM*SOhWm{PWg&7Zw8N^@L+w>fEU;Dx3mSaY4PwoBk8XL|7k_`{D8kP&+ zs!4ILSnyRQCZg%#H?N14C;HZz%xw;1ZpfbY;FVOx^Q%@DcJUZ|(mQ2U(6?((?~mY& zCFTh!>Ma{fFEGDQ**>{XS?F?#m2c#kO;fl#8M89CNip1B@-dK^-FV{p;^PkDs zklmomaNEx+tmpKuzOwWBUMH1K=UM&WnvfaD<+U>?^5i$x{Okpr8TVagd?Mm!JR=}N zV~6G&y@cT7_w>GW{}6RhIb%FSbpl63VZ@B@2k#Yczn%Afy=BMAB)#u3CqqSa_X}q+ zY&#$z$9P?4!OT2rFyWj@b;a7hK7Xs5|ncQuRir;LTdTO;g_e zJF~cI-sfc^nMx~WO}03vs{Gy3pq*3k_P2bsIi(+d+^B8+Cz&A1vhdx`X`kvD^e-IV zecbW(oLl>vJ}O>VSobfzhIvD2>}8oPKJ7Oi?O%Q0&%kPeY&0-Ms+PD$l%yncptHiB=`FVdQ&MBb@0G=JQkpKVy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..8811b975e8083c232f4d0d5ccd4da4e82329631e GIT binary patch literal 1295 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|O&RfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXNgt@?)jTH5LA8Zqh`smdxzib@Ge z%86>~DM~6yDr(6}%HgUYGD24`Q$s6PRXtl%D_27^RaGrpMHQ$xTwNnaULjOVC(p>Z z$k?=4M>k(hJx5(LM^~>vK`~52GgnSNL|G+5RV_+EF;qh{MpiCZMK!BkS659vTSqV7 zz^F)1zd%JbSy4GrMJ-!XJ5NhHPg@6w^7Rc1HMG)H)lxLI(hLl} z00W$XX`QEwV~EG`xl?(|XBmjJWghTon$py8Ey!i1tmwx0EN#CnS97=Cy|wo4xBvC0 zCM5{A$KRGdv(x=tZAG!L-W@rHKlfs67^-?Z9Q#4@=k%WgX?~xW>GqWor`Oj@E1W%5~zWCi0%x$eDOXW(k8z zr@u?mQ-{E$0m>Wm#XP3?23|IH)yB zBrp^%>|y@Cr0~~4>+E0q?rvFgO_G^m87qVC6h@Y}lRtNVN`3ljQK!z49Wr6d3_Okx>Ws~>bf07^*`up1g^N?D9%e}k# zH5x=E4zVUoW(*Svn&=rpCMj-%*5zT;)6Q-pgNlsJOLUu#jjoF|I28b zmmYob%drf80j8DOOKe-_s3ht(SYB9@Amud0w=1eo13!YW~oBehk z?>wv13}2^aJQkY4e6{-Xp0?K(ze@8Z6AEu1kqJrXJ)a+O_C$uP9`m8K49^mRvVSet zfBgIQ{M6)~9mn$cd~83|f89HKUy+~7GWEQI~&-V)M1*bo6u@tz-ckyUFgU6o`(mqD=UIubbIx@b-ir$8D&bqRGrpkd9YC)!o0mgE{W=j4>vR($Vj@r_JCi3>0 zlELQ6k#^cq4!WV1ssYCGfu;(fR%$_Jib19d_8Jnd`tlB1Qtn1dcIx8oy1IcT3L%y% zVODApwpwA<>VAeY9=g(=`m(|1N+A|NarJN;4L=hlZzFkcLwR2l#Sm+)Fnhfa8|?sd zRUadTV_U*))x{mOBt49kJ&cs=>+9__B>YU3qAcXYt<`PR#3F1peT^0V|Nnp3YIPPc zEEr3I{DK)Ap4~_Tagw~anMpdfpRr>`sf3q}?W z3(*e~fC0|Hw9eDTF~sBe+^O8rw+uwuvZI_P2jwqq?fRy6By>Sn^CBhIqq&Q2i`@P8 zzy8!D5$}z6w&|;$uY6H_ug=obzg3sv$l8@I4BM8t>|CSJQaE9{piqh=bL0tzM*)*I zOqx1p`c#>@%NQ1jd|+zmcxf+m?3LM6EA>|nPt87U(&0AJ(@0=!DAaUV#93(f$a(Ii zAiiljjfKHWC#W2851MtvaSe|{inl-}?~@4Nlco3dDX!eik> zGps!rGbYXGIA*=O`ghdE71Gsh%ch@FW7AmnF^l2M~dm*j@z<%f7I;Ut+A+F`i|saAw~i za^R8a6{d>I?XJ_`Go_XKymi{uA{*9 z{nVn>*A`j-eEj^KYb)ctl{chXT%F!LpE*5TrK4@%$Dl2}oQAXhF36I5Ytr}4azQ|a z*tAaDzk#3sT-bQxi21oHj>aobH_AErPue1KK=w|=5`QJ3ule)31e&gx23@^=eJaDd z1JdP(-_5>k`S$OwdF(URhiFefAUosVZ23ujuV3kZvpFDito!M*ovESb8DdOszylEzL*$jb4 zx%Ih+oY-&QJ{kUEK4VPRqD%8mYyM}SAY!$|SLVoB&3D=o{>)OBp6@@N&5#?Ia<;Ln zw8QKlclz~IX)Co`^MOfMwZt`|BqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t? zR85}$7DYpDeoAIqC2kGe=hOp%8Z_WGlw{_n7MCRE79jMPgcw*@nVMM{8A2@CzHjk+ PpdJQKS3j3^P6Lh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..b515ebb76e668dbeae19c55ce22c757fb50edf90 GIT binary patch literal 1306 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRAfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXlzwIVfblF^Bhf#H%-iDD7)f}t_| z!BGMs(V`J?!eOz(zCps_Kr&b&Dp4jTSu{RPC^khbAzdsoUNAOAC@eH=O z_7{vS92TMac+Fwf`V)*-lNcs%3Aoc}aP?8{k$fk~ zU5t`;iak4&hI;C9FUuRc?`m(T{cej@ z`tA2~fe){NKEnmiMQj!h^R%8Guw5flyJnZ^`PJ7sem*H;crc6ULWm|qri|SDIrBt6 ztDkMYeC#JHb38hA_xiIO zHZ#UuX57M|6XQ7dKqGIy%s%cJR}D9EpH$k%&LYKATCwo(fhJLIt2ea|z8?wGzV|zo z@6duPtEFY5KmS>~_`LHWhCK%a{1{Km^n4Mtb^5i=Oy+*w&b`Jry-&P%)Hv4g#BrB< ziHhH|pNA7aeq3|0CP!?4-RbB3k`Fq&);i8mKT;R=a#OhC!{VzscS_C_CS1#XG;Lpg zrM(H?iKp{gT$B9wUthZ_e{#Z`nY_%36L#oabAI7DNsMVnGb8641s@K|FQ};8ZahnO(aw3yd;NFquikh4wzZl2(|vJze_!?RdP`(kYX@0Ff!3KFa)9yLo+J_ z5YjdQHM24@ WgjlkD-{SW`Jq(_%elF{r5}E+4uk3gL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..d60dc073d195ae6b63eb853316997f4da36cd8b6 GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~vldPlzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%My*i={F&;Upp7-{L~scY$I zXzOa~=xOU3XaM;JM%sD?21cgFrWX1}K$S)Y#%6j3#ya{&TDtn`n%a7X#;WR?h9>5g z)^=95_Qqxwx(3Gjh9)LvmTDSW`bH)yY8uL_>Oghvy1IIXCdOu#K(*#pHl`LFdh=f{}&8LiED~VAwJ+t@Lzp4DmQVcPe-FECZ3Y%mW@xAr7aH z776N?h#d`EeKqXLuDsaYrN96GPxIW+arE{#*3Wa?=Y9V4R7GZoF~g6|TPqmOwS=_p zQE2fD5D|RjBFH@PG~=WIfellpM~EzCnt6>uVd@7yhW?ZGOvgT1PTZsV$RW+FYmr8g zlAdP*dqWYYg94|gU6OO$Wh1_CI*mofO9fbtxJAvn;Fjy=l!73*s0QCOhyLH0%gG=eSxnruJn_``vX?R(|hiF*00cYcM;- zxTx;-8k5`0f?k@={yRIGi=mx?nSpJk#~WVL=j)RDkA0u_{KxjKi}~!BuXNrwT6E%r z&0fvjBAFQxo;}fu^kbc^ZLU!retO|wl6P# zA9(k%*>TtRb{U;Vzk=pw8L!TszJA`J4yK4k#XAgqmK7JmpK!c1UHkRx&)eU3ddEAJ z@jKbErtn|lR#GlDs^7EiY})So+24Fl2Z>B(y4UeSYDcWom-H*gzdM@LztgZ^K1=9m zmsNLE>Fzs!ml`^({BrEAaP6<|ypo*ror|rP+PiY3=rw;6D4Nu=m*Lrii=F8omFAt7 zi(f6!bY|Sfjx*!t~I^tDlu*{u|0~>s~SEnZtaS#UC&2i;kQ1Zk6FmlQjjB zx?;tloqoj*{K8Ia-pc#lc=_Ou&0ns+#toj6QZ5xsKK;+o03mGy11kfAs>$=;qG-s?PsvQH#I1q*oO&Qog9hA&lFZ!H;*!MN0)!ru5CaP< bQ!^_gLx?5Y_bq-8)WhKE>gTe~DWM4fF=o&3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/green.png new file mode 100644 index 0000000000000000000000000000000000000000..9831c76ae504bacd62fc12c822f531c5dfd121e8 GIT binary patch literal 1270 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~uyFPlzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%Gqe-2^OMxK5i)TQH*=EIvlg`S7HQYjweb~m4OMaumN#`3 zwhxdpbpevn4uLX`fif;3iZ|rRctjR6Fz_7)VaDV6D^h@h>?NMQuIw)uSvV|2KTH4yF9XwZPZ!4!kK=Qva#znX z5NXRiz~LBW+SKIBIJK|nrEB!o7a7~P-o3TM}U2U1-W6c(GokWs9>` zuIrV?W4R%zkzy$!!3U)n9tSnJ2yd!s<1sn7^OohzH~JE@ISP3`irllR5fxaSoG9Am`iH~A$Kr57 zN8%%=^}MoWazBgq%p)La7=H=<$Jfmb-Tc}Sb2)*FFO=>lDr3wBJD6Sd;9{`@NQ!duto72>7)|F5{NFY#bz*ICC1_13>JpVQtP z-7J3JV*lUFCG#AY72db8dw2&;(R^sfTDCNJq_ zc*ig~W!9O=H%08XDzLPkzO?1~^|cJ|4&=7g{YYa^pS=8`)`6O(x2#y-9r$v;=03NK z`~TX#TndNu3fa>xe|GL?=@g7y%}}o1V7=jvf=%tr<>vfzcVAVK`fYij%BO$6e4n(q z@9C=>f2+$b|9rDY;$$u~! zIh*!1T~Jz}So^ou7b5$zHS_s>|LP|jJ!^$3_|RZCnWN>UO_QmvAUQh^kM zk%5tku7M#Cg&3My8Gw+sfq|8QLDl5>Z&5Vl=BH$)RpQpbeNH_Ps6hj6LrG?CYH>+o kZUI7%Nr-`km8qGPks-vA?fVwL2kK$)boFyt=akR{0AtwDi~s-t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..59aa357a3271cb5356127875d798cc94113d0b9b GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|O&>fKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXxl_n0j^rC-*gol&D-+M`p_tx?#i zn%}No(4k%2rC!*fS=6PLQlSMTQ!DjKdko8ab?c^U*G$u^o1s-RO{1t&HMv5kcDiy> znL+&w^QKuA&9e>bXKL3>*R7py)G$-8Zn{cxxl&@OdTOO+dX-92nNDVna$=ccLWySe zw02!x!}=MfjkAm!W@=VX)hy~%E9lU#n_<#8OSiN~tGG+Iq}!yj-=cbgX=T4bd9QYH z_pvSE3h^bXDHXa|wK|!#_4W1ob<=f9dJHT2jOu6T^{q8&oT(6Btdvk{P}XZuH{<{R z{}${E{D8s1SQ6wH%;50sMjD8dO-g()qMm_(yi>xdR=ZFwh_-F+o; z)j5mqbD#d@8<{T*(z=`WFW{W*(>wk4<|kbvoIPTsy+jzME*_G2)*w3YRZAeQ@K-8BgImp0x$3|JZ5reYB8Dr zVPRjUC42F*13PvGc?dmJ*7kj-5Xz{qNwXt>IdfYO`+}bgYMJYHFefhhdD=Ec;$oGGF)0X1Lk0 z?ghhjrkK44s~Wya@W<@qnsU`}JJ(O8eXK{MzWLTHeY~UpuTzJ*_zgi#~$Vi88GM@91}jE#O_?o5q;v$#dl@*>wo;nJi@0~-?niE<0t8t^A4PN zd**a|^RdS_U7v5f{NqpR=RYls^Bi*c4(SMfd!2pV*8W3&^s$cz%qFd0TqaX-e_#He z8<#B>1XT(>>)iYI-ka@8$GavAFtjYVb2Z(TrEHRk_yO4$VKT?XTzGCURQ99ml! z$MJyg*J1;%c$xPZA3mo^EwF7C^J}!e5T(EN#P^u%e^ULKbrNUpXx=?hzIC7I5x4Yo zsSEL35BS>7D%kA#I{EeeuMbNEd#}pONMksz&sDu!eR1ODE3>06dH=DmyX_HHe85at zanDIxf4Xw8LsOr2PIq864!{5l*E!$tK_0oAjM#0U}U0eU PdKf%i{an^LB{Ts5Sc?c^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..99212e8488f1857f8cadec7892cb807a1885056a GIT binary patch literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~u*IPlzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%wS14D=ymNswPKgTu2MX&_FLx4VmHJL{7gAcwQSBeIx*f$uN~Gak=hkpdKC zFY)wsWq-lQ!eJr$VFEB18JH${x;Tb-9G^RtyL^^`L|f(okEW1rwoGS@TN~qKjwxkt z+`Z*?)y@C^U4IMdJo>QBHqftcj?JE*LW>GpCRA=Y;_~9estnVE64U2y^X*8yEppS% zIiO6p+sgONwzpdzY!Xpe?rhHC!?izR%C6%LyV+C=C^^ed0dns0|Fd zwTe?-v6wRQ7-=uK|F+bBPhI_iU1y|!9Bxnwx>aH-aJBiCwiM@|hc6?iw=)ZVFz7j_ z%&}mT0*g2|Q%2+7MH3a|diCv84E=@pYI?RZWQH+qTBP`3`r_5EXP?|qZfm(;ves)V z!&@OA!C7Gr@kbPGV$bCnD^|={RxSKT_rYg_bC%y*KRl}VV5yVMuvpO6fbpBaT(f7NR1?>iD{8YmZaRK2(%jR3%Yw_5X4@9d`}g8$r$~$l z=WZE+rmXofa}_sCUbB{IuEHZH4o=;wSIIqD^IKo<+xu4J1&ihElaXo(&;R&cXFVvr zp_t3caY9O`%<)8vdfw}-cW$)%eK>H;NU~V(#*ujOC)KQ02bCUe?iP={QzyUatJ0>! zLKVe!yU(Xgnj5##)#Ur41t+*PRnw0qa$ZSOa*_XC&7R{^P!sc)`|oCl#};~XcHa6_ z&vd#mO?J`(n>nY7TQ8-u@A~lP`#-sZS4^%xWLP1bQ2&3I{fedsj&KHVAu^2|J_<`!|Z(r3wZ% zONO^8Mzkvjw@CRliugB)2DeBDG>O}%3)!X$IAw}DXNlXV3E8Cz*rf3LHVC!r>ISt) zg|x_owJC(O%K9`2dX$N{l>p6=a4QiAYL*OXl?iQ?^Qn~ZDi`&slnkm>46RcQs#Wr@ zmhq|(JGLdQnbrPR#3cp_! z&=&ciW~u-G{~vqPa0(bSj3q&S!3+-1Zlr-YN#5=*F|TegOb2o}3p^r=85sBugD~Uq z{1qucLG}_)Usv`Qj4T`$q8}yz!=Hg^qo<2wh{y4{Q@N{W8HluH9`I-ix!81J8CR4w z>-B4X8+C(nv$x+YjV{kD|NZ}evgd}5qqo1YexBn#@AIdpDl#p)3`f?kbYa-GBx2?k zg_ghxQw4=mB$*>U7#9Uh+AwL_oT*cJ<}PDc@ZjiSogl$ADt-+r6)WTJ~YGHgCS#*ME9|uPI21PysWF@%*#$KYh&!n*dxX8dC40e zP4;O!cTZRUZ9P@%=JvU>oOuoO87_D(VzY3Vr}=b2-35!9t2sO8T`%LTy!(jZfGP8W znL!LiB?UD}WoHg~E>D}c@1+q#1nUdN3*D}dyKXDRU4B1*Zn)NwcX4Y0|<*zoRG4EN(9HF+Mgt42&N^#GYpLz*l$B*c#bpH?%$STM`lC=oDvaLTJ!tc-QS$m zoIhm{<2c74bM1}fn|7J7@c*HQiR{Wyk>CJej(fN?U zm&1uK?o3x;={y~D_4x6r4DS?XeEIuN*tVrvUi>q|+lg6Eg?2En{dwh!^txPW`{>UM zN^6A61Lm64tarQ<@IK;mLxOID^#+;k^%YO!=l?azf7ZPs|JeZpkN@9Ke0SS@T==wM zS6`W})bIMX+}b@enagGfJj$)lJ>JJsXtTh$VvlKuWE^FL`h0wNvc(HQ7VvPFfuSQ z(KRpxq7XwfD+3VHHZZUxX-Bv0ySvBZ79jiO)V}-%q>9Z gF$poSurf8XGBSi%vVGs;_dq=ip00i_>zopr0P}YA%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..b52449b453ee31f21787d45c6366807f32549fa3 GIT binary patch literal 1274 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~uO3Plzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%wR@a`e(tRO6GCW9xM)+I4lC zjcZy=Yg;YqTFh!owSiXWwwl*f=ogjg7L@4}R2mf3n3vUARg~)$9NQ9}tDl~umtJ3A z-)dG@ZBp87T2oKiEp+dZWs(dpM7OXg zD1Ym3ny~S7icW{6K}+wZRjVd-X<0=uJ&0ioh;W*gEUUerc{HqG%C&}6<}FK^UnE7yACPLhZnuZ?h@L{+@jH4? zx_<~d_;|=#tZ)=^dUU8^KmVh7HZp0|`_D0|_AbfZTD#eKwfg*gL-r0PXAAZ<#RboO zZU`2|Y%cu&;YWeRQ~iZI*cZ-W{KWp!Gg-OZ==a~`^_7KJv%l@pkN>V`%U6;1D0{** z&&T^W7)lBI#4G*&vMl$$@b1@-!yZR}{k>3=Vd|;PTfF|f^!Jkpl%E{Vw!wt=$+`*O z1tvlK>{e_0_-&h*f=tWh7PaIujAS0WU(^~3kvPhS5otoyrbE_2-s6W=X=dpW&j-@HqUUs%t^@p9L}s&xzg$U9uT z8L+Kzg4yyd>lIA6BTmfwFPG22lRDF!UG1J?+Y9}_3Q2M^L^j6(Q>UvobP-Sh9WJ;`cy344$rjF6*2UngC6$=w1K- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..4335d8218a04fb578ccedf3ec414417ce0ba4164 GIT binary patch literal 1310 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRYfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMalWcpqi+%?S|e^bng9AUexeXoeTx zbPw(so;X1f-3^~R)z@8_7h$a$UD=U zztxF~ zdwBp)yRPnvAc0k3VynW%S4B##ijY_y05pwnx+l-d5aE@fBC8@KXZwrH@)4NrFFH3= zW?s0$yinOWffC2Igg4o7HQI5tI`emVir3fIH`((n59FKUFR~&;cy5ryiZJm*(L9Z| zoO1%jXZs1w_7`3eD*FHbe=jZtZD7zamIV0)GdMiEkp|)lBSEK+1*-JcqUD;nSvT#_4ewY9Ze+H&?o-U3d9>?cS<*uG(Akvn3z@sT- zHB(luq0>rPtDNksi?SE)ioSk&-QBnU|M#mNRN~9OEq5~ft$`}O7(}Wmr zOiW6>)Fj~M80O|NA(baZk+s9g^N?3mQCOH!$t=c(Nr$}|l$QPXkXXGt& zhI;CAFUuS2gxDn;Lne zMKd;jZ@e$e-dyqix+O>RGXE`XD@*VEIeGR-GDBPf$Mc3#zLI3G{s|l7bN1DJ{&x4b zQZ?sKTaKd=6Kp)Tck~@O`KO>fZomEeZ||zVwzoSyoWdx#@`hAPs?(cvbN9#7#P99+ zb^Nveujl$!it{f2nf1Tygsjc8qW(i#8<*dg+V)z=ct*^tSYE{mJ94f$zwn$C#pEcj)8`_t1EqMf>J5AO7%X;`_K??8}d? z%$@RP{{BCnKde=LrC77SF;F~m``@varF>=OkJn$YXWk*=y3}@h@IQV9%@U8>79F#K zuY?=SV>MZFzP`_#fo;)=Sfguou7@AobfRMINoHS6G7^>bP0l+XkKkUaQg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..abe4f53a800a42778feddf68e34222792157ce01 GIT binary patch literal 1249 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP~t;?Plzj!-fm}SYHB*q z)KpDPEhHp_iK}<|cTU$FJA)%HcnJtBKr zSmyNbteMfdGa_?Z{o`ju<+KJQ%!GI_AnK5}SesRka%bI**R-{y{ z%&1wJS-T>&a(Pl&vtL|$P-2UJe6w$CM@UMecXYe1?y|(v6=_u~GpbjnRV|AznI4ff zEj(*_WcG^Wik0crvtsgRM&-_k%AFOHHz%ohZc6E#q>^J>!W+G!8@!@ALsL6LQtIpL zSEg4rddJL;&7YG{v^=%)KweveXVmhPivR!r3;!y41@tpxNswPKgTu2MX&_FLx4Vmf zUYesPki%Kv5n0T@z;_sg8IR|$NC676mw5WRvcF(t;jj?>Faa2_3`{dTT^vI^j?bOS z9e&F|qAfehX>yRhu9=tTYE`|tiyA~-T653&mKXm1Z=W6?q?7t|o2{m;<(DT9&rUay zu;!R)ZS2!hwx%gcw5Rai%G)gx+k7YHhOks#-?Sq5=(^i}ym`iqMN%c52bO&3bzQle zdk41zQ~2=}x3}fq*z$0JD$`TeMpoueA6?AL)3jA13|XJ*PCc}#BhNLni^Wp3apkfE zC*CzrpKvx@Woq3jH21)a%~g^wrI)aA2V6FHTIm-cbU{V!?DOvD$g#0E)}QFJ z>GH_CeAOX@f7SVwDi(RIZ<*y}kEz>q-Oy}i(BgI~*sRbXcB5E}b5fs0wff|cQx;GE z)GlK6FczO+Da!c1Blu68O1v48ss~^tAQiYyR$Hahj9zafSW2C3mcM?|$yJfV<~o%m%%K&GwDDPvomFe>i;H|E%U0m*yuS)mbkSnxODW2B$M^YD9sC;c{?Sz6KZ~6 zIU+H2UFYk4`__rRV9}8{;V8EJF6%^+S720sH0?hr$dJo#*==))Cq7D${aX zHDGq9K<%4+nGGff-{pPO|8kzG_wkN`XIZEJbLz0q+Unc%r{L6iQLl8_7l+>O|7y-r zwQMCHyTe=o+h6P#*kcT{pQwY9t!jyDL`h0wNvc(HQ7VvPFfuSQ(KRpxq7XwfD+3VH zHZZUxX-Bv0ySvBZ79jiO)V}-%q>9ZF$poSurf8XGBSi% UvVGs;_dq=ip00i_>zopr00yt~p8x;= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..73d57315bb5fcd085f074729e927b8d920802ffe GIT binary patch literal 1296 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|O&RfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMWtJ6SI})1SscwC?*Fe<@?I#dP!$_ zNM?FUW%O>_%)r2R7=#&*=dVZs3bL1Y`ns~eU}WL2 z5dAO#7~l*{>pfi@Lp+Ypo!TEg%R%D!%L9|GmxS;LvvaKMy%6fxdZ{&SYu43mx4!-V zuUY-x;K-kywfyfZ-gOAy_6LRK83|@YY13RIygWzUDPP9SWyKP99=X;8X3? z>YlWD)1<~sE(fnZJ;n}^e-kxA%N<|MIna12HzhSvEM->k1tEsVOb$&g7V|$W^vl#_ z*PeD@$I2iNp@+(vzK;~HF*&4o3oK;2RCJWjVKt-AC9gvELq4mwPu$m;lE7?Kqco+6 zU6Vnjvs2;TY4NV8m0Q+}m*noR30T;1#3YW_r81~&87sTn)(;C4qJEd1-6He-0xRp>=a=!Fmzuwu zr{Nl76~|X0$DHrFmp?as_;YBR@ABJsUp%l~U|aBN-TUde(W}3=$FJGJHlg>$G`@nH z$Cv6|tErKExbSd!<0h+RWs0#!zBjCBa+i9SWl>bPxkvV!-G}O=_0!+{wPJs~LTp=m zSV$&owR^bme8!4K!+DI?EO%Vvv2dCdxaRJiy1jd~H%*^#|8Rs4!^`Fp|AZxe&ki5n z{wi|$#m2ccHD{i$=J~*qlr1o=bHn^->-`zO7Hj+0%SHVSow zay;PUxz69e?%3qdyPIGCRC;yW@&a4k4{M%18v=Bt-Z>O&PcAU}XPotV@>`h=hg~@G ze@hEbv$}EDcc0ULo(Dl9qE&j!|HwN8C3xJn=$IXRCtPDLo4}#Z_aE^#%+uKPj3G&O zk^6t9iz`z9R@eUo77`4qC9V-ADTyViR>?)FK#IZ0z{o_`zz~Q+49%cptHiB=`FVdQ&MBb@0L|O-+X`Z_A|>5Gamuz94S53q7RPE-T0)hCBUCaG53SwbPKak#R9qAQtp{lD4GZR*MvXQOfb9|h9Hjuf zBT9~O0Jh2ic&-OPQ3C+m`gLc*Dga2xhV?o%G0+hiDVNLZ<#LHcqSNWTX|%wg5WWy$ zu~>nDfqK0j!?3-uz$u2a#mJ`!oFzugLV*$D8aS*BF54{RXFwbiA4=tMGhu;=&r9V& zSt29{^(}w}`FyAV5$5x_Mjkf>;#dT{Bo3=k1l#?kc%Z-4SClW{S%iEmDo*CIEwCVo z&D_X`HVOHu5I32_-i*LWY?hA2$m4O!gMzGLkqs4N%Oo~G-#mz8pyx)|9kLP|>ubebFA9HOPw$ryV>dl_q5 za|3lvGOO<407W z`dih7CZyEn{EDe|nmtV-^1ijPYjTsZ^kh2@c{nyH=|Ftct)b@J(GAx$k}F4U-Z{Jc zX5-=AUZDFpsE~Bcdc(ucYD{MK`l2qN4E5iE9*^aB-3F?5&w~TX+NL4WeH>JUB|Z3D z*8j$$>d|628QY;p>mb~YHjz`%&imm z1KI~H^tAo1NiF#<4d7okl6;&ow^ue!Iv)-`s^8LLgvYvt6mVv#lIu^VP8a$39N2$a zT3$JM?5BvVMIe(@3&QAqL(@SowizZaT1JLGa@9=y;si=Rev}Xj}cV^Yxlm33nV?3WCe_hrywV?Aj$++>2)s z(Kl$8^$Y7SKTcveI~7gky;W%30xKn05?-M(xjM|$sOQh~hR4R%gQDKPG{eNL>6y;e z!QG^%zW49?St%!Gel6=N;*VX0D0)Nv`91aV*A!PH`*?L@js`pFLDb{7X|9xnsrQ4? zB^UR-%kWv`n>|-ho?bkmoN`6qlDpd|2@J!|?`z1P)iBCB<}P^A19~AsieNyjI$m{VjehrEDzM&G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/white.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e6ca9f2048df5331053ebeae10965a8037033e GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP@+1(C&U#UtfRf)T#gf|1$*q?gLuSSQ6wH%;50sMjD8d<>&pIuk%hxT^uq+89~qb&JY5_^JdV$u+Bj{MfodEn&vcBWe4M@ zF;A0ISL?(dy1*2%FHE0dWmEi)prdRdHk>jdDalh)BPXpaJr~C?ft!Jkd)C)UQ5P?< z@u~GS+;P;fn0{r~g%UogUItA$#a4+A*Ry0AmN9DBX%6~w7YQHa%6HwO^x(V0 z`%Amty{kLt_{Hjxp-;~*iLLGotPve@2G0*{(M;L0@6XORymc*K{5rNU^9a9;c9Kqc z_A_c~`>PPyRiB=x@75J8V16h$DSXn8hyv-4-_D$5-Ta+xvPb-ue3?7fUPl|L-uZhw z(#r-IHa8bUuTh-fStE48;(+YIrtR0~3gley4ZQPyGec1VubRBW9n(KdcN{mnE3j{| zb9%PxvwnmBy-t}I?aaY9(;I5JGh`z8%1sl;^BhVix_8Z+L#;hdSS^M^~BQ;SOya|;l9OhODStW3?Uj0_-_ U2%cOK4b;Qn>FVdQ&MBb@0C|I>Q2+n{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..76063ffd09f2599f7f96e81cdc881c78416c5847 GIT binary patch literal 1301 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRAfKP}kP{DRPJ5y8B zd8VdnYHA@NAza+t+PeBOatdN%V%pl;2?+^BMMXDP%fH;AxS&y~w@6_@qvE`Jxw*Ac zbE?JX)JV>&lbu^5Ik!%_Gf!%Mz1+MynXWwP`3;H-npDUfU%wDGaH^|R#P*~WkzNl4uQH#cc zCgpkcvd6ZBw`Pj;6)W}@E7sT7uj^G^(4erkOJRP!?ED6~Ma?Q}yOod6m1)ToY0DB@ z(5SqiL4Iww;{X5uO@t0U1O^IYNswPKgTu2MX&_FLx4TOe^X{dKfE>;OkH}&M2EM}} z%y>M1MG8=my~NYkmHh=H3x|d1hY7%tXJA_G>EamTaeVGn?&?_vB5j!mJesy`<5;nU zcgn32k!#n&j)t8s5x>3m-L1R-{>w)S={)+dt@fbJ^NG**)L3$|XL2)CW@||{=&FV) z>T@ItiG;SOgdTO6TGXHtBC_V`QnApr2bO6vWT@@|#`(AYrozhED{a)DEzrpk2@RbZ z5_9PQ6T@?(hC@P=YE;}Ry-r(1Y+^Zgc8XKr1c}VdAok88hMD?~X{G^U+Jy(U$Q)Rz zGqphB?3NnokDCJ;a~&LgIFcVKFei8xX^FiLDf|8<>#9My@97m+r6m@$sI6k$;GuPH zN^!z_d6{=Y#|!#99#v?~FNS-TN#X|UlhedEx&D!MkT%$s5Z!*Ic?+BDKf8|V zqUDp{{ncVOwC%c6SAK!x@7&Ab&W9Km9S}Ijuv%uuw6lE^Qs48sufM;i*8G|N!X4}j z=P+$ze<`!)u z+?1X0Z2EfZ`+VP77KBtynbv9l_ui+P`>G`(v!2(sI6V7Q!Jnw^8ObHUSK`EOvh1Tn z{R$@zqv^4F_O@$TIN0x5d|KQoJ?HEG`{$UY{C%{iE6AAq>3o0rKw*#k-Aaau*E}sG z`c}#Z2?cCUJO2=Q0jzkXIDc=oJJ1Y2j-M0q!M@#NdaCF?(GOC8;x zd|f8@S%bVWUlxR&aC;qq5dN>(j#jVMV;EJ?LWE=mPb3`Pb9nO2Eg1NS-gK%fQ!PC{xWt~$(69Bsa0CoTX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/electric_furnace_offline_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..8e877c6fe4d9d6790557a2cb69d3e5bf850dfbc6 GIT binary patch literal 2234 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 B{}BKH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/green.png new file mode 100644 index 0000000000000000000000000000000000000000..c14d59e39e0b4cf59327daae7d7a8b146791afd7 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4Vr+bX}vzqXOQD(j=lEFFBVq#(zu2MFh@>cFL<}Q*( z4kE^mqDJ;2X3i1@wnBeqH5u9o>)Q&NyGofjiWLnrWxFK6y9V&N`o=O<(DCu`;=>=+<#;v{0@BW2?yW9}+$ z>?o{j&Hw-Z|C1XxbOAldSQ6wH%;50sMjD8d?NMQuIw)uSvV|sAODdFV_;y`_H=O!@i?A4g*SPYhd|rLoBT}N6{$Z9c-ibH z#jLkoZ>Sz-l5qCvt$+XRuiT6cD5;z*Fr~dbExqiTRLzTwf@0?VpNs;UqF-}0=&$wW zwK|fJFf;3n)M+^e#U4(zAc^D_jiuXo#b1B>7RKE7+UVKOeaC0Kw(7XWcw(74`cByimGf=90%nb>eOx>L&FtWK6GI)qHr;jN?k&n|%z}XEG#h>~J}? zS;bS*$#!Z=t}5p{R+(pWSQL2};+b}cHz--YIwX_C;KFpt_5a~ohHS=b{4XB(YHbSm zqSemb;IQXDu9AdhORc6qqyGZ?r4O{;Pi;3QzS$t7)ai84V;qVJ*m8*b1BE1$A0^Zi!UqvcB9U&++|-dGo$+ z=Vz^yoAX~_O|DZ4Z^G09{mF0a&TsUJWenSVX0?haqkfd|*;Oi61y1_%dbUaOw@dbK z-f-7Z!(zX@!mcwxg3BKle(|5J!kZ((W*KmTPve(`Nc{Zp)zeFEG8AYi-QqadUhiD% zvHW$JT}}y`!egb!v-59+@%mFl-n8osTg_+M?LBt;t=Kn3^P-CCtINYf#oD*)Pc+~TeQ`N^dtL3_{2wUO_QmvAUQh^kMk%5tku7M#Cg&3My8Gw+sfq|8QLDl5>Z&5Vl=BH$) zRpQpbeNH_Ps6hj6LrG?CYH>+oZUI7%Nr-`km8qGPp)tggb?dgO0`)L>y85}Sb4q9e E0L(iNcmMzZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7f5442407a79ba716232ff5a72520f74917bbf GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4Vr_sz^&uYRCMwyu{J7u-$rkI$Rc6Nh)ev58yqh?l} zYFf2gdbLVwl}2Wra&pC=Sxw3*l}gDKT3Pk#=`}?~MfLUd$F_uvaBy03^SFr!Cy9zy zii;Hr3TX(77%M47@bhcsx2oqfY3H}<7Pf0-)av9kDy7#cXVj@=)+;8J8`nFdh=f{}&8g7@(snJ@+hW^GRw#}JR>xl?$PXL$&;ZM@0P#9fj4vw)Y) zep1YO+x3R(VI~P@pWgcS-~P(Y*npDC$pTZ_%hS@!u1VFr$S5dg-v7xcpegz_SA+gq zZ(ge-2?;Z^&Pbh>V^HkjR116MXG6mu%KFc%&@7_>y%*sXDrPbhe>D@Y8-&d`6QR|wNW(eP(tQmQ&#A^0A zaen@O{>?vgtmZ07Shmz^`ZM}3uwVK>>;2Sb76By|&GwgXg!k}A>7?~CPjnFe>>2Gb zeK~jgwvP!0lPzs*^qy^A$NbJh!cyS;=MyIxb;RZ?H2+M}3s+Qic92yQR?2Sr_iN4R zUr+O|cx;o{w=qRRWP*X@J=ee~Dc+OH8#5Q&5|aQIr$vlf0#G# z`*wcTO1U}z1=i#`rSK+9EzqC*#_s$^uUN*g&1Y7th%)L&37=i1a#i4@FRy2tB!9bP z|K<&M9W^ZW%PZ_U6C}9&ap4#L*($s_5^R$UP31@P{_k3SYS$~)3AGk$zW?53^Jdkqb@Ps| zOug)#@PDty>&NfbuINAh*lS7K;j*1R@d-;G?Z0|``V{WNiRCx0mj=E$_5D*su5ljI z``@L74HmCIMdVGp&al;drrq9Sx8I6=Q#3ECsJ^;9JXEZGyZ%H2?$8&Pv$xmP-p&7U zL*wi7i1~3zpa1g@4HCtsE1rE(fP--!B>j=u4RbV)8{(RAdn`X&kJwH~Mu~}@M zz<#o3-iHb2*%Ye|%sN{sRVb%^^UAgj^OmF*&-=x=N8Z(#VOQ$6(hU(JpA1g^(ea+q zTEei=fOFD}^gt2g7B{VvyS#*KxFXKHVpTL@xX)Z6(x4Ri>5$GMMi+)du73|FGrVRn z<6H3{S8Gwg7sYn#28X3ryf)l%vU0FKu%vst`69+2&pxp2vOF>M-ctt_hp)cfyF^qI zx`M1vh}y54yu0s38utmA4+1AX%QWnZjj%`-UBs>A{Nim@&i+|yKMzUhhB*qJ>3rQW zg(rDujPCW>Z@<;dUe;2q=13>4eY!V3)Buax0$; zL+%;=RK*y(cQU(8P0z!%l__|pI zO&!;-)Ox*M{EF8WiG7AH5>Eu}XDxFSaJkv{ggGJ6gXww2h4(S{x188>`9@CF+mxne zbE`dnKY#qDsDFO%ZTY6Hx*aPR*9g6HopkuQ<+PRF2QsGroUlaYfot-@h?z@dls2wZ z^t6Bc&*X99vvO;W%I)86UCJZpw0x|Qd$U_*W%?n5jz*_t?iXL1a5n2$AK5L|;4FAC zjKl8Fx2uY>^1FW;T;y%&>F#-dTI5lP>;?O2Mz0sy&3(No>r^1a%;~2;mSnB+jy3a@ zJd=EQ$@c><{R2&}|5}}~?t1pLBeR@$-9E}5ktvk=Q1Mykvw(O%-(Zo_ud%U;k?WZ6 zFHbIPv^f4M>TP*HgX#B~R(qdiYJF3@Ui8Ci_2t!Tx=vqTuW*q&bj9V>cJt0Jx1FE8 z)X%xJO7-{t%PI`)S9Me`u1Q|#w|<#L=uUvobV>Sh8;2R#l)L22WQ%mvv4FO#qP9 B7Q+Al literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..eabe46a54a05a6079f11d205aa693b724c39d6c9 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4VXWV>|XEosmqs-FQiskJT7ZVe6&zJBnmh~u*a?KTY z%o1|S5_ZTGa>*65OBeVvtI0k?&@PSNEl=DzTcoI{sJ_1b*p_e+4o*vM9ybx;BvH{y zaj`-{Aq`;>Vy|2oNlIw|)u!N3L?=X@dG8gcJ3DYrrq zr#wNMRNnvp|JUiZ?*w|1u_VYZn8D%MjWiG^$=lt&U#=yX=?djqe;&D883UBf(4}rFgH~E>kD^hF-cUWvB;oASTmSysU%43@P*OQrU`l&=T6)@n;-bU89ou@PJWgg&HU}=!ScxyG(VPHVXs&`!#&AH%;wo* zzYgICJ;(m&J+u+Md7*T}%q5SD>crhX)J^JP$e3Qas`>Dw8ON2lH~Sc{&typ2*x_<& zvx=vrlkL=$Tvg6@tTNB$uqg5{#53&>Z&0#)bx0;J>G4B3p=_+LEm)!G#B zMXQ~=!C~nauMM}H)EuG@ESvnhI*H-On*x3->lIVuo;avDob~O#B_f(|I;i@@bo+hN zf6sf9#=JtNK>WmKnTFuq8%mB@xk$UT8r&|uTW9P0s?{!PU6axb;ro*{Bd?WM%|0j2 z&)?6#`Dc#RTqOz1mRe1JM*ju&OCM;xpW4hKpv0ot{_>6R9{wnuv|i?k4#J;3qdlfC z=WgHjF~MN6rHzf=v(4+6-&sgl3Y`CZ;v}Pv*nEZNpGkV*imJ{IvTDLg*-ig`tvUVc zY5ok@)%HtEZRTWGK*3y2Wv@z23Rj zWBKbcyPOg>g~v*dXXoDz)jB0+VH>uo{Ak|)U8_&+dc``S)?&@~-@9zytlG71-tm>G zm%S7I@6~wy_}$tS{l_1BEonPkw$mp*Vd!hJZg{Koatz&EG9e~QR8&SQH2 zyR@*u;`OJ9ylK}Nwwlkh+k5QxTd{A7=0z3NSC@x}inVXopJ>1x`r>l-_PW};`9E%G ze0?4e}2Kn=Dcasa<1*Vusl5W&FNRmJ9^8+-~aluYSpe)^XvEiVM{%l68LhF zuo*BXsg}4#l%yncp ztHiB=`(*^m1?pk&boFyt=akR{ E0MJ|+=>Px# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..4676a16cf58069431368083c6bfab3d0b62412ab GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4V=RDIX&uYRCMwzX#TDZe*t(cfto^EE5VNQX5R<3q> zrh0OgMoNZSQjT_7x@zK|SxxC`Nogtxc{&-{nyE!aMfLUd$F_uvaBy03^SFr!Cy9zy zii;Hr3TX(77%M47@beex

OS7VGAg=;vi?rRM8pW~-#;sHWzqrKKvzH<(sd=@nP& zmlSGem+0l@Yi3sH6jtgM)fkl48&{NT6_jfi)*6=88I_l5=GU84=4oV9>z9@qE%|G#6x_duX08B2ovf*Bm1-ADs*lDyqryySSc9s_bX3p^r=85sEXgD|57 zYp@DXkiEpy*OmPRBMXNG@8dr*VGIn++MX_sAs)wbr|>4v@(^g-c$1%ryCU^x0WX{V zq?q-#>kZYzOcKsMz4h68x$pRl*H#_37*8xyXMeM^ zZ#m=nLR%kZ)vUWG)+nfbyZM3to8c2d?&N35(ahg&9xR_cLGxqD750k7Gu)GG#B81| z_UjOS&~xmM-a{MFn-@wq%v|!gs7~DNL*1kvhK%WztC|l_nsHo-d$W%L`%H$UjU6th zHmi6_I@wN5$yMci$13w|4vQiWLp;+C@dhQ!SBGSh7+jbxx&A*~%aF}@jsL|1U#(36 zU$ok}8yuE?@!D|9NzEbpz_Q7|tCJXhyeZ(fvR*MY?umnn!&%?%TOy(fr-Q0bOt;@R z{r9{#Y0N8R3dB!*mT3syy`kiom5a1XtHJHkyLGm{uUhS*)-@^35WYWIGxA!A)$DWP z{QUj=n}6n5%~g`HY^l}sXY^lSzx09D`>D+=0!l2J?JwU5@8OTqN$X{v=pg*rGumVN za_;tR9}^5FTiV#@J=?sF`JIJ?rNH^mCr&czh|O1M{+Xl~uBhtlAgd;02*P7G6 zp5|Zi*e0=WV~T{x1Ov%?u7OihyeE}6bS~wX^Vn~Haq(rP-%hogB~2!C@;Sc$FmK-X z?fk5ja&!I*tjTps;Z2xYpg;MI-T94Pv5aAx&#YDvWz>%nKD$cgs=!HKUe7j3{&va! z%^U7IYFO--SJ-tXNO1Y%!Y}@_Rd{nG*enB1@M-+A5Q(23zIuAeO@;yurCS^a+v}Zc zJ(j;Nv&$)AQ+TZOcy|8nP_0v97PeuV%8%y#-?jSGu2-xRYAx1$|GmrR&8l7N<{e*| zdf7YS|6YyPkKe6b(SQ80*OIowWjlT16P7;OfA#wGDcpw>%WqsS4SaLz`=^Lp<2M5zZLtYXkJuNeRX+ws95`U{fP$Lp)W3HZ?CJpoB!j6 z#@FW&^W%~}|K}HMY|fiDE$7;<3(Lb}-<*E6yrZ{F{Qa*lt5)q=HNSrEAGXw^DSxX-DBvbF}?hLX(O)Z&uF+yaCilMn+7D^oKoLt}^~>(*^m1?pk&boFyt=akR{ E0AO+@v;Y7A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..4024a41b37a8e8b16100465fc584199b4174ca6a GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4V=Y=HRXEosmqs$&<^L;Mn7ZVff^AwrrE79*Q*5e`6 z>B86P!r$S{+v6_S=E(DBR#UqZPpboWuZM7#t3XjvQGI>=u`S^u9GsTiJZ>VwNur{a z;$nq@LK?y%#!5;N{QQ%>geH3MPw^I><}1?eCfM&K+Uv~K>%!IN!rf}mwIozxo}a*c zf5FLKf>V7&Cb;v>_2rxA$GY;T@9KD-NqL>2{$&i3M25-L8yjdwwS&@?~M zNuC1zt~@RFod5s-XU@~A2YQmRB*-tA!Qt7BG!Q4r+ug-Wj%VvJAcwQSBeIx*fp0$u zGg`0)s{jSrOFVsD*EamTaXfblZ}Kb;fwqk|`I)#YQhyfk zve{3HS#P`EP(92f;q22}|Nh%wxfvT!QaM>*N_%-)df7Fpnim-b#mxIZ83i;&zvgPt zU+c|lbtEBSX4V<0({c=oJ)CMm63HzZOSkcgzy9_ujJfZ%(X*fXj?Z{))p3jQ#4>gE zH#_^5GoCNB^)H{C69~h#N9sBP3mFDm|nT6`S7F}$CbD@`xvm#WJucB z;c{xTil?NL?bMW9RnB*;GSB9)DDp7GGwl#>P_le=NG6HFh3S&(|HHKm*^JltUp(;D z+7$3btDU>SVd)pI4Y!=s9HI{_oBX>viQ&ha0)8v&6;tD$IH)+B_3geTBAReIsQSco z`+d`Y&wG=`yh5fx{KRLOhTz>BN{(5%NV~Ke+%COaXY2c_)h=pXlhO>~`;#>zua#KM zJ}1u4-_O7KXO7ieB?-%xT1|gO{{{9-A85Uw+RP%L#G={$@{RBw{wSTaUgn7o!k;~( zJ*F?`Zr}DX!Ckmp?B2;y+u3H%EfaGT;QC#xDzz`1#?hr7)HuuTP)CeK@iF#`V&`H>bXTipVw2 zV|xF)w6MYA^{0ruY1bLHn$NV`d+hdGv2TjzMHSUomxqUnwQtv-Xuuu%;&S%(y4t(> zKW=DzeI7ACF6r}se!<4(ylK;NuI;+8JUsTz=~v4;ddtM$|N63O)vi_Z>-YX)OFfzr z_;Qi3889cQmbgZgq$HN4S|t~y0x1R~10xe%14AGRF*LI>03mGy11kfAs>$=;qG-s? zPsvQH#I1q*oO&Qog9hA&lFZ!H;*!MN0)!ru5CaPS6G7^>bP0 Hl+XkK&Qu>V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..1311459e39da72d4de62b78db8030ec10017591f GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4V=ee>8&uYRCMwvZmnESDFg_xLFZ)nxn8nFub7KqU z#T8Bp&zKUK-5-)RCpvFVO#b}%qD4uivm$e6N98U^C|;OYGBYA)QF2*daO(WHqN&k2 z6T{N`f>N5jWB&jDAN@3L0nn3-B|(0{3=Yq3q=7g|-tI15ay(m)0Xdun9+AZi41D`R zn9+hYSOqA^UgGKN%Kn0pg~NjP@gJEm1_owrPZ!4!kK?&hc#~&&2()dy$fQ`*bZ(#x(%)x5|kC}!UO$ta*H`ZZUB z{#tKdt0M^sGqcV}ot9%z?BP@kl1OgRSh|f@{PnkQVa$E6jh_A7cYMZctBzZYCzh$R zzuDQhobi02tq-$m*4-0p6x6=m{J{Us@QEOI^0VY<=5IF-mQS9b`LW~*d&S}z?nyRc zHqRFObqGJ`Irc~Ip^fOx3#A)oE_qy3C+_y4Zc-0J#`MZn&4(w=IIhIK*~fr=CPUK3 z4wqA#RXin~Y^SE=s&c+#m3cOYMUjUgo@s}8gOcT|Lo!JWE=-qP{~xYp$Y#98|KfqK z)~0|jTJ78o4okmyZMfy6<`8{g+2r5VNen;U6!2SFub3M5#6iX3tZ(-%5z&OxLDeUw z+wYtHd)}Kg<`psp;wL`KGz9P7P;$)5McSp+;CAWVI$PgYt#(oCnv`Y;-=C}*d9B21 z_BnBW{(k<=KXa_+DoI$j)N1-O`Y*6w`atXb)Mgd|B^J&0mv4mk@JH#S^)gR%5dQ2L z?J<2hcl)-F2?mobZEW#<0z2R;!3I>PHEmU8QnW;G{3FXPYE{ zyJY|74R;+iEcVMQ>^c)9xcqV97ysERyg3qVmH{XDG=5o##Lo|3J-y^6LxG0UEslfj z_0F{(%U_q-<&>}~JXU%%Q$((D z9@G2ZrG*U^uRlfPO}oyp)qJMi-eb4lihWZwFRG}%x;#8otbM!wL<8>77nifQ*VW$5 z|8Ya(>+^{DaY>*5^9wdM=S`cIb8Xj!<>9e!PQO~-(OV||{@0gPt9GrLU%&ScTk6r2 zz?X}J&44*cwZt`|BqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t?R85}$7DYpD zeoAIqC2kGe=hOp%8Z_WGlw{_n7MCRE79jMPgcw*@nVMM{8bd5uw{EK{P!EHrtDnm{ Hr-UW|a)vX> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..bbcd7a84c73378c1cf02e575120d7910989e48c4 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4VXOcqyvzqXOQD)i7bBa}$i;0PODx~_VWO^&6d&s4@ zNF}&PCpt^UyUQj!ipTw#)#M}*=O7mAA)o3hlUP(#R9|0zY)iNZ2d5=BkDG{alBj5< zxLBc}kcO~`v64~*Kfjk;hKEd=w|u6rVz!%1l9ytdvsj{wc#?}mvb|VLs9KqyT)w}2 zftPHCk3yEabgHjRo}X-9pkh&oN{P2rj*oP1kWz85a?NMQuIw)uSvV|sAODdFV_;y`_H=O!@i?A4g*SPYhd|rLoBT}N6{$Z9c-ibH z#jLkoZ>Sz-l5qCvt$+XRuiT6cD5;z*Fr~dbExqiTRLzTwf@0?VpNs;UqF-}0=&$wW zwK|fJFf;3n)M+^e#U4(zAc^D_jiuXo#b1B>7RKE7+UVKOeaC0Kw(7XWcw(74`cByimGf=90%nb>eOx>L&FtWK6GI)qHr;jN?k&n|%z}XEG#h>~J}? zS;bS*$#!Z=t}5p{R+(pWSQL2};+b}cHz--YIwX_C;KFpt_5a~ohHS=b{4XB(YHbSm zqSemb;IQXDu9AdhORc6qqyGZ?r4O{;Pi;3QzS$t7)ai84V;qVJ*m8*b1BE1$A0^Zi!UqvcB9U&++|-dGo$+ z=Vz^yoAX~_O|DZ4Z^G09{mF0a&TsUJWenSVX0?haqkfd|*;Oi61y1_%dbUaOw@dbK z-f-7Z!(zX@!mcwxg3BKle(|5J!kZ((W*KmTPve(`Nc{Zp)zeFEG8AYi-QqadUhiD% zvHW$JT}}y`!egb!v-59+@%mFl-n8osTg_+M?LBt;t=Kn3^P-CCtINYf#oD*)Pc+~TeQ`N^dtL3_{2wUO_QmvAUQh^kMk%5tku7M#Cg&3My8Gw+sfq|8QLDl5>Z&5Vl=BH$) zRpQpbeNH_Ps6hj6LrG?CYH>+oZUI7%Nr-`km8qGPp)tggb?dgO0`)L>y85}Sb4q9e E0QhGawg3PC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/red.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8779d1fe8ff128b68c238bd836647b5f37dc63 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4VXN$bdvzqXOQDzgA zN=igYNk&MB$H+>Di;Mo5)f6rv7A7VVCnp;%Em>4lR9|0zY)iNZ2d5=BkDG{alBj5< zxLBc}kcO~`v64~*KYyZ}OuV#YlDurPf_$`$RJ?**l$c1Am}s=PSg5FQo~m-XtW1WS zY=W$Gvb_4tfY9Ryj+T+LcEMr zjD&cIi17da|I<0&T>*NMu_VYZn8D%MjWiG^$=lt&U#=yX=?djqe;&D883UBf(4}rFgH~E>kD^hF-cUWvB;oASTmSysU%43@P*OQrU`l&=T6)@n;-bU89ou@PJWgg&HU}=!ScxyG(VPHVXs&`!#&AH%;wo* zzYgICJ;(m&J+u+Md7*T}%q5SD>crhX)J^JP$e3Qas`>Dw8ON2lH~Sc{&typ2*x_<& zvx=vrlkL=$Tvg6@tTNB$uqg5{#53&>Z&0#)bx0;J>G4B3p=_+LEm)!G#B zMXQ~=!C~nauMM}H)EuG@ESvnhI*H-On*x3->lIVuo;avDob~O#B_f(|I;i@@bo+hN zf6sf9#=JtNK>WmKnTFuq8%mB@xk$UT8r&|uTW9P0s?{!PU6axb;ro*{Bd?WM%|0j2 z&)?6#`Dc#RTqOz1mRe1JM*ju&OCM;xpW4hKpv0ot{_>6R9{wnuv|i?k4#J;3qdlfC z=WgHjF~MN6rHzf=v(4+6-&sgl3Y`CZ;v}Pv*nEZNpGkV*imJ{IvTDLg*-ig`tvUVc zY5ok@)%HtEZRTWGK*3y2Wv@z23Rj zWBKbcyPOg>g~v*dXXoDz)jB0+VH>uo{Ak|)U8_&+dc``S)?&@~-@9zytlG71-tm>G zm%S7I@6~wy_}$tS{l_1BEonPkw$mp*Vd!hJZg{Koatz&EG9e~QR8&SQH2 zyR@*u;`OJ9ylK}Nwwlkh+k5QxTd{A7=0z3NSC@x}inVXopJ>1x`r>l-_PW};`9E%G ze0?4e}2Kn=Dcasa<1*Vusl5W&FNRmJ9^8+-~aluYSpe)^XvEiVM{%l68LhF zuo*BXsg}4#l%yncp ztHiB=`(*^m1?pk&boFyt=akR{ E0J%92p#T5? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/white.png new file mode 100644 index 0000000000000000000000000000000000000000..92f201c2b33dcfcf4f97cd1e2c4aa78b4ba58b37 GIT binary patch literal 1307 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-bj;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4V=gpfppVfpPj52%k=FQ)~f5pVaCQqI`efspNQ>RXv zG^wwzufM;)x3_oV#ECsUJ%463b$53c6&2Oj*B{#wF2ccS$<5;?BAg^DS}878C@7>M zEMlyr6v59wbLPxhvu4enJ$u502~(y_>FVlQwQAMUrAuebm@#eIw8e`TFIlo=`SRr} zSFT*NXwixlD;6$XxNO<7IdkT8c6R>%|No%1lPu8Pj3q&S!3+-1Zlr-YN#5=*)|Px< za)2Dp0*}aI1_r+UAk1jN8ms~oWH0gbb!C6S$iiX4`}mJc7y|<{pQnpsh{y5VsohSC z4Fp_Y&SH0Jh!XOMe(8Pvs@)~0rKR8h+vlir2HYwLJyNt|=9v_?{4cAQU%V__^ZN7& zj=a6>40d1MnZ6QSJn{J|!)zUPh86?085xN^f{Uj7vWwaC{CPSzOX7(Lk>i5Ni4qF0 z)D`BJ@mX*+pI{0UaGRm#cBT4K;K5lIX^+LtJa;B!9!q)?ePF-kk;HjM%6iM49Zb&d zn6P=~6Uq7CroCuLuzH+%Zs(LF8MYg|MjV#@!Hn;p{}gE`n;k31G%ej`vXZFNCWf61 zNgqPI^ghKHwXhkTyyYWg!@;8Sg2mf{VITVk1qM&9Gp(#g7(3XubpLH_XSl|cBe9{| zeBle1i|rEc7?@^mvOf5XV<$r{MW*^pm@hqXNN}Ty3Ln*&*ma|F2`e50G z5%os{1>JYe;!Q|8P`f~bi(yw$;@h6LLT{DQIJd|2Kiz&eB~D_|S3Qj;yG~`!*)3W-N&O zd^aj%`giO0Z66XgTrteKcWrg*ea7!Hb0j=OT$dCxbbn=c*$}n&ds~g#6+~#SFV!s%2CDS2p^-VEZsD*N!EVqvGQ1=xZ#QvpnRpIE0pk zTD5hmUi!we@X5EjrWazz0@;EC-`rBjeB^BWqRpw!>0*k`<&SyWr{894SlE%F%u+8C zWW8i**6+ja<_t<!`=PPdzA7~QIqf?4d}-y%tP2%tw)5{X zKkwFhon0F6^=nn@RGIe6W!m4XmQRk|HT_QM3ccsM!d7Y3pUSQky2Dy`&dX6@sn+_Z zg}*rh{%gGXGHb4%x<&h)&W9gzmxsr$I{h%%!#wbm-+Hgw`uY7e&zAgB-F(?w?!TPs zpZ?6Q)TP}^r_7DpYBl|cptHiB=`(*^m1?pk&boFyt=akR{09CLhM*si- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..e967f3b7c90ddd455546c16aeae4c4ecbaa95e61 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C)3e;1l8sr2i`^{Z~|c ztgNi9tsN2)l8}&KYHF&cruP4V=e3n`&uYRCMwz|bq4?{lvY43Iq*D2*mCBRL6(*F( z_7q6=7E1NxOY|4ZbmfWtnbp*tC*GMWIsHnca{@9jq5e`mEZXP!g;UrPf zN^!A5K_Lxc5o0B#2!8(Qm9kUIrDjyg&8ku8FOr^ArZBNcbYijCq!RIt9MP2>s*9Us zmo&>wuauctEkC79a$$q?qDGmeEegxql^4_lxl+qo6_>Rs&99SK(XKM3RB}nP{Hz+q zX%*6wOC>t8MgIT)@3VbkAkdSHB|(0{3=Yq3q=7g|-tI15ay(m)0Xdun9+AZi41D`R zn9+hYSOqA^UgGKN%Kn0pg~NjP@gJEm1_owrPZ!4!kK?&hc#~&&2()dy$fQ`*bZ(#x(%)x5|kC}!UO$ta*H`ZZUB z{#tKdt0M^sGqcV}ot9%z?BP@kl1OgRSh|f@{PnkQVa$E6jh_A7cYMZctBzZYCzh$R zzuDQhobi02tq-$m*4-0p6x6=m{J{Us@QEOI^0VY<=5IF-mQS9b`LW~*d&S}z?nyRc zHqRFObqGJ`Irc~Ip^fOx3#A)oE_qy3C+_y4Zc-0J#`MZn&4(w=IIhIK*~fr=CPUK3 z4wqA#RXin~Y^SE=s&c+#m3cOYMUjUgo@s}8gOcT|Lo!JWE=-qP{~xYp$Y#98|KfqK z)~0|jTJ78o4okmyZMfy6<`8{g+2r5VNen;U6!2SFub3M5#6iX3tZ(-%5z&OxLDeUw z+wYtHd)}Kg<`psp;wL`KGz9P7P;$)5McSp+;CAWVI$PgYt#(oCnv`Y;-=C}*d9B21 z_BnBW{(k<=KXa_+DoI$j)N1-O`Y*6w`atXb)Mgd|B^J&0mv4mk@JH#S^)gR%5dQ2L z?J<2hcl)-F2?mobZEW#<0z2R;!3I>PHEmU8QnW;G{3FXPYE{ zyJY|74R;+iEcVMQ>^c)9xcqV97ysERyg3qVmH{XDG=5o##Lo|3J-y^6LxG0UEslfj z_0F{(%U_q-<&>}~JXU%%Q$((D z9@G2ZrG*U^uRlfPO}oyp)qJMi-eb4lihWZwFRG}%x;#8otbM!wL<8>77nifQ*VW$5 z|8Ya(>+^{DaY>*5^9wdM=S`cIb8Xj!<>9e!PQO~-(OV||{@0gPt9GrLU%&ScTk6r2 zz?X}J&44*cwZt`|BqgyV)hf9t6-Y4{85o)98W;jmh@qL40SIXu7+4t?R85}$7DYpD zeoAIqC2kGe=hQ)2TLW%GNoH$a)_^)Pt4`njxg HN@xNA`X?+y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0beffb71af692c645624a96094160aaccd7e75 GIT binary patch literal 2427 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.xcf b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_mask.xcf new file mode 100644 index 0000000000000000000000000000000000000000..ccc4c44429243cf722e41f2ecf913d8752b22e80 GIT binary patch literal 8284 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 HOU8cz#nN+i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/black.png new file mode 100644 index 0000000000000000000000000000000000000000..6f085ffa9dbad9f983ea2a1a14a4135d9f03490f GIT binary patch literal 1183 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C*!;@Ck7R(zDz&4n~>f z8Y^gPYlnn{BqSu5nwqMqsfme+NlD2*s|lBpQIL~Ul97>9P*9SSQ;?F95fhUT7nc+j z6_=Eh5fKslGpk8NL|j-{R9aeALPDyjsHnca{@9jqSy_2WNogS=5k*B6d3i+z1!V~d zX+c5Z|NsA2t-I+Cw41Rc$S;_|;n|He5GTpo-9=rOe}yuT!&%@FSq!DBd@k}N(3r)O<>zve&uV> z!nnn4AHFo~7oC;$;9?4cCiJ0y6UAN^7}&plSYWv*_I=!Qr|qI&KZ^LDzS1u3t89mQ_hH>mv3dmSvet3Hjojr&N~Sm~=#>a<|>> z`DMW}1+MLp20Xu)tZZJY^p2lT@enstJAbCr6+w>3%NiB=-x&|g2->67a?#L?RjT1` zh>V!qqsfP^{W$9^An49o6mY`k!mf2M9UneXbn##;t+2}sc~PsidiF=Dg-1Vl3tmca z{JpT$Yvn=x5-W!DNGwHgg5z z8KHO0Cm(*&b-cEwa02)-BB&8PVV~}^t&$FF=Eeg?lWTfYs?<6 zcy?ArSSCs&`Y7w+*zEYlhWeZL%${l`A;lG6_p4;mEM3;;KX@CGpFh2z#eDn~+nfI6 z4@Y%B*G`N(>CNzY-RtL(Kl3Jfoh&qAO;1nw_ju2x)9ZtyvXgz6Ettl-EMe=^XJ3sj zrEz(iYd^j7D4PGj+MY9wW$$9yE34N3-B82S!*4e?ZgH2QG5`MWB~_m9tqQU}JMAo~ z(*66_j=$)P*V|I7y>Bl3-O42rv^l6H?W^A0xKn2@l&s!dw%crOT#(kvWA*F*KX9|( zaV`2YDATK!xJHzuB$lLFB^RXvDF!10BNJT%Lm&zu{ zHCE8p)(!~?Nk~XAH8oXJQxg*t)7EW%Ruiso*l%PqQ(YrYTPI0FGeK1?Mo}q3NjXwM zF+xQ(MovEL&#WeSg>YHP%IVl*@}G__JxRO1yCV`OAQ{{R1<@U$ro=m*A21szhGqHuwZ=U6;R8-!1UA8#WBR=cE6oUFqCl4Tnu1iM?4-PNyoo?{SDY7q=;6lj_t;Iwj&MUNr#j(O}2@+@`?^PW37 zJr#C4xuBuu{8!!wyXWy2cidpwz%-@nr&BS*3q}L} z8BgYlhH4Z&Ph?7n)HD`eGJOK?1i1w%pTD%|GTarJmvTqsi;ue82Bwa^8HxFU%pp^6 zwKrC=*2(=?HCuLp?E=FI&v&x4l_@Um@#(Vb^h@0Sdf(qP^OuapTV}B~7R_hbx9Q1? zzmBN}UnenMWoOl@;a#yNZA#7e?_3Q6$u~4tT(qiUUDI%Iirg}{L!D0df81*pN=#-o z3EE(jaR2*9kHklgtzL?+H{48E`{C)$DPNyzzj4|c@$c~plL-$EBJJD)r=&#B>2K&= z%sFLo;Qr$3i%wRZJNKU4HCI#g#+zrd^UiPQ-(-`%oqtO4?SxQfOYh3{K7I3_dqiJv zxa|A++!D1X4(Z7exk33#TURVSY4G@=(c?m~Z`vH2Zdb6KH1l?yv+nxE?e|m?L$-Nr z?=oVNpZ4f$?)KZuZ%1$TVGnhF+W&r`rRQbm{q`Dr7%vr0{P?*4vYu!vKTm(@g;gtF z6~~Lnj;_D^ z+V1J0pcQ(hx5ZpT>!w_PHlrFVFFS{A+OscF^ZnF!^6h;3@NbUa z`eizL@AW5c;0~Q}d9~G?^Is>fUmIk9{Mi?waTlKbcS@0zo9 z_YZ^R;g`4g{{EK#U;cxl_mxG{9%cjcg=&dwL`h0wNvc(HQ7VvPFfuSQ(KRpxq7Xwf zD+3VHHZZUxX-Bv0ySvBZ79jiO)V}-%q>9ZF$poSurdW& YVhFM1>+B_yfO;4_UHx3vIVCg!0G^fqZ~y=R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1f38bc46ed04b04a6e41264ef9f5a213b608eb GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tOSDmXRui7-s9NZz?qR6tW2)+9tmJMW@1!m5tRv&3 zE#;;!=b$O^XI7J=mZZIggu8))i>_=@QBi$;{jn|Ko`&-7da_e4u6nYbMoLba z;!au;&f1c8>f#|*>b}PEe#QzO26EoUif+0x-iES1MsfkBN%clB$Y=NJT(S_H!y1)3%ZIIY}c(PPNGV;*~hJc}K}yys3% zPler1E@-GZ|CRT_?s@$jmluj|;ov&($+&`}lI4&DOUEqsFUtffJTue|UcM^xV11HY z=hvtYGuFFlvK@$B`!o4arPijU&y{X3d0qHV!mX%g(i)Wu{>3YrxhKsyuEf3Bhe7-n z1Ixw^ms6WnJQ-Vzr?S+l8qQ*kdBCR_9KkS)DMM_6YtdKM9XFUZFiq+D=~T?{g3*9~ z#*?|Cp&CWc6PXesHI0RrOrO9zL2g0H=Pxa~40lE5rQ8wu;-fCNfvIC}Mq+*-bI8NR$+ZAjl&AeUbth;`3`#qJ!kZm5@ zyNsCRr#3P|CzrDsD#!H10KR)iitS6ev&(mLeVbzLP z#aE}~8gn~T?UZ@7OIJVi^0u?Ltx7d!GJQS2C};iE>Wgvfug~?+ZM|GJ``uHYqwDX! zwtIRgXoX(sZ86u-x+&M6O(~TAv4a1o>odzK*FWvp%g$k&_Uud4d_VP_d^?{${F~#q zewmKmd;N(UxI<@LUTrn!{MU)=*9O@ifA&S_`2Bhp6;YqfJ}c5>xr(c{y2hH-yXI`& z{lj2+_~k9WzrW@Gm;a#XePz+KhuOeBQ;SOya|;l9OhODStW1HH X7(y)hI(x|^pdJQKS3j3^P6u{ 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 W#FDSGmrMfcVeoYIb6Mw<&;$Sw9`msP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..d356e888b353e59779cc283ea0a60bb3745f0291 GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*ti<>XyK>-_b3)~EfDc27WXQZbj}fVFOYP| z=5x&9cghv8P2&q{l=ZF>^{EzfFB0`Ek#NZu_No;2suJ<5l?bet_9z$htPt|AlMJYn zaxW7MY>;uz7xJwU_b!uiD-?0c6SPU?{r~^}Ip3$tfqq~t3GxeOaCmkj4a7gT^vI^j^|G4 zY?@^t&}Mk{Wa9J!3GwOguD#1T%EfW*?YD~m$Fukx40^gW;{W|Lo_r*-AyCJzc2a(6 zmO z(^Fx$lM5PZ&VS{7uzOxV$K{2hTR6B5d@`=!sAM@L!O}5{{mU|e3eOC+gO{($JXoJ3 z*ZDQ-!;JNAnrsJR*ZxdCRH?OT>2syqOI{cLlW;4lnY2dbf`9RfX6{Kdjw^9*_F)je z#lW($!{yXw6;H+%Z@hUXJMa8<{!KRN+xe#y-%bc+w)C!C@6$K`xkvQ% zhReR6&n;1V;*g#kksFk+v~|VOlLn6;8a*x)`=-sY>2?L%Ni%QPIqR-p+^7HhUURbr_ zRq@p+xyIZMRXb%~?b6i`y}a%0ZL3m^nM_~LFUnbewfbV*`s;H&bXzZ%&3^aP=ji&o zukD^53RiW!b%Jok>_Of%>rak)-HQ!HtC*RJe5C7)) ztzV|2_g;VE2JX-qmseZOIsbLy`n5s!$De%>I)1<2MMczSv(Jh&S+3%$t*)_V^{zQv zcmFV09)5X?@9%H<|K&d@dS6*I?O`@BU#OP2MwFx^mZVxG7o`Fz1|tI_6I}yCAPO-w zvoZi7Z36=<1B0r`^WUOq$jwj5OsmALf%}|#AW(w_+=i0O+|=Td#M}ae9+MCQ3oBEg YC58}7zRq4U38;s`)78&qol`;+0A1Y&00000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..81d2336632679d92d51225f71f3299455f65685e GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tn`b)ZSxxvFtA#u4*5>JE78&Lg=x60>r)R1sXKAEl zs3qlSr=_bV{+ZR3u9lRhl8~p9k*%3pR8&-7Uw>>%c#%#{fmUX*Zf=QwUba?hzFuaw zN@|X3YK~f3s&agTX=RmOakYL)p>}qOUT(f-W`#~+rEXD;L212lMY&c%xprZ#VOgC~ zd6{N@y-8)BMn<)MX{kYefp%7|dU}dd-2eao_q2Wc0Q3W6NswPKgTu2MX&_FLx4VnI zU9v$bki%Kv5n0T@z;^(I8MCf+asma}OFVsD*EamTaXfcQ zXVWYLfi}alCljX^NQh5=ckNx)Q7(>aZ@*RiKc2|d4%RCs2n9lU&1=E3?T zxz4XqA7-p~(_}jkyY^@Dp-QbyOP?#dyaa@Uevk!y# zEe4j29WJLft9UZD7*A!XRW+Q&8uNfpF*t%@7E^}U1lOXktUGQnZD5+x_0y@C;RT}s z|BNSdMME`;o+mOTL~0rfFPT1pcY@r4l+RyUbQ$i7%uBf=^2JA8ZUa-t-i*ZjK<1FC zx7r)4SnK3|teP#mz;=P*gy%b1+R7A{_V{$!b^0Z4f4%Q-n)yq{;w`gS8;j<%?A!F@ z#b3u%gRhequd=gh)$p!ZlQyO1`**Gef#e&SD=u19v94)2I7M!m+o4XU`#=;PKka|N(9-j=^L~4cJ&czMCw_d~e_2m7m7k}-^unqY zuZpiu$u;J7sM;y>YL~8l=;du^Z(EgW%w+m{eo@Z)tJN3d)?c6Nq1$@7Z1%gSK1bKz zeQo#jP|ym!(%WLLp>zopr0AY|4*8l(j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..419eaede8a3e8d54c8f5c8d51ce96cdbbf960693 GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tyO6~DtS080hltJg=9%NeyD&&( zQLyN2FP7X%1R^AnxqDbVlA(_+v0|Ns9<`74EheqbyK@(X5gcy=QV#7XjY zcd@riHYf#hI14-?iy0XB4uCLY*0oMfpdfpRr>`sf3q}?W3&vMo0ksSaOg}wc978;g z=T7Ntnq?r+W_b2w;`9Ou@#*iby~{ev#c}QJw~GJAv-lhgdb%{?|NS(cd?d0VP{*!z zQhsUViwWD$$twIWS+-F^u)8(cUHzKpIR*ix7QwJafu;!pPAm6V^cXVln8)5A&tk_g z@41uHQ(?E03mR(9f8~9!dtN`s<%ObKIJgdcGOpmLWH}_k(lLwu%QArq&kVJLm#@k^ zSf3=<`8DdpjP-7sYzJc3{!BhpskLe8bEVr$UKjq8a4V{rv_|EEfANZD?nyI_D{*i3 zVGzH?z_PK!<sPsSGGsVudshO<~>9`Gp!M=;D{$`G62TJ)85#|@?pOjEjkIu$d# zU^L*L@no)Os7BHAM5csDO=ICD(zHcrbrR!Mc2=z#-W6-orqq1@&eb50d_!}^MXM^-H4O)+$Srd_)ai8p$Gv8u z#AH^Jpba(&_rHJiNPOhj>ZSO4!_9=XAD-Tv^7X0q8>g)i{~oU}nefmc(#|b#N=o#c z{)XPgoKqGD?k}#s=w#KobMMJrb2UY8ym=-&@BDWDO*ZM<`KJ`$P6%bT^sZd*(>MRQ zNA&fE%f6q_Em3>oke(co8YGb_Lr>GjG>9>#kqieorMa zWShtKE+Z!SX^+0xriF^YoWq zSheC+@zp80#@r57J7r$&($x>WyzT65t5S`bOkdA0%2|K4`eNMr>vKJHTQ8T*e)rVp z==!^_?VcVATA^2ZTg)}IZp!s%QwpVjtl&TD`pk05^-nwYvUAv`J^KcptHiB=`&R#MJsE5JR)z4*}Q$iB}v^NYd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..8d48ea4ec230d272e44e1a1e8514b01a04a8208b GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tJ6AU0SxxwZhPfX*SM-LaO^D3u3s3J3NofyA=m<<~ z_fO~!PHFXx`!lPl%`d*iH?}7^XA0l&yO!!lvFw^GIw@V?t+Bk zg^49IBXSlcm-Pjw&W|ga8l5vSEWIx%rP({?|NsAA)K%clB$Y=NJT(S_H!y1)3%ZIIY}c(PPNGV;*~hJc}K} zyys3%Pler1E@-GZ|CRT_?s@$jmluj|;ov&($+&`}lI4&DOUEqsFUtffJTue|UcM^x zV11HY=hvtYGuFFlvK@$B`!o4arPijU&y{X3d0qHV!mX%g(i)Wu{>3YrxhKsyuEf3B zhe7-n1Ixw^ms6WnJQ-Vzr?S+l8qQ*kdBCR_9KkS)DMM_6YtdKM9XFUZFiq+D=~T?{ zg3*9~#*?|Cp&CWc6PXesHI0RrOrO9zL2g0H=Pxa~40lE5rQ8wu;-fCNfvIC}Mq+*- zbI8NR$+ZAjl&AeUbth;`3`#qJ! zkZm5@yNsCRr#3P|CzrDsD#!H10KR)iitS6ev&(mLe zVbzLP#aE}~8gn~T?UZ@7OIJVi^0u?Ltx7d!GJQS2C};iE>Wgvfug~?+ZM|GJ``uHY zqwDX!wtIRgXoX(sZ86u-x+&M6O(~TAv4a1o>odzK*FWvp%g$k&_Uud4d_VP_d^?{$ z{F~#qewmKmd;N(UxI<@LUTrn!{MU)=*9O@ifA&S_`2Bhp6;YqfJ}c5>xr(c{y2hH- zyXI`&{lj2+_~k9WzrW@Gm;a#XePz+KhuOeBQ;SOya|;l9OhODS btW1HH7(y)hI(x|^pdJQKS3j3^P6u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tOH$~6Rui7BJf~Q7xu-&^uS%x3V!DT1ii=c&i*%y1 zWW2j#5^)Ys$r7KNykcuVE@NaqGA6$dL9 zdr4-8s+PJ*r35Gx`YGjj%A~tWrr3){|NsAAG+^%spdT1Zg8YIR9G=}s196hP-CgYM zk_}3M9L@rd$YKTtz5^i4n02j_6DY`D;_2(k{(_N(!-DaZS3oTT1Jh4W7sn8fBc~nK->bLVWtWYwxm-a&cUH`>o>t@hmCaqDq;9tC=nS0WV<4W9{eHg@V zF|cgxa5=SE#gnnccq&V+s^KiwmpBxE6h7-Eo6y1JjhQpH9ULFBlE@ zXFQoJ8mdwBJdr6OQqx#?$@B@l6XX`8eE!m+%Wzj@UdkPjFFxvW8<;xwW+dhZGKWmP z)!taeS||5o)oj@XwhIg=Jm1OER;IYL$EVA#(=T!R>wSOI%wIAVZ<)o~STvty-=-%o z{yL@_e4WI2m7P_qhIhr9v?(>;zjHMRB;U|nanY)Zbxp&;DRRr)4s|-+|8cKbC^4DU zBxr+8!u{_bJrW-|wt6YP-f%Nv?T4o~r+j^?{l;l)#J|TYOeQ=uh_rJHoRShfr@x_h zG3S)Uf%}WAFFILu?%aEF*IZ4}8*iS;&O5)If0Ir6cK#{Fw-Z8{Exjw(`}EC!?h$>x z;j-`Nb4%2oIHV^>!92-WGEWt($WF*_1-*A1nBex<0dzC>1z1N?(fje}@<<(Ym&VQY_er=Hb@n>Izj^D3$Q4#go?6V?GmaDjGt81)Ty=%_a z-9HSLhhN^}`}!C8<`)MX5lF!N|bKMAyI&h(Zj_ ztPDU%+rYrez@TdK{I@6?a`RI%(<*Um;6A4w2-Khfx1l66H?_DVF}DDr$0WqS!panA Yi6O+2ud|m-0_tJ#boFyt=akR{0FI#si~s-t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/red.png new file mode 100644 index 0000000000000000000000000000000000000000..1310f095eeb1c756a58d35cf9a1f53bffa23b053 GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tYmt|ERueu!Nq&}!Vw}8OlCn~QqI|5JOr)ell$2zI zgm{dsbhx|NsAg=BovKKtC{+1o;IsI6S+N2I3@nySv!i zB^#6iIh+L^k;M!QdI*Z_FKjO<5_$T20dLG@&A4rPd*aa5U68UJ1M_3 z^2LPh=VTTBmn_>TA=urT?5=*z^BjYKQj1_%qd?OH0jHIFEP4!?cg$mNkY}-DnD^Yt z>8Y^W$psBH=fCnk*gdbG--w^Va9qlO|}EEYkwvms?^%F^tsaQC9ezrNw^i&Oj@II!M}J#Gxww!$CbD@`!I;# zVqn?W;c{xTiYH@>@l=*tRl`}VF%S3@gCiJbF=dENa4q`Ey5k1Z2Bs-pKb?vhUN9Q) z&v-IdG*qMLc_LFnq^7a(lIat8C&(>G`TV6tm*K9+yp%g4UwqW%HZXPU%}C4-WDc2n ztG%&`wNCEGs@bv&Y!?_#c)pXRtxR!gk589fr(fds*ZcmanZIN#-ZG1|v1mTazD-YF z{B=w<_&SO4Dm$xI4eyFIX;W&xf9GltNWP)D;-Xa*>zamxQ{P+~Hx zNzewHg!|t=dL%w_Z1qxnz2RoU+7C}}PWk#&`;F7qh<}e)m`r$R5NYQYI3*=|PJcu1 zV$Lax1NRqKUv#qS+`0GUuDP0`H{Lvxop*ja|0bLC?fg@UZzqH@TY6Wn_vxGe+#~vW z!)4#k=a#5FaY#>&$PLO@+PY%tNrT4^jUE?@ebeUHbi0D>q?xztoORbPZoj9J7_!Y{ zdzTTD{Io}3bGP4Kemi=z4|}Nd)Bg7hEj=$g@3+_3!+5E1;>XARm-R$b`FZ+FFRWVe zs`%=ZTw`vBs+}^gcIoPeUfy>0wpFRdOs22r7v-$KT75BY{q?yXx~-SXX1{ytb9DXP z*LF`21+CC4y)EV%S~unTvnhqrKUVM`b$wFVdQ&MBb@0LvBo>;M1& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/white.png new file mode 100644 index 0000000000000000000000000000000000000000..033e662991f21a8913b379975716271fba6fb645 GIT binary patch literal 1227 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C*E?;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tyLt2GvzqWXZ{Ga<`*-r>$mMxnzXHI8l=l}oz7eyxj0XmDZ zB*-tA!Qt7BG!Q4r+ug-r-5uR0Kn`btM`SSr1K$AFY)wsWq-lQ!ePPq z$}6Cjfr071r;B5V$MM{$olTDvc-piN-#onW!Xm%&W6ZhPrDga3zcq94&)l;0)baTf z9D2+$(q{MbSKPjROwz_JpW%;$ZmzMi*=&t1acic>FdC?}2xavOG#MuM6z_0#;^05x z*%UAtFL4 z#teoFRuATWUwFf1<8}!#hE|`SQw6rSIyLYzq#s|eFU61&^n+=($Q>_n!vO9L1(zQw zy090_ekGFrZR*m{X}7YzHFP(gXdUB4PUHBVo+gn$o?3K)G!tJ^59p21puuSATSJ}4Bj*U?XJg0m&8-H|4)c7ON zEGk&cY81?ov>qN-K&HywKu2{L8Jq%Uvj zU$%O8p6G!;KTUFPUp>E!`L%bal|TQpD0RgJ zo7?M*m#wUS9bO)8#8MZXtT5r$mG!^Ms@Ns=Yu?|>_x-o*w}m`OJM3z{zsmZ&r%qc| z?bMHVS7#hwy!WK@gjeSemFw63uD<+1{<8S#*}BsV_f?lJTf2L%UQ^NR`1^aUrk|{z z{{QTAm)qC$)@}o)e$^7!h?11Vl2ohYqEsNoU}RuqqHACXL?MP|Rt6xXZD3$!U{E!A z{#z6cx%nxXX_dG&aGz5T1ZvQL+fb63n_66wm|K9*V-jLuVPy)m#1LZ1*V#)Z0rfC= My85}Sb4q9e0K$_DAOHXW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/yellow.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..a11c7c36e928122fdb0d3f4203c7ed382e98cdb1 GIT binary patch literal 1298 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C%%r;1l8sq-VKl9E>u{ zHCE8p)(!~?Nk~XAH8oXJQxg*tyS7s9SxxxM9g4q>Do-kvpIWIrxm;mFiEK}SWN)EV zPrgKdu}oK<*q>QV-Ff1jxuO$G<@$=Gii(Qr>+6qg37=jmJGESDMwQ&G8ioEM=}Bb@ z6N^MA7K=?P5%0(mUD=_!xJh`sf3q}?W3&vMo0ksSaOg}wc978;g z=T7Ntnq?r+W_b2w;`9Ou@#*iby~{ev#c}QJw~GJAv-lhgdb%{?|NS(cd?d0VP{*!z zQhsUViwWD$$twIWS+-F^u)8(cUHzKpIR*ix7QwJafu;!pPAm6V^cXVln8)5A&tk_g z@41uHQ(?E03mR(9f8~9!dtN`s<%ObKIJgdcGOpmLWH}_k(lLwu%QArq&kVJLm#@k^ zSf3=<`8DdpjP-7sYzJc3{!BhpskLe8bEVr$UKjq8a4V{rv_|EEfANZD?nyI_D{*i3 zVGzH?z_PK!<sPsSGGsVudshO<~>9`Gp!M=;D{$`G62TJ)85#|@?pOjEjkIu$d# zU^L*L@no)Os7BHAM5csDO=ICD(zHcrbrR!Mc2=z#-W6-orqq1@&eb50d_!}^MXM^-H4O)+$Srd_)ai8p$Gv8u z#AH^Jpba(&_rHJiNPOhj>ZSO4!_9=XAD-Tv^7X0q8>g)i{~oU}nefmc(#|b#N=o#c z{)XPgoKqGD?k}#s=w#KobMMJrb2UY8ym=-&@BDWDO*ZM<`KJ`$P6%bT^sZd*(>MRQ zNA&fE%f6q_Em3>oke(co8YGb_Lr>GjG>9>#kqieorMa zWShtKE+Z!SX^+0xriF^YoWq zSheC+@zp80#@r57J7r$&($x>WyzT65t5S`bOkdA0%2|K4`eNMr>vKJHTQ8T*e)rVp z==!^_?VcVATA^2ZTg)}IZp!s%QwpVjtl&TD`pk05^-nwYvUAv`J^KcptHiB=`&R#MJsE5JR)z4*}Q$iB};D8uB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/induction_furnace_offline_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0beffb71af692c645624a96094160aaccd7e75 GIT binary patch literal 2427 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 literal 0 HcmV?d00001 From b3651b1f863809bb3078903967d331ac7cf05a71 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 16:22:12 +0700 Subject: [PATCH 24/37] Powered furnace cleanup --- .../mc/otm/shapes/BlockShapes.java | 2 +- ...t => AbstractPoweredFurnaceBlockEntity.kt} | 51 +++++++++++-------- ...lock.kt => AbstractPoweredFurnaceBlock.kt} | 28 +++++----- .../mc/otm/menu/tech/PoweredFurnaceMenu.kt | 9 ++-- .../mc/otm/registry/MBlockEntities.kt | 9 ++-- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 23 +++------ 6 files changed, 63 insertions(+), 59 deletions(-) rename src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/{PoweredFurnaceBlockEntity.kt => AbstractPoweredFurnaceBlockEntity.kt} (69%) rename src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/{PoweredFurnaceBlock.kt => AbstractPoweredFurnaceBlock.kt} (62%) diff --git a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java index a0bf71844..1bc232038 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java +++ b/src/main/java/ru/dbotthepony/mc/otm/shapes/BlockShapes.java @@ -785,7 +785,7 @@ public class BlockShapes { new SimpleCuboid(0.3125d, 1.000625d, 0.125d, 0.6875d, 1.000625d, 0.1875d) ); - public static final BlockShape POWERED_SMOKER_IDLE = new BlockShape( + public static final BlockShape POWERED_SMOKER = new BlockShape( new SimpleCuboid(0.0625d, 0d, 0.5d, 0.9375d, 0.25d, 0.9375d), new SimpleCuboid(0d, 0d, 0d, 1d, 0.25d, 0.5d), new SimpleCuboid(0d, 0.25d, 0d, 0.3125d, 1d, 1d), diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PoweredFurnaceBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt similarity index 69% rename from src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PoweredFurnaceBlockEntity.kt rename to src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt index b1c6c4abe..b8ea06589 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/PoweredFurnaceBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt @@ -1,15 +1,15 @@ package ru.dbotthepony.mc.otm.block.entity.tech import net.minecraft.core.BlockPos -import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel -import net.minecraft.server.level.ServerPlayer -import net.minecraft.world.entity.ExperienceOrb import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.item.crafting.AbstractCookingRecipe +import net.minecraft.world.item.crafting.BlastingRecipe import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.item.crafting.SmeltingRecipe +import net.minecraft.world.item.crafting.SmokingRecipe import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraftforge.common.capabilities.ForgeCapabilities @@ -34,18 +34,20 @@ import ru.dbotthepony.mc.otm.core.collect.maybe import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.menu.tech.PoweredFurnaceMenu import ru.dbotthepony.mc.otm.recipe.MatteryCookingRecipe +import ru.dbotthepony.mc.otm.recipe.MicrowaveRecipe import ru.dbotthepony.mc.otm.registry.MBlockEntities +import ru.dbotthepony.mc.otm.registry.MRecipes -class PoweredFurnaceBlockEntity( - type: BlockEntityType, +sealed class AbstractPoweredFurnaceBlockEntity

( + type: BlockEntityType<*>, blockPos: BlockPos, blockState: BlockState, - val recipeType: RecipeType, - val secondaryRecipeType: (() -> RecipeType)?, + val recipeType: RecipeType

, + val secondaryRecipeType: RecipeType?, val config: WorkerBalanceValues ) : MatteryWorkerBlockEntity(type, blockPos, blockState, ItemJob.CODEC, 2) { - override val upgrades = UpgradeContainer(this::markDirtyFast, 2, UpgradeType.BASIC_PROCESSING) - override val energy = ProfiledEnergyStorage(WorkerEnergyStorage(this::energyLevelUpdated, upgrades.transform(config))) + final override val upgrades = UpgradeContainer(this::markDirtyFast, 2, UpgradeType.BASIC_PROCESSING) + final override val energy = ProfiledEnergyStorage(WorkerEnergyStorage(this::energyLevelUpdated, upgrades.transform(config))) val inputs = immutableList(2) { MatteryContainer(this::itemContainerUpdated, 1) } val outputs = immutableList(2) { MatteryContainer(this::itemContainerUpdated, 1) } @@ -85,15 +87,6 @@ class PoweredFurnaceBlockEntity( super.tick() } - override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu? { - return when (type) { - MBlockEntities.POWERED_FURNACE -> PoweredFurnaceMenu.furnace(containerID, inventory, this) - MBlockEntities.POWERED_BLAST_FURNACE -> PoweredFurnaceMenu.blasting(containerID, inventory, this) - MBlockEntities.POWERED_SMOKER -> PoweredFurnaceMenu.smoking(containerID, inventory, this) - else -> null - } - } - override fun onJobFinish(status: JobStatus, id: Int) { if (outputs[id].fullyAddItem(status.job.itemStack)) { experience.storeExperience(status.experience, this) @@ -113,7 +106,7 @@ class PoweredFurnaceBlockEntity( if (secondaryRecipeType != null) { val recipe = level.recipeManager - .byType(secondaryRecipeType.invoke() as RecipeType) + .byType(secondaryRecipeType) .values .iterator() .filter { it.value.matches(inputs[id], 0) } @@ -134,7 +127,7 @@ class PoweredFurnaceBlockEntity( } } - return level.recipeManager.getRecipeFor(recipeType as RecipeType, inputs[id], level).map { + return level.recipeManager.getRecipeFor(recipeType, inputs[id], level).map { val output = it.value.assemble(inputs[id], level.registryAccess()) val toProcess = inputs[id][0].count.coerceAtMost(upgrades.processingItems + 1) inputs[id][0].shrink(toProcess) @@ -145,3 +138,21 @@ class PoweredFurnaceBlockEntity( }.orElse(JobContainer.noItem()) } } + +class PoweredFurnaceBlockEntity(blockPos: BlockPos, blockState: BlockState) : AbstractPoweredFurnaceBlockEntity(MBlockEntities.POWERED_FURNACE, blockPos, blockState, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE) { + override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { + return PoweredFurnaceMenu.furnace(containerID, inventory, this) + } +} + +class PoweredBlastFurnaceBlockEntity(blockPos: BlockPos, blockState: BlockState) : AbstractPoweredFurnaceBlockEntity(MBlockEntities.POWERED_BLAST_FURNACE, blockPos, blockState, RecipeType.BLASTING, null, MachinesConfig.POWERED_FURNACE) { + override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { + return PoweredFurnaceMenu.blasting(containerID, inventory, this) + } +} + +class PoweredSmokerBlockEntity(blockPos: BlockPos, blockState: BlockState) : AbstractPoweredFurnaceBlockEntity(MBlockEntities.POWERED_SMOKER, blockPos, blockState, RecipeType.SMOKING, MRecipes.MICROWAVE, MachinesConfig.POWERED_FURNACE) { + override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { + return PoweredFurnaceMenu.smoking(containerID, inventory, this) + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PoweredFurnaceBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AbstractPoweredFurnaceBlock.kt similarity index 62% rename from src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PoweredFurnaceBlock.kt rename to src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AbstractPoweredFurnaceBlock.kt index 54eda35b1..d6ed29b73 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/PoweredFurnaceBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AbstractPoweredFurnaceBlock.kt @@ -1,8 +1,7 @@ package ru.dbotthepony.mc.otm.block.tech import net.minecraft.core.BlockPos -import net.minecraft.world.item.crafting.AbstractCookingRecipe -import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -17,23 +16,22 @@ import net.minecraft.world.phys.shapes.Shapes import net.minecraft.world.phys.shapes.VoxelShape import ru.dbotthepony.mc.otm.block.RotatableMatteryBlock import ru.dbotthepony.mc.otm.block.entity.WorkerState -import ru.dbotthepony.mc.otm.block.entity.tech.EssenceStorageBlockEntity +import ru.dbotthepony.mc.otm.block.entity.tech.AbstractPoweredFurnaceBlockEntity +import ru.dbotthepony.mc.otm.block.entity.tech.PoweredBlastFurnaceBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PoweredFurnaceBlockEntity +import ru.dbotthepony.mc.otm.block.entity.tech.PoweredSmokerBlockEntity import ru.dbotthepony.mc.otm.block.getShapeForEachState -import ru.dbotthepony.mc.otm.config.WorkerBalanceValues import ru.dbotthepony.mc.otm.core.get -import ru.dbotthepony.mc.otm.recipe.MatteryCookingRecipe import ru.dbotthepony.mc.otm.shapes.BlockShape +import ru.dbotthepony.mc.otm.shapes.BlockShapes -class PoweredFurnaceBlock( - val type: () -> BlockEntityType, - val recipeType: RecipeType, - val secondaryRecipeType: (() -> RecipeType)?, - val config: WorkerBalanceValues, +sealed class AbstractPoweredFurnaceBlock>( + val color: DyeColor?, + val factory: (BlockPos, BlockState) -> T, shape: BlockShape? ) : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { - override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): PoweredFurnaceBlockEntity { - return PoweredFurnaceBlockEntity(type.invoke(), p_153215_, p_153216_, recipeType, secondaryRecipeType, config) + override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): T { + return factory(p_153215_, p_153216_) } override fun createBlockStateDefinition(builder: StateDefinition.Builder) { @@ -59,6 +57,10 @@ class PoweredFurnaceBlock( if (p_153212_.isClientSide) return null - return BlockEntityTicker { _, _, _, tile -> if (tile is PoweredFurnaceBlockEntity) tile.tick() } + return BlockEntityTicker { _, _, _, tile -> if (tile is AbstractPoweredFurnaceBlockEntity<*, *>) tile.tick() } } } + +class PoweredFurnaceBlock(color: DyeColor?) : AbstractPoweredFurnaceBlock(color, ::PoweredFurnaceBlockEntity, BlockShapes.POWERED_FURNACE) +class PoweredBlastFurnaceBlock(color: DyeColor?) : AbstractPoweredFurnaceBlock(color, ::PoweredBlastFurnaceBlockEntity, BlockShapes.POWERED_BLAST_FURNACE) +class PoweredSmokerBlock(color: DyeColor?) : AbstractPoweredFurnaceBlock(color, ::PoweredSmokerBlockEntity, BlockShapes.POWERED_SMOKER) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/PoweredFurnaceMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/PoweredFurnaceMenu.kt index e547464ab..8f4f57e8e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/PoweredFurnaceMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/PoweredFurnaceMenu.kt @@ -3,7 +3,10 @@ package ru.dbotthepony.mc.otm.menu.tech import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.player.Inventory import net.minecraft.world.inventory.MenuType +import ru.dbotthepony.mc.otm.block.entity.tech.AbstractPoweredFurnaceBlockEntity +import ru.dbotthepony.mc.otm.block.entity.tech.PoweredBlastFurnaceBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PoweredFurnaceBlockEntity +import ru.dbotthepony.mc.otm.block.entity.tech.PoweredSmokerBlockEntity import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.menu.OutputSlot import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu @@ -20,7 +23,7 @@ class PoweredFurnaceMenu( type: MenuType, containerID: Int, inventory: Inventory, - tile: PoweredFurnaceBlockEntity? = null + tile: AbstractPoweredFurnaceBlockEntity<*, *>? = null ) : MatteryPoweredMenu(type, containerID, inventory, tile) { val inputSlots = makeSlots(tile?.inputs, 2, ::MatterySlot) val outputSlots = makeSlots(tile?.outputs, 2) { c, s -> OutputSlot(c, s) { tile?.experience?.popExperience(player as ServerPlayer) } } @@ -53,7 +56,7 @@ class PoweredFurnaceMenu( fun blasting( containerID: Int, inventory: Inventory, - tile: PoweredFurnaceBlockEntity? = null + tile: PoweredBlastFurnaceBlockEntity? = null ) : PoweredFurnaceMenu { return PoweredFurnaceMenu(MMenus.POWERED_BLAST_FURNACE, containerID, inventory, tile) } @@ -61,7 +64,7 @@ class PoweredFurnaceMenu( fun smoking( containerID: Int, inventory: Inventory, - tile: PoweredFurnaceBlockEntity? = null + tile: PoweredSmokerBlockEntity? = null ) : PoweredFurnaceMenu { return PoweredFurnaceMenu(MMenus.POWERED_SMOKER, containerID, inventory, tile) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index e92c1a96c..37a6b2d81 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -79,16 +79,16 @@ object MBlockEntities { val PAINTER by register(MNames.PAINTER, ::PainterBlockEntity, MBlocks::PAINTER) val MATTER_ENTANGLER by register(MNames.MATTER_ENTANGLER, ::MatterEntanglerBlockEntity, MBlocks::MATTER_ENTANGLER) + val POWERED_FURNACE by register(MNames.POWERED_FURNACE, ::PoweredFurnaceBlockEntity, *MBlocks.POWERED_FURNACE.asSupplierArray()) + val POWERED_BLAST_FURNACE by register(MNames.POWERED_BLAST_FURNACE, ::PoweredBlastFurnaceBlockEntity, *MBlocks.POWERED_BLAST_FURNACE.asSupplierArray()) + val POWERED_SMOKER by register(MNames.POWERED_SMOKER, ::PoweredSmokerBlockEntity, *MBlocks.POWERED_SMOKER.asSupplierArray()) + val ENERGY_CABLES: Map> = SupplierMap(CablesConfig.E.entries.map { conf -> var selfFeed: Supplier> = Supplier { TODO() } selfFeed = register("${conf.name.lowercase()}_energy_cable", { a, b -> SimpleEnergyCableBlockEntity(selfFeed.get(), a, b, conf) }) as Supplier> conf to selfFeed }) - val POWERED_FURNACE: BlockEntityType by registry.register(MNames.POWERED_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_FURNACE[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_FURNACE.values.toTypedArray()).build(null) } - val POWERED_BLAST_FURNACE: BlockEntityType by registry.register(MNames.POWERED_BLAST_FURNACE) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_BLAST_FURNACE[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_BLAST_FURNACE.values.toTypedArray()).build(null) } - val POWERED_SMOKER: BlockEntityType by registry.register(MNames.POWERED_SMOKER) { BlockEntityType.Builder.of({ a, b -> MBlocks.POWERED_SMOKER[null]!!.newBlockEntity(a, b) }, *MBlocks.POWERED_SMOKER.values.toTypedArray()).build(null) } - val STORAGE_BUS: BlockEntityType by registry.register(MNames.STORAGE_BUS) { BlockEntityType.Builder.of(::StorageBusBlockEntity, MBlocks.STORAGE_BUS).build(null) } val STORAGE_IMPORTER: BlockEntityType by registry.register(MNames.STORAGE_IMPORTER) { BlockEntityType.Builder.of(::StorageImporterBlockEntity, MBlocks.STORAGE_IMPORTER).build(null) } val STORAGE_EXPORTER: BlockEntityType by registry.register(MNames.STORAGE_EXPORTER) { BlockEntityType.Builder.of(::StorageExporterBlockEntity, MBlocks.STORAGE_EXPORTER).build(null) } @@ -104,7 +104,6 @@ object MBlockEntities { bus.addListener(this::registerClient) } - @Suppress("unchecked_cast") private fun registerClient(event: FMLClientSetupEvent) { event.enqueueWork { BlockEntityRenderers.register(BLACK_HOLE, ::BlackHoleRenderer) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 9e55611f0..89ad44bb2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -1,20 +1,10 @@ package ru.dbotthepony.mc.otm.registry -import net.minecraft.ChatFormatting -import net.minecraft.core.BlockPos -import net.minecraft.network.chat.Component import net.minecraft.util.valueproviders.UniformInt -import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.EntityType -import net.minecraft.world.entity.monster.Zombie import net.minecraft.world.item.DyeColor -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.TooltipFlag import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.AnvilBlock import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.DoorBlock import net.minecraft.world.level.block.DropExperienceBlock import net.minecraft.world.level.block.IronBarsBlock import net.minecraft.world.level.block.LiquidBlock @@ -22,11 +12,8 @@ import net.minecraft.world.level.block.RotatedPillarBlock import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.StairBlock -import net.minecraft.world.level.block.TrapDoorBlock import net.minecraft.world.level.block.WallBlock import net.minecraft.world.level.block.state.BlockBehaviour -import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.level.block.state.properties.BlockSetType import net.minecraft.world.level.block.state.properties.NoteBlockInstrument import net.minecraft.world.level.material.MapColor import net.minecraft.world.level.material.PushReaction @@ -81,10 +68,12 @@ import ru.dbotthepony.mc.otm.block.tech.EnergyServoBlock import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock import ru.dbotthepony.mc.otm.block.tech.PhantomAttractorBlock import ru.dbotthepony.mc.otm.block.tech.PlatePressBlock +import ru.dbotthepony.mc.otm.block.tech.AbstractPoweredFurnaceBlock +import ru.dbotthepony.mc.otm.block.tech.PoweredBlastFurnaceBlock import ru.dbotthepony.mc.otm.block.tech.PoweredFurnaceBlock +import ru.dbotthepony.mc.otm.block.tech.PoweredSmokerBlock import ru.dbotthepony.mc.otm.config.CablesConfig import ru.dbotthepony.mc.otm.config.MachinesConfig -import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.collect.SupplierMap import ru.dbotthepony.mc.otm.shapes.BlockShapes @@ -112,9 +101,9 @@ object MBlocks { val CHEMICAL_GENERATOR: Block by registry.register(MNames.CHEMICAL_GENERATOR) { ChemicalGeneratorBlock() } val PLATE_PRESS = registry.coloredWithBase(MNames.PLATE_PRESS) { color, _ -> PlatePressBlock(color) } val TWIN_PLATE_PRESS = registry.coloredWithBase(MNames.TWIN_PLATE_PRESS) { color, _ -> PlatePressBlock(color, isTwin = true) } - val POWERED_FURNACE = registry.coloredWithBase(MNames.POWERED_FURNACE) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_FURNACE, RecipeType.SMELTING, null, MachinesConfig.POWERED_FURNACE, BlockShapes.POWERED_FURNACE) } - val POWERED_BLAST_FURNACE = registry.coloredWithBase(MNames.POWERED_BLAST_FURNACE) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_BLAST_FURNACE, RecipeType.BLASTING, null, MachinesConfig.POWERED_BLAST_FURNACE, BlockShapes.POWERED_BLAST_FURNACE) } - val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> PoweredFurnaceBlock(MBlockEntities::POWERED_SMOKER, RecipeType.SMOKING, MRecipes::MICROWAVE, MachinesConfig.POWERED_SMOKER, BlockShapes.POWERED_SMOKER_IDLE) } + val POWERED_FURNACE = registry.coloredWithBase(MNames.POWERED_FURNACE) { color, _ -> PoweredFurnaceBlock(color) } + val POWERED_BLAST_FURNACE = registry.coloredWithBase(MNames.POWERED_BLAST_FURNACE) { color, _ -> PoweredBlastFurnaceBlock(color) } + val POWERED_SMOKER = registry.coloredWithBase(MNames.POWERED_SMOKER) { color, _ -> PoweredSmokerBlock(color) } val MATTER_RECYCLER = registry.coloredWithBase(MNames.MATTER_RECYCLER) { color, _ -> MatterRecyclerBlock(color) } val ENERGY_SERVO: Block by registry.register(MNames.ENERGY_SERVO) { EnergyServoBlock() } val COBBLESTONE_GENERATOR = registry.coloredWithBase(MNames.COBBLESTONE_GENERATOR) { color, _ -> CobblerBlock(color) } From 9800eb35ba92a63d57cff6655b07a5aef9a98a7b Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 16:37:41 +0700 Subject: [PATCH 25/37] Fixed energy consumption not being merged properly --- .../mc/otm/container/UpgradeContainer.kt | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/UpgradeContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/UpgradeContainer.kt index 35abc5839..9b178fa01 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/UpgradeContainer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/UpgradeContainer.kt @@ -16,32 +16,38 @@ open class UpgradeContainer(slotCount: Int, open val allowedUpgrades: Set get() = setOf() - protected fun decimals(fn: (IMatteryUpgrade) -> Decimal, reducer: (Decimal, Decimal) -> Decimal): Decimal { + protected fun positiveDecimals(fn: (IMatteryUpgrade) -> Decimal, reducer: (Decimal, Decimal) -> Decimal): Decimal { return iterator() .map { it.getCapability(MatteryCapability.UPGRADE).map(fn).orElse(Decimal.ZERO).moreThanZero() * it.count } .reduce(Decimal.ZERO, reducer) } + protected fun anyDecimals(fn: (IMatteryUpgrade) -> Decimal, reducer: (Decimal, Decimal) -> Decimal): Decimal { + return iterator() + .map { it.getCapability(MatteryCapability.UPGRADE).map(fn).orElse(Decimal.ZERO) * it.count } + .reduce(Decimal.ZERO, reducer) + } + override val speedBonus: Double get() = iterator().map { it.getCapability(MatteryCapability.UPGRADE).map { it.speedBonus }.orElse(0.0) * it.count }.reduce(0.0) { a, b -> a + b } override val processingItems: Int get() = iterator().map { it.getCapability(MatteryCapability.UPGRADE).map { it.processingItems }.orElse(0).coerceAtLeast(0) * it.count }.reduce(0) { a, b -> a + b } override val energyStorageFlat: Decimal - get() = decimals(IMatteryUpgrade::energyStorageFlat, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::energyStorageFlat, Decimal::plus) override val energyStorage: Decimal - get() = decimals(IMatteryUpgrade::energyStorage, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::energyStorage, Decimal::plus) override val matterStorageFlat: Decimal - get() = decimals(IMatteryUpgrade::matterStorageFlat, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::matterStorageFlat, Decimal::plus) override val matterStorage: Decimal - get() = decimals(IMatteryUpgrade::matterStorage, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::matterStorage, Decimal::plus) override val energyConsumed: Decimal - get() = decimals(IMatteryUpgrade::energyConsumed, Decimal::plus) + get() = anyDecimals(IMatteryUpgrade::energyConsumed, Decimal::plus) override val failureMultiplier: Double get() = iterator().map { it.getCapability(MatteryCapability.UPGRADE).map { it.failureMultiplier }.orElse(1.0).coerceAtLeast(0.0).pow(it.count.toDouble()) }.reduce(1.0) { a, b -> a * b } override val energyThroughputFlat: Decimal - get() = decimals(IMatteryUpgrade::energyThroughputFlat, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::energyThroughputFlat, Decimal::plus) override val energyThroughput: Decimal - get() = decimals(IMatteryUpgrade::energyThroughput, Decimal::plus) + get() = positiveDecimals(IMatteryUpgrade::energyThroughput, Decimal::plus) fun transform(values: EnergyBalanceValues): EnergyBalanceValues { return object : EnergyBalanceValues { From ebafdbc92506668444a32c8db81e38b7089cd778 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 16:38:09 +0700 Subject: [PATCH 26/37] Set MAX_ENERGY default config value to infinity --- src/main/kotlin/ru/dbotthepony/mc/otm/config/MachinesConfig.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/config/MachinesConfig.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/config/MachinesConfig.kt index 3fc705cbd..5bb1b860b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/config/MachinesConfig.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/config/MachinesConfig.kt @@ -212,7 +212,7 @@ object MachinesConfig : AbstractConfig("machines") { val MAX_ENERGY by builder .comment("Maximal combined energy consumption percentage") - .defineDecimal("MAX_ENERGY", Decimal.LONG_MAX_VALUE, Decimal.ZERO) + .defineDecimal("MAX_ENERGY", Decimal.POSITIVE_INFINITY, Decimal.ZERO) init { builder.pop() From a72f2aabb2f9a82d5070242d2110b541fa0f17d7 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 16:57:10 +0700 Subject: [PATCH 27/37] Make underwater travel challenge account for displacement, and not distance --- .../otm/capability/MatteryPlayerCapability.kt | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt index cddfee6e0..8e6479d46 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt @@ -459,7 +459,8 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial var ticksIExist = 0 private set - private var lastOutsideLiquid = Vec3(0.0, 0.0, 0.0) + private var lastLiquidPosition = Vec3(0.0, 0.0, 0.0) + private var liquidDistanceTravelled = 0.0 private var wasInLiquid = false private var lastDimension = ResourceLocation("overworld") @@ -591,8 +592,9 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial savetables.int(::nextDischargeHurt) savetables.int(::nextHealTick) - savetables.vector(::lastOutsideLiquid) + savetables.vector(::lastLiquidPosition) savetables.codec(::lastDimension, ResourceLocation.CODEC) + savetables.double(::liquidDistanceTravelled) savetables.stateful(::exopackSlotModifier, "exoSuitSlotCountModifiers") savetables.stateful(::exopackContainer, "exoSuitContainer") @@ -664,7 +666,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial androidEnergy.batteryLevel = AndroidConfig.ANDROID_MAX_ENERGY androidEnergy.maxBatteryLevel = AndroidConfig.ANDROID_MAX_ENERGY - lastOutsideLiquid = ply.position() + lastLiquidPosition = ply.position() wasInLiquid = false if (ply is ServerPlayer) { @@ -719,7 +721,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial androidEnergy.maxBatteryLevel = AndroidConfig.ANDROID_MAX_ENERGY dropBattery() - lastOutsideLiquid = ply.position() + lastLiquidPosition = ply.position() wasInLiquid = false if (ply is ServerPlayer) { @@ -1193,31 +1195,38 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial if (ply.airSupply < ply.maxAirSupply) ply.airSupply = ply.maxAirSupply - if (ply.isSwimming && !hasFeature(AndroidFeatures.AIR_BAGS)) + if (ply.isSwimming && !hasFeature(AndroidFeatures.AIR_BAGS) && !ply.isCreative) ply.isSwimming = false if (ply is ServerPlayer) { if (ply.level().dimension().location() != lastDimension) { lastDimension = ply.level().dimension().location() wasInLiquid = false - lastOutsideLiquid = ply.position + lastLiquidPosition = ply.position + liquidDistanceTravelled = 0.0 } - if (ply.isUnderWater && !ply.isCreative) { + if (ply.isUnderWater) { if (!wasInLiquid) { wasInLiquid = true - lastOutsideLiquid = ply.position + liquidDistanceTravelled = 0.0 + lastLiquidPosition = ply.position } + + liquidDistanceTravelled += (ply.position - lastLiquidPosition).length() } else { if (wasInLiquid) { wasInLiquid = false - if (!hasFeature(AndroidFeatures.AIR_BAGS)) - AndroidTravelUnderwater.trigger(ply, (lastOutsideLiquid - ply.position).length()) + if (!hasFeature(AndroidFeatures.AIR_BAGS)) { + AndroidTravelUnderwater.trigger(ply, liquidDistanceTravelled) + } } - lastOutsideLiquid = ply.position + liquidDistanceTravelled = 0.0 } + + lastLiquidPosition = ply.position } val stats = ply.foodData From 005c8b03962d519e7111ba4fdbefedd9b17f3e4b Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 17:48:56 +0700 Subject: [PATCH 28/37] Holo sign text coloring --- .../mc/otm/datagen/lang/English.kt | 2 + .../mc/otm/datagen/lang/Russian.kt | 2 + .../entity/decorative/HoloSignBlockEntity.kt | 10 +++ .../render/blockentity/HoloSignRenderer.kt | 2 +- .../screen/decorative/HoloSignScreen.kt | 27 ++++++- .../otm/client/screen/panels/ColorPicker.kt | 78 ++++++++++++------- .../ru/dbotthepony/mc/otm/menu/MatteryMenu.kt | 2 + .../mc/otm/menu/decorative/HoloSignMenu.kt | 17 +++- .../otm/menu/input/FloatInputWithFeedback.kt | 18 +++++ 9 files changed, 126 insertions(+), 32 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/FloatInputWithFeedback.kt diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 50973d88c..54bb3166d 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -155,6 +155,8 @@ private fun misc(provider: MatteryLanguageProvider) { gui("exopack.change_color2", "Remove color") gui("exopack.go_curios", "Open Curios inventory") + gui("change_color", "Customize color") + gui("exopack.probe1", "This little device feels unnatural to touch, it is almost certainly resilient to any possible attempt to break it open.") gui("exopack.probe2", "There is fingerprint reader built into one of sides which gently glow when touched.") gui("exopack.probe3", "It seems this box will unlock once you strongly press fingerprint reader, and you feel what's inside will affect you without any way back!") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 35dde11db..203d09438 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -163,6 +163,8 @@ private fun misc(provider: MatteryLanguageProvider) { gui("exopack.change_color2", "Убрать окраску") gui("exopack.go_curios", "Открыть инвентарь Curios") + gui("change_color", "Изменить цвет") + gui("exopack.probe1", "Данное маленькое устройство необычно на ощупь, а так же неприступно для любых попыток вскрыть.") gui("exopack.probe2", "На одной из сторон данного устройства находится сканер отпечатка, который тускло загорается при касании.") gui("exopack.probe3", "Вероятно, устройство откроется если достаточно сильно нажать на сканер отпечатка, и вы чувствуете, что последствия будут необратимы!") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/HoloSignBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/HoloSignBlockEntity.kt index 3e2884aa4..c349afb9c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/HoloSignBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/HoloSignBlockEntity.kt @@ -25,12 +25,22 @@ class HoloSignBlockEntity(blockPos: BlockPos, blockState: BlockState) : MatteryB access.write(value) }) + var textRed by synchronizer.float(1f).property + var textGreen by synchronizer.float(1f).property + var textBlue by synchronizer.float(85f / 255f).property + var textAlpha by synchronizer.float(1f).property + var isLocked = false init { savetables.string(::signText) savetablesLevel.bool(::isLocked) savetables.stateful(::redstoneControl) + + savetables.float(::textRed) + savetables.float(::textGreen) + savetables.float(::textBlue) + savetables.float(::textAlpha) } override fun createMenu(p_39954_: Int, p_39955_: Inventory, p_39956_: Player): AbstractContainerMenu { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/HoloSignRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/HoloSignRenderer.kt index 4e1be4a88..92ed47869 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/HoloSignRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/HoloSignRenderer.kt @@ -38,7 +38,7 @@ class HoloSignRenderer(private val context: BlockEntityRendererProvider.Context) var y = -totalHeight / 2f for (line in lines) { - font.draw(poseStack = poseStack, buffer = sorse, text = line, gravity = RenderGravity.TOP_CENTER, y = y, color = RGBAColor.YELLOW) + font.draw(poseStack = poseStack, buffer = sorse, text = line, gravity = RenderGravity.TOP_CENTER, y = y, color = RGBAColor(tile.textRed, tile.textGreen, tile.textBlue, tile.textAlpha)) y += font.lineHeight + 2f } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt index 0e041f81e..2f45327b1 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt @@ -2,15 +2,21 @@ package ru.dbotthepony.mc.otm.client.screen.decorative import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.ItemStack +import ru.dbotthepony.mc.otm.client.render.ItemStackIcon import ru.dbotthepony.mc.otm.client.screen.MatteryScreen +import ru.dbotthepony.mc.otm.client.screen.panels.ColorPickerPanel import ru.dbotthepony.mc.otm.client.screen.panels.Dock import ru.dbotthepony.mc.otm.client.screen.panels.DockProperty import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel import ru.dbotthepony.mc.otm.client.screen.panels.button.CheckBoxLabelInputPanel +import ru.dbotthepony.mc.otm.client.screen.panels.button.LargeRectangleButtonPanel import ru.dbotthepony.mc.otm.client.screen.panels.button.makeDeviceControls import ru.dbotthepony.mc.otm.client.screen.panels.input.NetworkedStringInputPanel import ru.dbotthepony.mc.otm.core.TranslatableComponent +import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.menu.decorative.HoloSignMenu +import ru.dbotthepony.mc.otm.registry.MItems class HoloSignScreen(menu: HoloSignMenu, inventory: Inventory, title: Component) : MatteryScreen(menu, title) { override fun makeMainFrame(): FramePanel> { @@ -28,7 +34,26 @@ class HoloSignScreen(menu: HoloSignMenu, inventory: Inventory, title: Component) lock.dockMargin = DockProperty(2f, 2f, 2f, 2f) lock.tooltips.add(TranslatableComponent("otm.gui.lock_holo_screen.tip")) - makeDeviceControls(this, frame, redstoneConfig = menu.redstone) + val controls = makeDeviceControls(this, frame, redstoneConfig = menu.redstone) + + controls.addButton(object : LargeRectangleButtonPanel(this@HoloSignScreen, frame, onPress = { + frame.blockingWindow = ColorPickerPanel.frame( + this@HoloSignScreen, + callback = { + menu.textRed.accept(it.red) + menu.textGreen.accept(it.green) + menu.textBlue.accept(it.blue) + menu.textAlpha.accept(it.alpha) + }, + color = RGBAColor(menu.textRed.value, menu.textGreen.value, menu.textBlue.value, menu.textAlpha.value), + isDisabled = { !menu.textRed.and(menu.textGreen).and(menu.textBlue).and(menu.textAlpha).test(minecraft?.player) }, + title = TranslatableComponent("otm.gui.change_color")) + }) { + init { + tooltips.add(TranslatableComponent("otm.gui.change_color")) + icon = ItemStackIcon(ItemStack(MItems.PAINTER)).fixed() + } + }) return frame } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt index bd2fa0f0c..3c5d8bf4e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt @@ -21,6 +21,7 @@ import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.math.HSVColor import ru.dbotthepony.mc.otm.core.math.RGBAColor import java.util.function.Consumer +import java.util.function.Supplier import kotlin.math.roundToInt open class ColorBoxPanel( @@ -31,6 +32,7 @@ open class ColorBoxPanel( width: Float = 64f, height: Float = 64f, protected val callback: Consumer? = null, + val isDisabled: Supplier = Supplier { false }, ) : EditablePanel(screen, parent, x, y, width, height) { var backgroundColor = RGBAColor.RED private set @@ -66,7 +68,7 @@ open class ColorBoxPanel( override fun mouseClickedInner(x: Double, y: Double, button: Int): Boolean { if (button == InputConstants.MOUSE_BUTTON_LEFT) { - if (!isPressed) { + if (!isPressed && !isDisabled.get()) { isPressed = true grabMouseInput = true @@ -81,7 +83,7 @@ open class ColorBoxPanel( } override fun mouseDraggedInner(x: Double, y: Double, button: Int, xDelta: Double, yDelta: Double): Boolean { - if (isPressed && button == InputConstants.MOUSE_BUTTON_LEFT) { + if (isPressed && button == InputConstants.MOUSE_BUTTON_LEFT && !isDisabled.get()) { pickColor(x, y) return true } @@ -135,11 +137,13 @@ abstract class AbstractColorWangPanel( width: Float = 40f, height: Float = 10f, protected val callback: Consumer? = null, + val isDisabled: Supplier = Supplier { false }, ) : EditablePanel(screen, parent, x, y, width, height) { abstract val leftColor: RGBAColor abstract val rightColor: RGBAColor abstract val wangPosition: Float abstract fun setColor(color: Either) + protected abstract fun onWangInput(newPosition: Float) init { @@ -155,7 +159,7 @@ abstract class AbstractColorWangPanel( override fun mouseClickedInner(x: Double, y: Double, button: Int): Boolean { if (button == InputConstants.MOUSE_BUTTON_LEFT) { - if (!isPressed) { + if (!isPressed && !isDisabled.get()) { isPressed = true grabMouseInput = true @@ -170,7 +174,7 @@ abstract class AbstractColorWangPanel( } override fun mouseDraggedInner(x: Double, y: Double, button: Int, xDelta: Double, yDelta: Double): Boolean { - if (isPressed && button == InputConstants.MOUSE_BUTTON_LEFT) { + if (isPressed && button == InputConstants.MOUSE_BUTTON_LEFT && !isDisabled.get()) { updateColor(x) return true } @@ -216,7 +220,8 @@ open class RedColorWangPanel( width: Float = 40f, height: Float = 10f, callback: Consumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback) { + isDisabled: Supplier = Supplier { false }, +) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback, isDisabled) { override var leftColor: RGBAColor = RGBAColor.BLACK protected set override var rightColor: RGBAColor = RGBAColor.RED @@ -247,7 +252,8 @@ open class GreenColorWangPanel( width: Float = 40f, height: Float = 10f, callback: Consumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback) { + isDisabled: Supplier = Supplier { false }, +) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback, isDisabled) { override var leftColor: RGBAColor = RGBAColor.BLACK protected set override var rightColor: RGBAColor = RGBAColor.GREEN @@ -278,7 +284,8 @@ open class BlueColorWangPanel( width: Float = 40f, height: Float = 10f, callback: Consumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback) { + isDisabled: Supplier = Supplier { false }, +) : AbstractColorWangPanel(screen, parent, x, y, width, height, callback, isDisabled) { override var leftColor: RGBAColor = RGBAColor.BLACK protected set override var rightColor: RGBAColor = RGBAColor.BLUE @@ -309,7 +316,8 @@ open class HueWangPanel( width: Float = 40f, height: Float = 10f, protected val hueCallback: FloatConsumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height) { + isDisabled: Supplier = Supplier { false }, +) : AbstractColorWangPanel(screen, parent, x, y, width, height, null, isDisabled) { override val leftColor: RGBAColor get() = RGBAColor.WHITE override val rightColor: RGBAColor get() = RGBAColor.WHITE override var wangPosition: Float = 1f @@ -351,7 +359,8 @@ open class SaturationWangPanel( width: Float = 40f, height: Float = 10f, protected val saturationCallback: FloatConsumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height) { + isDisabled: Supplier = Supplier { false }, +) : AbstractColorWangPanel(screen, parent, x, y, width, height, null, isDisabled) { override var leftColor: RGBAColor = RGBAColor.WHITE protected set override var rightColor: RGBAColor = RGBAColor.WHITE @@ -396,7 +405,8 @@ open class ValueWangPanel( width: Float = 40f, height: Float = 10f, protected val valueCallback: FloatConsumer? = null, -) : AbstractColorWangPanel(screen, parent, x, y, width, height) { + isDisabled: Supplier = Supplier { false } +) : AbstractColorWangPanel(screen, parent, x, y, width, height, null, isDisabled) { override var leftColor: RGBAColor = RGBAColor.BLACK protected set override var rightColor: RGBAColor = RGBAColor.WHITE @@ -440,7 +450,8 @@ open class ColorPalettePanel( y: Float = 0f, width: Float = 64f, height: Float = 64f, - protected val callback: Consumer? = null + protected val callback: Consumer? = null, + val isDisabled: Supplier = Supplier { false } ) : EditablePanel(screen, parent, x, y, width, height) { open fun onColorChoose(color: RGBAColor) { callback?.accept(color) @@ -452,6 +463,10 @@ open class ColorPalettePanel( tooltips.add(TextComponent(color.toHexStringRGB())) } + override var isDisabled: Boolean + get() = this@ColorPalettePanel.isDisabled.get() + set(value) {} + override fun onClick(mouseButton: Int) { onColorChoose(color) } @@ -499,7 +514,8 @@ open class ColorPickerPanel( y: Float = 0f, width: Float = 164f, height: Float = 118f, - var callback: Consumer? = null + var callback: Consumer? = null, + val isDisabled: Supplier = Supplier { false }, ) : EditablePanel(screen, parent, x, y, width, height) { open fun onColorChanged(color: RGBAColor) { callback?.accept(color) @@ -523,49 +539,53 @@ open class ColorPickerPanel( protected open fun onPaletteChoose(color: RGBAColor) { setColor(Either.left(color)) - onColorChanged(color) + if (!isDisabled.get()) onColorChanged(color) } protected open fun onColorBoxChoose(color: HSVColor) { setColor(Either.right(color)) - onColorChanged(color.toRGBA()) + if (!isDisabled.get()) onColorChanged(color.toRGBA()) } protected open fun onWangChoose(color: RGBAColor) { setColor(Either.left(color)) - onColorChanged(color) + if (!isDisabled.get()) onColorChanged(color) } protected open fun onHueChoose(hue: Float) { val current = currentColor.map({ it.toHSV() }, { it }) val new = current.copy(hue = hue) setColor(Either.right(new)) - onColorChanged(new.toRGBA()) + if (!isDisabled.get()) onColorChanged(new.toRGBA()) } protected open fun onSaturationChoose(saturation: Float) { val current = currentColor.map({ it.toHSV() }, { it }) val new = current.copy(saturation = saturation) setColor(Either.right(new)) - onColorChanged(new.toRGBA()) + if (!isDisabled.get()) onColorChanged(new.toRGBA()) } protected open fun onValueChoose(value: Float) { val current = currentColor.map({ it.toHSV() }, { it }) val new = current.copy(value = value) setColor(Either.right(new)) - onColorChanged(new.toRGBA()) + if (!isDisabled.get()) onColorChanged(new.toRGBA()) } val topStrip = EditablePanel(screen, this, 0f, 0f, width = width, height = 70f) val middleStrip = EditablePanel(screen, this) - val palette = ColorPalettePanel(screen, this, callback = { onPaletteChoose(it) }) + val palette = ColorPalettePanel(screen, this, callback = { onPaletteChoose(it) }, isDisabled = isDisabled) val hexInput = object : TextInputPanel(screen, middleStrip, width = 50f) { init { dock = Dock.RIGHT } + override var isActive: Boolean + get() = !isDisabled.get() + set(value) {} + override fun onFocusChanged() { if (!isFocusedThis) { val newColor = RGBAColor.fromHexStringRGB(text) @@ -574,7 +594,7 @@ open class ColorPickerPanel( text = currentColor.map({ it }, { it.toRGBA() }).toHexStringRGB() } else { setColor(Either.left(newColor)) - onColorChanged(newColor) + if (!isDisabled.get()) onColorChanged(newColor) } } } @@ -596,7 +616,7 @@ open class ColorPickerPanel( } } - val box = ColorBoxPanel(screen, topStrip, 0f, 0f, width = 70f, height = 70f, callback = { onColorBoxChoose(it) }) + val box = ColorBoxPanel(screen, topStrip, 0f, 0f, width = 70f, height = 70f, callback = { onColorBoxChoose(it) }, isDisabled = isDisabled) val wangCanvas = EditablePanel(screen, topStrip, width = 80f) inner class WangLine(label: String, val wang: AbstractColorWangPanel, val text: (color: Either) -> Component?) { @@ -637,13 +657,13 @@ open class ColorPickerPanel( } } - val red = WangLine("red", RedColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) })) { TextComponent((it.map({ it }, { it.toRGBA() }).red * 255f).roundToInt().toString()) } - val green = WangLine("green", GreenColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) })) { TextComponent((it.map({ it }, { it.toRGBA() }).green * 255f).roundToInt().toString()) } - val blue = WangLine("blue", BlueColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) })) { TextComponent((it.map({ it }, { it.toRGBA() }).blue * 255f).roundToInt().toString()) } + val red = WangLine("red", RedColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) }, isDisabled = isDisabled)) { TextComponent((it.map({ it }, { it.toRGBA() }).red * 255f).roundToInt().toString()) } + val green = WangLine("green", GreenColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) }, isDisabled = isDisabled)) { TextComponent((it.map({ it }, { it.toRGBA() }).green * 255f).roundToInt().toString()) } + val blue = WangLine("blue", BlueColorWangPanel(screen, wangCanvas, callback = { onWangChoose(it) }, isDisabled = isDisabled)) { TextComponent((it.map({ it }, { it.toRGBA() }).blue * 255f).roundToInt().toString()) } - val hue = WangLine("hue", HueWangPanel(screen, wangCanvas, hueCallback = { onHueChoose(it) })) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent(it.hue.roundToInt().toString()) } } - val saturation = WangLine("saturation", SaturationWangPanel(screen, wangCanvas, saturationCallback = { onSaturationChoose(it) })) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent((it.saturation * 100f).roundToInt().toString() + "%") } } - val value = WangLine("value", ValueWangPanel(screen, wangCanvas, valueCallback = { onValueChoose(it) })) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent((it.value * 100f).roundToInt().toString() + "%") } } + val hue = WangLine("hue", HueWangPanel(screen, wangCanvas, hueCallback = { onHueChoose(it) }, isDisabled = isDisabled)) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent(it.hue.roundToInt().toString()) } } + val saturation = WangLine("saturation", SaturationWangPanel(screen, wangCanvas, saturationCallback = { onSaturationChoose(it) }, isDisabled = isDisabled)) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent((it.saturation * 100f).roundToInt().toString() + "%") } } + val value = WangLine("value", ValueWangPanel(screen, wangCanvas, valueCallback = { onValueChoose(it) }, isDisabled = isDisabled)) { it.map({ if (it.canRepresentHue()) it.toHSV() else null }, { it })?.let { TextComponent((it.value * 100f).roundToInt().toString() + "%") } } val wangs = listOf(red, green, blue, hue, saturation, value) @@ -728,9 +748,9 @@ open class ColorPickerPanel( RGBAColor.rgb(0xEE82EEL), // Violet ) - fun > frame(screen: S, callback: Consumer, color: RGBAColor = RGBAColor.RED, title: Component? = TranslatableComponent("otm.gui.color_picker")): FramePanel { + fun > frame(screen: S, callback: Consumer, color: RGBAColor = RGBAColor.RED, title: Component? = TranslatableComponent("otm.gui.color_picker"), isDisabled: Supplier = Supplier { false }): FramePanel { return FramePanel.padded(screen, 164f, 118f, title).also { - ColorPickerPanel(screen, it, 0f, 0f, callback = callback).also { + ColorPickerPanel(screen, it, 0f, 0f, callback = callback, isDisabled = isDisabled).also { it.dock = Dock.FILL it.setColor(Either.left(color)) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt index 387ace84b..572c30eb7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt @@ -47,6 +47,7 @@ import ru.dbotthepony.mc.otm.core.util.BigDecimalValueCodec import ru.dbotthepony.mc.otm.core.util.BinaryStringCodec import ru.dbotthepony.mc.otm.core.util.BooleanValueCodec import ru.dbotthepony.mc.otm.core.util.CollectionStreamCodec +import ru.dbotthepony.mc.otm.core.util.FloatValueCodec import ru.dbotthepony.mc.otm.core.util.IStreamCodec import ru.dbotthepony.mc.otm.core.util.ItemStackValueCodec import ru.dbotthepony.mc.otm.core.util.ItemValueCodec @@ -189,6 +190,7 @@ abstract class MatteryMenu( fun itemStackInput(allowSpectators: Boolean = false, handler: (ItemStack) -> Unit) = PlayerInput(ItemStackValueCodec, allowSpectators, handler) fun nullableItemInput(allowSpectators: Boolean = false, handler: (Item?) -> Unit) = PlayerInput(ItemValueCodec.nullable, allowSpectators, handler) fun stringInput(allowSpectators: Boolean = false, handler: (String) -> Unit) = PlayerInput(BinaryStringCodec, allowSpectators, handler) + fun floatInput(allowSpectators: Boolean = false, handler: (Float) -> Unit) = PlayerInput(FloatValueCodec, allowSpectators, handler) fun intInput(allowSpectators: Boolean = false, handler: (Int) -> Unit) = PlayerInput(VarIntValueCodec, allowSpectators, handler) /** diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/HoloSignMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/HoloSignMenu.kt index bc3562c0e..87c55378e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/HoloSignMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/HoloSignMenu.kt @@ -7,10 +7,11 @@ import ru.dbotthepony.mc.otm.block.entity.decorative.HoloSignBlockEntity import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback +import ru.dbotthepony.mc.otm.menu.input.FloatInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.StringInputWithFeedback import ru.dbotthepony.mc.otm.registry.MMenus -class HoloSignMenu @JvmOverloads constructor( +class HoloSignMenu( containerId: Int, inventory: Inventory, tile: HoloSignBlockEntity? = null @@ -19,13 +20,27 @@ class HoloSignMenu @JvmOverloads constructor( val locked = BooleanInputWithFeedback(this) val redstone = EnumInputWithFeedback(this, RedstoneSetting::class.java) + val textRed = FloatInputWithFeedback(this) + val textGreen = FloatInputWithFeedback(this) + val textBlue = FloatInputWithFeedback(this) + val textAlpha = FloatInputWithFeedback(this) + init { text.filter { it.isCreative || !locked.value } redstone.filter { it.isCreative || !locked.value } locked.filter { it.isCreative } + textRed.filter { it.isCreative || !locked.value } + textGreen.filter { it.isCreative || !locked.value } + textBlue.filter { it.isCreative || !locked.value } + textAlpha.filter { it.isCreative || !locked.value } + if (tile != null) { text.withConsumer { if (tile.isLocked) tile.signText = it else tile.signText = HoloSignBlockEntity.truncate(it) }.withSupplier(tile::signText) + textRed.withConsumer { tile.textRed = it.coerceIn(0f, 1f) }.withSupplier(tile::textRed) + textGreen.withConsumer { tile.textGreen = it.coerceIn(0f, 1f) }.withSupplier(tile::textGreen) + textBlue.withConsumer { tile.textBlue = it.coerceIn(0f, 1f) }.withSupplier(tile::textBlue) + textAlpha.withConsumer { tile.textAlpha = it.coerceIn(0f, 1f) }.withSupplier(tile::textAlpha) locked.with(tile::isLocked) redstone.with(tile.redstoneControl::redstoneSetting) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/FloatInputWithFeedback.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/FloatInputWithFeedback.kt new file mode 100644 index 000000000..8ebb92db2 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/FloatInputWithFeedback.kt @@ -0,0 +1,18 @@ +package ru.dbotthepony.mc.otm.menu.input + +import ru.dbotthepony.mc.otm.core.GetterSetter +import ru.dbotthepony.mc.otm.menu.MatteryMenu +import kotlin.reflect.KMutableProperty0 + +class FloatInputWithFeedback(menu: MatteryMenu) : AbstractPlayerInputWithFeedback() { + override val input = menu.floatInput { consumer?.invoke(it) } + override val field = menu.mSynchronizer.computedFloat { supplier?.invoke() ?: 0f } + + constructor(menu: MatteryMenu, state: KMutableProperty0) : this(menu) { + with(state) + } + + constructor(menu: MatteryMenu, state: GetterSetter) : this(menu) { + with(state) + } +} From c52995541b13a3046cd10df4d0539bcec71b41c4 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 18:36:52 +0700 Subject: [PATCH 29/37] Mouse cursors support --- .../mc/otm/OverdriveThatMatters.java | 2 + .../mc/otm/client/ClientTickHandler.kt | 48 +++++++++++++++++++ .../otm/client/screen/panels/ColorPicker.kt | 10 ++++ .../otm/client/screen/panels/EditablePanel.kt | 6 +++ .../panels/button/AbstractButtonPanel.kt | 4 ++ .../panels/input/NetworkNumberInputPanel.kt | 11 +++-- .../screen/panels/input/TextInputPanel.kt | 4 ++ .../panels/util/AnalogScrollBarPanel.kt | 4 ++ .../panels/util/DiscreteScrollBarPanel.kt | 4 ++ 9 files changed, 88 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java index 424e15699..8f0b0c57b 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java +++ b/src/main/java/ru/dbotthepony/mc/otm/OverdriveThatMatters.java @@ -241,6 +241,7 @@ public final class OverdriveThatMatters { EVENT_BUS.addListener(EventPriority.LOWEST, ClientTickHandlerKt::onClientTick); EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientConnected); EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientDisconnected); + EVENT_BUS.addListener(EventPriority.NORMAL, ClientTickHandlerKt::onClientPostRender); EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::tooltipEvent); EVENT_BUS.addListener(EventPriority.NORMAL, QuantumBatteryItem.Companion::clientDisconnect); @@ -254,5 +255,6 @@ public final class OverdriveThatMatters { EVENT_BUS.addListener(EventPriority.NORMAL, ExosuitModel::onPlayerRendered); event.enqueueWork(GlobalEventHandlerKt::recordClientThread); + event.enqueueWork(ClientTickHandlerKt::createCursors); } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/ClientTickHandler.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/ClientTickHandler.kt index 0d812203e..4b456c734 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/ClientTickHandler.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/ClientTickHandler.kt @@ -2,14 +2,62 @@ package ru.dbotthepony.mc.otm.client import net.minecraftforge.client.event.ClientPlayerNetworkEvent import net.minecraftforge.event.TickEvent +import net.minecraftforge.event.TickEvent.RenderTickEvent +import org.lwjgl.glfw.GLFW import ru.dbotthepony.mc.otm.core.util.IConditionalTickable import ru.dbotthepony.mc.otm.core.util.ITickable import ru.dbotthepony.mc.otm.core.util.TickList +import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.isClient +import java.util.function.LongSupplier private val preTickList = TickList() private val postTickList = TickList() +var MODIFIED_CURSOR = false + private set + +private var MODIFIED_CURSOR_FRAMES = 3 + +private var ARROW_CURSOR by WriteOnce() +private var BEAM_CURSOR by WriteOnce() +private var HAND_CURSOR by WriteOnce() +private var NOT_ALLOWED_CURSOR by WriteOnce() +private var CROSSHAIR_CURSOR by WriteOnce() + +fun createCursors() { + ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR) + BEAM_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_IBEAM_CURSOR) + HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_POINTING_HAND_CURSOR) + NOT_ALLOWED_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_NOT_ALLOWED_CURSOR) + CROSSHAIR_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_CROSSHAIR_CURSOR) + + check(ARROW_CURSOR != 0L) { "Failed to create ARROW_CURSOR. Are we not on main game thread?" } + check(BEAM_CURSOR != 0L) { "Failed to create BEAM_CURSOR. Are we not on main game thread?" } + check(HAND_CURSOR != 0L) { "Failed to create HAND_CURSOR. Are we not on main game thread?" } + check(NOT_ALLOWED_CURSOR != 0L) { "Failed to create NOT_ALLOWED_CURSOR. Are we not on main game thread?" } + check(CROSSHAIR_CURSOR != 0L) { "Failed to create CROSSHAIR_CURSOR. Are we not on main game thread?" } +} + +enum class CursorType(val pointer: LongSupplier) { + ARROW(::ARROW_CURSOR), BEAM(::BEAM_CURSOR), HAND(::HAND_CURSOR), NOT_ALLOWED(::NOT_ALLOWED_CURSOR), CROSSHAIR(::CROSSHAIR_CURSOR); + + fun setTo() { + GLFW.glfwSetCursor(minecraft.window.window, pointer.asLong) + MODIFIED_CURSOR = true + MODIFIED_CURSOR_FRAMES = 2 + } +} + +fun onClientPostRender(event: RenderTickEvent) { + if (event.phase == TickEvent.Phase.END) { + if (MODIFIED_CURSOR_FRAMES-- <= 0 && MODIFIED_CURSOR) { + GLFW.glfwSetCursor(minecraft.window.window, ARROW_CURSOR) + MODIFIED_CURSOR = false + } + } +} + var LOGGED_IN = false private set diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt index 3c5d8bf4e..da7fec976 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/ColorPicker.kt @@ -7,6 +7,7 @@ import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import ru.dbotthepony.mc.otm.OverdriveThatMatters +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.playGuiClickSound import ru.dbotthepony.mc.otm.client.render.sprites.MatterySprite @@ -39,6 +40,9 @@ open class ColorBoxPanel( var markerPos = backgroundColor.toHSV() protected set + override val cursorType: CursorType + get() = if (isDisabled.get()) CursorType.NOT_ALLOWED else CursorType.CROSSHAIR + fun setColor(color: Either) { color.map( { markerPos = it.toHSV(); if (it.canRepresentHue()) backgroundColor = HSVColor(it.toHSV().hue, 1f, 1f).toRGBA() }, @@ -146,6 +150,9 @@ abstract class AbstractColorWangPanel( protected abstract fun onWangInput(newPosition: Float) + override val cursorType: CursorType + get() = if (isDisabled.get()) CursorType.NOT_ALLOWED else CursorType.ARROW + init { scissor = true } @@ -577,6 +584,9 @@ open class ColorPickerPanel( val middleStrip = EditablePanel(screen, this) val palette = ColorPalettePanel(screen, this, callback = { onPaletteChoose(it) }, isDisabled = isDisabled) + override val cursorType: CursorType + get() = if (isDisabled.get()) CursorType.NOT_ALLOWED else CursorType.ARROW + val hexInput = object : TextInputPanel(screen, middleStrip, width = 50f) { init { dock = Dock.RIGHT diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt index bde047208..bf05cdb7a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt @@ -17,6 +17,7 @@ import net.minecraft.world.inventory.Slot import net.minecraft.world.item.ItemStack import org.apache.logging.log4j.LogManager import ru.dbotthepony.mc.otm.SystemTime +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.moveMousePosScaled @@ -421,6 +422,7 @@ open class EditablePanel @JvmOverloads constructor( var acceptMouseInput = true var acceptKeyboardInput = true var grabMouseInput = false + open val cursorType: CursorType get() = CursorType.ARROW fun tryToGrabMouseInput(): Boolean { if (grabMouseInput) { @@ -898,6 +900,10 @@ open class EditablePanel @JvmOverloads constructor( if (scissor) { popScissorRect() } + + if (isHovered) { + cursorType.setTo() + } } fun updateAbsolutePosition() { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/AbstractButtonPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/AbstractButtonPanel.kt index e1da380a4..188b134de 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/AbstractButtonPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/AbstractButtonPanel.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.panels.button import com.mojang.blaze3d.platform.InputConstants import net.minecraft.client.gui.screens.Screen +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.playGuiClickSound import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel @@ -30,6 +31,9 @@ abstract class AbstractButtonPanel( } } + override val cursorType: CursorType + get() = if (isDisabled) CursorType.NOT_ALLOWED else CursorType.ARROW + override fun test(value: Int): Boolean { return value == InputConstants.MOUSE_BUTTON_LEFT } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/NetworkNumberInputPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/NetworkNumberInputPanel.kt index f37fc4501..8b81f30f7 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/NetworkNumberInputPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/NetworkNumberInputPanel.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.panels.input import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.core.TextComponent @@ -14,7 +15,7 @@ open class NetworkNumberInputPanel @JvmOverloads constructor( parent: EditablePanel<*>?, val networkValue: () -> BigDecimal, val callback: (BigDecimal) -> Unit, - val isAvailable: BooleanSupplier = BooleanSupplier { true }, + val isEnabled: BooleanSupplier = BooleanSupplier { true }, x: Float = 0f, y: Float = 0f, width: Float = 0f, @@ -35,7 +36,7 @@ open class NetworkNumberInputPanel @JvmOverloads constructor( screen = screen, parent = parent, callback = widget::accept, - isAvailable = { widget.allowSpectators || minecraft.player?.isSpectator != true }, + isEnabled = { widget.allowSpectators || minecraft.player?.isSpectator != true }, networkValue = networkValue, x = x, y = y, @@ -48,7 +49,7 @@ open class NetworkNumberInputPanel @JvmOverloads constructor( protected var inputStr = "" override fun mouseClickedInner(x: Double, y: Double, button: Int): Boolean { - if (!isAvailable.asBoolean) { + if (!isEnabled.asBoolean) { return true } @@ -59,7 +60,7 @@ open class NetworkNumberInputPanel @JvmOverloads constructor( super.tickInner() if (isFocusedThis) { - if (!isAvailable.asBoolean) { + if (!isEnabled.asBoolean) { killFocus() return } @@ -70,7 +71,7 @@ open class NetworkNumberInputPanel @JvmOverloads constructor( if (nextUpdateFromServer < System.currentTimeMillis()) { getOrCreateWidget().value = networkValue.invoke().toPlainString() inputStr = getOrCreateWidget().value - } else if (isAvailable.asBoolean) { + } else if (isEnabled.asBoolean) { if (inputStr != getOrCreateWidget().value) { inputStr = getOrCreateWidget().value diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt index a18bfcdf9..bd7a9111b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt @@ -13,6 +13,7 @@ import net.minecraft.client.gui.screens.Screen import net.minecraft.client.renderer.GameRenderer import net.minecraft.network.chat.Component import org.joml.Vector2i +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.isCtrlDown import ru.dbotthepony.mc.otm.client.isShiftDown @@ -151,6 +152,9 @@ open class TextInputPanel( open var backgroundColor = RGBAColor.BLACK open var isActive = true + override val cursorType: CursorType + get() = if (isActive) CursorType.BEAM else CursorType.NOT_ALLOWED + init { scissor = true dockPadding = DockProperty(2f, 2f, 2f, 2f) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/AnalogScrollBarPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/AnalogScrollBarPanel.kt index 83a7f8f7d..2e4f66893 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/AnalogScrollBarPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/AnalogScrollBarPanel.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.panels.util import com.mojang.blaze3d.platform.InputConstants import net.minecraft.client.gui.screens.Screen +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel @@ -26,6 +27,9 @@ open class AnalogScrollBarPanel( var isScrolling = false private set + override val cursorType: CursorType + get() = if (maxScroll.invoke(this@AnalogScrollBarPanel) <= 0) CursorType.NOT_ALLOWED else CursorType.ARROW + override fun innerRender(graphics: MGUIGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { if (this@AnalogScrollBarPanel.width == ScrollBarConstants.SLIM_WIDTH) { if (isScrolling) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/DiscreteScrollBarPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/DiscreteScrollBarPanel.kt index e5f9a23f2..c402ff43e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/DiscreteScrollBarPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/DiscreteScrollBarPanel.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.client.screen.panels.util import com.mojang.blaze3d.platform.InputConstants import net.minecraft.client.gui.screens.Screen +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import kotlin.math.roundToInt @@ -20,6 +21,9 @@ open class DiscreteScrollBarPanel( var isScrolling = false private set + override val cursorType: CursorType + get() = if (maxScroll.invoke(this@DiscreteScrollBarPanel) <= 0) CursorType.NOT_ALLOWED else CursorType.ARROW + override fun innerRender(graphics: MGUIGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { if (this@DiscreteScrollBarPanel.width == ScrollBarConstants.SLIM_WIDTH) { if (isScrolling) { From dbc793a5921b8a37ea5385cfedce4448c3c61ff4 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 18:53:12 +0700 Subject: [PATCH 30/37] Add hand cursor to progress gauge panel --- .../mc/otm/client/screen/widget/ProgressGaugePanel.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/ProgressGaugePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/ProgressGaugePanel.kt index 97f7e4205..8a9267fe6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/ProgressGaugePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/ProgressGaugePanel.kt @@ -6,6 +6,7 @@ import mezz.jei.api.recipe.RecipeType import net.minecraft.ChatFormatting import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.render.UVWindingOrder import ru.dbotthepony.mc.otm.client.render.WidgetLocation @@ -94,6 +95,9 @@ open class ProgressGaugePanel( return recipeTypeSupplier != null && value == InputConstants.MOUSE_BUTTON_LEFT } + override val cursorType: CursorType + get() = if (recipeTypeSupplier != null) CursorType.HAND else CursorType.ARROW + override fun onClick(mouseButton: Int) { val recipeTypeSupplier = recipeTypeSupplier ?: return JEIPlugin.RUNTIME.recipesGui.showTypes(recipeTypeSupplier.get()) From 70ec49e5460743b4e53392b139179ab159227d94 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 18:58:09 +0700 Subject: [PATCH 31/37] Display panel's mouse cursor if it grabs mouse input --- .../ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt index bf05cdb7a..8cea8bc95 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt @@ -901,7 +901,7 @@ open class EditablePanel @JvmOverloads constructor( popScissorRect() } - if (isHovered) { + if (isHovered || grabMouseInput) { cursorType.setTo() } } From c69781c22c0d091a2d247f235ad948b215babae8 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 19:08:20 +0700 Subject: [PATCH 32/37] Fix cursor wars between panels when grabbing mouse input --- .../mc/otm/client/screen/MatteryScreen.kt | 3 +++ .../mc/otm/client/screen/panels/EditablePanel.kt | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt index 1121a8146..d202792dd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt @@ -672,6 +672,9 @@ abstract class MatteryScreen(menu: T, inventory: Inventory, tit panel.render(wrap, mouseXf, mouseYf, partialTick) } + if (!panels.asReversed().any { it.updateCursor0() }) + panels.asReversed().any { it.updateCursor1() } + RenderSystem.depthFunc(GL11.GL_LESS) MinecraftForge.EVENT_BUS.post(Background(this, graphics, mouseX, mouseY)) RenderSystem.disableDepthTest() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt index 8cea8bc95..f0064faec 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EditablePanel.kt @@ -900,10 +900,24 @@ open class EditablePanel @JvmOverloads constructor( if (scissor) { popScissorRect() } + } - if (isHovered || grabMouseInput) { + fun updateCursor0(): Boolean { + if (grabMouseInput) { cursorType.setTo() + return true } + + return children.any { it.updateCursor0() } + } + + fun updateCursor1(): Boolean { + if (isHovered) { + cursorType.setTo() + return true + } + + return children.any { it.updateCursor1() } } fun updateAbsolutePosition() { From f4bbf54095d011790e4e0ea97b2a27f73075a8b3 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 19:37:36 +0700 Subject: [PATCH 33/37] Android station coloring --- .../advancements/AndroidAdvancementsData.kt | 4 ++-- .../advancements/MachineAdvancementsData.kt | 2 +- .../mc/otm/datagen/blocks/BlockModels.kt | 3 +++ .../mc/otm/datagen/blocks/BlockStates.kt | 2 +- .../mc/otm/datagen/items/ItemModels.kt | 2 +- .../ru/dbotthepony/mc/otm/datagen/lang/English.kt | 2 +- .../ru/dbotthepony/mc/otm/datagen/lang/Russian.kt | 2 +- .../mc/otm/datagen/loot/LootTablesData.kt | 2 +- .../otm/datagen/recipes/CraftingTableRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 1 + .../ru/dbotthepony/mc/otm/datagen/tags/Tags.kt | 2 +- .../mc/otm/block/tech/AndroidStationBlock.kt | 3 ++- .../dbotthepony/mc/otm/registry/MBlockEntities.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MBlocks.kt | 2 +- .../ru/dbotthepony/mc/otm/registry/MItems.kt | 4 ++-- .../textures/block/android_station_base/black.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/blue.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/brown.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/cyan.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/gray.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/green.png | Bin 0 -> 593 bytes .../block/android_station_base/light_blue.png | Bin 0 -> 593 bytes .../block/android_station_base/light_gray.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/lime.png | Bin 0 -> 593 bytes .../block/android_station_base/magenta.png | Bin 0 -> 593 bytes .../block/android_station_base/orange.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/pink.png | Bin 0 -> 593 bytes .../block/android_station_base/purple.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/red.png | Bin 0 -> 593 bytes .../textures/block/android_station_base/white.png | Bin 0 -> 607 bytes .../block/android_station_base/yellow.png | Bin 0 -> 593 bytes 31 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/yellow.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AndroidAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AndroidAdvancementsData.kt index 2a9ed3bdf..b9e4a4e01 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AndroidAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AndroidAdvancementsData.kt @@ -148,7 +148,7 @@ fun addAndroidAdvancements(serializer: Consumer, lang: Matter val researchAnything = AdvancementBuilder() .parent(root) .display( - itemStack = ItemStack(MItems.ANDROID_STATION), + itemStack = ItemStack(MItems.ANDROID_STATION[null]!!), title = translation.add("research_anything", "New Trick") { russian("Новый фокус") }, @@ -300,7 +300,7 @@ fun addAndroidAdvancements(serializer: Consumer, lang: Matter AdvancementBuilder() .parent(researchAnything) .display( - itemStack = ItemStack(MItems.ANDROID_STATION), + itemStack = ItemStack(MItems.ANDROID_STATION[null]!!), title = translation.add("research_all", "Mecha-Agnomination") { russian("Меха-зумие") }, diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 002648a46..7b2d4d3b7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -177,7 +177,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter battery.make(serializer, it, translation) } - val station = CraftEntry(MItems.ANDROID_STATION, "Android Home Page", + val station = CraftEntry(MItems.ANDROID_STATION.values, "Android Home Page", russianName = "Домашняя страница андроидов", russianSuffix = "Только пользоваться этим устройством могут вёдра с болтами", englishSuffix = "Except only buckets of bolts can use this thing") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt index ab24c2edf..56051f317 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockModels.kt @@ -42,5 +42,8 @@ fun addBlockModels(provider: MatteryBlockModelProvider) { colored("powered_blast_furnace", "_idle", mapOf("texture" to "induction_furnace_offline", "particle" to "induction_furnace_offline")) colored("powered_blast_furnace", "_error", mapOf("texture" to "induction_furnace_offline", "particle" to "induction_furnace_offline")) colored("powered_blast_furnace", "_working", mapOf("texture" to "induction_furnace", "particle" to "induction_furnace")) + + colored("android_station", "_idle", mapOf("1" to "android_station_base", "particle" to "android_station_base")) + colored("android_station", "_working", mapOf("2" to "android_station_base", "particle" to "android_station_base")) } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt index 0bee7200b..5d1e53aca 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/BlockStates.kt @@ -21,7 +21,7 @@ import ru.dbotthepony.mc.otm.registry.MRegistry fun addBlockStates(provider: MatteryBlockStateProvider) { provider.block(MBlocks.BLACK_HOLE) - provider.block(MBlocks.ANDROID_STATION) + provider.block(MBlocks.ANDROID_STATION.values) provider.ore(MBlocks.DEEPSLATE_TRITANIUM_ORE) provider.ore(MBlocks.TRITANIUM_ORE) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index d0dce2d4b..24c4e1784 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -7,7 +7,7 @@ import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MRegistry fun addItemModels(provider: MatteryItemModelProvider) { - provider.block(MItems.ANDROID_STATION, "android_station_working") + provider.coloredWithBaseBlock(MItems.ANDROID_STATION, "android_station", "_working") provider.coloredWithBaseBlock(MItems.BATTERY_BANK, "matter_capacitor_bank") provider.coloredWithBaseBlock(MItems.MATTER_CAPACITOR_BANK, "matter_capacitor_bank") provider.block(MItems.PATTERN_STORAGE) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 54bb3166d..912698d02 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -416,7 +416,7 @@ private fun death(provider: MatteryLanguageProvider) { private fun blocks(provider: MatteryLanguageProvider) { with(provider.english) { - add(MBlocks.ANDROID_STATION, "Android Station") + addBlock(MBlocks.ANDROID_STATION.values, "Android Station") add(MBlocks.ANDROID_CHARGER, "Wireless Charger") add(MBlocks.ANDROID_CHARGER, "desc", "Charges nearby androids and exopacks") addBlock(MBlocks.BATTERY_BANK.values, "Battery Bank") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 203d09438..33373595b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -418,7 +418,7 @@ private fun death(provider: MatteryLanguageProvider) { private fun blocks(provider: MatteryLanguageProvider) { with(provider.russian) { - add(MBlocks.ANDROID_STATION, "Станция андроидов") + addBlock(MBlocks.ANDROID_STATION.values, "Станция андроидов") add(MBlocks.ANDROID_CHARGER, "Беспроводной зарядник") add(MBlocks.ANDROID_CHARGER, "desc", "Заряжает ближайших андроидов и экзопаки") addBlock(MBlocks.BATTERY_BANK.values, "Банк аккумуляторов") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index 7867002b7..ae5ead785 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -143,7 +143,7 @@ fun addLootTables(lootTables: LootTables) { lootTables.tile(MBlocks.CHEMICAL_GENERATOR) lootTables.tile(MBlocks.HOLO_SIGN, "isLocked") lootTables.tile(MBlocks.STORAGE_CABLE) - lootTables.tile(MBlocks.ANDROID_STATION) + lootTables.tile(MBlocks.ANDROID_STATION.values) lootTables.tile(MBlocks.ANDROID_CHARGER) lootTables.tile(MBlocks.BATTERY_BANK.values) lootTables.tile(MBlocks.DRIVE_VIEWER) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 3e51f424a..179217e2f 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -321,7 +321,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) { .build(consumer) // станция андроида - MatteryRecipe(MItems.ANDROID_STATION, category = machinesCategory) + MatteryRecipe(MItems.ANDROID_STATION[null]!!, category = machinesCategory) .row(MItems.ELECTRIC_PARTS, MItemTags.ADVANCED_CIRCUIT, MItems.ELECTRIC_PARTS) .row(MItemTags.TRITANIUM_PLATES, MItems.MACHINE_FRAME, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, MItems.ELECTRIC_PARTS, MItemTags.TRITANIUM_PLATES) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 98ba05da7..88e9b0fd9 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -288,6 +288,7 @@ fun addPainterRecipes(consumer: RecipeOutput) { MItems.POWERED_FURNACE, MItems.POWERED_BLAST_FURNACE, MItems.MATTER_RECYCLER, + MItems.ANDROID_STATION, ) for (list in blocks) { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 760ccb2e7..5042d8d1c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -180,7 +180,7 @@ fun addTags(tagsProvider: TagsProvider) { tagsProvider.requiresPickaxe(MBlocks.ENERGY_CABLES.values, Tiers.STONE) tagsProvider.requiresPickaxe(listOf( - MBlocks.ANDROID_STATION, + *MBlocks.ANDROID_STATION.values.toTypedArray(), *MBlocks.BATTERY_BANK.values.toTypedArray(), *MBlocks.MATTER_DECOMPOSER.values.toTypedArray(), *MBlocks.MATTER_CAPACITOR_BANK.values.toTypedArray(), diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt index fcc2b1996..49ac0670d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt @@ -5,6 +5,7 @@ import net.minecraft.network.chat.Component import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag import net.minecraft.world.level.BlockGetter @@ -29,7 +30,7 @@ import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.shapes.BlockShapes -class AndroidStationBlock : MatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { +class AndroidStationBlock(val color: DyeColor?) : MatteryBlock(DEFAULT_MACHINE_PROPERTIES), EntityBlock { override fun use( blockState: BlockState, level: Level, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index 37a6b2d81..d79c1d9a9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -44,7 +44,7 @@ object MBlockEntities { return registry.register(name) { BlockEntityType.Builder.of(factory, *blocks.map { it.get() }.toTypedArray()).build(null) } } - val ANDROID_STATION by register(MNames.ANDROID_STATION, ::AndroidStationBlockEntity, MBlocks::ANDROID_STATION) + val ANDROID_STATION by register(MNames.ANDROID_STATION, ::AndroidStationBlockEntity, *MBlocks.ANDROID_STATION.asSupplierArray()) val BATTERY_BANK by register(MNames.BATTERY_BANK, ::BatteryBankBlockEntity, *MBlocks.BATTERY_BANK.asSupplierArray()) val MATTER_DECOMPOSER by register(MNames.MATTER_DECOMPOSER, ::MatterDecomposerBlockEntity, *MBlocks.MATTER_DECOMPOSER.asSupplierArray()) val MATTER_CAPACITOR_BANK by register(MNames.MATTER_CAPACITOR_BANK, ::MatterCapacitorBankBlockEntity, *MBlocks.MATTER_CAPACITOR_BANK.asSupplierArray()) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index 89ad44bb2..828c32f80 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -86,7 +86,7 @@ object MBlocks { registry.register(bus) } - val ANDROID_STATION: Block by registry.register(MNames.ANDROID_STATION) { AndroidStationBlock() } + val ANDROID_STATION = registry.coloredWithBase(MNames.ANDROID_STATION) { color, _ -> AndroidStationBlock(color) } val ANDROID_CHARGER: Block by registry.register(MNames.ANDROID_CHARGER) { AndroidChargerBlock() } val BATTERY_BANK = registry.coloredWithBase(MNames.BATTERY_BANK) { color, _ -> BatteryBankBlock(color) } val MATTER_DECOMPOSER = registry.coloredWithBase(MNames.MATTER_DECOMPOSER) { color, _ -> MatterDecomposerBlock(color) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index c1ac8781c..edbe1b5a5 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -55,7 +55,7 @@ object MItems { conf to registry.register("${conf.name.lowercase()}_energy_cable") { BlockItem(MBlocks.ENERGY_CABLES[conf]!!, DEFAULT_PROPERTIES) } }) - val ANDROID_STATION: BlockItem by registry.register(MNames.ANDROID_STATION) { BlockItem(MBlocks.ANDROID_STATION, DEFAULT_PROPERTIES) } + val ANDROID_STATION = registry.coloredWithBase(MNames.ANDROID_STATION) { color, _ -> BlockItem(MBlocks.ANDROID_STATION[color]!!, DEFAULT_PROPERTIES) } val ANDROID_CHARGER: BlockItem by registry.register(MNames.ANDROID_CHARGER) { BlockItem(MBlocks.ANDROID_CHARGER, DEFAULT_PROPERTIES) } val BATTERY_BANK = registry.coloredWithBase(MNames.BATTERY_BANK) { color, _ -> BlockItem(MBlocks.BATTERY_BANK[color]!!, DEFAULT_PROPERTIES) } val MATTER_DECOMPOSER = registry.coloredWithBase(MNames.MATTER_DECOMPOSER) { color, _ -> BlockItem(MBlocks.MATTER_DECOMPOSER[color]!!, DEFAULT_PROPERTIES) } @@ -114,7 +114,7 @@ object MItems { machines.addAll(POWERED_BLAST_FURNACE.asSupplierArray()) machines.addAll(POWERED_SMOKER.asSupplierArray()) - machines.add(::ANDROID_STATION) + machines.addAll(ANDROID_STATION.asSupplierArray().iterator()) machines.add(::ANDROID_CHARGER) machines.addAll(BATTERY_BANK.asSupplierArray().iterator()) machines.add(::ENERGY_COUNTER) diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/black.png new file mode 100644 index 0000000000000000000000000000000000000000..222b526b5599f9ec57d29040433ddf25a5e481eb GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&TA^S!ro`IXNYHd1Wy%F*P+cQBesA32CE%H3~otj3q&S!3+-1Zlr-Y zN#5=*%z`{VpMV_B0*}aI1_r+UAk1jN8ms~oWH0gbb!C6S$il-;rl^bsOH-_0JmAqg zv1n2SL;UB-(`TNnDY&D1bgK89x!E@a1U|W(unKcJx{=G7ar*1r2U)^XI(VIKv3wK= zTD5rtXPlSiQKjvi|CznLogH8AdS4QL-61$dhC57A$@Pok&f>#%D<=ucd&#g&JL}Cd z;p4;=Q5^YVKUJivm4AyJe|jWQY;EjJmn;8ve5}iv7qLf<=PA!JnWu9MdF)cptHiB=`NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&TOSCO!RbL*wbjrnAMw#MIQ(lvQ)oH7nG&Enop^U@Qsp3ubV5b|VeM zN%D4gVHV`^`2^%}7I;J!GcfS&2Vq7F)?gK&AbW|YuPgftMiw4U_CvK%K&LUB_H=O! z(Kvs#-;l4#LBRDn&ygcl=NrTg<|S?ud{LHp;ZU0SM~2g)Hcj7-F-2u8Sejz};sKA| ziA9qt7~(%qo<8$rO~D=Aqf@=-%+0kh#wGTdQ`O0HiNcNQPETRBNk-b;pM+F5Uw z2_Gk}h~mf>`>7&Tt^8Z;_|qeaVrye(x?K6U<6~XUyofz=JWqL+$vmB7$Yb{^`|kHB zd&Y%#4u^^}_nZKFOSQx`q9i4;B-JXpC>2OC7#SFu=o%OTQHY_Ll>rE88yHv_7*tK3 z{}x3NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`2~B#WV+%d{^}%cMUNyF*P-{07IDwb9u8{TK|C>7)yfuf*Bm1-ADs* zlDyqrm<4%!J^?wL1s;*b3=DkxL735kHCP2G$X?><>&pIuk%fno{ZMTb&}j^(JzX3_ zG|pe`H{@$_5O96YbL2?X`37-=d5PNuUzBBDIFx4ok>RwcP1CnyOi>vNmZn(0c)+7~ zV$q}uhWO8ur_VfDQ*cN3=v41HbF*&<2z+umVHM_dbR(BD_mW|mcGjC^ z!pDg#qB!!!eyT`SEB_Wd{`5$q*xJ~cE?55T_*j=SFJg}z&r_adGEe6i^4Pt~zWY7O zo^j!w!=d8LJtu(PQY~?fC`m~yNwrEYN(E93Mg~SEx(0?o6k=#*WdK6j1_o9J233>i zzeUlIo1c=IR*72!_c`@Ipau=N4JDbmsl_FUxdjM4CLxAKRtA<<2Ide;Ho8AF2kK$) MboFyt=akR{09pFLr2qf` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f3d1f0e96661ac33e1e2f605beab6d2effdc3e GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&XXWO5uto(WYLpwuxe5Vrpt?{Bfy*83oe%NA?3XFqQ=Q1v5B2yO9Rs zBze2LFbnedd;)Sf3p^r=85sD0s`&OZTCfJI00r4gJbhi+Uof)paIzn&jRHE2;k2iV zV~EE2tNn(2O%4LC&v}jmc8n=1W5LoC>lY7r z^iC|ARKXDcdGhp`Cu<7s=pLQwJ!fwA4FQ2qE+?$QoQ`hfa%P-oP2>WqDL-JLi99Z*OPE*Sp@AgkN_EPLbgbQ&e*OqPVm8u-(c@g7RK6EYr?< zvrPCnaYYnIzSvI{scPllV#l8zNfcWfJJaRLza1aza^^+sk>h#FvrOjc977(vSJ`*J zN7*wjymL5IoVn)&&|9h{t`Q|Ei6yC4$wjF^iowXh$VAt`5Qsty&8!SSNZY``%D|v% z^8B|b8glbfGSez?Yv4Yo9thN+0k@$fGdH!kBr&%Dp~ob|(8$Wb(#pUbV#!ALhvq;% N44$rjF6*2UngCm}!NC9k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e51a6dacff691b71f2f0eb7739871f2bec5bbc GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&SUjD|2gm8wVFVCpR%MF*P+cZ9PK+W3#^k>OMdXj3q&S!3+-1Zlr-Y zN#5=*%z`{VpMV_B0*}aI1_r+UAk1jN8ms~oWH0gbb!C6S$il-;rl^bsOH-_0JmAqg zv1n2SL;UB-(`TNnDY&D1bgK89x!E@a1U|W(unKcJx{=G7ar*1r2U)^XI(VIKv3wK= zTD5rtXPlSiQKjvi|CznLogH8AdS4QL-61$dhC57A$@Pok&f>#%D<=ucd&#g&JL}Cd z;p4;=Q5^YVKUJivm4AyJe|jWQY;EjJmn;8ve5}iv7qLf<=PA!JnWu9MdF)cptHiB=`NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&YESaqlF_pe*T-Tp2MjF*P+cD<5IU5Ya_zUdjM9FqQ=Q1v5B2yO9Rs zBze2LFbnedd;)Sf3p^r=85sEXgD|57Yp@DXkiEpy*OmPRBMT2F`=Qz>pwk#md%8G= zXq>;=Z^+l=AmI9(=g5(&^9|w#^AfiSz9`GQa460EBg1J?o2GBan4&TkEKRX~@qkC~ z#G*+R4Dp{QPoH_Rrr?h5(W%~Z=4Rgz5cuSB!Ya(^=teGQ#_6wfA7lwn>ELy`#qv=g zXw~KooN->3N0qj7{%7{~c6NNd>wQW1b%)>-8SXGeCD$*CJBtt7t(+t%?$YVheO4gdrknorCQ<|QIe8al4_M)lnSI6j0}uSbPWuFD8$gr$^eA44GgRd45}v2 ze~Y3aH$NpatrE8e?sMvaKn)sj8%i>BQ;SOya|;l9OhOEetPCuz49p>xY;=EU4%EZo M>FVdQ&MBb@0AB~dr~m)} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..b54f916ec84b62199ca2db3b2ae020111dd8d5ce GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q&Yp~+f5f8wOoJIddqDwF)=kYHO;!2y4|a0v$!?_H87S0`2{mLJiCzw z;v{*yyD$s#_{XE)7O>#1tSX&C;Oq=D4^3APJ6mI zhG?9>+Hc6$6%6s8Cr_VwvZmmU?$N25D@s}a>6Ri>F7o-XU6HTb01_0PwC)wy2bKQ zAZXR*4V-aamPeJgbN*-c_I7rBz3Y8R_;rWi6dCR?MJ3lSiaU!B+pU}=DDNf1GVQE4 z%Y=^;S445-i~UrQs#g9jcKqp)M6tE8GhMFy+wrk3XI{h}Ii9CH%VeI;G32p(m3{Yn zls)6ZJBLHXnR`wEy`@^>8c~vxSdwa$T$Bo=7>o>zOmqzlfhfe#%*p_Sv<(cb3=FC! z&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dQ3tLjjRkTtqjZ|mTYu?Xb#lF N;OXk;vd$@?2>@j_#EAd^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..86085a64d7b78f1a304f511b89e417d1120a608a GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`6GY+`785j*j}Co@OyIF*P-{q@?JaoYZ9A8Y!R##*!evUYWv7iF0j4yBoYWH>Eq)Aa2aQ&h%+r76}g9`NX$ zSTw1EA^!8^=`&B(6x`80I@Np5-0T|y0-sz?ScN$q-N@z4IQ@0*gDl}G9lTDrSUw5_ zt=hbSGtSHMsM2=M|IFUr&W^8ly)OyB?hu?J!yTrmUO_QmvAUQh^kMk%5tku7M#Cg&3My8Gw+sfq|8QLDl5> zZ&5Vl=BH$)RpQpbeNH_Ps6hj6LrG?CYH>+oZUI7%Nr<75m4T&|fjPvIjqVT4fqED` MUHx3vIVCg!017I@H2?qr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..335330cdc087f88da56f934a9bec147c77611e13 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`6WvA}K3GbGC`+@0Jh~6H`-D^KBLgn_!@h zljQC0!Ys(+^9jh|EbxddW?K;VL`h0wNvc(HQ7VvPFfuSQ(KRpxq7XwfD+3VHHZZUxX-Bv0ySvBZ79jiO)V}-%q>9ZF$pm=vNEu=GBAf&veEsaIZzLS Mr>mdKI;Vst0E3Fb(EtDd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1b1484e5da1b09c2cc6cf2fe10534b70a66e8a GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`0#nla^b|-D{XE)7O>#1tSX&C;Oq=D4^3APJ6mI zhG?9>+Hc6$6%6s8Cr_VwvZmmU?$N25D@s}a>6Ri>F7o-XU6HTb01_0PwC)wy2bKQ zAZXR*4V-aamPeJgbN*-c_I7rBz3Y8R_;rWi6dCR?MJ3lSiaU!B+pU}=DDNf1GVQE4 z%Y=^;S445-i~UrQs#g9jcKqp)M6tE8GhMFy+wrk3XI{h}Ii9CH%VeI;G32p(m3{Yn zls)6ZJBLHXnR`wEy`@^>8c~vxSdwa$T$Bo=7>o>zOmqzlfhfe#%*p_Sv<(cb3=FC! z&wq=eAvZrIGp!Q02JUm}fj|u!a2rZ8b5n~;5_1a>dQ3tLjjRkTtqjZ|mTYu?Xb#lF N;OXk;vd$@?2>_(L#2)|v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..f06305347175047b8286444cd0661649817d1456 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`57FymvDA-WT$JEfEkC6H`-DTOG)~FN$Zmv{n&N17k^$UoeBivm0q3 zPLj8~3$q}P&nF;T1w5N+> zh{pM={f2x^4g#*vd5#>ZI^Q5}FfVbN;ES@%3y0FoKQf#awQ2fxj43K(!O|4#7Y}&! zPAr;K!4Us>^7NS}YYOh@9-ZnvXKwZl0fA30C#=Gpj&9^~W}N;y_d%BMln!2}TPz<1 zf>v$bz!~Rdc~ogT=YM8zZ)eBXyWW?CUv~&jk>L(gRC4{IxU=}M-O5RV@?J75)6ROc zO!zo)MHENA*iRLyYUSTz$DbZa6k8iR)8)#)9Utp*=0)t0<9W)nOy=nvLms}H3 z*)uM@b2wC-x#tAXTdF0l5hW>!C8<`)MX5lF!N|bKMAyI&h(Zj_tPDU%+rYrez@TdK z{I@6?a`RI%(<*Um;6A4w2-Khfx1l66H?_DVF}DDr$0Wqi$jZRd%D^0A$wv2w=0H6R Mp00i_>zopr0BnoG-T(jq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..a034976ea680423a036ff684c1781c1645eda733 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`6HWeYb08zHMLjxqFqEn3$TH+N#9zJ=raDBR4+-YG5o0@(X5gcy=QV z#7XjYcVQOf@%aSga29w(7BevL?FV5-3)Wy2pdfpRr>`sf3q}?mPWD5!Q9!3Loc45a z4AD4$wcn7h$w9#NInR+JRp%ST4dx|o6MRvYdEro+`A3G+qBc$6jxj}LELfUi{o(x-J?^z=giH%At3O{<%Ct3)6tDw&WzJv=RU|1p3=eVbc^Mq zK+vkq8#v>X0T N!PC{xWt~$(69C}a$D9BF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd4eb91269b5d8f238dc08aa1b77c3d6e461ff4 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`1EG-VCJ~g{n(S)K-d#iK(fn1xl4g$u>V^@16kEz*rLG7tG-B>_!@h zljQC0!Ys(+^9jh|EbxddW?K;VL`h0wNvc(HQ7VvPFfuSQ(KRpxq7XwfD+3VHHZZUxX-Bv0ySvBZ79jiO)V}-%q>9ZF$pm=vNEu=GBAf&veEsaIZzLS Mr>mdKI;Vst0F9HvYXATM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/red.png new file mode 100644 index 0000000000000000000000000000000000000000..705ef47c17424a136d6847d79ce501b666851666 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`07SnI1*C87hi%RF%ZU#MIQ(awWwpWu$VSw&?>kFqQ=Q1v5B2yO9Rs zBze2LFbnedd;)Sf3p^r=85sEXgD|57Yp@DXkiEpy*OmPRBMT2F`=Qz>pwk#md%8G= zXq>;=Z^+l=AmI9(=g5(&^9|w#^AfiSz9`GQa460EBg1J?o2GBan4&TkEKRX~@qkC~ z#G*+R4Dp{QPoH_Rrr?h5(W%~Z=4Rgz5cuSB!Ya(^=teGQ#_6wfA7lwn>ELy`#qv=g zXw~KooN->3N0qj7{%7{~c6NNd>wQW1b%)>-8SXGeCD$*CJBtt7t(+t%?$YVheO4gdrknorCQ<|QIe8al4_M)lnSI6j0}uSbPWuFD8$gr$^eA44GgRd45}v2 ze~Y3aH$NpatrE8e?sMvaKn)sj8%i>BQ;SOya|;l9OhOEetPCuz49p>xY;=EU4%EZo M>FVdQ&MBb@029u@djJ3c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/android_station_base/white.png new file mode 100644 index 0000000000000000000000000000000000000000..2f53ec0709b94a6e08c670ec27f4de60d65e28a8 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU@8gn3ua&_n|#&+#7pva zcVYP7-hXC4kjGiz5n0T@zz1aW?Ps)L4ORgPvX^-Jy0X7uWZ~gtKU5n9w1ZK=)5S5w z;`G~z8@*TzMO@GG%+!@*W;=An>~_c2z4D3se~5P_D0Xz)EB+47-hB3&^8?Pq%;vpE z&-EEgZrt=G%+m8+t@)B2EAQX9yT7~epB>(&BuC;E>SLRIR zeuoAR1ttsO6#~LNEfVE_Qw2OC7#SFu z=o%OTQHY_Ll>rE88yHv_7*tK3{}x3NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfgLP8P}68``H zfBW`rZEbB+Q`5`K Date: Thu, 4 Jan 2024 19:40:11 +0700 Subject: [PATCH 34/37] Always display transfer history when pressing shift --- .../dbotthepony/mc/otm/client/screen/widget/MatterGaugePanel.kt | 2 +- .../dbotthepony/mc/otm/client/screen/widget/PowerGaugePanel.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/MatterGaugePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/MatterGaugePanel.kt index c31f5db8a..b4ce06a6e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/MatterGaugePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/MatterGaugePanel.kt @@ -172,7 +172,7 @@ open class ProfiledMatterGaugePanel( profiledWidget.weightedTransfer, )) - if (minecraft.window.isShiftDown && minecraft.options.advancedItemTooltips) { + if (minecraft.window.isShiftDown) { it.add(TextComponent("---")) val values = IntArrayList() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/PowerGaugePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/PowerGaugePanel.kt index 51bc1a6c4..537b71f20 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/PowerGaugePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/widget/PowerGaugePanel.kt @@ -131,7 +131,7 @@ open class ProfiledPowerGaugePanel( profiledWidget.weightedTransfer, )) - if (minecraft.window.isShiftDown && minecraft.options.advancedItemTooltips) { + if (minecraft.window.isShiftDown) { it.add(TextComponent("---")) val values = IntArrayList() From 54ba7e94c6e444f5bbb438832d4b9814db7fb653 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 19:59:57 +0700 Subject: [PATCH 35/37] Cursor type for android research tree --- .../mc/otm/client/screen/tech/AndroidStationScreen.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/AndroidStationScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/AndroidStationScreen.kt index 989e501af..3bac104b9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/AndroidStationScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/AndroidStationScreen.kt @@ -15,6 +15,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchManager import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability +import ru.dbotthepony.mc.otm.client.CursorType import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.playGuiClickSound @@ -284,6 +285,9 @@ private class AndroidResearchButton( } } + override val cursorType: CursorType + get() = if (node.isAnyBlockerResearchedIndirect && !(parent?.screen as AndroidStationScreen).menu.player.isCreative) CursorType.NOT_ALLOWED else if (node.canResearch && !node.isResearched) CursorType.HAND else CursorType.ARROW + override fun innerRender(graphics: MGUIGraphics, mouseX: Float, mouseY: Float, partialTick: Float) { val hovered = screen.hoveredResearch @@ -394,12 +398,13 @@ private class AndroidResearchButton( MatteryPlayerNetworkChannel.sendToServer(AndroidResearchRequestPacket(node.type)) } ) + + playGuiClickSound() } else { MatteryPlayerNetworkChannel.sendToServer(AndroidResearchRequestPacket(node.type)) + playGuiClickSound() } } - - playGuiClickSound() } return true From 486c9b00c9629f1da75f380b7164c858caeb1580 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 20:01:14 +0700 Subject: [PATCH 36/37] Remove text from text field when doing right mouse click, and text field is not multiline --- .../screen/decorative/HoloSignScreen.kt | 2 +- .../screen/panels/input/TextInputPanel.kt | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt index 2f45327b1..219e89685 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/decorative/HoloSignScreen.kt @@ -27,7 +27,7 @@ class HoloSignScreen(menu: HoloSignMenu, inventory: Inventory, title: Component) val input = NetworkedStringInputPanel(this, frame, backend = menu.text) input.dock = Dock.FILL - input.multiLine = true + input.isMultiLine = true val lock = CheckBoxLabelInputPanel(this, frame, menu.locked, TranslatableComponent("otm.gui.lock_holo_screen")) lock.dock = Dock.BOTTOM diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt index bd7a9111b..ae8dfaf87 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/input/TextInputPanel.kt @@ -86,19 +86,19 @@ open class TextInputPanel( private val cursorLine = this@TextInputPanel.cursorLine private val cursorCharacter = this@TextInputPanel.cursorRow private val selections = Int2ObjectAVLTreeMap(this@TextInputPanel.selections) - private val multiLine = this@TextInputPanel.multiLine + private val multiLine = this@TextInputPanel.isMultiLine fun apply() { this@TextInputPanel.lines.clear() - if (this@TextInputPanel.multiLine) + if (this@TextInputPanel.isMultiLine) this@TextInputPanel.lines.addAll(lines) else this@TextInputPanel.lines.add(lines.joinToString("")) this@TextInputPanel.selections.clear() - if (this@TextInputPanel.multiLine && multiLine) + if (this@TextInputPanel.isMultiLine && multiLine) this@TextInputPanel.selections.putAll(selections) this@TextInputPanel.cursorRow = cursorCharacter @@ -129,7 +129,7 @@ open class TextInputPanel( } var debugDraw = false - var multiLine = false + var isMultiLine = false set(value) { if (field == value) return @@ -279,7 +279,7 @@ open class TextInputPanel( if (index < 0) throw IndexOutOfBoundsException("negative index $index") - if (!multiLine && index != 0) + if (!isMultiLine && index != 0) throw IllegalStateException("Not accepting newlines") lines.ensureCapacity(index) @@ -305,7 +305,7 @@ open class TextInputPanel( } fun insertLine(index: Int, value: String = "") { - if (!multiLine && lines.isNotEmpty()) + if (!isMultiLine && lines.isNotEmpty()) throw IllegalStateException("Not accepting newlines") lines.ensureCapacity(index) @@ -461,7 +461,7 @@ open class TextInputPanel( cursorRow = 0 textCache = null - if (multiLine) { + if (isMultiLine) { lines.addAll(value.split(NEWLINES)) } else { lines.add(value.replace(NEWLINES, "")) @@ -668,7 +668,7 @@ open class TextInputPanel( } if (key == InputConstants.KEY_RETURN) { - if (multiLine) { + if (isMultiLine) { if (!minecraft.window.isShiftDown && !minecraft.window.isCtrlDown) wipeSelection() @@ -905,7 +905,7 @@ open class TextInputPanel( wipeSelection() pushbackSnapshot() - if (multiLine) { + if (isMultiLine) { var index = cursorRow + (0 until cursorLine).iterator().map { this[it]?.length ?: 0 }.reduce(0, Int::plus) val insert = minecraft.keyboardHandler.clipboard.replace("\t", " ").filter { acceptsCharacter(it, 0, index++) }.split(NEWLINES).toMutableList() val actualLastSize = insert.lastOrNull()?.length ?: 0 @@ -1068,7 +1068,7 @@ open class TextInputPanel( wipeSelection() - if (!multiLine) + if (!isMultiLine) cursorLine = 0 var line = this[cursorLine] @@ -1125,7 +1125,7 @@ open class TextInputPanel( var topPadding = dockPadding.top - if (multiLine) { + if (isMultiLine) { val heightInLines = ((height - dockPadding.top - dockPadding.bottom) / (font.lineHeight + rowSpacing)).toInt() if (heightInLines > 0) { @@ -1301,6 +1301,8 @@ open class TextInputPanel( isSelecting = true tryToGrabMouseInput() + } else if (button == InputConstants.MOUSE_BUTTON_RIGHT && !isMultiLine) { + text = "" } return true From f9dcf43cc4b39ee2aee8c05b79e26be5dc8c9a6f Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 4 Jan 2024 20:12:29 +0700 Subject: [PATCH 37/37] Fix compilation error --- .../mc/otm/datagen/advancements/MachineAdvancementsData.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt index 26f774f89..d42055f7b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/MachineAdvancementsData.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.advancements import net.minecraft.advancements.Advancement import net.minecraft.advancements.FrameType +import net.minecraft.advancements.RequirementsStrategy import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack @@ -60,7 +61,7 @@ private data class CraftEntry( it.addCriterion(i.toString(), criterion(item)) } } - .requirements(AdvancementRequirements.Strategy.OR) + .requirements(RequirementsStrategy.OR) .save(serializer, modLocation("machines/$path")) } } @@ -97,7 +98,7 @@ fun addMachineAdvancements(serializer: Consumer, lang: Matter for ((i, m) in MItems.PLATE_PRESS.values.withIndex()) it.addCriterion(i.toString(), criterion(m)) } - .requirements(AdvancementRequirements.Strategy.OR) + .requirements(RequirementsStrategy.OR) .save(serializer, modLocation("machines/plate_press")) CraftEntry(MItems.TWIN_PLATE_PRESS.values, "Twice the Thud",