From 73c47fef629a05382b686db16e1f1cbea6efc8da Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 6 Oct 2024 20:06:35 +0100 Subject: [PATCH 01/14] Exclude spawn bonus chests from mimics # Conflicts: # src/main/java/com/minelittlepony/unicopia/entity/mob/MimicEntity.java --- .../com/minelittlepony/unicopia/entity/mob/MimicEntity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/mob/MimicEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/mob/MimicEntity.java index a76e3d7d..31d15e34 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/mob/MimicEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/mob/MimicEntity.java @@ -69,6 +69,7 @@ public class MimicEntity extends PathAwareEntity { return false; } + // TODO: Local difficulty? int difficulty = world.getDifficulty().ordinal() - 1; float threshold = 0.35F * ((EnchantmentUtil.getLuck(0, player) / 20F) + 0.5F); return difficulty > 0 && world.random.nextFloat() < (difficulty / 3F) * threshold; @@ -101,7 +102,8 @@ public class MimicEntity extends PathAwareEntity { && lootTable.getPath().indexOf("village") == -1 && lootTable.getPath().indexOf("bastion") == -1 && lootTable.getPath().indexOf("underwater") == -1 - && lootTable.getPath().indexOf("shipwreck") == -1; + && lootTable.getPath().indexOf("shipwreck") == -1 + && !LootTables.SPAWN_BONUS_CHEST.equals(lootTable); } MimicEntity(EntityType type, World world) { From 0b583e7276385f3352fd596e7862109b3e54ccd4 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 15:01:58 +0100 Subject: [PATCH 02/14] Clean up soggy cloud textures slightly --- .../textures/block/soggy_cloud_side.png | Bin 7821 -> 9889 bytes .../textures/block/soggy_cloud_slab_side.png | Bin 7816 -> 9860 bytes .../textures/block/soggy_cloud_top.png | Bin 7270 -> 9420 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/unicopia/textures/block/soggy_cloud_side.png b/src/main/resources/assets/unicopia/textures/block/soggy_cloud_side.png index b030c4a7dceca964613f8faa473ecf333c4ff831..bfe6574f9d11dee7226150961281ca2c0895610b 100644 GIT binary patch delta 2674 zcmb7Fdr(tn7XNPEfgnkU5Lg}w1c{7s@*)o`7Dz4+#T`RXsk2Ub1Vne#K|xlna}lFL z1S6to)}_<+0o|@zT||woZfB*XONFj0YJJcZwY4HT%APMFt<(Oqy_s`!?)lF5 zJHOvK-6@T`OkMjtc7bhMPX&#?K=xe+KE{^9n{nhk!#9x$_ znFf_`b+}EBA`{}USZo%P!)CL&T#g@46u|TM=YeBYqV+%LU6fUoK*kRoS4*OXJ=;*K9p$+Hdb-{fx`z zmaoWtV`ZVOsCaeBnzftC$~Ra1VawK?_FcR8RM$8foQ(&X4mP*E<9e^NtNTxf|J-xD zx9`Khe)P8!CkM`*zu><3$)}e-r@k2a@?XPWT^$*_ar4$Ux9{A&H~#3m?;rp0Wb*0M zGpr0N^<7?VKT{?EWi$qZ&R}C@1g!!~7ciJo6-$_6Vds|yMXPskM5*;1$IfzNG}#Yl z7i=8#3zlieVjqQwsn9Tww*OCB)vwa#llG&spM;Gd9-V;s(J29X9ZinNUCm69B^jGP zDOyUikRl>LWXWMXwvZV($|XhFM2X9hC$f+zb|#I0RIqI1a>&8vRsznB8d7BCKa;yU zX%2b2&lq?WKoPb+fWR==D2#;*VB-&xqW)u~D94l9_(~e2svsl7R%RiULICChmt=@4 zL!lh;*vm4D1psJV?%MA|^ojA*#kIlu<=(B{`Xnh@Ubz@nz2IxY5tKi4?XjsQfDRJ4vt5*084Cg$U7N1zzWLb z;Ax6*J+szA=GK(B9F-U`)k4meQ4O%@Ho+kAs1bByDHg%OTo=JKov>`zfix9tLk@tA z#@axFoVFGm0ICE+R`G~;^w~0ComB|QsdydBo6wHV2}q9?_S8 zXARDQ#`MT>4uo?Wa-n4Hx|#ij(1XtCc%U^f)4gUlbQnRy_U{>_p!>^!ZfFwJt&sy1 zMv>qMP)*+3XCbBV?pei{d<3+%0QTD9yk-lS@MME^JTxmVULR8eEt7$;Ox$-SfDnza z4oZ@Rxa6f75%^T%H^IHoK>;^EFSm9K&1nFVQb1Mjfu|afgWvF_bRRQ3kXo3-emiz> z6dP#uyu6;K!MPH-MNoGMo(CqNz)Z_P$t+B12)f)heRXv5UkW#80=-tDwdu5qe4W;)(Bv1ZHQIceu_z(mIULXxs8<^_MvX?3VAN_7bQ& zp)?jkM6K1SlzQj-Ad;_DsFVt&;YZxwb3yAl!JI>v*26b}Rj@eSjMm^^BzF(rnI0ZV z-Sy)H1jaO8fAIi5b~iK4DLIDAOBz!4MHqResG|2@{@3|DYJ*U6nxp*V{88a*%irru zib92?CFekhq@Tt+`QS#|FzOdeU*B-$RImVzf7fjZb=&pgQp(UoTQ!auBqy|aY(qe^8KUs$IHIBFQft^?CTtH5A>`3ZCB2WZSBylJGCxRNeQ~9 z7BHT?x3{h)><(X7S87k|TSYyKQgU0Z)>J`m-n}=tt%3T3AFQaZoj9{L)YNL-bmWI^ z4?Z{Cymrcctz5eMTF*a?s^|3frb*t@EgPuIcWY;@JgsqG{Oq&efBbU6^P?5p+2+YW zF{O#w^)&a|@`~wgPozh(+U030+OoH}58ZE4b+n&6dRn8dtKn3cPQEa7i+LpV1H7ry zb05!1wO1MEw6wU5g~xMijSqF@<6pN;?whzx4GkVxk!HTXE$Z^y?2$u>wc>@}K78kh zIIQJJ`p%IHGD%{I{>9Y~_?ozHH>oxa+@9BDN;#3%8ZA;**V;DgSFNhv$Gf#!k=Ir( zk!T*3#*-D)i84;d!WWA>HZHK+vMPFqi*Fg$FE07V@LR9d8OoPdcbuKBY%7@B+_l9C QM}mto$={m)lA2fbKRG;mvH$=8 delta 756 zcmVr#t8K zvoi=u3IPPOeG-ZSBsMfRWHB>2IW0FhIWsLZHDh8eI59Y3EihqYGiG6CI5=WvF_SA5 zr4KeaH#aggH83Gc&@3V*iP?r~t$}lFpF9T?sU$Q{8VfWH;l|nBpTxe)a|;j?c^1%NlZ|QqFM<8!V&iXrzSO@zX#4pfLL=I)JkWU%&n!q!4ibvM0!wgy%#pwC z@2}tS>)&b>#6K^)l~@Pii(dEry)TyEsJEZ!^`!@5Jobt?Cm%koAFGINqkVtxFW05d zc?RFUzVP|?kALOJyzYzhJlShA$K>_ipK|zHo;fLm;NG{@-GA)0$s-deiqX}(RGu+s zyJbu$s4i@;j7(!9f?$(wKg1M+0qu4u#=6&5Xw8^~aE?S4wuup7m>MD+y6$UdWOlWU z2_j-f)T-rhU+e0F0}s>m^6h`gL;*189I_x_9upx#!5ov!Oyis}xw#p0;ALvpzTU1C z-OaA8Bae)TTG!f^9|qd&+Kd?9_vV~u42{h5$)Hv-35X8bO~1V(os;|RX6A&&zPTL= z$~9^ip@2bTB(uBe>Oyp6AV0Q%weJl9nTfYkDZ2X?r9%ky?ym}!+aW9@W4fDlFGh~- mwuHt!=fgB&*G3_R2LAyJ)_Jsvi9$1~x1*8>Y z+Yy2X{vjBFTBa8Q(!-gerC4=r#d_i&UiD(et7@rIrSD5f>-d+<@a??K+xOo0d++zX zH~DJbs-C?yij>~1jb2CWuWeEZMuc=)9hb;z6Sc;078FAw%OV;*M-(Cuatb0`I{qMD z&`CmsL=d9_y9jg~FTwJH?l-FAID&NH#6ckG)CGik@eWur=QDDC1mx~LgDx$;^sf?C;KtPu_g0m8llt?V5DDbWaKcbXk!6$-ElK7e}(#SGKS6RD9 z7M0w7$S=G9zDi%XqKcOLPYehQik=jsj*a8u4GBh5VoEBXHX}VFb8b#<-n{(z3yO-Z zC5ua!EM2*3b@`eP)~?%F{ozNOYBt;I?DgBW@7UR}%dxk)rS-FYpSSJr=_F*D56ysC5~VvK1pV&rOY={S1DtXYxlGtqNDWL_x%c2^vnHK+?D7D z69a_6ASbt1qgFL0Zf4miqXL&Hg?vr}Ho6^=a2S;uU<05+6HbW_kW7RoK)v`hu^&I)}E&kg2%>ZwJLmTZt)dx2c<{9H zPb5@+Mbf$4e~ePpCtG{7X|cZ&4X!w~Pf>I@MRL;6ctvUqb9DVszHmrByKibh)yYMj z-E^C+E3?#ho`t@>vh`y0fncF}neE-7y%)&9`iTeUoNis#JzIKXOV+NhBfjZ=!!T*- z7yNmyPZ`u-{_Mzd9sOnQ++<~b!IH-6vlmYsKO1`P${0us9rmve#TR4-KPUC8p=5&)x+XZkFco z;9?SdzByH>i%G@8#KI)m*uq>lH90v|*TldiP1nLG$xPS8+&I-d*~rw$&@y?lu;@}v zGfQ)GBNJ0|LnC7g3sVavE(HYzcTe8{tFY9f;>`R!TO}hsLjyfylgST71Nosghd^zf z>?kIWF19&etdVu|WtjvHvBp}D&kPIHHwnGj(Uo zw5`+F6%H`*ysG_p!HD4)$Ils#<$6kt8q>;|be;7I#F;r}>qjgwO+2ATEKO55QyA1_DQ>pPH2YZnk|(oNm>x5TJT(3FAn8kyMdowQ*-%-@Vf!GJ=n#UD6?}eZDF0Z!1h{9 z{n^i7d)EIKiJD-iXB@K8Y?AfH{=&X<@1$RU>svSdL`Th@?HWrzeAu%8ZMR6G$#JJY zmv_(0_MQ``Z}Y$IPjvCx+LEa3GqpiQ53QaBpS8Oh#?7rLQ5<1!`{U(7nScDo>x-wH T{pp|q3`_=3S3j3^P6M%D@ z6p4=o;##b3H$+rqTrHxtwz{RhOYO9@SSlTd`lw~;Y}G=I?%1;DyAZe2{bzeKH*@ay zo$ve}=Y-1*_JXxNl@Nt>q^-dZb@)^qi(!nGG34sBxmq?^2Z15iV8m$bCyc^y4C8MM zpN-K2{QGjxTM5{xcK;F)g$T2Df3g~ z5l<`W2VK}&d%{4QK$wi11iKk$M z94F=Y%xNqMhzfB2n$?1&l9WIgBBI3-NH`+Hz$=oVNP&Q&V7C$WF-k7rB9yvC!bqDV zBxR+7Y3k?}r55(TA5}hlOQo-VshJi>KNJ%imo_h5osntC$~Lk&xkV;(af!uRy0l_h z<>OUPJn5`))z&Rv@$9Plm;co8%IY<*wyayD~I5ZLf80f8D>UXZN1Hz5DtO z4IDo5*3q|*y>s%^=`&}~o&R9yQ|_~oi=U5vacS(z)oa(kzVXe(KPPX0KQ;Zsoxt6D z|3=D?(%?0#?H9`App2j>k_th}aH0W8ms0|zP8hMs7UEbLnZh)Q6onn#{qNJM`tn;* z)h`W;qg940X}2GW;bP->ZU3LN=3k{PDD8o={|Xz!q$CdgBRM&?5DUDn_PbSnPsS#f z!d4J5Y*w_Cm=#N?dYf6BWLA{p%l#gItIe!vdl)TmwV9J4SQ-NXf%b_L3fp3O!tW72 zj*2{~_HR!aHb-G)D7ylRq`@)<=iSX7bstd*Xndi=HZwh0jqyAU#UNgNH={aP}duF_ahP=YZ=ZaFoLs*=U>!47C6=rB|V)&`q1Y_YVngAMTYKUM#$k%OzgQy1-l;S(XPdzlG>m*__ z0t7%_Igtx1=YT~EXGX&`4R$N$epNUm@!mfeX2D$l&)T4$+n^4bO}?MO7QwhjRnLbn z5-|s_`G#Rb&=K&i4{1VN%aKc{c4ZZ)_ca4A&JBF{?x3H{dLW^NUx^wqN)B2z*ch}O zl=Xwea>OwiTHAysOH>L08Ypn0hXg3(qfa#9_Y|SO67n>38lIf#DA@&x-B5=@9WI#> zUcw5F-R1hnEn-5Z9LSJ(2$fTBtaUnSoEmKwW7HT7+8m9;WrQfp>2T^?&KzU5!#f(f zJKV^y`W!vO8nd$4ETi7LF)S8my}QF~vbpzpMeu#@6^1AN&*Fd~e3bC28N#T46Mq!B_ai4EI8* zIHGaMNA=^&&r0Gq9{6^w?yvPnC-+ak_{QaBt}P=yw^Z@1)>E>+(}A^9tKMk5-tk_3 zXG8pFk=&ya#etjGiq25E_9E-kqo=m(FK>R%dd_j7`GVokteas;;Jw z>u$gDVfN&A9~>Y5(exZm$$rXv-jJVMQb=F=IRDTmfxLljZp#K$i`}GPJo94*+rz4? z{?*M_7I|t5BUCn5vus}5fp5F(x)N)Y?V78_C-i}--l6*NZ*tpB4XF=LrIh)k)~?t) zQNmp(^4?M|m{wJ#tS%!h+=flH&-@`UMWt-id5_&}wOV}l54Pa~`ts;z6SY6L{mT8F zcN)KZOd|Q=`2H2=k7rn_12(WRPZ zmgZ(=X2zz576z84mWE1P3JMDDp1uKAVW~yMnfZCPN=ABy271OOlNrSV?VvV?z--nw zFtjo-0BfqqEwJ*t~c6VWr zWzc7^nxbc*Jo$iWz{AyI4YV><#_7#J9rdb&7oZTm@&C_CU|G;O;oBHgF zu_vzjG|T@q{Nj0hk}As%jZ>*F-`zjJEpdRU<-Nv%Ms9}^~d>%}lId3+b)2`q97w?<qN(-ciYol?#^8PLo8_Z_I<|;LTmiIqY8=zQ#m^Rq|WKu$GYbBvGvzaG#=Ao%Jv7$k^nx&~1%iZ&+wz znv_@IyWp>e>g#uN&o}$Qa-`iwH}qh;zh^_@XUqOiTlUEp|5zBxP#ncL|GoY#$sNy} gelV;OTJ?ax?&{Yf{eMqgfsxAK>FVdQ&MBb@0P|KK0ssI2 From 73cab14bbb0e1fe1ecc3f80719187d8979c500f4 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 15:02:26 +0100 Subject: [PATCH 03/14] Use the bucket tag for filling jars instead of just the vanilla bucket --- .../unicopia/block/jar/FluidOnlyJarContents.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java b/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java index 0cdcab4b..49f0e62f 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java +++ b/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java @@ -5,11 +5,11 @@ import com.minelittlepony.unicopia.block.ItemJarBlock.JarContents; import com.minelittlepony.unicopia.block.ItemJarBlock.TileData; import com.minelittlepony.unicopia.util.FluidHelper; +import net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -27,7 +27,7 @@ public record FluidOnlyJarContents ( @Override public TypedActionResult interact(PlayerEntity player, Hand hand) { ItemStack stack = player.getStackInHand(hand); - if (stack.isOf(Items.BUCKET)) { + if (stack.isIn(ConventionalItemTags.EMPTY_BUCKETS)) { long remainder = FluidHelper.deposit(stack, player, hand, fluid, amount); tile.markDirty(); fluid.getFluid().getBucketFillSound().ifPresent(sound -> player.playSound(sound, 1, 1)); From 23185765393c6c688e16130d1a287abb169fd9b0 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 15:10:06 +0100 Subject: [PATCH 04/14] Fixed not being able to collect water from soggy cloud stairs --- .../unicopia/block/cloud/SoggyCloudStairsBlock.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/SoggyCloudStairsBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/SoggyCloudStairsBlock.java index fe3da5ea..7d7e9cbb 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/SoggyCloudStairsBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/SoggyCloudStairsBlock.java @@ -12,10 +12,15 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.StairsBlock; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.registry.Registries; import net.minecraft.state.StateManager; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraft.world.WorldView; public class SoggyCloudStairsBlock extends CloudStairsBlock implements Soakable { @@ -49,6 +54,12 @@ public class SoggyCloudStairsBlock extends CloudStairsBlock implements Soakable return dryBlock.get().getPickStack(world, pos, state); } + @Deprecated + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + return Soakable.tryCollectMoisture(state, world, pos, player, hand, hit); + } + @Nullable @Override public BlockState getStateWithMoisture(BlockState state, int moisture) { From d06214b4fa7fd0fd5f8c18f5def23b4b5381a553 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 15:17:24 +0100 Subject: [PATCH 05/14] You can now soak clouds using bottles of water # Conflicts: # src/main/java/com/minelittlepony/unicopia/block/cloud/NaturalCloudBlock.java # src/main/java/com/minelittlepony/unicopia/block/cloud/Soakable.java --- .../block/cloud/NaturalCloudBlock.java | 3 +- .../block/cloud/PoreousCloudBlock.java | 11 +++++++ .../block/cloud/PoreousCloudStairsBlock.java | 13 ++++++++ .../unicopia/block/cloud/Soakable.java | 32 +++++++++++++------ 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/NaturalCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/NaturalCloudBlock.java index de0ec27e..ff5c8f86 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/NaturalCloudBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/NaturalCloudBlock.java @@ -48,6 +48,7 @@ public class NaturalCloudBlock extends PoreousCloudBlock { return CODEC; } + @Deprecated @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { ItemStack stack = player.getStackInHand(hand); @@ -60,6 +61,6 @@ public class NaturalCloudBlock extends PoreousCloudBlock { return ActionResult.SUCCESS; } - return ActionResult.PASS; + return super.onUse(state, world, pos, player, hand, hit); } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudBlock.java index fdc1aaa6..1d4f2795 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudBlock.java @@ -12,9 +12,14 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BedBlock; import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; public class PoreousCloudBlock extends CloudBlock implements Soakable { private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( @@ -36,6 +41,12 @@ public class PoreousCloudBlock extends CloudBlock implements Soakable { return CODEC; } + @Deprecated + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + return Soakable.tryDepositMoisture(state, world, pos, player, hand, hit); + } + @Nullable @Override public BlockState getStateWithMoisture(BlockState state, int moisture) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudStairsBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudStairsBlock.java index 1ff03471..679283ab 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudStairsBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/PoreousCloudStairsBlock.java @@ -11,6 +11,13 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.block.BlockState; import net.minecraft.block.StairsBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class PoreousCloudStairsBlock extends CloudStairsBlock implements Soakable { private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( @@ -31,6 +38,12 @@ public class PoreousCloudStairsBlock extends CloudStairsBlock implements Soakabl return CODEC; } + @Deprecated + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + return Soakable.tryDepositMoisture(state, world, pos, player, hand, hit); + } + @Nullable @Override public BlockState getStateWithMoisture(BlockState state, int moisture) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/Soakable.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/Soakable.java index a385788f..8af8bfbb 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/Soakable.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/Soakable.java @@ -10,8 +10,11 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsage; import net.minecraft.item.Items; import net.minecraft.particle.ParticleTypes; +import net.minecraft.potion.PotionUtil; +import net.minecraft.potion.Potions; import net.minecraft.registry.Registries; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; @@ -54,15 +57,8 @@ public interface Soakable { static ActionResult tryCollectMoisture(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { if (state.getBlock() instanceof Soakable soakable) { ItemStack stack = player.getStackInHand(hand); - if (stack.getItem() == Items.GLASS_BOTTLE) { - if (!player.isCreative()) { - stack.split(1); - } - if (stack.isEmpty()) { - player.setStackInHand(hand, Items.POTION.getDefaultStack()); - } else { - player.giveItemStack(Items.POTION.getDefaultStack()); - } + if (stack.isOf(Items.GLASS_BOTTLE)) { + player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, Items.POTION.getDefaultStack(), false)); world.playSound(player, player.getX(), player.getY(), player.getZ(), USounds.Vanilla.ITEM_BOTTLE_FILL, SoundCategory.NEUTRAL, 1, 1); world.emitGameEvent(player, GameEvent.FLUID_PICKUP, pos); updateMoisture(soakable, state, world, pos, soakable.getMoisture(state) - 1); @@ -71,6 +67,24 @@ public interface Soakable { } } + return tryDepositMoisture(state, world, pos, player, hand, hit); + } + + static ActionResult tryDepositMoisture(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (state.getBlock() instanceof Soakable soakable) { + ItemStack stack = player.getStackInHand(hand); + if (soakable.getMoisture(state) < 7 + && stack.isOf(Items.POTION) + && PotionUtil.getPotion(stack) == Potions.WATER) { + player.setStackInHand(hand, ItemUsage.exchangeStack(stack, player, Items.GLASS_BOTTLE.getDefaultStack(), false)); + world.playSound(player, player.getX(), player.getY(), player.getZ(), USounds.Vanilla.ITEM_BUCKET_EMPTY, SoundCategory.NEUTRAL, 1, 1); + world.emitGameEvent(player, GameEvent.FLUID_PLACE, pos); + updateMoisture(soakable, state, world, pos, soakable.getMoisture(state) + 1); + + return ActionResult.SUCCESS; + } + } + return ActionResult.PASS; } From 3e7ea29955a5f2b75947e45ea7ae7b8d3fdf245e Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 16:25:11 +0100 Subject: [PATCH 06/14] Fix incorrect translation --- src/main/resources/assets/unicopia/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 6005597f..df90e36b 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -799,7 +799,7 @@ "gui.unicopia.tribe_selection.options": "Available Tribes:", "gui.unicopia.tribe_selection.options.disabled": "Option Unavailable", - "gui.unicopia.tribe_selection.describe.unicopia.human": "Got it alone", + "gui.unicopia.tribe_selection.describe.unicopia.human": "Go it alone", "gui.unicopia.tribe_selection.describe.unicopia.earth": "Join the Earth Tribe", "gui.unicopia.tribe_selection.describe.unicopia.unicorn": "Join the Unicorn Tribe, master the arcane arts", "gui.unicopia.tribe_selection.describe.unicopia.pegasus": "Join the Pegasus Tribe, soar with the Wonderbolts", From d4dac7c36a6cac0b4ff2f6e2d3d8bc2c863f7637 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 16:50:46 +0100 Subject: [PATCH 07/14] (1.20.4) Fix incorrect import --- .../minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java b/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java index 49f0e62f..b3ac0222 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java +++ b/src/main/java/com/minelittlepony/unicopia/block/jar/FluidOnlyJarContents.java @@ -5,7 +5,7 @@ import com.minelittlepony.unicopia.block.ItemJarBlock.JarContents; import com.minelittlepony.unicopia.block.ItemJarBlock.TileData; import com.minelittlepony.unicopia.util.FluidHelper; -import net.fabricmc.fabric.api.tag.convention.v2.ConventionalItemTags; +import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; import net.minecraft.entity.player.PlayerEntity; From 15bea23e67488b48fb2e536d1344ca2a83f16843 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 8 Oct 2024 23:07:50 +0100 Subject: [PATCH 08/14] Fixed snow gathering on clouds / clouds blocking snow from gathering below them --- .../java/com/minelittlepony/unicopia/block/UBlocks.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index 62473abf..6a382942 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -206,7 +206,7 @@ public interface UBlocks { Block CLOUD = register("cloud", new NaturalCloudBlock(true, () -> UBlocks.SOGGY_CLOUD, () -> UBlocks.COMPACTED_CLOUD, - Settings.create().mapColor(MapColor.OFF_WHITE).hardness(0.3F).resistance(0).sounds(BlockSoundGroup.WOOL)), ItemGroups.NATURAL); + Settings.create().notSolid().mapColor(MapColor.OFF_WHITE).hardness(0.3F).resistance(0).sounds(BlockSoundGroup.WOOL)), ItemGroups.NATURAL); Block COMPACTED_CLOUD = register("compacted_cloud", new CompactedCloudBlock(CLOUD.getDefaultState())); Block CLOUD_SLAB = register("cloud_slab", new CloudSlabBlock(true, () -> UBlocks.SOGGY_CLOUD_SLAB, Settings.copy(CLOUD)), ItemGroups.NATURAL); PoreousCloudStairsBlock CLOUD_STAIRS = register("cloud_stairs", new PoreousCloudStairsBlock(CLOUD.getDefaultState(), () -> UBlocks.SOGGY_CLOUD_STAIRS, Settings.copy(CLOUD)), ItemGroups.NATURAL); @@ -219,12 +219,12 @@ public interface UBlocks { Block CLOUD_BRICKS = register("cloud_bricks", new NaturalCloudBlock(false, null, () -> UBlocks.COMPACTED_CLOUD_BRICKS, Settings.copy(CLOUD).hardness(0.6F).requiresTool().solid()), ItemGroups.BUILDING_BLOCKS); Block COMPACTED_CLOUD_BRICKS = register("compacted_cloud_bricks", new CompactedCloudBlock(CLOUD_BRICKS.getDefaultState())); Block CLOUD_BRICK_SLAB = register("cloud_brick_slab", new CloudSlabBlock(false, null, Settings.copy(CLOUD_BRICKS)), ItemGroups.BUILDING_BLOCKS); - Block CLOUD_BRICK_STAIRS = register("cloud_brick_stairs", new CloudStairsBlock(CLOUD_BRICKS.getDefaultState(), Settings.copy(CLOUD_PLANKS)), ItemGroups.BUILDING_BLOCKS); + Block CLOUD_BRICK_STAIRS = register("cloud_brick_stairs", new CloudStairsBlock(CLOUD_BRICKS.getDefaultState(), Settings.copy(CLOUD_BRICKS)), ItemGroups.BUILDING_BLOCKS); Block ETCHED_CLOUD = register("etched_cloud", new NaturalCloudBlock(false, null, () -> UBlocks.COMPACTED_CLOUD_BRICKS, Settings.copy(CLOUD_BRICKS)), ItemGroups.BUILDING_BLOCKS); Block COMPACTED_ETCHED_CLOUD = register("compacted_etched_cloud", new CompactedCloudBlock(ETCHED_CLOUD.getDefaultState())); Block ETCHED_CLOUD_SLAB = register("etched_cloud_slab", new CloudSlabBlock(false, null, Settings.copy(ETCHED_CLOUD)), ItemGroups.BUILDING_BLOCKS); - Block ETCHED_CLOUD_STAIRS = register("etched_cloud_stairs", new CloudStairsBlock(ETCHED_CLOUD.getDefaultState(), Settings.copy(CLOUD_PLANKS)), ItemGroups.BUILDING_BLOCKS); + Block ETCHED_CLOUD_STAIRS = register("etched_cloud_stairs", new CloudStairsBlock(ETCHED_CLOUD.getDefaultState(), Settings.copy(ETCHED_CLOUD)), ItemGroups.BUILDING_BLOCKS); SoggyCloudBlock SOGGY_CLOUD = register("soggy_cloud", new SoggyCloudBlock(() -> UBlocks.CLOUD, Settings.copy(CLOUD).hardness(0.7F))); SoggyCloudSlabBlock SOGGY_CLOUD_SLAB = register("soggy_cloud_slab", new SoggyCloudSlabBlock(() -> UBlocks.CLOUD_SLAB, Settings.copy(SOGGY_CLOUD))); From cfbf6832d008a613b67c46b1939b0c0d3fa20677 Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 9 Oct 2024 00:00:30 +0100 Subject: [PATCH 09/14] Remove debug logging --- .../java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java index c1c74a05..15137340 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java @@ -188,7 +188,6 @@ public class CloudBlock extends Block implements CloudLike { @Override @Deprecated public boolean canPathfindThrough(BlockState state, BlockView world, BlockPos pos, NavigationType type) { - System.out.println(InteractionManager.getInstance().getPathingEquineContext().collidesWithClouds()); return type != NavigationType.LAND || !InteractionManager.getInstance().getPathingEquineContext().collidesWithClouds(); } From 0995d01a2fecdc51960b12409d52e52db1e7c56a Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 Oct 2024 18:04:05 +0100 Subject: [PATCH 10/14] Fix sweet apple acres advancement --- .../datagen/providers/UAdvancementsProvider.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java index d200f3c1..a5e65196 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia.datagen.providers; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; @@ -95,7 +96,7 @@ public class UAdvancementsProvider extends FabricAdvancementProvider { parent.child(UItems.TOAST).criterion("has_toast", hasItems(UItems.TOAST)).build(consumer, "toast") .child(UItems.BURNED_TOAST).hidden().criterion("has_burned_toast", hasItems(UItems.BURNED_TOAST)).build(consumer, "burn_toast"); parent.child(UItems.GREEN_APPLE).criterion("has_apple", hasItems(UTags.Items.FRESH_APPLES)).build(consumer, "apple_route").children(p -> { - p.child(UItems.SWEET_APPLE).criterion("has_all_apples", hasItems(Items.APPLE, UItems.GREEN_APPLE, UItems.SWEET_APPLE, UItems.SOUR_APPLE, UItems.ROTTEN_APPLE, UItems.ZAP_APPLE, UItems.COOKED_ZAP_APPLE, Items.GOLDEN_APPLE)).build(consumer, "sweet_apple_acres"); + requireAllItems(p.child(UItems.SWEET_APPLE), Items.APPLE, UItems.GREEN_APPLE, UItems.SWEET_APPLE, UItems.SOUR_APPLE, UItems.ROTTEN_APPLE, UItems.ZAP_APPLE, UItems.COOKED_ZAP_APPLE, Items.GOLDEN_APPLE).build(consumer, "sweet_apple_acres"); p.child(UItems.ZAP_BULB).criterion("has_zap_apple", hasItems(UItems.ZAP_APPLE)).build(consumer, "trick_apple").children(pp -> { pp.child(UItems.ZAP_APPLE).hidden().criterion("eat_trick_apple", CustomEventCriterion.createFlying("eat_trick_apple")).build(consumer, "eat_trick_apple"); pp.child(UItems.ZAP_APPLE).hidden().criterion("feed_trick_apple", CustomEventCriterion.createFlying("feed_trick_apple")).build(consumer, "feed_trick_apple"); @@ -130,6 +131,13 @@ public class UAdvancementsProvider extends FabricAdvancementProvider { .child(UItems.GOLDEN_FEATHER).apply(d -> applyShedFeatherCriterions(d, 2048, 10000)).frame(AdvancementFrame.GOAL).build(consumer, "dedicated_flier"); } + private AdvancementDisplayBuilder requireAllItems(AdvancementDisplayBuilder builder, ItemConvertible...items) { + List.of(items).forEach(item -> { + builder.criterion("has_" + Registries.ITEM.getId(item.asItem()).getPath(), hasItems(item)); + }); + return builder.criteriaMerger(AdvancementRequirements.CriterionMerger.AND); + } + private AdvancementDisplayBuilder applyShedFeatherCriterions(AdvancementDisplayBuilder builder, int repeats, int experience) { for (int i = 1; i <= repeats; i++) { builder.criterion("shed_feather_" + i, CustomEventCriterion.createFlying("shed_feather", i)); From 8c909912142fc10933b8b1179a85e00cc7b386a4 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 10 Oct 2024 18:59:37 +0100 Subject: [PATCH 11/14] Fixed the trick apple recipes --- .../providers/recipe/TrickCraftingRecipeJsonBuilder.java | 3 ++- .../com/minelittlepony/unicopia/recipe/ZapAppleRecipe.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/recipe/TrickCraftingRecipeJsonBuilder.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/recipe/TrickCraftingRecipeJsonBuilder.java index 7bf4c568..9fdfdcc6 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/recipe/TrickCraftingRecipeJsonBuilder.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/recipe/TrickCraftingRecipeJsonBuilder.java @@ -5,6 +5,7 @@ import java.util.Map; import org.jetbrains.annotations.Nullable; import org.spongepowered.include.com.google.common.base.Preconditions; +import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.recipe.ZapAppleRecipe; import net.minecraft.advancement.Advancement; @@ -71,7 +72,7 @@ public class TrickCraftingRecipeJsonBuilder implements CraftingRecipeJsonBuilder .criteriaMerger(AdvancementRequirements.CriterionMerger.OR); criterions.forEach(builder::criterion); exporter.accept(id, - new ZapAppleRecipe(group == null ? "" : group, CraftingRecipeCategory.MISC, output.getDefaultStack(), inputs), + new ZapAppleRecipe(group == null ? "" : group, CraftingRecipeCategory.MISC, UItems.ZAP_APPLE.setAppearance(UItems.ZAP_APPLE.getDefaultStack(), output.getDefaultStack()), inputs), builder.build(id.withPrefixedPath("recipes/" + category.getName() + "/")) ); } diff --git a/src/main/java/com/minelittlepony/unicopia/recipe/ZapAppleRecipe.java b/src/main/java/com/minelittlepony/unicopia/recipe/ZapAppleRecipe.java index 127e1c42..cd7764b2 100644 --- a/src/main/java/com/minelittlepony/unicopia/recipe/ZapAppleRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/recipe/ZapAppleRecipe.java @@ -18,6 +18,11 @@ public class ZapAppleRecipe extends ShapelessRecipe { super(group, category, output, input); } + @Override + public RecipeSerializer getSerializer() { + return URecipes.ZAP_APPLE_SERIALIZER; + } + public static class Serializer implements RecipeSerializer { private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.optionalFieldOf("group", "").forGetter(ZapAppleRecipe::getGroup), From 4a0a5eeade71c73bfcd72fda0fb6e2e740449a0c Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 12 Oct 2024 21:23:59 +0100 Subject: [PATCH 12/14] Change early molting season advancements to regular tasks Closes #483 --- .../datagen/providers/UAdvancementsProvider.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java index a5e65196..c19ca87e 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java @@ -117,17 +117,17 @@ public class UAdvancementsProvider extends FabricAdvancementProvider { p.child(UItems.LIGHTNING_JAR).hidden().frame(AdvancementFrame.CHALLENGE).apply(d -> applyLightningBugCriterions(d, RacePredicate.of(Set.of(Race.CHANGELING), Set.of()), 10, 90)).build(consumer, "lightning_bug"); p.child(UItems.LIGHTNING_JAR).hidden().frame(AdvancementFrame.CHALLENGE).apply(d -> applyLightningBugCriterions(d, RacePredicate.of(Set.of(), Set.of(Race.CHANGELING)), 10, 90)).build(consumer, "wonder_bolt"); }); - parent.child(UItems.PEGASUS_FEATHER).hidden().frame(AdvancementFrame.CHALLENGE).criterion("shed_feather", CustomEventCriterion.createFlying("shed_feather")).rewards(AdvancementRewards.Builder.experience(1)).build(consumer, "molting_season_1") + parent.child(UItems.PEGASUS_FEATHER).hidden().frame(AdvancementFrame.TASK).criterion("shed_feather", CustomEventCriterion.createFlying("shed_feather")).rewards(AdvancementRewards.Builder.experience(1)).build(consumer, "molting_season_1") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 2, 2)).build(consumer, "molting_season_2") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 4, 8)).build(consumer, "molting_season_3") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 8, 20)).build(consumer, "molting_season_4") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 16, 40)).build(consumer, "molting_season_5") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 32, 80)).build(consumer, "molting_season_6") .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 64, 200)).build(consumer, "molting_season_7") - .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 128, 500)).build(consumer, "molting_season_8") - .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 256, 1000)).build(consumer, "molting_season_9") - .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 512, 2280)).build(consumer, "molting_season_10") - .child(UItems.GOLDEN_FEATHER).apply(d -> applyShedFeatherCriterions(d, 1024, 4560)).build(consumer, "molting_season_11") + .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 128, 500)).frame(AdvancementFrame.CHALLENGE).build(consumer, "molting_season_8") + .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 256, 1000)).frame(AdvancementFrame.CHALLENGE).build(consumer, "molting_season_9") + .child(UItems.PEGASUS_FEATHER).apply(d -> applyShedFeatherCriterions(d, 512, 2280)).frame(AdvancementFrame.CHALLENGE).build(consumer, "molting_season_10") + .child(UItems.GOLDEN_FEATHER).apply(d -> applyShedFeatherCriterions(d, 1024, 4560)).frame(AdvancementFrame.CHALLENGE).build(consumer, "molting_season_11") .child(UItems.GOLDEN_FEATHER).apply(d -> applyShedFeatherCriterions(d, 2048, 10000)).frame(AdvancementFrame.GOAL).build(consumer, "dedicated_flier"); } From fc5fec106a665b50012a8ced5c2de0982826a37a Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 12 Oct 2024 21:44:46 +0100 Subject: [PATCH 13/14] Fix carver crash #490 --- .../unicopia/server/world/gen/CloudCarver.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/minelittlepony/unicopia/server/world/gen/CloudCarver.java b/src/main/java/com/minelittlepony/unicopia/server/world/gen/CloudCarver.java index 41736d0d..f92abb9a 100644 --- a/src/main/java/com/minelittlepony/unicopia/server/world/gen/CloudCarver.java +++ b/src/main/java/com/minelittlepony/unicopia/server/world/gen/CloudCarver.java @@ -167,7 +167,10 @@ public class CloudCarver extends CaveCarver { MutableBoolean replacedGrassy ) { if (super.carveAtPoint(context, config, chunk, posToBiome, mask, pos, tmp, aquiferSampler, replacedGrassy)) { - topWrittenPositions.remove(tmp.set(pos).move(Direction.DOWN).asLong()); + tmp.set(pos).move(Direction.DOWN); + if (!topWrittenPositions.isEmpty()) { + topWrittenPositions.remove(tmp.asLong()); + } topWrittenPositions.add(pos.asLong()); if (chunk.getBlockState(tmp).isOf(UBlocks.SOGGY_CLOUD)) { chunk.setBlockState(tmp, UBlocks.CLOUD.getDefaultState(), false); From 708f9191a886c4f78a1d7cbeba67b30859035faa Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 13 Oct 2024 18:18:50 +0100 Subject: [PATCH 14/14] Change criterion check to an OR for tribe joins --- .../unicopia/datagen/providers/UAdvancementsProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java index c19ca87e..b723e5a9 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UAdvancementsProvider.java @@ -21,6 +21,7 @@ import net.minecraft.advancement.AdvancementCriterion; import net.minecraft.advancement.AdvancementEntry; import net.minecraft.advancement.AdvancementFrame; import net.minecraft.advancement.AdvancementRequirements; +import net.minecraft.advancement.AdvancementRequirements.CriterionMerger; import net.minecraft.advancement.AdvancementRewards; import net.minecraft.advancement.criterion.ConsumeItemCriterion; import net.minecraft.advancement.criterion.Criteria; @@ -67,6 +68,7 @@ public class UAdvancementsProvider extends FabricAdvancementProvider { for (Race r : extra) { builder.criterion("be_" + r.getId().getPath(), UCriteria.PLAYER_CHANGE_RACE.create(new RaceChangeCriterion.Conditions(Optional.empty(), r))); } + builder.criteriaMerger(CriterionMerger.OR); } return builder.build(consumer, race.getId().getPath() + "_route");