From 69f14e3aac87506152e7fdd08eb07d8ad9837c25 Mon Sep 17 00:00:00 2001 From: LudoCrypt <60561627+LudoCrypt@users.noreply.github.com> Date: Fri, 18 Sep 2020 11:01:52 -0500 Subject: [PATCH] Update 1.3.1 Check curse for changes --- bin/main/assets/backrooms/sounds.json | 7 -- bin/main/backrooms.mixins.json | 3 +- .../backrooms/loot_tables/blocks/light.json | 11 +-- .../backrooms/loot_tables/blocks/pipe.json | 74 +++++++++++++++--- bin/main/data/backrooms/recipes/cement.json | 4 +- bin/main/data/backrooms/recipes/light.json | 15 ++-- bin/main/data/backrooms/recipes/tile.json | 14 +--- bin/main/fabric.mod.json | 2 +- .../net/ludocrypt/backrooms/Backrooms.class | Bin 27124 -> 28834 bytes .../ludocrypt/backrooms/BackroomsClient.class | Bin 4852 -> 4937 bytes .../ludocrypt/backrooms/blocks/Cement.class | Bin 1386 -> 1488 bytes .../backrooms/blocks/Cement_Bricks.class | Bin 1407 -> 1509 bytes .../backrooms/blocks/Checkered_Block.class | Bin 1408 -> 1510 bytes .../backrooms/blocks/LinedPipe.class | Bin 3303 -> 3405 bytes .../net/ludocrypt/backrooms/blocks/Pipe.class | Bin 9382 -> 9484 bytes .../backrooms/blocks/Poolstone.class | Bin 1390 -> 1492 bytes .../backrooms/blocks/Poolstone_Bricks.class | Bin 1411 -> 1513 bytes .../backrooms/blocks/Poolstone_Path.class | Bin 1405 -> 1507 bytes .../backrooms/blocks/Poolstone_Tile.class | Bin 1405 -> 1507 bytes .../backrooms/blocks/Smooth_Poolstone.class | Bin 1411 -> 1513 bytes .../net/ludocrypt/backrooms/blocks/Tile.class | Bin 3617 -> 3719 bytes .../net/ludocrypt/backrooms/blocks/Vent.class | Bin 2965 -> 3067 bytes .../backrooms/blocks/VoidBlock.class | Bin 6629 -> 6657 bytes .../net/ludocrypt/backrooms/blocks/Wall.class | Bin 1355 -> 1457 bytes .../backrooms/features/Level0DottedRoom.class | Bin 11186 -> 11270 bytes .../backrooms/features/Level0RedRoom.class | Bin 11171 -> 11191 bytes .../backrooms/features/Level0Room.class | Bin 11142 -> 11162 bytes .../backrooms/features/Level1Room.class | Bin 10103 -> 10123 bytes .../features/LevelsFeatureInit.class | Bin 4062 -> 3854 bytes .../decorators/Level0RoomDecorator.class | Bin 2875 -> 2875 bytes .../decorators/Level1RoomDecorator.class | Bin 2875 -> 2875 bytes .../backrooms/misc/BackroomsSoundEvents.class | Bin 2736 -> 2679 bytes .../backrooms/mixin/MusicMixin.class | Bin 3391 -> 3397 bytes .../backrooms/mixin/TitleScreenMixin.class | Bin 4802 -> 4808 bytes gradle.properties | 2 +- .../net/ludocrypt/backrooms/Backrooms.java | 59 ++++++++------ .../ludocrypt/backrooms/BackroomsClient.java | 4 + .../backrooms/biome/BkBiomeKeys.java | 3 - .../ludocrypt/backrooms/biome/BkBiomes.java | 25 +++--- .../ludocrypt/backrooms/blocks/Cement.java | 2 +- .../backrooms/blocks/Cement_Bricks.java | 2 +- .../backrooms/blocks/Checkered_Block.java | 2 +- .../ludocrypt/backrooms/blocks/LinedPipe.java | 2 +- .../net/ludocrypt/backrooms/blocks/Pipe.java | 2 +- .../ludocrypt/backrooms/blocks/Poolstone.java | 2 +- .../backrooms/blocks/Poolstone_Bricks.java | 2 +- .../backrooms/blocks/Poolstone_Path.java | 2 +- .../backrooms/blocks/Poolstone_Tile.java | 2 +- .../backrooms/blocks/Smooth_Poolstone.java | 2 +- .../net/ludocrypt/backrooms/blocks/Tile.java | 2 +- .../net/ludocrypt/backrooms/blocks/Vent.java | 2 +- .../ludocrypt/backrooms/blocks/VoidBlock.java | 2 +- .../net/ludocrypt/backrooms/blocks/Wall.java | 2 +- .../features/Level0DecrepitRoom.java | 3 +- .../features/Level0DottedRedRoom.java | 51 ++++++++---- .../backrooms/features/Level0DottedRoom.java | 51 ++++++++---- .../backrooms/features/Level0RedRoom.java | 3 +- .../backrooms/features/Level0Room.java | 3 +- .../backrooms/features/Level1OffRoom.java | 3 +- .../backrooms/features/Level1Room.java | 3 +- .../backrooms/features/Level2LongRoom.java | 28 ++++++- .../backrooms/features/LevelsFeatureInit.java | 5 -- .../backrooms/features/RoomArchives.java | 1 - .../decorators/Level01RoofDecorator.java | 35 --------- .../decorators/Level0RoomDecorator.java | 2 +- .../decorators/Level1RoomDecorator.java | 2 +- .../backrooms/misc/BackroomsSoundEvents.java | 1 - .../mixin/DefaultBiomeFeaturesMixin.java | 19 +++++ .../ludocrypt/backrooms/mixin/MusicMixin.java | 12 +-- .../backrooms/mixin/TitleScreenMixin.java | 52 ++++++------ .../resources/assets/backrooms/sounds.json | 7 -- src/main/resources/backrooms.mixins.json | 3 +- .../data/backrooms/dimension/level_0.json | 4 +- .../data/backrooms/dimension/level_1.json | 2 +- .../data/backrooms/dimension/level_2.json | 2 +- .../data/backrooms/dimension/level_3.json | 2 +- .../backrooms/dimension_type/level_0.json | 2 +- .../backrooms/dimension_type/level_1.json | 2 +- .../backrooms/dimension_type/level_2.json | 2 +- .../backrooms/dimension_type/level_3.json | 2 +- .../backrooms/loot_tables/blocks/light.json | 11 +-- .../backrooms/loot_tables/blocks/pipe.json | 74 +++++++++++++++--- .../backrooms/loot_tables/light_dusts.json | 23 ++++++ .../data/backrooms/recipes/cement.json | 4 +- .../data/backrooms/recipes/light.json | 15 ++-- .../data/backrooms/recipes/pipe.json | 20 +++++ .../data/backrooms/recipes/pipe_to_iron.json | 9 +++ .../data/backrooms/recipes/tile.json | 14 +--- .../worldgen/noise_settings/level_noise.json | 41 ++++++++++ src/main/resources/fabric.mod.json | 2 +- 90 files changed, 499 insertions(+), 267 deletions(-) delete mode 100644 src/main/java/net/ludocrypt/backrooms/features/decorators/Level01RoofDecorator.java create mode 100644 src/main/java/net/ludocrypt/backrooms/mixin/DefaultBiomeFeaturesMixin.java create mode 100644 src/main/resources/data/backrooms/loot_tables/light_dusts.json create mode 100644 src/main/resources/data/backrooms/recipes/pipe.json create mode 100644 src/main/resources/data/backrooms/recipes/pipe_to_iron.json create mode 100644 src/main/resources/data/backrooms/worldgen/noise_settings/level_noise.json diff --git a/bin/main/assets/backrooms/sounds.json b/bin/main/assets/backrooms/sounds.json index e701dcb..cdf0e74 100644 --- a/bin/main/assets/backrooms/sounds.json +++ b/bin/main/assets/backrooms/sounds.json @@ -234,13 +234,6 @@ } ] }, - "tone": { - "sounds": [ - { - "name": "backrooms:tone" - } - ] - }, "tear": { "sounds": [ { diff --git a/bin/main/backrooms.mixins.json b/bin/main/backrooms.mixins.json index 68efe34..604b6ad 100644 --- a/bin/main/backrooms.mixins.json +++ b/bin/main/backrooms.mixins.json @@ -5,7 +5,8 @@ "mixins": [ "GoToBackroomsMixin", "MobSpawnLocationMixin", - "EntityMixin" + "EntityMixin", + "DefaultBiomeFeaturesMixin" ], "client": [ "BuiltinModelItemRendererMixin", diff --git a/bin/main/data/backrooms/loot_tables/blocks/light.json b/bin/main/data/backrooms/loot_tables/blocks/light.json index a8059b6..30b021d 100644 --- a/bin/main/data/backrooms/loot_tables/blocks/light.json +++ b/bin/main/data/backrooms/loot_tables/blocks/light.json @@ -9,6 +9,7 @@ "children": [ { "type": "minecraft:item", + "name": "backrooms:light", "conditions": [ { "condition": "minecraft:match_tool", @@ -23,17 +24,17 @@ ] } } - ], - "name": "backrooms:light" + ] }, { - "type": "minecraft:item", + "type": "minecraft:loot_table", + "weight": 10, + "name": "backrooms:light_dusts", "conditions": [ { "condition": "minecraft:survives_explosion" } - ], - "name": "minecraft:air" + ] } ] } diff --git a/bin/main/data/backrooms/loot_tables/blocks/pipe.json b/bin/main/data/backrooms/loot_tables/blocks/pipe.json index c7851a0..381e6cd 100644 --- a/bin/main/data/backrooms/loot_tables/blocks/pipe.json +++ b/bin/main/data/backrooms/loot_tables/blocks/pipe.json @@ -1,14 +1,64 @@ { - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "backrooms:pipe" - } - ] - } - ] + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "backrooms:pipe" + }, + { + "type": "minecraft:alternatives", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0564882, + 0.15, + 1.0 + ] + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "name": "backrooms:pipe" + } + ] + } + ] + } + ] + } + ] } \ No newline at end of file diff --git a/bin/main/data/backrooms/recipes/cement.json b/bin/main/data/backrooms/recipes/cement.json index 63d76cd..00841f4 100644 --- a/bin/main/data/backrooms/recipes/cement.json +++ b/bin/main/data/backrooms/recipes/cement.json @@ -5,10 +5,10 @@ ], "key": { "#": { - "item": "minecraft:white_concrete" + "item": "minecraft:cobblestone" }, "L": { - "item": "minecraft:light_gray_concrete" + "item": "minecraft:stone" } }, "result": { diff --git a/bin/main/data/backrooms/recipes/light.json b/bin/main/data/backrooms/recipes/light.json index 1b44f40..1adab86 100644 --- a/bin/main/data/backrooms/recipes/light.json +++ b/bin/main/data/backrooms/recipes/light.json @@ -1,18 +1,23 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "#W" + "###", + "EEE", + "#$#" ], "key": { "#": { - "item": "minecraft:redstone_lamp" + "item": "minecraft:white_stained_glass_pane" }, - "W": { - "item": "minecraft:white_dye" + "E": { + "item": "minecraft:end_rod" + }, + "$": { + "item": "minecraft:repeater" } }, "result": { "item": "backrooms:light", - "count": 1 + "count": 4 } } \ No newline at end of file diff --git a/bin/main/data/backrooms/recipes/tile.json b/bin/main/data/backrooms/recipes/tile.json index 2299aec..fc54736 100644 --- a/bin/main/data/backrooms/recipes/tile.json +++ b/bin/main/data/backrooms/recipes/tile.json @@ -1,21 +1,15 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "#L", - "BG" + "#&", + "&#" ], "key": { "#": { "item": "minecraft:white_concrete" }, - "L": { - "item": "minecraft:light_gray_concrete" - }, - "B": { - "item": "minecraft:black_concrete" - }, - "G": { - "item": "minecraft:gray_concrete" + "&": { + "item": "minecraft:diorite" } }, "result": { diff --git a/bin/main/fabric.mod.json b/bin/main/fabric.mod.json index 8d9f6c1..b31f42c 100644 --- a/bin/main/fabric.mod.json +++ b/bin/main/fabric.mod.json @@ -3,7 +3,7 @@ "id": "backrooms", "version": "$version", "name": "The Backrooms", - "description": "The backrooms, endless mono yellow rooms to traverse.", + "description": "The backrooms, endless mono yellow rooms to traverse, and many more levels to come. Music by Angel Craig & LudoCrypt.", "authors": [ "LudoCrypt", "Angel Craig" diff --git a/bin/main/net/ludocrypt/backrooms/Backrooms.class b/bin/main/net/ludocrypt/backrooms/Backrooms.class index 670de727b4abdec93652d0c836d50149b7c1e9ce..64aa34d086279774b92689f2562a9c9f8ae7189f 100644 GIT binary patch literal 28834 zcmb_l2Yg(`(Vu<$PFM6)EEjC5zy{plTmT2l7$jM?Wvf||EkyBgx;sgSPj}+(WLxy! zdof_ZRGZ!`kYz+Mod8Lw2_Yds2oNAZfIt%J_ut)j?dhbmzwd(|ntijgvu$>Ec6R4@ z@#jY#C!z!N+wG(=+A|!8yF)$xh%egP9e1~ReXF98NLS2Vkx1D|XHcAR)YmtAn#(I{s+t%T z)kroy@nFc^6o{8GayA7!!rpjKG{9&^X70Qi!M!UO4)~(p_PAS?s`dxM@nCx}5G|XJ z;`udIE2?T{R4%S+YDRN%lt|FeH0f38+2&VXZT$jI^#VpEsvWYkP4Q?j+<}@3DkI@o z+#8Os@P>K<4jPTNCkG4T6Ay#}-H~WK;IBdhlZUd3pq%KF-d#;T?! zlUXXqnXHr1E|%`Jg(ALH?h5f29V)gq5`&*nJEJk#8pWuvxxTS3)j7&E2pc0;@=JM)Bh`iohU4wzitE{T6s+0LL zk<2ep8J>zpj3MYpr++7@MrC4a$}1p#4fXXkP0jUnU|-x+i*>fxla5NJle`O4D2N1P zBn_dOS)8IsbYLed>tv(GricZ*YWimI>*7Ail)wLOo7*$)o z2n{YzucWxXvAk|k23cW4bzMepiW`L=TgyIU z8kbhKzP7vy3dmDiznsyoX&DvE8y8hIHhIdS)E72Zi_NewEqlhyS&Vj1LqLf(A5m4K z3ZSP|O_+RJc@s7|Mh9DD&J-Jez!!;nQrn2Fj*Jh)oOtFr>a(pX<# z3qE>9btA-uSC&IDxfWD4)z_3aSJz{s;0x-}Gy6geAzBUfwXhyqT`0hXjUvZcgN`&+ zVs}9royFQIuLIqv`pT;EI*jsS48NK0XsRmr)Ko77soqjwvk>Y#wKO3SRgGq)vn}0P z6N!fW?v6m%-5!u8f*X5qd$0q>f`6gHphI(Zywtp@Q-$&1nCA-xVXVwYehl5VTCYiJw=K4AVv3SfK3ak!e1>0>nGg6o;F?XYPO?e0d=x_0&Pr`Ds)76YhGcCNNSu+WPDa1GCqIGnwLF;KX zWN@CGEGJ!08|-ug*4Hql7eymI-3HxAHwk&IuZM{5ZW*s+O_H`uRC9|#x6*A`WF4Y7 zql(ERm$6Pkl4Y{-Wp>)cXmXZTE{sI{m65LQNEl0ZQbkWN87<5@TNwjXmbGa@7E?3kqAO{ekhdop?VXinCjFEZVjVnf(0H0)r)Mz&VwAJ( z@IpLdZp$Lj%g-fp(KED7u=%w?I}0{1VHiec(-IAYeVt+@{KlZ)N;$8^wkE{*6@y-- z*PuYUylX2XJz*%Ny@wH>%&xfTMb(Tq4cbLC;}4AX&(RETDAeuk4n!NgaV+bwi+-Yi*JH|6t5`V=nyga!22D|^0)wUs_C+Hs0F!-9u%k2XVugxri9ypu z!7+>`=4h8_lZ%a3<#rMhB6`avh%p3*U9enoaH#Y~y920uXT@W8gZ39COGj8PW}}lX zm8Q5i7>&8uUTl(`O~m59~?M40`Ucbc5hE8j zXw)8Te=H>CW>lY@yKIo^f@Kwr$XTu@Hq#)tn2y=GMWH!}Esf1m(|C|UGeo&xZHE8^ zy0C4#*c?@|%%GV{hz>Dmmf&${?&VP_d3Y+|Ia>umn6Fq>7&Ke4T42xtf)%XgTq`Xl zRUvPii&e43VtA_=xw8*%#^j|YMh)LmgANq+*5+0o4N!QoI7}E9t5MBwFz6srxDj>d zSVT=-kx0DLlg4A2;<4PIIf6$^ZXU_P$zfcfcpPESuLO^yM%a&~D8<|<9@xV=UF=B3 z!DGe3YA)IP^C((HE4loCC)0+${az{CtV6I)~gzLl0j9X@F}?$N<*+4lYFu&ce+8< zqTHFeE3JX=)~^bmp$g+nvP2ZdnIxB@ULn`mxvJcS1}zokF3zoFD?0NVrjl!*MutD}HwvEQ}#;TzX-ZVmCytBs*_5|Ao<0>i(Gdk3&s?tkrkKN85U{49P z_p~?)ROjlEC0`7%bf;Uj;j4yN@n3ik(tybAY6q!jK?2DK^NJ4nHVWADPfk-2qa-ozzBZdZ?s{e`_R zMg&&2ZE|(BQty8=$VYzBjgJfpsMOyLYF8=Pyd5g_4}&^Y>I;K{Dg{gRSe5$Ppj9db z(=((}-x<`UQvWe1tWw__6j3RdmE9@@v+_8kG}1J?#u)9J*}tJaAJfxgXk3HY$>E2> z5x_Em!oe_4vdcm^+HXZo#1$exWj#X448WhZ+pxrPdWPTp>4$pkoZ47zC%ZNd=d$6( z)|Bo@)V)BtG$T<%8?Q}(BujTOHf2jMQx#_^3n746KkQ7VN;KknGmxxOHQlA{tnDV| zV0Wl1tRp#mW3^H-e0wqq4L@Wlz801v3|p#9YT%NkArBL^z3tj0Q`wIs(W&Ce^|Oz* zFWdrV4LCt;SJP8`Qq9P{`ckFL+GW$H7}`{Ans6QA9P9NjjzojUN5XL&$Z*malkl9T z-7(8j`x)B)8V(D2(LgtxzQV@}Zor5o{i zLo2Y`h;NB>5zeI8vErRU6qzUmDw_e7+&SSfw&567?YCWnD|EvZ5IBZA4sT*{sc9>RS*UC*ZG&SS0KIJ2h_PT`!5&qIf=`)T7 zh5o73plC`e>+2R)FIq0HK^In)HzUDlAIsXwWM%T`Epuo%dlYsjjC>CiNt;VstSzx? zI9o^u)o{&8@PIE{Tgqsab&U*DW43ms-S?-BnRCCKzIJUuOYG@7GGR!#M7l>=yy=CLFv4iVA9Cu5Ls;q=a zYZARii3;<8o~_LGH38zkLOa~9;V2}HwLqlG0rrt`MJ)><)PufbB9|A9iU$!R1)oi4E5@#U-JU z;5+d*^+emfzJTd=M@vG2M_104SjsuE7$Sz&tsMs~g6l^dncdk$SoIvM)O6qk{E78} zH3roK7rVF_@vISEONZ7Y2Fts~lZjme1-M3feH|LK<)}3Y&z+}R`Cc8`33%V(kH8Tt zSebskR4#6+#)?BxmMokAcQp$RLvb2fDGGYJl{40%oq^jTNU`aVlw1>;VqDHLw6n#y z*yKgKLpv9SMzUsyc0T%OZK^}N5U(dP8sN}y-W!vxX%6jDD5p4ljHwPew9BFK1OqGn zO7z|2V$E8ILrq!**6eFAwW8e)Z9TRXONSlW^_Uf(bO$=L4QRbedt%bP=g@A#0EC32 z(xKfVb{hDb9NKN7jP(9Ev`wOn@&qNy+>t_wXH~0W4(%?y3Nfi9D#`yI2tsBCJU|ZZ zJ`8qJZ#%RHFxWBWZb`##&QR_UqE3hQPzFvlw;!dG#XN~74P;;wZO1*%PS%=|jm7D3 zY>JVnFqwsGoU|-aZ!!yq#Br%oncaUXqq#BJ_h-OrXcJ`Ca~Q@HE7bs*@j^z1s$OQi z2w2s?=fm%Pd&;n3bdliToq zEFJfIK^Tp!38y390->+hn}K^9xQ?i|H=XX!DBKYZ1TqN!f_6)}!={~C*L%qvDCFEI`RelG0zU3dM}LIL$3p|y%IVm@gF$yNoYCD+g_!h2yD_0@gYXY?ou{F` zKsVNO;vAk%_fM4W4TM6GH7TrJ`#Sr@uRP&Mj|g3_{man46_+};3xFS18?emt1=Bri1B?5KABGu z`WfdFamlg-HXKZlm^a$d6J8zZjC$Q&zOINr=Jxi)BZ|??9(PRMHi`$Y<_ndkBx2G+ z+^|HVy=5*wjqhjY(_v+72gh=-SM7oY#`kA*VY*dU8S=(rW&d9-+paFE#w?DAhYDp5 zJ_GW*8n4vEsld0Ygfu?O;IsJw5MvyX@Dew1nvKb*!fgh44Ox&oy`%p9h7VuqWlZuaaIdJb6hUCG%iqS;`r!JoOrR zXcLtco!S0mQ>;heq=IOQL*th@`FwtuogWGXmO7y{_2NBGm%+<<1%@fogC37nl>{U1 z20Syy)gI)o3&V?}TcEi!P?|h@mg0@Y{-yQdP;aStKU^vft)&pe(qMaOZ=|QRBN8tS z#!I0fx=Jg1qOrij2-ec{(nwU{x&ozsaWNasJ|2t#odFlJWi+@4yYpc;7#UgPk?88u9< zfvxNAiX1B*{QJFeZ+mbpRI@vdN3Sur9IPFwq|DBb80Ho_`&8ufqxecYKN`DBmNlA~ zTqqE&)y|K}ZV?D$KrTlY_wY9C`rId-G2)<@nvvuTgDF--T)cBC6Ef`zCPNLdmCGT- zDv?mBo5WPW7nDr`6WMSZrI$*yeV9^-Y?Ola2;Hjc5+ja%USdSQhI!FeAxemR6dzZU z;qn3l(-$^zq}G~C3jXG7REgH@;HnyWFqR!jJa?9@PW5vh9%sUT#&P$#o-YwgE^hE1 zz8VWHq4aBTd2IG(h#4o>OPbrrDyP=`e7=?+Z|68v7oo))6g`d>iCsUfdC)5-@hApYF2!1J zw>fXcIDmxX<^I*)usXsrsISDT)Ant=O)Rd~cJ z_Q3Q&94EhmuQT}7{2EMyq8{omHM!K{&?f_v6dUw&J-^=0uN&eU%}#Id8~6qc8O)`$ zL8ys%VPN6L%5)wMX}hXyND0(_6TijIZ#MmV+gnZ;ZMSB5(Kci}E#vJ?&6_)|F=)mW ze51iP@!PRxGP~A{w??>^$3@JLzNK?h(~-v0EC<$i^1JQ)t|5Es_LMgGJ^WsTf1ybY zI7EqObc_zS%3C_8v=$7p3WlLea7I(_=MUOB952$hnVO6o1r5HL_d)W4u?2Wm1Kl%u z$`OLs!v^o?Thxdy4@cVIUV_7+68G-noB>szvF@P%qhfiN<@2q4(9YqNDM{&`M6SUf z<&RfK#I!wU@aH+a zEW&#cj+^a{z@D79y)!UG6O~OlLNx3}gTEw(%--pZ)u9a-JYgRTF@xg9mSMeW9cBiw zU+T!}9=cNvQy@9ls3;gmbz{=@OF70EQ^D1TS;9-1EV=WBc4|HhrQe$m&~i!*CNJde zYV&(1;WRcq!(xN0s>AEYK`U{?f#)J{c;R#$Ejt320sL+LXFLDXkSkbIRl)X?Hzbt` z)_TKm0!0n}4u@yS9+DyxVpN^JKPC5!G{Z5~46*w_vAJth*~AW+*t<$d=kFQ(eGV^_ z9*4h!QE5V^rMxANXASW02H`>pV3GZee`Mz$;@#~3qDq5*%;B*@n8k5DL8t>pb?I}I zrM@ZYCh^doS-a%maDHj=ZU=|ED^KlYF8&4or=5Q};KI)!EC+X$-1!nbh4p9f zulUz!u;c{a2%`gs=+W(9gJFA{|I6Ut^6$VbQ6Hl`f(hZAM+nB8oxc^nvV78=z! z`x9jnGw?{3rf1mR7U}T0)3IR_2vTK7}agWav!S!~m@g z_<==QY{<(z&~Pr#05IC~zookguD8;eF% z=9k$-Jdum~0x~)?p^4$n8s^ol(g5k65VdSpIQ3F}FT1`c7WA-JnBrJBTy&_xk0tnT z5-pf16obWD+m24a(9rkMC)@RXhdh_cUE0v6=u=@IU=wZ#MDgBG+#<`HV5}6p*1-7Z z;Z-393&z`yw=LDVS;8{TK9fGYB!K~t*zj;t6`y5O@K(WzUqtWp$6oYrCq z9!XM^P!rxWpXc8hf3UMH>&3* zy-Neay}e#9H}nd<60?Oyw20VEMom^x9G-)bGhRUha(6E5-)b3?hqKA-V}95v|V>QSS9A~wU~Uc+Dt@QvEJd* zkJUqVeHETGZO6@38nZ>QNLV#2#SlI{9p1|&|8E^!QRL8rXl1cB&83&pwfMw+?7^n) z%l6Jm`W}bdP0`_4vDPZ)WR0Qkrtgk9SzWB}Ud&GvxDyS1qCN?@6N>do#rpmNcbcK^ zr|%EksX&;xvkkpQ;?7FpE->^4i90`qyVTH|CGHa7@W`e*91cX~)CI6tU4^4y>g1jw zT$$o-*RO_0cw|!S!D?;T_4RlpzhhHroyNqqrd_`tFYW$syr6B(OH#XjqxpkGsl%`G z6lcUNVTVb?hoh`{lCbOWV`Ymc&xirG>l@*T&D79Xit6=04kGgLHtk6`df-1BUi$AW z!uFAN;y05t#Oh8ELG?&a5K;3IA}n6QA}R*mC`nfWdIZTM?Gz#MG9Mwr5+cS|LIl}L zh)7up5hp7lqGTmRjI4wR50!9F6CyrSej_?lLd0fDh{#L{5nw4H!Yd_2aHWI@t&|Xv zk`f~FQ9{H$N{A>%2@yUgA;RG#L~xsg2yK%P5o!`5K21Wzi%E#kF9{L8B_TqvBt#&U zgb0U{5W!FqA{0tO1VTxOFenKT1SR2NCM-80!k;7_!A}w*^hrWQF#$ShAuUSI(_)Mj zqLgGl0*)j^0Fi`<0+J9hKoTMXNJ7N_NQmek2@(4vAtHYyMBI;ri29KbF+UO_;zvTn z`$&jr9|;lbBOxMvBt)E#gor4S5K$x&B637RM2kp>2oVVp6(S)bK_o=rhJ*;)kPtx| z5+YHwYIM`xFuE8+Pi7fN_B>!VAZeRTOCUD-NF>sq(a zHJj!&UKG`NMH=%c3w>6xr0K#Bq-&w;$yDNCy| z&-c*_gY;sm%*&`n@2B5wq1XH9jY0Z-X4V#ZtB?Me9sQ^5=y$TC-yNj)TQ}1Oddc6D zUHk-tp3Azg*^*C-N%?Srz!J??ruV$snr% zeO(``A7smrYU*RngKPy-hxf78L3SikNB6OngX|cj+WMGJ@vWD9>l1tf3fnBP%?WIW z!mgCql?iN6VSN(oOJG+iY^%h!Ca_(qy{aCxH=@2(4fsAzeJkGhj;U|O72iGTTk*s9 znnBi!ew@(9P8?(>BXw#YJ8h7ifz(-j?Ce2yE>h?Bu?q&-MMz!J$1Y8#E>EVeOs3W) zQ`aO@>yxSLlc^2K)J@6MEy>hv$<(G~>W*aUu4L+-Wa_>__CTw?nQb=ZS}do{Bo@|Y zwxypvwuL>}$DT2Xo*Rki1(WE-k%(S4iGDj0(JLm=YaG7pCYDrj(H50+eoC=Y?Mg$R)yhv3-V5dymxf?xMRuB1G~Z2#NeB9Ya4MNRlG}vH$^(I|G)Ik4+^%BIZM#Rq(6lc!@zC=Cj zO@s%$OKaFCw3dAd_$~FaU+8$vNhfGUfMe-IZEreRbJHo>!E~xtNvCPGbh_4p@Ch%S zh46wiwJthaTSMn)Cjp*8=V}+xdD<0#*V6ggt#pBQC*b{bp|+JS(w+c(mM+oWq)W9A z=`uV#y`0pqU-rGx`7`_8+d?jo-=TZ>U+G@{A>GG+qzxucobfFFm4Piu5`f)Hl$h`on;O z^q9Vl9@n3yC-k?Gevh8izo4h|AL(fuexAlQo}RVsL(ka`pyzEB^n$H{er;PxFWN%% zlI?hU*>*1d#m1NlZPvmG`lz6%7ZiOG8<*IpEZEf&`-TO(R$~8X!5%NMf3jdtl-PGH*pnsp zT?_V9iT%=oJzZkIQ`j>Ty*Ni=f3RTBlh~gu*b5}~7Yp_xfo05sy+mU3EZEB=)?vY3 zA+atC_9}@rEZD0hcAN!!t;CMEV6T(d-7MG}B-Whgd$tApJBhu(f_+tDFSTG_m)OfK*f%BiN(=T661&cV{iDQQW5NDO zV%J-+??~+R7VNtcyTO8eUt({vU_X%9TP)ZQCH6K8_G5|NWWjzSv3FRopGoXp7VPH| zdyfVCrNrK+uu1JHR`;NWQxncE=8;kRMx3WKQ*R|H#fn#y;}eu5PhLYPg@%)q;-saH zp~LVLT2E2pBsL##EGfIVgn|Rg{h#ltQyAN>>g_p=}kV zk%LlbRYkd54oabE73GW^ltTL|%27Eeg+^AC2j-v@T3S)g%|R(Nx1yYvgHmX7MOmJM zQfPQZS($@UXnjSwBnPF~2^3|04oa~*D9Yv>lw!wFlq+*kid{re`f^Z;okdY5{Vv0- zII-I(%0LdDVh2)`9XTk)uB0e~IVi^6#KDA})Xzt$3PJD#V zBzlA&NVJ6?+_IS;GMZQR^Qxr#L2qN@;V1YDt~=hP62NivKCT1*gP%hE9=}}r1Ad?M zNBmIePx!6KUuYrR2S+gmACyMt!k=|D)A4&-oHj5UJ;d_pX=bPA0AFMddXG8jOXkAQ zygKPSX5ilf{Q74her~de)v;pcXQS{lekJTuHk#dt-!Z)fa1$Gg-&7mNUSm74zq9e| zXEs3_!*1BYNGJ1IY${*Orty_*I`3lp@ovC4b0hp?2EU2T5sE={S8*3f66Lt#1`1bu`1hiw$N6=7TFGG zi)~?6Z99|I*sfr;wz~lDV|BL2SiS8Hz_(a~?PIpg_A_h9(^zBPDAtrW8E`sl&MRZf z^BMtHuoZa$){=K3;Hm8Jyh~VX-X_4i*b#YK*^zm#0KUPF%KLyFo%cQ9&upc=fO+hb z04K9!>~omcUI*C7+U#EDv#$j_k@@Wxuz>v*z)h^({xIvXzYO>a>$Jbig7)tKzh}of zoNSe&6mSv?IcBpi#}dFg7IqxXB91uVTGs72haKnG0C)?FIUZzj#|wZjvmVEv*lNeu zfZwq-P8(b6+!e5t^*Y_`c;`aECF}%eD?8EI4H#!9JI`RJIM)MiV5d6oWv4lx0epd- z?)(Eg!}$f^*X&FeV`sU>1MbSsc1>gFxGDe_vh!Ta+4-&zU^lzKbqc%CwGMDSyU2AX zyV$i2@ELZA>veXi>r=ol*k!Jt*yZ_S*k$?S*_HYGva9mv16Htg`ODbV`JI3vwm$y^ zc3uAEfa}=x`5V~{`Huo_V;k~+$8OC32=G&OQ~rP1%|_Y?HBu-ELeAcsaYnxS8E)3;;gL?lN9tcN>2N{D|FSe9P`FFxWi>#q7REmzX1M~4HSIEwiY_r zKp}pIuy8N-XyF|8SYa)DywJy zH;V2AyqCRM^fdc@(QE7vMQ;NBk-c5?A^UUDSL~gl?*PAN?-u>U-oxvFcZ)guYsxQK ztedV)O$0T=LnmvpZ*xztCdf08sN)VKVN~Y zZM=1^ZGt|*wv`{Lk=WvLpD3gDVs_mWa+ zbqhajYCk`HG(WqapWDwb*upP)0yU~JDim#GKVXc0q(b&{T1`_?6P|+bO9d_Ax2c`{ zGJd(L659ZWV;URA)F=5B*HX*WZTyOd_*MP<+G+j###-^&&u^RF&+n+)ubB_#v=kB{(o;cw?3Y~z0$%|8KRH2-XXe?Gv!8O{GKKmRMKeh^f@ z^y^#@>UM$Cv2xOIE{Vfjq~QuAt|)=)*NeeHG3nPww}`P*6TClO_z?XSFL^$|%bmYL zJU_%w`F?_{ug~$ToL^B4->Z>#3TV!t@8tN6Q~l7#>*B2jdZh2H?}EtH#JC8|czst~ zH@L*3GPD0PP)dk$-qhAUeUGFOqAoDlJ87boCl`(=jpt`WO56JNz3%~^^y`l_HA8v& zG+Ygd(s-yw8m@>SCwRFwLoO(>NX0BnfQ|IofIh2c+O&TCpw0Tce*Lh1eL;&ZSf|N8 zeFQD>F^1;vX}trQdc}zkImrzee@np!$F9SoOs9!!bRY-l`t~coaExFK}&o zKyR0+PCcwgWU5<_>T#Ls(bwv|GIhLul76yGouZ$vpCMCc>gVX^%G7!Kh5AJ@b+LY# zez|@HYM4uQ{YrhEehp2~uhp;9Z^(19$@&KUCTPV*-m2e>S4|uBTL7K3PQOjy@uRCY IeG^UiALa`|Q~&?~ literal 27124 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 VoIb@D_!3|7P7nXrEJGSa{{ddT-vIys delta 1266 zcmZ9MYfzL`7{`BSUv}Spci&x>C3X=^A+9dMsz{g_V3LZL4D*s*KtwF$njmGjRVwYC zbSx_?vYTa$W6*%oOheO5Gd0sUKR5NE4}EX?R?~BqHJsj=_kGTJ&j0^E&u#a|@;}Q0 zKm9ZNEwGx2vB2QixpB)TTeqrMVVE43D6Yb{uDic`xWPejlZ%aCkE$w_qc5o~`HK~S zk%8`m?FV`XI(wp`w8Uj8MLOcC@!jH5LaA={?DmyYX;Y!cJ)5j$B=jGiCf{U37H%4VgaL@TSr>r%^V{k=6>xQ4Yhw<$u0J4QN^M~Az6liNE6U2bQc-kVT8%D0v6Hrwvd`u| zMe$gqSlsvXfcE&C+*Teks%?teN?q(j@dk}s1)F0T^|fv zPw=GP9IO}E(=N}D(x-w=z7sraGpc_MR$I^U{M6sU3(EHfXKb{-7^<+|$L&7$kN;)`cw9qPDM#7s8Lf;RcMljJ6< zu2P?}*t;MWNFSDnSZP`)HV@_w8iXV?8fg+KhxOc0z9GfnS^i1xi3J2**2N>rN56g9r2+uUhoE=KhosK|;CX-K_2%E#g#MkuxKupY$ zX+{!apE9m19AAhcCe4FYGC{TE%KuJWY=KnU48;5$g`DJ+>|T&pT3R6LFUr!xOS~+0 sZAdPAMc!Atc#YRNEk0BAvjTpb5BM;>I?pG3%4c$BX8ZzQ@Fk1>1s46sH~;_u diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Cement.class b/bin/main/net/ludocrypt/backrooms/blocks/Cement.class index c72e285c5fb20206cf70d87fc1af982cba174911..bada25469b865e56f29452b62f2923891e729bea 100644 GIT binary patch delta 202 zcmaFGb%9&p)W2Q(7#J8#7@XM|m>3yUCmXV;ZZw_1EX~hg$ira7V9dzCQ%9>jP{dTSo9ekCvRc#C=3HiF#-)$(b~ko zv4eqc6NAV$2B}R9a@!b`h19n(Xb9{fdk0)W2Q(7#J8#80OXYoWTst z42(d9ijy-~Wj(et7;FS`m>7(KBp*de8U1%oA! P<^mdI#bCo=$G`~yrv4It diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Cement_Bricks.class b/bin/main/net/ludocrypt/backrooms/blocks/Cement_Bricks.class index 141231e0371cd8487530db9adbbaf2f6e9087306..ba86ea6fd50ae639e570d24ca62cba4ba029c565 100644 GIT binary patch delta 179 zcmey*^^}|I)W2Q(7#J8#7@Rk99b%T|XE5YpFk&!fWZ)@EEiBC}N-Yk_&(C3GaMzgZ z!05)y#lXy9%EQ3QV8+OxKUtAcZ1M&cvB}IVQyJ|i&t%bObew#W#e*{psEQG2s>)<3 zR$1?D3F&G0$KA;o>0}q2R122ODkY@tsffX~DGMItY WnS)6S21_8#1vJQt!G^((ffE3Ih7ff$?3=9k=3{D%l_A^WKGZ^qN7%~_!GVm0o7M5lfr51ff$?3=9k=40ap2_A~P`GZ^qNure4jGU#jgOk&lVoXj$l(Q5Kv7JWvW z$-1l_oWTst42(bxij(VDWj(et=x+pam>7(JBp*OO?R^D^x5)%TN%Bg4O|z z!Rg|}!nHetCN*&(dlUZ-wz@Vkp0+9alK0;EzH`3s?$d9 zUng!FOODxNOn8vpwWiinJFH2N6xB#9)u(U=>OpFmEF2K#y!n_;tFqDIMm%8>gpKm zJsxQfXE#68Ec3`L+8?afihX8E`Q$XJthb7~97s3|_5f~_>7c-Tp5x&^tX2P9wTW53QldXMjW-L2pahXwtp7G{$P9~?& z8l5J`z$K+~Rng$D8vD%T!n8MIF^1=_MUEP2#&xbM>inPKI@e-?8)8g*xj{v+vB@c( zC&?MI3Zs~un9RD8En31P%}tA270XbO$XU!*h~e-2Pw4jfN*l}hF<9`eZlWxUs3E8@NziidU96!kLJ`#;PnV}Kw^ z!Vmb#s`|DK+SdgHh{-c564>mdmIn5)OORDwri+9iMK>q>4^@Yj$`~{pPL_5wPH|e2 zirg7`N?96b=@qPse?hc=RyQr@Q2e1*>&jDIBo Bi5&m{ diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Pipe.class b/bin/main/net/ludocrypt/backrooms/blocks/Pipe.class index ac7d83cc04237a4d7203caeb40c5867f955c5d8c..3744f6644352c7ccf27701d33d8d2819b1cea84d 100644 GIT binary patch delta 2684 zcmds2`+t+=75|>xo;S&pkhW>sv?R2YmNacrgc4^dO1avqTskZkCoGmuu!Tqqo4@#} zw^h7=lt)o7ig-R5ocvN?CrId*ZnDTu2&Wz2fsgoKt)|AM_q-uHaZ zdC&8lbDr-x+1GeiljHf%o*D#DOIr^(>O}Ec+#+!+zD|%`?VGo5=xXm?nMiaJmV{J; zb+O98fy)sXK~M+<$fIh8FA5blt;6L+a?Vvc6oBOa! zeIRNr_Yi_A#~#!i*p2%I?o-P&pZNjoQR}txJcVyaJcMr&EMMEOWj$di2kShw+ib$C-Cp9T>(Z5}#%it8GV5@?rDk!2d8R z@EO6+X?q>35?!6^B!NhYoCRfXlUb4l?-JY#n;VxeZ(O=$?W%^Ai<)^qvPlwr1RHbS z(}u|_QBL_Po?EFsO$Cw)$**?hwrYxsB~7M)8p(~!9i}M~#gxzSP^rXuX{k)2GA)%$ z%uY+wB_f7IR4LI%VZu~Jd6U&nr_E`nYKjVq5K8+zh3@(BwvMhuVq>?Y8k(V=%p0`V zQN5r!gz4&(ce+*5T)I&0^+rnSXr817$|pFvbn`nCZ5_)K-Nr5pB;`=qcEs$C=6S!BZPU|uuV{x z;j}`O4xBE0o$N2c!kq>5sbfW@Jvweah~98m$L%_{4?!g{)qDu|>Ub~(D#n8FSP&fx zW{w51v7r7e(DCpA-q?i8`CbGY-y^e-hgwX>Y_uYV?fl${^U=a4nT`^B@fah*x3Et= zUR>L=e+avEe0LADBo@_KtCFbDF9e%5J1W&Z8 zt0ouG0d@W4O;zd0z%6kQhf>iF<1n7$1P$Gf@e>|xhI9mjDkrdD%~5#Z#1QLhU>n6O zI0Z;R2|O(@Ebw!IC(ii-UgP2;dj`+)!q2g@3D3jN&l_P)Z56BXh$DDGB?A%ql{ywE ztIq@$!*B2^2liWjJ6%pg^BQZ&m>cZ<2e!Bv{gHpKx8n``NnI55^}Ok~SalrRgIU!{ z{3D{{z1#d29VfT9vHal}`9B$Xk{72Y={W7TcpNFu`syT^GM;4hVs4_%OZM~vUUC{j z%6p8>?RN7L2cTXJUfh#OqBmRJUUHE;m2z*ky1g`sJY1e3PDF$0znIToZbR-tPKnE8 zR&2Gib)>3Vr@X`DGeM`Kr3MOSP@TnqC0S^#s_xNgY8KlJ^Rz4!2CT?JEv!?BX&6aT z)jkNzept?up8Lsfnb_S=$+CR{7#7ZbZg{n|tZwYH?CBU8zd6g!RHA4%2E z1UKHI^JoV1G=SG=CQBAn;~AR8k`;4sh-z7~p@|36Y?cIf=^l!)q!|^bcOXa60egza z28q??QeQ3;Ixxz+j8o_N%qgk|XcPtGP523;1`D zPV-e!S+F^CUM^Zli}-D##kAy%*AROdY>q~l#C2jE9b!Dq=;G?bwA93>^FqFso#X0` zvWjd&MY9bRr7zOTR1i_RoJW{3uA3Yg~^!Sa96nPB6*wvl2957heN>_mM4t|WcQtkc!|p@pjs(t6c2EqGxj?UFO` l4Y8+ysc4~~Yhj{Jh9=rboA{Z_Qi3*9H`n4t?4T{Me-7-Mbx;5R delta 2644 zcmd^B{eM$u75|>(CeOXMPfFURC706DSDGeGxK ze9yV(Jm;L}`<&#qj{Pa~^qY?y2hc+AJ#4lL-HVS&Y{bXaLn7%PlDGw*R4<8T#xC3@ za4VroRR^kk61#D`TCcZgpC(kQL!ruQ6MOL)0Yxa;@5MJH4&q+*tT|V^pHQoM z%-RAI58{x(Lxeg9`?pCP#>nW^1#3w=PN+~+98z;k!z(bMCS<+#9VgvGp^)k{r7{A? zwNr$8wbN54KWySOo)CDP5aEI%T+k2j!_i1#ndh>nC4P#ZnfNW96?ldabjx}F_8SM9 zyE20}WVcHE4!aJ90XKLLQJsVf9Z|~xj$s@^2ntHP6 z<-j-vCF-e&8yaa;FTJ&|FDjvebr>cY)9g%+x@k_O)6sGvqd^&P=*xGmG$|GsQ?>o!R-YU1v6raIdR z5xav@BA-maY`^HbUV1re2x3iJ3?1ls5NOf12Jd z=(@e(1>SeiCRG!@$mpSrpm%cKDiN;cOx{JkYG-(f(I;sGZ4|UwjfdB21B9r%*eOxw z7c}TR@2q`F1V($Tr^$E%8hB6m)T}D6-f;vUjYe&J!p5g2uxA7{-lMp~#^+tIa5{)i z2Z`xm(R7fU4wjz>Hokb6SM}f;{+hr zhr3j8e#?%#C$QJXfnn$)Xm9n!MzGMvOr@WdT+vLWU}fS$rOwJl7b*=_CNET)mQNqU zed%(qkWE3RlMI`)W;P?T)F$lK2sxe5&mYCfoVd=9O)MHf}`lsk|)@7?R9?rV`^YE@ePjPBu-d5l#O0cA%2`8zUB_EdI zC|$&oA00SI7qcXg#xN~nNq0IIV;ph?V~ zssBIlXmBfMUM{AV951nwyY5VmKs094626w%bg8mYP+Gy1|uL<^Y z*qn$niCe`CIwX1K(dwpS)ZxJdPL}HVX|K-IF3i&)kv~ugx{5m8BocHrk2Gg|CHRna zF%4L9N#cx!1a)epO6M+%B z)@#%C2cSn|N9YE1sIKzTsUoY+W#b%R0nfbEg5C`ey@#QPZlo=IFJ`Hqwo;ZWKaE{< H6O8`>kLzSA diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Poolstone.class b/bin/main/net/ludocrypt/backrooms/blocks/Poolstone.class index 511e08217bf1d377b990239e91731ae708349b2b..9fc2f9c66de5fc1422788dd80b031e34ce2da61a 100644 GIT binary patch delta 180 zcmXAhISzqQ7)8(X8}dI7g;EqkAsX{MD=4&L2MUQq5G#2r(GVgQK%-DvgC*b#%^h-2 z?n^&{`uaXyfD(h9K02`oIYXX;!mMYj?R-7kOqR=qVwAQY&roX|N(LWgdvng-jv{04 zPR1Xgr$|Ul*rzw;P6bnPo3gGiKHif(P~1uPP!SEw3PGY6l7y&AGk=~M^&i*xX_JfKJFJcLLP?z delta 131 zcmcb@{f>+4)W2Q(7#J8#807(JBp*ff$?3=9k=3{D%l4lqmeGZ^qN7%~_!GVm0o7M5lfr51=_&xI05`H9M%8; delta 130 zcmaFK-OSB(>ff$?3=9k=40ap24lr{tGZ^qNure4|URWUywiW#9w=IFu2H diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Poolstone_Path.class b/bin/main/net/ludocrypt/backrooms/blocks/Poolstone_Path.class index 80dd00a159c5a9d29a3dc9d80ce64e474ac38876..6b4a6cace6a665d3bf43453acbf1005b59189280 100644 GIT binary patch delta 168 zcmey%^_ZLM)W2Q(7#J8#7@Rh8?PHeaXE5MlFk~=dWZ)@EEiBC}N-Yk_&(C3GaMzgZ z$mqt!#lXy9!o$GIU^@8%^D#!d$8JIL@umI9rKsieWYX(~eP5>D+6-WR8 diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Poolstone_Tile.class b/bin/main/net/ludocrypt/backrooms/blocks/Poolstone_Tile.class index dddc606fd3d6295159b1e35639684f88e28042fb..031fa82d5bd37895ec65b9743975b06a2230ef16 100644 GIT binary patch delta 168 zcmey%^_ZLM)W2Q(7#J8#7@Rh8?PHeaXE5MlFk~=dWZ)@EEiBC}N-Yk_&(C3GaMzgZ z$mqt!#lXy9!o$GIU^@8%^D#!d$8JIL@umI9rKsieWYX(~eP5>D+6-WR8 diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.class b/bin/main/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.class index 13ae1ca57f349875f7448c9a180cc47eecbb2a3d..2aea1906420004f23f4157b5a270d2049ef76893 100644 GIT binary patch delta 175 zcmZqXe#y;s>ff$?3=9k=3{D%l4lqmeGZ^qN7%~_!GVm0o7M5lfr51=_&xI05`H9M%8; delta 130 zcmaFK-OSB(>ff$?3=9k=40ap24lr{tGZ^qNure4|URWUywiW#9w=IFu2H diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Tile.class b/bin/main/net/ludocrypt/backrooms/blocks/Tile.class index 612cd01d77bd5080d7746b10f0331175e91b7aad..f0e23adfe7effab6ddb2640cb9c02f1890d42814 100644 GIT binary patch delta 719 zcmY+B$xl;J7{!0DeSNRAuLhwY4OB%eLNRHGEKG_EjmY2t+5#dX7A*)O2nZ?;#SsS_ zuOl0Ep=&A0lbC2&yK>{s#JF?ke_;Gdg~ZLh=Y043&bjB_Hzm_S&zC3Qb&P$?Je|0E89G1?6KI( zK9zDsjTR1=>{pAfkTXVH{c_c4Z7OJ#tvkpelMap51Br=5WH2$*7ug~D$;6OFCx=zH z5puV3#G;#{YR2d?dN^)!O#L>>ok@CCky&k=u;^!CzS#_E`lv=o{d9-C9?mdfGOke} z+^=5c_+1ufIXC~!J*62_Ts66(Iz5}6*SN0kcxnSZ+_adcS3_^Fi^VeuZd=5-qkecc zxqFzgxF@Zvyp#GJUiG20Wq^8hi4w}Mg)-JFyO{GmF%@&)jd9^m% zd^X!{c7C8C9JbkQ)4WJ)nt;AQyG_>;$xV~UVw=7>QFBl%Yo2IB0r?cNfi*NzM2S?a ztRp8Gj0)8`#gL2)3wCfCuk3xe1VgY&|HMd#Gfi&HW^9=RGDPM3%2J{sZPLhjCPnvx z;H-Y8a#1Q8m$)ozMs^nGl5D)nCMB1Ci!Y0AyrWd&-4dUbEdPak|L-)@ZgY1zxi{ck uc?Y%VD~~SUC(eByi0eaf)p7WP;`>OjgU2Y@^8`KN8866@k8j~6Ie!6Zlb-ef delta 637 zcmY+9OHWf_5Qd+xJw2!A^k6{o(xjDEQc{aa(}aZyu8e>RUVtj1f)>Rp))u^=fC%2e z`|VQ~?u^m3l%yIH(YP}H4A&a|fpJQO#LYMF%s2DAGqd5>A?L@RPYXa3FXx<;&-K#c z5~fv=jO(apt^VQ*n>$^0v0MN2HQOERwb-MG=#)R=bJ@p!-EKCiEIEzbN-0q(9a#0yD~8n7*|jAuRv019dh5;lNd4pZTh<# zN_=2PB2l8PMEh4div*32beHH|N~(+WRdk6Hx~6JfR~_qVWdk7rxD^apPD^HRh9Nwh z740EMKw=i3Xb3kNpE=j-EmAG)!g3NUCwi=^eyW0yMlLZb*vm3h!Ivvnq@oyOT;4MF z72YLmy0OHBtoW9yin{)es2p=kd{#F9@1*zte#`A8W|!{_1idR)>xNYg&CC0wxyOBR geITv|p4zbZJ{0ZY5sxLV7WIT@JjZ634qjmY1^+#Y)&Kwi diff --git a/bin/main/net/ludocrypt/backrooms/blocks/Vent.class b/bin/main/net/ludocrypt/backrooms/blocks/Vent.class index 0fadb2d6fdfb649724459f6369d31f35f64eeb6d..a3c4fbfebb3557b4cf61fa2bc460f419623a78fd 100644 GIT binary patch delta 483 zcmX|-O-~b16o#MMnQ3RH12NQ4Q8EDvfoO$bNHk%?!k{LKKtZS|f>5A<6k7T63-lk5 z8#gZ5x?)I1B*C@uFYq&1ny3dD$xY5Z@44@J&dL3p{+)Jz{W<&rbn$7={b^py^2no) z#|p1pSXnKW3zeZ#X;E>nO?Mi-RW1et9?c9YI&{BPtM53q+ObZ|QAI}YSgD=TrKHPK zo+TJlG)JX)#p5~S`y=sP6`yA@!GivqXfa-~q+9Lw_%h`LD|*asGAg{*+x9JcnKh4f z5r_7S`k)(~4z;ZZoa3!w*+I$9nd<>92iyqg47nZ99nw=3a<}Gw$b*oF-{{{HTZ|@& z)zSoMQd|*TM@E!)jv>d8D8(>OBqk*Lde6Z1QU*Ag8e7#5ON0KG!bN3{o;X zn9MMA`GdCGrRhi^V<3w(Z&MTOgkP$C?2JFDUup;f7(L0$?=?^C1;IQC2YeLksRfvD zqZ#dJK?f4Bj?xb+XW2)ZF5cFRU6%Q$OAcrHmHQI8FQ=CKn1*Ek{2><{9 diff --git a/bin/main/net/ludocrypt/backrooms/blocks/VoidBlock.class b/bin/main/net/ludocrypt/backrooms/blocks/VoidBlock.class index ad4508634f3a77bf792827e463247a23dabc31c7..71186db7881007604763635f05ae39fca4a99c74 100644 GIT binary patch delta 2522 zcmaJ@33O9M6utBRZ+`MKNt-5w#>%D~PHPJ-1+7#?fmSV4i!80J3&s*dv?SQ1h)a#0 zQtPfTE~VnGMR9``Q=~57ZrvB$#iHWw@u+w_ii&T3(#6_iPtVMIZ{EB2&dh&vvS-?* z(~aK0w>=49I`eEcZdNCzV=~7SUr|CFVMD$7O=~yD#^iRu{ zF=U+WU+FJsjD_k87Wl(UBg+j0aki9r4uh66H@8X#mUDz9rZpT`6|0DZg9cWhLC3ia z<3*o+dF44lt#L4TlD$3+a|L}B_Uk!R!D#SCKzD@!c2 z`3`KtYN?@x!ID#2S}Ikv;tCy?Gh|amb{fZ(xJuk-tBRN78jfp0`?Q9lbLvBZa7-p& z&#?w;8H{EAXjNcYsIER>3agciH*nl27ag=X-ye+z!ofg8RIc32(PpmH`NNB&f%%b! zn7`g!Y3H~F>lvK1$Jvp_@X}B?I6JaRG#L|Zx8V*Qw@Yn(cAp+u#c?O@61_&D2n6#nf|(S8X}S9 zQ7iV4TNha#SR!Kv`tX&!`me<+>G{@E@GZx8_M5J*j-qvjnQkneH@+q)aEyBy!EP>adjVgCT&klH`_IFpvePbv+2ybfUH! zp^`M3i!Hvi1nP^e$;t4=O_xtjAkyNshG=eV@fx9KGFG*Cd8pZIX)bn36tB|+@uihy zIA^$g+74XU4xdlU>p@eE2XPNBrLh~$30#)H1y{E#-}tlyu4`9z%UQH5AISNpb;_G^ zUMDGIt#Qd1Yn61d)&y?dio5gj$-BQ3k8H)G>y&$wOv8BO=_Mkk)`z$Lzn1m2n9%5st5_uJMZ*Qfd134B;Bxpu8nihSC3 z?CL>ZP3C8rUv%Tkt@vhxa-f+{=}t-?CDS)3RvG)@Uoo~<#(qr2JZ2v2qmq=l)2D60 zPo|a^IuH*G5%bHxfgT)6=uHB(4JAy)R*yiqVn8Dc3=;Ns;FckLzqYN958pg19%=Jz z!cZ-vlUf}8T85n;_KpOBT|;FirK2}aI+JjCYEb8^|Iuk4daCFq3G^GC)o|XX5qX3C zGUdIcAQtv(sT__`G9t#rL7DW)_ut>P4%lhIyja=TDvG-Hd7D{WwsQiRvH|8-GvyMdlSLn=5@lAhM&VE8EM_Ci z%WO&wGsqgv>?Hnbc=w|b4joL#MjhokR_JKe5!B=#%_Mq1-bUs~8KG2)j>SX&0k_+2 n|Nr~G zcemU)<-itw^1U zA9o+tRx@)ZX6ZPe!4ZC+lgBX|bA<3sGpli-jtdw@iIV(6@v$$YUW9q#nD1<}1`Bm8 zU>Hp^qf0n0MlFNh6iY6M#TpsZ(lK*PEW%0Nu^5}w9+|aYArP47aUheKqC=bm8@<_G+Agyi;e_CiCFF*B6eCn@p7JC z!Eq&)QzH>C@>plfN}@<+)AcfO701=t1WCGvp;&A)3j?#0vF55oGM>Cf$8}=9ImNja zH%c)#G5AU=D=Vd(HvCe@I6- zwX~tNHnub#T^931EtZq*9QVk{08P$oXl;!pnqn(j<;=Yt_jxnXhQ!6Kv3V^kk`2qe znT;Hqu$jT8@0-!GGSL`MG|gyPB{o>2eD`CEjt4})RibXigW>~gg1HTk=y+Ie*K+?z zAFaZpcuZ9JYkb@BD;UY0$C2HvMI+R_|b zB6Akr!oTFk9}md}&v0q?#^5PT3owjr-xa3&RHWt0qfP$N z(8SbyXkc{zipO@r=!IPnE+}*n>B5g(l&CI7xhU;H*={OPFrG#mDvhTgjN$ZKj0qI+ zGz2DM5=9J?F@;8*{4=RbA#3zuYJCsNcafjQ@p(O|ksd%KU6cW!a!f-76)^mSAkt7X zs76w2VVw2k2{5G|N=bTt07b(&IM<`mFded=;XG7k@DddJQUqj|xu|k6*Twv9)D3>A z<%t@H08aPd&xTJ{55U_4@U~oMuiEyAq)Z!2h+Ol$pQC~Hh~Y9s)8xMCuuuf3sc0V> z>$_0bgUc)O$d=PX<|1Bhq>Ys}e4LAA>mo*+?22^}E54STmFprrzBb}pTW(8`i0xrG zc@;r>TFBA%V^s$nM?0+#*Vcz|eHb^;*n>4L)|TzTEgi~7j+Sz9dx!F#qq(@dLwQ45 zu~~UV+6|I3xn44QS?e{WZY$@1%|+@^9m#IMzDR}7i^_ zc*4iC@*nzmHX>Kc(6p97R?7(xI5Gf{%2`0XovSmg9S2Bf8V>sgWga+Lrd;$)&jyKe z zFBPYEs(bX%BumLR%tZkeM6yv*Z4Ugma_C!Z0z-Q<0VujqDjwGLn7zjV7pY7PE} zOX!U#Qs?3u@(dKKl{iYCh0*F+_?A45Ds?!Hk!NF}nvdhu8%&{2<@DGwgm6%~gDFhK z5WKIfVH$a199CLc9(jd0s$9-|4-5)3iCAG4^OLnmJ!dux!u$?hyLpHU?!Obs>#y44T^*bhk4YZUib~0y>0&fe&a2 t0|PgMFar;R0s}9DDUinlF@(X4!5pm40!&&mSOIA+pqw>>ErUG+Cjhz1CDH%@ delta 154 zcmdnUeVU8w)W2Q(7#J8#7;H9jEoSCnX3*ndU}ex}WYE``IA3(~BNnmA?kvqL7K{v9 z6Bmd8`4TKvj0}n(wh*f!X8;2W10zts++-hCDUa<8x*LHUCI$l_$;ZG9B)J)c8F(0E k8F(2Cfjl0FVg@4yW3W0CFlowQ2Bf)wa^?({4Au;s0H+xjg#Z8m diff --git a/bin/main/net/ludocrypt/backrooms/features/Level0DottedRoom.class b/bin/main/net/ludocrypt/backrooms/features/Level0DottedRoom.class index dc7a9802d549a9baf83be9861c042e63da8f60b8..366c93d4fc8ee02e17d24a2be6c5fffd67842f13 100644 GIT binary patch delta 1082 zcmY+@eN2^A90&04_q^Qem3RpxRJwZM+A0`ckdz!0IJN$84Va}YS97)2%Uas77qYl0 z_=edfA5j#qf<>BE5VzQD$}q#WR)fN~%oS5pNevQ86P13>zj~hip7S~9d7ho^e9vi} zzp|ty-pkfVg7-zOcjF}|=vx!)M;Qk21_tpKfu)Sa+l&(@;2ru<&H#eU6lbG?1z5&H zEN78;E-JYYRa}G>Tr4idN>*SMLs-okv4b^iKsB4OmM!84-em{Yu?z39Tik;Xdr=c) zKi=nnbOy0r0gj5r1{EhxK&|p&qY7Y?$`og#P8DFYD#R95B%X_UwGdm?B81gqaVfT` z3T#&)G^iS}gGSYW9jX~0s1|VqAF2*CsV;n^y2U-%sg5FLm--zat0C;s7N6)ue5&uk zXL>4{^=!20d5AdYQucTb!-dg+>n^80^=|i&p61?Zk2vkA8UFh8adt0@6xuki6^%`{ z`hNqJO}5Ork?K#gCAfXLr3pyoOC1DElGKw@VX0oJfyf;HLpFHdIIDDqp3=UgjiLEf zE+)D%+8eJ$eJ;OgoB;R}mWcNv245jw+9d3Q7yIEyyG+o50vtdwzQ!{$O)0*?a&%%9 z4xt*~B82bci|_G++}-HHNqL^Zk2L7vojA-fK^$cYj&TxxW)@EH0i5Iv{Ki@6Wid|i zah%}-oaO5{$E7&Wa`dqh7bO0RY{Vsr`%iYFpT{u3KK#XDTvpK-R1-0zvhcT>iGS1+ zxT2oNRaJ(6)mmIrVGK)J*VO^sP{AJDlw?NK6+(MRolIE{YMoD`i)r<_)zm~7sp z*R0?Kvzk6rOTVe(q@Zcyy=E8hH(xT%9AUaS&kS>c0dtj^b}X}OI$AUdlgN#LJ;*xIC`tM$=7~HKo#tj4@vu^bZ_DK1Y34a2Y03IQlj(TVYySfp Ccm|jN delta 1001 zcmXAoe@xa@7{$+d?!E6TmPx!BqJpoW;e3Z6sHS6o6ay_asi$$bv(Ne7XLsK}&Ux0%sm-g7 zOXSjMC~=W7ui!b~3$ORO@dkRZjKFfnDnnSoFy3N@G7Br2jaAH1=E7q>in&Btgtu9Y zcUY$M@h+=S!fIs{tJ#P(JgIEOTAs%`b}M_ZUVse}s|;bIgz=taD6>$SFWGosa!@L{ z*d+NVlO@U`Y?fk_OPSJ#FICtg)ygO;q!C-?q_P#;qz#pF8QY~7JB`B!W(anfG1zS; zVUL-PDl;4V{M6)6V;T{_Kp+tCJCa8PFPX`~k6e@Amz);2F_PepGDlF)*|pevz%BQm zNlA&o%|-tSDl$~rs;>b%R5eevTXjKoGrBY7N#{MD;KZbv%!XI%xhbzCz#)OOhP`)( z*XT2Yc7QD?QvWd?!Y7DR#^WFoaR@0mjC54%4{9(AwRj0p6ygY8M;(@-9;M!N z1vsM#w$nogH{%@l;V0JNXP&?>Jd5+}!Uf((rwqnL8HG!l(q);BUnLJ$WD%~)3j8Le z_+9p(OKNaUj^PjSPUE^5XFw9v8l9n1_Sn42JIZi*q1rbF64vuH4d_Ga6GicXZeUH9R@Aiyy^ zxXnG%`CVr_4@+aP+U@h~_r}S2&Qu6<&M8z@$(H|&(kfXK{OI;flwu4#r!9U^XWWKzKlzb6QzARqh>{zWknktjB)sCDt||wv}+oV05)Jn@IZ1(U^&iU zJz9k-Z;+nk2GoPl~4 zqJgt;pY!m5tI))?Xl4l>vJ{V5h89-h2~VSy*YK20c*YJq53n0AR214&BHC3tUaIMM zrDo%`T7)-h4La0Tyj3B*Q`LB{YVkqc!$4W&K&!AghM~`mCAN>}8bq{(?G+~k$P{u=T{4^$qVv6ZB3mIV+bC6ld zNVA$zW+S7`W)3#x9BL{!%v3Sf9ATU}%Xrhs1oMWY%sVEUE+)wcju9_ClFD(C%keUg z6J#kdq$u&-vW@bwpbL5q+9n6=nI4*x#;E2RA zM~waC$2PnTi0V5eyg-}ntYRv6g8eGUsZjlD7e?Ed`=%Mpgh8zIvfNGu@zTxR%(VxZ wB(2;-UoM>ROC2k$8DW#2&pfMKHapF|)^V{^g$9(#3BI40sHd2;V6?aVANE(X$^ZZW delta 712 zcmXAnYfKJc6vzMn=XuWi78=T}i!N`ac$cmk6RVBQmJc=~=Cb*~n60gaxs2B)o1vLr z5gTTSFD@lz4QUb?%Pb}3)`cSXd*$}T*?v2}=bSyC{^wFwaaQRLmv0Rm7y>vP-o366 zXO~WOo|ZcAc~_kO9(SNrah^gY7hb@L64~ti7;67)ek(p@XDl~H~ z9x@v(%tb3bXybl7W-*?y0#A7h&-e(>*^71$f1yJSN2iKFmrBM9H5)Hg7P{3M^r$U( zrSkDw9Y?P!!y8qLx2g&6R5#wMK77za@llV*CmoN^Is;$ye0HtF26R1s>Q?;HZ}40H#ve0+Gy(J|6Gm-fXv`cs%mO;iBKn$@9AZ{;m|0IhvysEi zPWqc&3^0WpV~RM=lrYfLG03zq#I!Ng^e{|(7%stdNhqVl&1lKw1X<2lS;0w?O}FGQ zPPTHg>}I^=GeM3pNltl~EEPrb@HzkC-MMI4kcsQwDIxAxuY`4K5FUgGYl7 zblR6SPG$l4&%B%l_0J9<)J8nGO=2<(#>#sZ+N~f+dU=r3?eT?60}okqVq(0Mv&gEC hO?nyAtohpPG!NT}FLTw=|7Kze++jM#Bzj%$!oRT3s|^4E diff --git a/bin/main/net/ludocrypt/backrooms/features/Level0Room.class b/bin/main/net/ludocrypt/backrooms/features/Level0Room.class index f742b14dd2fe5ce1cc86e0a09556226fb64dfc92..f82b84e4d0e721692448fdd59ad6dced54cce0d8 100644 GIT binary patch delta 733 zcmY+CSx6L66o&u*-g{;=QHnIv7Hy_YZJee>B?*aok03FUo}%R;ipU}f97{i zAp~dFV0~{CvI7S54 zxJEmBb&B)2JPho2dE7^mV&oF%D+HN&9!JZh@IPZqndAoUyWEMg2>+hb7Oy44QU#c3 z%VJB3rOop3LY#ZHOqd)aN_+IQYdJyg&MI&)%Hg?I`ZMgDUDId=SdW~*=E({EbtuOc zRA4)TD8xnV!DZaQ72LyB)Zsc>Z1)nCG^pY*++-wbI1aZs9=GYk9nQdA&Ot5bp^ghs z&xL4UHXd;U8o3Eg%tJHt@q~NO!csit1+=mn&)A4IcH_C9eP~zVc%kC(Qu)xK=Au(& z;+0x~E|rUJwG*#Z3ErqPc&jS$PCdYT)qxM{8$Rk#eA1)PqdoYnGtjFS;EP_0uX+`} z={$Vbd+|db!%tm~K3#);-GpEIH3oD)ewzrw#M7^go7#A3Oe)1JqSGv6h*`-YW9n<*v!w^8Wq=uuFr0Ek z*-w6K!z)1e-$TN4wA;=qdbkf9RQs6*HK+m@Yh(U9^>G>uqUARa*r^~^`dGwS_8{Y> vl?UmW1t+{x#Y5H%u}Lpsx>cbzJI!M2gfd^1{8J`1P@5R1)6CSsr^KQ^ac{GU delta 739 zcmXYvX-E`67>3_>X1-mwgATjYG+i~VW!pRo=^~*Z@<%^HEIObcNf8)gMF+M0sEEQK zH!FfJ%KB4~nSxX%nPn74nC8*tc4?Ysx0%&g4Lp3$%*QY=?{_R~Pu8Vux2qBk3<4aE zz=OTqNW?sgrBH0=Ux???%rTDj;woJ9mwcG;CILk82 z2}`S`r^FXKTjJBgL}{;1uGmn<16jKq9PRK{oc<9}Y_DlF0jxz{;9%k;e=e?I6H2iK zW!QmoT*6gc$2C-<0{3wPkF0&hO%hc!sOAXV<|x!K26q{UdrU$tQ}KZ5c*uFEV+QJ( zjRvm6W9Fcdd1$5|Ej)-PJcFk!#WUW)b2i}xJJ9N9KZ0r)UaAZQbdGO-j~SRDq(r##@Rm4`R+M87w3D<#Fisz=SQLwH{c@}yznO4cP7@$ zBF%8`V#ksOS-RG<$-W95v&sGn?J0?f3B(>>9_2MklA&JK)Jkf(7XJT1e!1qBY>$au zrrY=zewUIQsg5+TD;!ylI>!X4|H7G=6paf+dBz6ps+Qb(*}LPAPv-gpEoDE$YFwM8 z0c0P$j>RPuNV-e{_slxF3(RJE%x>c;ONvnaGUF zk_gO<$|lM!;BPfl!qC-3>XhWTvd4TKmt2|WPAEqECC@28N!lX$P6avRt?Va=SrS^( O7awg?bY;n8e8C?86QJV& delta 615 zcmXAn%S#kc6o(Gi>DtI>{Nygz;6q0|IVvt$@Tl6_g$pVjhUp?^gxTEPGE zxt8hJ;Mfc{!%^b6>i7j3)!67?tI4?u9%IvOR$Ey}_HI4sl||n4w(1#wgIlvSf$U*> zFfMs@pqN@JILCg@bAUSP-D#zP4jSp<3Vnna(|$z8cfm$Y+F`stSU+?NR+7#|N!0zD>`UX#nCfXS!N?4aM2^4L`I z#GGKj)biA{@XYiuXhwK$zVO0K^U}uh$}VHbW-@H^cx?+9v4y;`mAth_d1p`Y!Jg)$ zy})OCiBWrlupQ#79pjrFXUs6Pib0Qg diff --git a/bin/main/net/ludocrypt/backrooms/features/LevelsFeatureInit.class b/bin/main/net/ludocrypt/backrooms/features/LevelsFeatureInit.class index d241c99f69712a92e2fd0bce80378075fc51ec22..99f9c25bf0c306707ce99f2c7793394c9aecfa61 100644 GIT binary patch literal 3854 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 delta 891 zcmY+CTT_iu7{~wbKD>LcZB;BCw9{diN?R!;3MGsejUd-49>-}8Ugnss=8$4@2rzW(|689*^!Py6O9XI*U# zeX;7T4DvhD>`aL)tfF#9waAfh!}ek|jXQEgP{PBOPoEqCu~x#%RzyD?8DhPJU@N9L zXPPLH@Ud;C5@)6;lUTyGl|s%eQ7$3bw$r%o+#wOeRz)A2`J!4PmTeFHa^{MC5^-z? zDA|=RY9yAj9imECP#lq1##TpBSH3tdq1fta(p4ZDC6=?DqVKN4!P64)Y-cRQwuD;S zdn1v~zOrbfD=c84MIwRIvy0NU{*G==&q*Y5dVWzF4TpL;y(p2yX~&{;Alwz@v`b=z zP95l`9(R)Hl}P61C{4HnVnD*rcA4hfe%Dor6#C{au?Hn?Ae9pA3VRrLJ-9=ScAj$t z_h`f}weHiron<|sA9kj94CCDUh+;i{?2q*@Kbs?G3%YB%gu5yKwUXV|YU8D5#z zt9Ia;em5eKhQzVKH+o0cO;vA<&v0RnDAeR#x`Q*g`EQtQiXJmWE;Qg4ZtF%L|NFY4 z4+vHIcjv+WcNhxJVYFcmV-0$uhckFQi>LD#ozf{UBpdpCxi#?Llzu$N3thAD(zLz$ E3oM(jw*UYD diff --git a/bin/main/net/ludocrypt/backrooms/mixin/MusicMixin.class b/bin/main/net/ludocrypt/backrooms/mixin/MusicMixin.class index 4f1a3f9772645beaff7f54282c8edfd4cbec8222..70070070ae7362a31a9646ad16192bb96c9faf5e 100644 GIT binary patch delta 28 kcmdllbyRA@S0+aFi2@Rn`ItG`oO3c$^GY_0Giz`G0ElP^QUCw| delta 21 dcmX>qwO?w(S0+Zqi2@Rn`ItF3%Q9O; diff --git a/bin/main/net/ludocrypt/backrooms/mixin/TitleScreenMixin.class b/bin/main/net/ludocrypt/backrooms/mixin/TitleScreenMixin.class index d4359d08bc82f5d2dada1b78db4ef53ce3c4c16a..b7004e842cf6769e9407b3086f75221251520821 100644 GIT binary patch delta 28 jcmX@4dO~%B3kRe6L;;D(u^gOi&N-Q>c_o|EIAXW}f_(^| delta 21 ccmX@1dPsGH3kRd(L;;D(u^gP6b2wtS08M%ZIsgCw diff --git a/gradle.properties b/gradle.properties index ee84eee..0fea9e3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx2G -mod_version = 1.3.0 +mod_version = 1.3.1 maven_group = net.ludocrypt archives_base_name = the-backrooms diff --git a/src/main/java/net/ludocrypt/backrooms/Backrooms.java b/src/main/java/net/ludocrypt/backrooms/Backrooms.java index 91103ba..42e8d2e 100644 --- a/src/main/java/net/ludocrypt/backrooms/Backrooms.java +++ b/src/main/java/net/ludocrypt/backrooms/Backrooms.java @@ -11,7 +11,6 @@ import me.sargunvohra.mcmods.autoconfig1u.serializer.GsonConfigSerializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; -import net.ludocrypt.backrooms.biome.BkBiomeKeys; import net.ludocrypt.backrooms.biome.BkBuiltInBiomes; import net.ludocrypt.backrooms.biome.ConfiguratedSurfaceBuilders; import net.ludocrypt.backrooms.biome.SurfaceBuilders; @@ -53,6 +52,8 @@ import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.command.argument.EntityArgumentType; +import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.painting.PaintingMotive; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; @@ -64,7 +65,13 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; +import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; +import net.minecraft.world.gen.decorator.Decorator; +import net.minecraft.world.gen.decorator.RangeDecoratorConfig; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.OreFeatureConfig; public class Backrooms implements ModInitializer { // loot tables @@ -73,8 +80,6 @@ public class Backrooms implements ModInitializer { public static final Identifier LEVEL1CHEST = register("backrooms:chests/level1"); public static final Identifier LEVEL3CHEST = register("backrooms:chests/level3"); // variables - public static boolean Display = false; - public static int DisplayLevel = 0; public static final String MOD_ID = "backrooms"; public static PlayerEntity teleportedEntity = null; public static long SEED = 0; @@ -200,9 +205,11 @@ public class Backrooms implements ModInitializer { public static final PaintingMotive SEA_LIFE = new PaintingMotive(64, 64); public static final PaintingMotive WOLF = new PaintingMotive(64, 64); - // builders -// public static SurfaceBuilder LEVELBUILDER; -// public static ConfiguredSurfaceBuilder CONFIGUREDLEVELBUILDER; + // Configured Features + public static ConfiguredFeature POOLSTONE_GENERATION = Feature.ORE + .configure( + new OreFeatureConfig(OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, POOLSTONE.getDefaultState(), 15)) + .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(0, 5, 50))).spreadHorizontally().repeat(4); // identifier public static Identifier getId(String id) { @@ -211,32 +218,36 @@ public static Identifier getId(String id) { @Override public void onInitialize() { + // Features + Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier("backrooms", "poolstone_blob"), + POOLSTONE_GENERATION); // commands CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { dispatcher.register(CommandManager.literal("backrooms").requires(source -> source.hasPermissionLevel(2)) - .then(CommandManager.literal("level").then(CommandManager.literal("0").executes(context -> { - PlayerEntity player = context.getSource().getPlayer(); - player.moveToWorld(player.getServer().getWorld(BDimension.LEVEL0WORLD)); - return 1; - })).then(CommandManager.literal("1").executes(context -> { - PlayerEntity player = context.getSource().getPlayer(); - player.moveToWorld(player.getServer().getWorld(BDimension.LEVEL1WORLD)); - return 1; - })).then(CommandManager.literal("2").executes(context -> { - PlayerEntity player = context.getSource().getPlayer(); - player.moveToWorld(player.getServer().getWorld(BDimension.LEVEL2WORLD)); - return 1; - })).then(CommandManager.literal("3").executes(context -> { - PlayerEntity player = context.getSource().getPlayer(); - player.moveToWorld(player.getServer().getWorld(BDimension.LEVEL3WORLD)); - return 1; - })))); + .then(CommandManager.literal("tp").then(CommandManager + .argument("entity", EntityArgumentType.entities()) + .then(CommandManager.literal("level").then(CommandManager.literal("0").executes(context -> { + Entity entity = EntityArgumentType.getEntity(context, "entity"); + entity.moveToWorld(entity.getServer().getWorld(BDimension.LEVEL0WORLD)); + return 1; + })).then(CommandManager.literal("1").executes(context -> { + Entity entity = EntityArgumentType.getEntity(context, "entity"); + entity.moveToWorld(entity.getServer().getWorld(BDimension.LEVEL1WORLD)); + return 1; + })).then(CommandManager.literal("2").executes(context -> { + Entity entity = EntityArgumentType.getEntity(context, "entity"); + entity.moveToWorld(entity.getServer().getWorld(BDimension.LEVEL2WORLD)); + return 1; + })).then(CommandManager.literal("3").executes(context -> { + Entity entity = EntityArgumentType.getEntity(context, "entity"); + entity.moveToWorld(entity.getServer().getWorld(BDimension.LEVEL3WORLD)); + return 1; + })))))); }); // dimensions BDimension.register(); // biomes LevelsFeatureInit.registerFeatures(); - BkBiomeKeys.turnOn(); BkBuiltInBiomes.turnOn(); ConfiguratedSurfaceBuilders.turnOn(); SurfaceBuilders.turnOn(); diff --git a/src/main/java/net/ludocrypt/backrooms/BackroomsClient.java b/src/main/java/net/ludocrypt/backrooms/BackroomsClient.java index def62dd..84fee3f 100644 --- a/src/main/java/net/ludocrypt/backrooms/BackroomsClient.java +++ b/src/main/java/net/ludocrypt/backrooms/BackroomsClient.java @@ -22,6 +22,10 @@ @Environment(EnvType.CLIENT) public class BackroomsClient implements ClientModInitializer { + // variables + public static boolean Display = false; + public static int DisplayLevel = 0; + private static Map itemRenderLayerMap = new HashMap(); @Override diff --git a/src/main/java/net/ludocrypt/backrooms/biome/BkBiomeKeys.java b/src/main/java/net/ludocrypt/backrooms/biome/BkBiomeKeys.java index f981388..2c45024 100644 --- a/src/main/java/net/ludocrypt/backrooms/biome/BkBiomeKeys.java +++ b/src/main/java/net/ludocrypt/backrooms/biome/BkBiomeKeys.java @@ -22,7 +22,4 @@ public abstract class BkBiomeKeys { private static RegistryKey register(Identifier id) { return RegistryKey.of(Registry.BIOME_KEY, id); } - - public static void turnOn() { - } } diff --git a/src/main/java/net/ludocrypt/backrooms/biome/BkBiomes.java b/src/main/java/net/ludocrypt/backrooms/biome/BkBiomes.java index 3b53d3e..0f2e043 100644 --- a/src/main/java/net/ludocrypt/backrooms/biome/BkBiomes.java +++ b/src/main/java/net/ludocrypt/backrooms/biome/BkBiomes.java @@ -28,8 +28,8 @@ public static Biome Level0() { .feature(GenerationStep.Feature.LOCAL_MODIFICATIONS, LevelsFeatureInit.LEVEL0ROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL0DECORATOR.configure(DecoratorConfig.DEFAULT))); - return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")).depth(0F) - .scale(0F).temperature(1.0F).downfall(0.0F) + return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")).depth(0.2F) + .scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(14402413).waterFogColor(14402413).fogColor(14402413) .skyColor(14402413).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL0MUSIC)) .build()) @@ -46,7 +46,7 @@ public static Biome Level0Decrepit() { LevelsFeatureInit.LEVEL0DECREPITROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL0DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(14402413).waterFogColor(14402413).fogColor(14402413) .skyColor(14402413).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL0WEIGHTEDMUSIC)) .build()) @@ -60,8 +60,9 @@ public static Biome Level0Dotted() { .feature(GenerationStep.Feature.LOCAL_MODIFICATIONS, LevelsFeatureInit.LEVEL0DOTTEDROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL0DECORATOR.configure(DecoratorConfig.DEFAULT))); + return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(14402413).waterFogColor(14402413).fogColor(14402413) .skyColor(14402413).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL0MUSIC)) .build()) @@ -76,7 +77,7 @@ public static Biome Level0DottedRed() { LevelsFeatureInit.LEVEL0DOTTEDREDROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL0DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(14402413).waterFogColor(14402413).fogColor(-5171911) .skyColor(-5171911).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL0WEIGHTEDMUSIC)) .build()) @@ -93,7 +94,7 @@ public static Biome Level0Red() { LevelsFeatureInit.LEVEL0REDROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL0DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level0")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(14402413).waterFogColor(14402413).fogColor(-5171911) .skyColor(-5171911).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL0WEIGHTEDMUSIC)) .build()) @@ -111,7 +112,7 @@ public static Biome Level1() { LevelsFeatureInit.LEVEL1ROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL1DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level1")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL1ONMUSIC)) .build()) @@ -129,7 +130,7 @@ public static Biome Level1Off() { LevelsFeatureInit.LEVEL1OFFROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL1DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level1")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL1OFFMUSIC)) .build()) @@ -148,7 +149,7 @@ public static Biome Level2() { LevelsFeatureInit.LEVEL2ROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL2DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level2")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL2MUSIC)) .build()) @@ -167,7 +168,7 @@ public static Biome Level2Long() { LevelsFeatureInit.LEVEL2LONGROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL2DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level2")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL2LONGMUSIC)) .build()) @@ -186,7 +187,7 @@ public static Biome Level2Messy() { LevelsFeatureInit.LEVEL2MESSYROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL2DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level2")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL2MESSYMUSIC)) .build()) @@ -205,7 +206,7 @@ public static Biome Level3() { LevelsFeatureInit.LEVEL3ROOM.configure(FeatureConfig.DEFAULT) .decorate(LevelsFeatureInit.LEVEL3DECORATOR.configure(DecoratorConfig.DEFAULT))); return (new Biome.Builder()).precipitation(Biome.Precipitation.NONE).category(Biome.Category.valueOf("level3")) - .depth(0F).scale(0F).temperature(1.0F).downfall(0.0F) + .depth(0.2F).scale(1F).temperature(1.0F).downfall(0.0F) .effects((new BiomeEffects.Builder()).waterColor(-6710887).waterFogColor(-6710887).fogColor(-6710887) .skyColor(-6710887).music(MusicType.createIngameMusic(BackroomsSoundEvents.LEVEL3MUSIC)) .build()) diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Cement.java b/src/main/java/net/ludocrypt/backrooms/blocks/Cement.java index a164bdf..07e0bbf 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Cement.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Cement.java @@ -10,7 +10,7 @@ public class Cement extends Block { public Cement() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(3).resistance(5)); + .hardness(3).resistance(5).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Cement_Bricks.java b/src/main/java/net/ludocrypt/backrooms/blocks/Cement_Bricks.java index 765570a..90f9490 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Cement_Bricks.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Cement_Bricks.java @@ -10,7 +10,7 @@ public class Cement_Bricks extends Block { public Cement_Bricks() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(5)); + .hardness(4).resistance(5).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Checkered_Block.java b/src/main/java/net/ludocrypt/backrooms/blocks/Checkered_Block.java index a2b0238..e1a2a07 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Checkered_Block.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Checkered_Block.java @@ -9,6 +9,6 @@ public class Checkered_Block extends Block { public Checkered_Block() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(4)); + .hardness(4).resistance(4).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/LinedPipe.java b/src/main/java/net/ludocrypt/backrooms/blocks/LinedPipe.java index f773e91..0273270 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/LinedPipe.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/LinedPipe.java @@ -23,7 +23,7 @@ public class LinedPipe extends Block { public LinedPipe() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(6).resistance(6).lightLevel(5)); + .hardness(6).resistance(6).lightLevel(5).requiresTool()); } @Override diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Pipe.java b/src/main/java/net/ludocrypt/backrooms/blocks/Pipe.java index 0ad1a98..cde4943 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Pipe.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Pipe.java @@ -49,7 +49,7 @@ public class Pipe extends Block implements Waterloggable { public Pipe() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(6).resistance(6).lightLevel(5)); + .hardness(6).resistance(6).lightLevel(5).requiresTool()); setDefaultState(getStateManager().getDefaultState().with(UP, false).with(DOWN, false).with(EAST, false) .with(WEST, false).with(NORTH, false).with(SOUTH, false).with(WATERLOGGED, false)); } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone.java b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone.java index 09ff4a7..29d26e7 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone.java @@ -9,6 +9,6 @@ public class Poolstone extends Block { public Poolstone() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(4)); + .hardness(4).resistance(4).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Bricks.java b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Bricks.java index d82ba47..f0a3f9c 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Bricks.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Bricks.java @@ -9,6 +9,6 @@ public class Poolstone_Bricks extends Block { public Poolstone_Bricks() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(4)); + .hardness(4).resistance(4).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Path.java b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Path.java index 09d8fb7..276cedb 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Path.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Path.java @@ -9,6 +9,6 @@ public class Poolstone_Path extends Block { public Poolstone_Path() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(4)); + .hardness(4).resistance(4).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Tile.java b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Tile.java index b4e8666..8cb778f 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Tile.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Poolstone_Tile.java @@ -9,6 +9,6 @@ public class Poolstone_Tile extends Block { public Poolstone_Tile() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(4).resistance(4)); + .hardness(4).resistance(4).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.java b/src/main/java/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.java index 1bea8b8..81e4386 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Smooth_Poolstone.java @@ -9,6 +9,6 @@ public class Smooth_Poolstone extends Block { public Smooth_Poolstone() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(6).resistance(6)); + .hardness(6).resistance(6).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Tile.java b/src/main/java/net/ludocrypt/backrooms/blocks/Tile.java index ae2ab87..407161d 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Tile.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Tile.java @@ -19,7 +19,7 @@ public class Tile extends Block { public Tile() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(3).resistance(2)); + .hardness(3).resistance(2).requiresTool()); setDefaultState(getStateManager().getDefaultState().with(SINGLE, true).with(FACING, Direction.EAST)); } diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Vent.java b/src/main/java/net/ludocrypt/backrooms/blocks/Vent.java index d71603a..92341f4 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Vent.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Vent.java @@ -21,7 +21,7 @@ public class Vent extends Block { public Vent() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .hardness(2).resistance(4)); + .hardness(2).resistance(4).requiresTool()); } @Override diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/VoidBlock.java b/src/main/java/net/ludocrypt/backrooms/blocks/VoidBlock.java index 7adc80f..9327968 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/VoidBlock.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/VoidBlock.java @@ -27,7 +27,7 @@ public class VoidBlock extends BlockWithEntity { public VoidBlock() { super(FabricBlockSettings.of(Material.PORTAL).strength(100000F, 3600000.8F).sounds(BlockSoundGroup.METAL) - .collidable(false).nonOpaque()); + .collidable(false).nonOpaque().requiresTool()); } @Override diff --git a/src/main/java/net/ludocrypt/backrooms/blocks/Wall.java b/src/main/java/net/ludocrypt/backrooms/blocks/Wall.java index 8171e6e..eee965c 100644 --- a/src/main/java/net/ludocrypt/backrooms/blocks/Wall.java +++ b/src/main/java/net/ludocrypt/backrooms/blocks/Wall.java @@ -9,6 +9,6 @@ public class Wall extends Block { public Wall() { super(FabricBlockSettings.of(Material.STONE).breakByTool(FabricToolTags.PICKAXES).sounds(BlockSoundGroup.STONE) - .strength(40000F, 3600000.8F)); + .strength(40000F, 3600000.8F).requiresTool()); } } diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level0DecrepitRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level0DecrepitRoom.java index 326db74..a58de46 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level0DecrepitRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level0DecrepitRoom.java @@ -176,7 +176,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRedRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRedRoom.java index 4397ba8..64a72f0 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRedRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRedRoom.java @@ -117,37 +117,53 @@ public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerato if (layoutInt == 100) { RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.One, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Three, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.StairWall, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1NoLight, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1Light, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1Light, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1NoLight, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.StairWall, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Three, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Four, rand, - Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_RED_WALLPAPER, Backrooms.DOTTED_RED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, + MOLDY_CARPET, true); } else { Integer[][] layoutTop = LayoutsTop.get(layoutInt); Integer[][] layoutBottom = LayoutsBottom.get(layoutInt); @@ -175,7 +191,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRoom.java index 32d94ea..b83644b 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level0DottedRoom.java @@ -117,37 +117,53 @@ public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerato if (layoutInt == 100) { RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.One, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Three, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.StairWall, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1NoLight, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1Light, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1Light, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Stair1NoLight, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.StairWall, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Three, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Two, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); RoomArchives.generateSlice(world, mutableBlockPos.move(Direction.EAST), RoomArchives.Four, rand, - Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, true); + Backrooms.DOTTED_WALLPAPER, Backrooms.DOTTED_TORN_WALLPAPER, STAIR, Backrooms.CARPET, MOLDY_CARPET, + true); } else { Integer[][] layoutTop = LayoutsTop.get(layoutInt); Integer[][] layoutBottom = LayoutsBottom.get(layoutInt); @@ -175,7 +191,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level0RedRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level0RedRoom.java index 9ed26ac..469fc71 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level0RedRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level0RedRoom.java @@ -175,7 +175,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level0Room.java b/src/main/java/net/ludocrypt/backrooms/features/Level0Room.java index 78f11c4..dee314f 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level0Room.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level0Room.java @@ -175,7 +175,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level1OffRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level1OffRoom.java index 84b5dda..a3ca63b 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level1OffRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level1OffRoom.java @@ -165,7 +165,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level1Room.java b/src/main/java/net/ludocrypt/backrooms/features/Level1Room.java index 3af3e86..b624da4 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level1Room.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level1Room.java @@ -164,7 +164,8 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, if (((world.getBlockState(currentPosition).getBlock() == Backrooms.WALL) || (world.getBlockState(currentPosition).getBlock() == Blocks.BEDROCK)) - && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS)) { + && (world.getBlockState(currentPosition).getBlock() != Backrooms.CARPET_STAIRS) + && (world.getBlockState(currentPosition).getBlock() != Backrooms.VOID_BLOCK)) { if ((rand.nextDouble()) < ((BackroomsConfig.getInstance().Level0DoorChance))) { door1 = true; } else { diff --git a/src/main/java/net/ludocrypt/backrooms/features/Level2LongRoom.java b/src/main/java/net/ludocrypt/backrooms/features/Level2LongRoom.java index 4631255..ff51a5a 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/Level2LongRoom.java +++ b/src/main/java/net/ludocrypt/backrooms/features/Level2LongRoom.java @@ -21,9 +21,24 @@ public Level2LongRoom(Codec configFactory) { super(configFactory); } - private int[][] Orange = { { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 }, { 2, 2, 2, 2 } }; - private int[][] Red = { { 2, 2, 2, 2 }, { 1, 1, 1, 1 }, { 4, 4, 4, 4 }, { 1, 1, 1, 1 }, { 2, 2, 2, 2 } }; - private int[][] Brown = { { 2, 2, 2, 2 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 2, 2, 2, 2 } }; + private int[][] Orange = { + { 2, 2, 2, 2 }, + { 2, 2, 2, 2 }, + { 2, 2, 2, 2 }, + { 2, 2, 2, 2 }, + { 2, 2, 2, 2 } }; + private int[][] Red = { + { 5, 5, 5, 5 }, + { 1, 1, 1, 1 }, + { 4, 4, 4, 4 }, + { 1, 1, 1, 1 }, + { 2, 2, 2, 2 } }; + private int[][] Brown = { + { 5, 5, 5, 5 }, + { 1, 1, 1, 1 }, + { 1, 1, 1, 1 }, + { 1, 1, 1, 1 }, + { 2, 2, 2, 2 } }; private static final BlockState AIR = Blocks.AIR.getDefaultState(); private static final BlockState CEMENT = Backrooms.CEMENT.getDefaultState(); @@ -31,6 +46,7 @@ public Level2LongRoom(Codec configFactory) { .with(Pipe.SOUTH, true); private static final BlockState PIPENORTHSOUTHEAST = Backrooms.PIPE.getDefaultState().with(Pipe.EAST, true) .with(Pipe.SOUTH, true).with(Pipe.NORTH, true); + private static final BlockState VENT = Backrooms.VENT.getDefaultState(); public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random rand, BlockPos position, DefaultFeatureConfig featureConfig) { @@ -75,6 +91,12 @@ private void generateSlice(ServerWorldAccess world, BlockPos.Mutable centerPos, world.setBlockState(currentPosition, PIPENORTHSOUTHEAST, 2); } break; + case 5: + if (rand.nextDouble() < 0.01) { + world.setBlockState(currentPosition.down(), VENT, 2); + } + world.setBlockState(currentPosition, CEMENT, 2); + break; } } currentPosition.move(Direction.SOUTH); diff --git a/src/main/java/net/ludocrypt/backrooms/features/LevelsFeatureInit.java b/src/main/java/net/ludocrypt/backrooms/features/LevelsFeatureInit.java index 1f21c0e..6d815c9 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/LevelsFeatureInit.java +++ b/src/main/java/net/ludocrypt/backrooms/features/LevelsFeatureInit.java @@ -1,6 +1,5 @@ package net.ludocrypt.backrooms.features; -import net.ludocrypt.backrooms.features.decorators.Level01RoofDecorator; import net.ludocrypt.backrooms.features.decorators.Level0RoomDecorator; import net.ludocrypt.backrooms.features.decorators.Level1RoomDecorator; import net.ludocrypt.backrooms.features.decorators.Level2RoomDecorator; @@ -26,8 +25,6 @@ public class LevelsFeatureInit { public static Feature LEVEL2LONGROOM = new Level2LongRoom(DefaultFeatureConfig.CODEC); public static Feature LEVEL2MESSYROOM = new Level2MessyRoom(DefaultFeatureConfig.CODEC); public static Feature LEVEL3ROOM = new Level3Room(DefaultFeatureConfig.CODEC); - public static Decorator LEVEL01ROOFDECORATOR = new Level01RoofDecorator( - NopeDecoratorConfig.CODEC); public static Decorator LEVEL0DECORATOR = new Level0RoomDecorator(NopeDecoratorConfig.CODEC); public static Decorator LEVEL1DECORATOR = new Level1RoomDecorator(NopeDecoratorConfig.CODEC); public static Decorator LEVEL2DECORATOR = new Level2RoomDecorator(NopeDecoratorConfig.CODEC); @@ -46,8 +43,6 @@ public static void registerFeatures() { Registry.register(Registry.FEATURE, new Identifier("backrooms", "level2longroom"), LEVEL2LONGROOM); Registry.register(Registry.FEATURE, new Identifier("backrooms", "level2messyroom"), LEVEL2MESSYROOM); Registry.register(Registry.FEATURE, new Identifier("backrooms", "level3room"), LEVEL3ROOM); - Registry.register(Registry.DECORATOR, new Identifier("backrooms", "level01roofdecorator"), - LEVEL01ROOFDECORATOR); Registry.register(Registry.DECORATOR, new Identifier("backrooms", "level0decorator"), LEVEL0DECORATOR); Registry.register(Registry.DECORATOR, new Identifier("backrooms", "level1decorator"), LEVEL1DECORATOR); Registry.register(Registry.DECORATOR, new Identifier("backrooms", "level2decorator"), LEVEL2DECORATOR); diff --git a/src/main/java/net/ludocrypt/backrooms/features/RoomArchives.java b/src/main/java/net/ludocrypt/backrooms/features/RoomArchives.java index be39463..0096267 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/RoomArchives.java +++ b/src/main/java/net/ludocrypt/backrooms/features/RoomArchives.java @@ -66,7 +66,6 @@ public class RoomArchives { .with(Tile.SINGLE, false); private static final BlockState TILE = Backrooms.TILE.getDefaultState().with(Tile.FACING, Direction.EAST) .with(Tile.SINGLE, true); - private static final BlockState LIGHT = Backrooms.LIGHT.getDefaultState(); private static final BlockState AIR = Blocks.AIR.getDefaultState(); private static final BlockState CHEST = Blocks.CHEST.getDefaultState().with(ChestBlock.CHEST_TYPE, ChestType.SINGLE) .with(ChestBlock.FACING, Direction.NORTH).with(ChestBlock.WATERLOGGED, false); diff --git a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level01RoofDecorator.java b/src/main/java/net/ludocrypt/backrooms/features/decorators/Level01RoofDecorator.java deleted file mode 100644 index cb76f1a..0000000 --- a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level01RoofDecorator.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.ludocrypt.backrooms.features.decorators; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.stream.Stream; - -import com.mojang.serialization.Codec; - -import net.ludocrypt.backrooms.config.BackroomsConfig; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.gen.decorator.Decorator; -import net.minecraft.world.gen.decorator.DecoratorContext; -import net.minecraft.world.gen.decorator.NopeDecoratorConfig; - -public class Level01RoofDecorator extends Decorator { - - public Level01RoofDecorator(Codec codec) { - super(codec); - } - - @Override - public Stream getPositions(DecoratorContext context, Random random, NopeDecoratorConfig config, - BlockPos pos) { - - BlockPos.Mutable mutableBlockPos = new BlockPos.Mutable(pos.getX(), 0, pos.getZ()); - List blockPosList = new ArrayList(); - - for (int repeat = 0; repeat < BackroomsConfig.getInstance().Level0LayerCount; repeat++) { - mutableBlockPos.move(0, 6, 0); - blockPosList.add(mutableBlockPos.toImmutable()); - } - return blockPosList.stream(); - } -} diff --git a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level0RoomDecorator.java b/src/main/java/net/ludocrypt/backrooms/features/decorators/Level0RoomDecorator.java index 4f154c8..9bc06dc 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level0RoomDecorator.java +++ b/src/main/java/net/ludocrypt/backrooms/features/decorators/Level0RoomDecorator.java @@ -23,7 +23,7 @@ public Level0RoomDecorator(Codec codec) { public Stream getPositions(DecoratorContext context, Random random, NopeDecoratorConfig config, BlockPos pos) { - BlockPos.Mutable mutableBlockPos = new BlockPos.Mutable(pos.getX(), 1, pos.getZ()); + BlockPos.Mutable mutableBlockPos = new BlockPos.Mutable(pos.getX(), 3, pos.getZ()); List blockPosList = new ArrayList(); for (int repeat = 0; repeat < BackroomsConfig.getInstance().Level0LayerCount; repeat++) { diff --git a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level1RoomDecorator.java b/src/main/java/net/ludocrypt/backrooms/features/decorators/Level1RoomDecorator.java index 6af1f5b..399275e 100644 --- a/src/main/java/net/ludocrypt/backrooms/features/decorators/Level1RoomDecorator.java +++ b/src/main/java/net/ludocrypt/backrooms/features/decorators/Level1RoomDecorator.java @@ -23,7 +23,7 @@ public Level1RoomDecorator(Codec codec) { public Stream getPositions(DecoratorContext context, Random random, NopeDecoratorConfig config, BlockPos pos) { - BlockPos.Mutable mutableBlockPos = new BlockPos.Mutable(pos.getX(), 0, pos.getZ()); + BlockPos.Mutable mutableBlockPos = new BlockPos.Mutable(pos.getX(), 3, pos.getZ()); List blockPosList = new ArrayList(); for (int repeat = 0; repeat < BackroomsConfig.getInstance().Level1LayerCount; repeat++) { diff --git a/src/main/java/net/ludocrypt/backrooms/misc/BackroomsSoundEvents.java b/src/main/java/net/ludocrypt/backrooms/misc/BackroomsSoundEvents.java index cf70c23..acef1a1 100644 --- a/src/main/java/net/ludocrypt/backrooms/misc/BackroomsSoundEvents.java +++ b/src/main/java/net/ludocrypt/backrooms/misc/BackroomsSoundEvents.java @@ -21,7 +21,6 @@ public class BackroomsSoundEvents { public static final SoundEvent MUSIC_DISC_THOSE_TORN_WALLS = register("backrooms:music_disc.those_torn_walls"); public static final SoundEvent MUSIC_DISC_BURGERS_AND_FRIES = register("backrooms:music_disc.burgers_and_fries"); public static final SoundEvent MUSIC_DISC_PRETZELS_AND_CHEESE = register("backrooms:music_disc.pretzels_and_cheese"); - public static final SoundEvent TONE = register("backrooms:tone"); public static final SoundEvent GULP = register("backrooms:gulp"); public static final SoundEvent TEAR = register("backrooms:tear"); public static final SoundEvent VENT = register("backrooms:vent"); diff --git a/src/main/java/net/ludocrypt/backrooms/mixin/DefaultBiomeFeaturesMixin.java b/src/main/java/net/ludocrypt/backrooms/mixin/DefaultBiomeFeaturesMixin.java new file mode 100644 index 0000000..6a08482 --- /dev/null +++ b/src/main/java/net/ludocrypt/backrooms/mixin/DefaultBiomeFeaturesMixin.java @@ -0,0 +1,19 @@ +package net.ludocrypt.backrooms.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.ludocrypt.backrooms.Backrooms; +import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.feature.DefaultBiomeFeatures; + +@Mixin(DefaultBiomeFeatures.class) +public class DefaultBiomeFeaturesMixin { + @Inject(method = "addDefaultOres(Lnet/minecraft/world/biome/GenerationSettings$Builder;)V", at = @At("TAIL")) + private static void addDefaultOres(GenerationSettings.Builder builder, CallbackInfo ci) { + builder.feature(GenerationStep.Feature.UNDERGROUND_ORES, Backrooms.POOLSTONE_GENERATION); + } +} diff --git a/src/main/java/net/ludocrypt/backrooms/mixin/MusicMixin.java b/src/main/java/net/ludocrypt/backrooms/mixin/MusicMixin.java index 810c737..3459edc 100644 --- a/src/main/java/net/ludocrypt/backrooms/mixin/MusicMixin.java +++ b/src/main/java/net/ludocrypt/backrooms/mixin/MusicMixin.java @@ -8,7 +8,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.ludocrypt.backrooms.Backrooms; +import net.ludocrypt.backrooms.BackroomsClient; import net.ludocrypt.backrooms.dimension.BDimension; import net.ludocrypt.backrooms.misc.BackroomsMusicType; import net.minecraft.client.MinecraftClient; @@ -29,15 +29,15 @@ public class MusicMixin { @Inject(method = "getMusicType", at = @At("HEAD"), cancellable = true) private void getMusicType(CallbackInfoReturnable callbackInfoReturnable) { - if (this.player == null && Backrooms.Display == true && Backrooms.DisplayLevel == 0) { + if (this.player == null && BackroomsClient.Display == true && BackroomsClient.DisplayLevel == 0) { callbackInfoReturnable.setReturnValue(BackroomsMusicType.LEVEL0MENU); - } else if (this.player == null && Backrooms.Display == true && Backrooms.DisplayLevel == 1) { + } else if (this.player == null && BackroomsClient.Display == true && BackroomsClient.DisplayLevel == 1) { callbackInfoReturnable.setReturnValue(BackroomsMusicType.LEVEL1MENU); - } else if (this.player == null && Backrooms.Display == true && Backrooms.DisplayLevel == 2) { + } else if (this.player == null && BackroomsClient.Display == true && BackroomsClient.DisplayLevel == 2) { callbackInfoReturnable.setReturnValue(BackroomsMusicType.LEVEL2MENU); - } else if (this.player == null && Backrooms.Display == true && Backrooms.DisplayLevel == 3) { + } else if (this.player == null && BackroomsClient.Display == true && BackroomsClient.DisplayLevel == 3) { callbackInfoReturnable.setReturnValue(BackroomsMusicType.LEVEL3MENU); - } else if (this.player == null && Backrooms.Display == false) { + } else if (this.player == null && BackroomsClient.Display == false) { callbackInfoReturnable.setReturnValue(MusicType.MENU); } else if (world != null && this.world.getRegistryKey() == BDimension.LEVEL0WORLD) { callbackInfoReturnable.setReturnValue((MusicSound) this.world.getBiomeAccess() diff --git a/src/main/java/net/ludocrypt/backrooms/mixin/TitleScreenMixin.java b/src/main/java/net/ludocrypt/backrooms/mixin/TitleScreenMixin.java index 7128d85..e117ab6 100644 --- a/src/main/java/net/ludocrypt/backrooms/mixin/TitleScreenMixin.java +++ b/src/main/java/net/ludocrypt/backrooms/mixin/TitleScreenMixin.java @@ -8,7 +8,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.ludocrypt.backrooms.Backrooms; +import net.ludocrypt.backrooms.BackroomsClient; import net.ludocrypt.backrooms.config.BackroomsConfig; import net.minecraft.client.gui.CubeMapRenderer; import net.minecraft.client.gui.RotatingCubeMapRenderer; @@ -57,53 +57,53 @@ private void addCustomButton(int y, int spacingY, CallbackInfo ci) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL2_CUBE_MAP); } else if (BackroomsConfig.getInstance().ForceLevel3) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL3_CUBE_MAP); - } else if (!Backrooms.Display) { - Backrooms.Display = true; + } else if (!BackroomsClient.Display) { + BackroomsClient.Display = true; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL0_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 0) { - Backrooms.DisplayLevel = 1; + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 0) { + BackroomsClient.DisplayLevel = 1; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL1_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 1) { - Backrooms.DisplayLevel = 2; + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 1) { + BackroomsClient.DisplayLevel = 2; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL2_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 2) { - Backrooms.DisplayLevel = 3; + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 2) { + BackroomsClient.DisplayLevel = 3; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL3_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 3) { - Backrooms.DisplayLevel = 0; - Backrooms.Display = false; + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 3) { + BackroomsClient.DisplayLevel = 0; + BackroomsClient.Display = false; this.backgroundRenderer = new RotatingCubeMapRenderer(NORMAL_CUBE_MAP); } })); if (BackroomsConfig.getInstance().ForceNormal) { - Backrooms.Display = false; + BackroomsClient.Display = false; this.backgroundRenderer = new RotatingCubeMapRenderer(NORMAL_CUBE_MAP); } else if (BackroomsConfig.getInstance().ForceLevel0) { - Backrooms.Display = true; - Backrooms.DisplayLevel = 0; + BackroomsClient.Display = true; + BackroomsClient.DisplayLevel = 0; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL0_CUBE_MAP); } else if (BackroomsConfig.getInstance().ForceLevel1) { - Backrooms.Display = true; - Backrooms.DisplayLevel = 1; + BackroomsClient.Display = true; + BackroomsClient.DisplayLevel = 1; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL1_CUBE_MAP); } else if (BackroomsConfig.getInstance().ForceLevel2) { - Backrooms.Display = true; - Backrooms.DisplayLevel = 2; + BackroomsClient.Display = true; + BackroomsClient.DisplayLevel = 2; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL2_CUBE_MAP); } else if (BackroomsConfig.getInstance().ForceLevel3) { - Backrooms.Display = true; - Backrooms.DisplayLevel = 3; + BackroomsClient.Display = true; + BackroomsClient.DisplayLevel = 3; this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL3_CUBE_MAP); - } else if (!Backrooms.Display) { + } else if (!BackroomsClient.Display) { this.backgroundRenderer = new RotatingCubeMapRenderer(NORMAL_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 0) { + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 0) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL0_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 1) { + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 1) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL1_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 2) { + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 2) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL2_CUBE_MAP); - } else if (Backrooms.Display && Backrooms.DisplayLevel == 3) { + } else if (BackroomsClient.Display && BackroomsClient.DisplayLevel == 3) { this.backgroundRenderer = new RotatingCubeMapRenderer(LEVEL3_CUBE_MAP); } } diff --git a/src/main/resources/assets/backrooms/sounds.json b/src/main/resources/assets/backrooms/sounds.json index e701dcb..cdf0e74 100644 --- a/src/main/resources/assets/backrooms/sounds.json +++ b/src/main/resources/assets/backrooms/sounds.json @@ -234,13 +234,6 @@ } ] }, - "tone": { - "sounds": [ - { - "name": "backrooms:tone" - } - ] - }, "tear": { "sounds": [ { diff --git a/src/main/resources/backrooms.mixins.json b/src/main/resources/backrooms.mixins.json index 68efe34..604b6ad 100644 --- a/src/main/resources/backrooms.mixins.json +++ b/src/main/resources/backrooms.mixins.json @@ -5,7 +5,8 @@ "mixins": [ "GoToBackroomsMixin", "MobSpawnLocationMixin", - "EntityMixin" + "EntityMixin", + "DefaultBiomeFeaturesMixin" ], "client": [ "BuiltinModelItemRendererMixin", diff --git a/src/main/resources/data/backrooms/dimension/level_0.json b/src/main/resources/data/backrooms/dimension/level_0.json index 9b72b0c..707f75d 100644 --- a/src/main/resources/data/backrooms/dimension/level_0.json +++ b/src/main/resources/data/backrooms/dimension/level_0.json @@ -326,7 +326,7 @@ "type": "minecraft:multi_noise" }, "seed": 672760, - "settings": "minecraft:overworld", + "settings": "backrooms:level_noise", "type": "minecraft:noise" } -} +} \ No newline at end of file diff --git a/src/main/resources/data/backrooms/dimension/level_1.json b/src/main/resources/data/backrooms/dimension/level_1.json index ea39564..95c5385 100644 --- a/src/main/resources/data/backrooms/dimension/level_1.json +++ b/src/main/resources/data/backrooms/dimension/level_1.json @@ -96,7 +96,7 @@ "type": "minecraft:multi_noise" }, "seed": 672761, - "settings": "minecraft:overworld", + "settings": "backrooms:level_noise", "type": "minecraft:noise" } } diff --git a/src/main/resources/data/backrooms/dimension/level_2.json b/src/main/resources/data/backrooms/dimension/level_2.json index 64449b5..0644889 100644 --- a/src/main/resources/data/backrooms/dimension/level_2.json +++ b/src/main/resources/data/backrooms/dimension/level_2.json @@ -146,7 +146,7 @@ "type": "minecraft:multi_noise" }, "seed": 672762, - "settings": "minecraft:overworld", + "settings": "backrooms:level_noise", "type": "minecraft:noise" } } diff --git a/src/main/resources/data/backrooms/dimension/level_3.json b/src/main/resources/data/backrooms/dimension/level_3.json index fd69aab..559e516 100644 --- a/src/main/resources/data/backrooms/dimension/level_3.json +++ b/src/main/resources/data/backrooms/dimension/level_3.json @@ -7,7 +7,7 @@ "type": "minecraft:fixed" }, "seed": 0, - "settings": "minecraft:overworld", + "settings": "backrooms:level_noise", "type": "minecraft:noise" } } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/dimension_type/level_0.json b/src/main/resources/data/backrooms/dimension_type/level_0.json index 5da795f..eb504c9 100644 --- a/src/main/resources/data/backrooms/dimension_type/level_0.json +++ b/src/main/resources/data/backrooms/dimension_type/level_0.json @@ -10,6 +10,6 @@ "natural": false, "coordinate_scale": 1.0, "piglin_safe": false, - "has_skylight": false, + "has_skylight": true, "has_ceiling": false } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/dimension_type/level_1.json b/src/main/resources/data/backrooms/dimension_type/level_1.json index 5da795f..eb504c9 100644 --- a/src/main/resources/data/backrooms/dimension_type/level_1.json +++ b/src/main/resources/data/backrooms/dimension_type/level_1.json @@ -10,6 +10,6 @@ "natural": false, "coordinate_scale": 1.0, "piglin_safe": false, - "has_skylight": false, + "has_skylight": true, "has_ceiling": false } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/dimension_type/level_2.json b/src/main/resources/data/backrooms/dimension_type/level_2.json index 5da795f..eb504c9 100644 --- a/src/main/resources/data/backrooms/dimension_type/level_2.json +++ b/src/main/resources/data/backrooms/dimension_type/level_2.json @@ -10,6 +10,6 @@ "natural": false, "coordinate_scale": 1.0, "piglin_safe": false, - "has_skylight": false, + "has_skylight": true, "has_ceiling": false } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/dimension_type/level_3.json b/src/main/resources/data/backrooms/dimension_type/level_3.json index 5da795f..eb504c9 100644 --- a/src/main/resources/data/backrooms/dimension_type/level_3.json +++ b/src/main/resources/data/backrooms/dimension_type/level_3.json @@ -10,6 +10,6 @@ "natural": false, "coordinate_scale": 1.0, "piglin_safe": false, - "has_skylight": false, + "has_skylight": true, "has_ceiling": false } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/loot_tables/blocks/light.json b/src/main/resources/data/backrooms/loot_tables/blocks/light.json index a8059b6..30b021d 100644 --- a/src/main/resources/data/backrooms/loot_tables/blocks/light.json +++ b/src/main/resources/data/backrooms/loot_tables/blocks/light.json @@ -9,6 +9,7 @@ "children": [ { "type": "minecraft:item", + "name": "backrooms:light", "conditions": [ { "condition": "minecraft:match_tool", @@ -23,17 +24,17 @@ ] } } - ], - "name": "backrooms:light" + ] }, { - "type": "minecraft:item", + "type": "minecraft:loot_table", + "weight": 10, + "name": "backrooms:light_dusts", "conditions": [ { "condition": "minecraft:survives_explosion" } - ], - "name": "minecraft:air" + ] } ] } diff --git a/src/main/resources/data/backrooms/loot_tables/blocks/pipe.json b/src/main/resources/data/backrooms/loot_tables/blocks/pipe.json index c7851a0..381e6cd 100644 --- a/src/main/resources/data/backrooms/loot_tables/blocks/pipe.json +++ b/src/main/resources/data/backrooms/loot_tables/blocks/pipe.json @@ -1,14 +1,64 @@ { - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "backrooms:pipe" - } - ] - } - ] + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "backrooms:pipe" + }, + { + "type": "minecraft:alternatives", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, + 0.0564882, + 0.15, + 1.0 + ] + } + ], + "name": "minecraft:iron_ingot" + }, + { + "type": "minecraft:item", + "name": "backrooms:pipe" + } + ] + } + ] + } + ] + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/loot_tables/light_dusts.json b/src/main/resources/data/backrooms/loot_tables/light_dusts.json new file mode 100644 index 0000000..014a9f2 --- /dev/null +++ b/src/main/resources/data/backrooms/loot_tables/light_dusts.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": { + "min": 0, + "max": 3 + }, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:blaze_powder" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/backrooms/recipes/cement.json b/src/main/resources/data/backrooms/recipes/cement.json index 63d76cd..00841f4 100644 --- a/src/main/resources/data/backrooms/recipes/cement.json +++ b/src/main/resources/data/backrooms/recipes/cement.json @@ -5,10 +5,10 @@ ], "key": { "#": { - "item": "minecraft:white_concrete" + "item": "minecraft:cobblestone" }, "L": { - "item": "minecraft:light_gray_concrete" + "item": "minecraft:stone" } }, "result": { diff --git a/src/main/resources/data/backrooms/recipes/light.json b/src/main/resources/data/backrooms/recipes/light.json index 1b44f40..1adab86 100644 --- a/src/main/resources/data/backrooms/recipes/light.json +++ b/src/main/resources/data/backrooms/recipes/light.json @@ -1,18 +1,23 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "#W" + "###", + "EEE", + "#$#" ], "key": { "#": { - "item": "minecraft:redstone_lamp" + "item": "minecraft:white_stained_glass_pane" }, - "W": { - "item": "minecraft:white_dye" + "E": { + "item": "minecraft:end_rod" + }, + "$": { + "item": "minecraft:repeater" } }, "result": { "item": "backrooms:light", - "count": 1 + "count": 4 } } \ No newline at end of file diff --git a/src/main/resources/data/backrooms/recipes/pipe.json b/src/main/resources/data/backrooms/recipes/pipe.json new file mode 100644 index 0000000..ac17547 --- /dev/null +++ b/src/main/resources/data/backrooms/recipes/pipe.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "III", + "###" + ], + "key": { + "#": { + "item": "minecraft:iron_block" + }, + "I": { + "item": "minecraft:iron_bars" + } + }, + "result": { + "item": "backrooms:pipe", + "count": 16 + } +} \ No newline at end of file diff --git a/src/main/resources/data/backrooms/recipes/pipe_to_iron.json b/src/main/resources/data/backrooms/recipes/pipe_to_iron.json new file mode 100644 index 0000000..8bff928 --- /dev/null +++ b/src/main/resources/data/backrooms/recipes/pipe_to_iron.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smelting", + "ingredient": { + "item": "backrooms:pipe" + }, + "result": "minecraft:iron_ingot", + "experience": 1.0, + "cookingtime": 850 +} \ No newline at end of file diff --git a/src/main/resources/data/backrooms/recipes/tile.json b/src/main/resources/data/backrooms/recipes/tile.json index 2299aec..fc54736 100644 --- a/src/main/resources/data/backrooms/recipes/tile.json +++ b/src/main/resources/data/backrooms/recipes/tile.json @@ -1,21 +1,15 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "#L", - "BG" + "#&", + "&#" ], "key": { "#": { "item": "minecraft:white_concrete" }, - "L": { - "item": "minecraft:light_gray_concrete" - }, - "B": { - "item": "minecraft:black_concrete" - }, - "G": { - "item": "minecraft:gray_concrete" + "&": { + "item": "minecraft:diorite" } }, "result": { diff --git a/src/main/resources/data/backrooms/worldgen/noise_settings/level_noise.json b/src/main/resources/data/backrooms/worldgen/noise_settings/level_noise.json new file mode 100644 index 0000000..c90a662 --- /dev/null +++ b/src/main/resources/data/backrooms/worldgen/noise_settings/level_noise.json @@ -0,0 +1,41 @@ +{ + "bedrock_roof_position": -1, + "bedrock_floor_position": 0, + "sea_level": 0, + "disable_mob_generation": false, + "structures": { + "structures": { + } + }, + "noise": { + "random_density_offset": true, + "density_factor": 1.0, + "density_offset": -0.6871, + "simplex_surface_noise": true, + "bottom_slide": { + "target": -30, + "size": 0, + "offset": 0 + }, + "size_horizontal": 4, + "size_vertical": 4, + "height": 256, + "sampling": { + "xz_scale": 18.9999999814507745, + "y_scale": 2.68759888824, + "xz_factor": 999.0, + "y_factor": 200.0 + }, + "top_slide": { + "target": -10, + "size": 4, + "offset": 0 + } + }, + "default_block": { + "Name": "backrooms:wall" + }, + "default_fluid": { + "Name": "backrooms:wall" + } +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8d9f6c1..b31f42c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "backrooms", "version": "$version", "name": "The Backrooms", - "description": "The backrooms, endless mono yellow rooms to traverse.", + "description": "The backrooms, endless mono yellow rooms to traverse, and many more levels to come. Music by Angel Craig & LudoCrypt.", "authors": [ "LudoCrypt", "Angel Craig"