From b78995390042aa22bb241cf6f58a87ced771a719 Mon Sep 17 00:00:00 2001 From: Sakura Ryoko <116967773+sakura-ryoko@users.noreply.github.com> Date: Tue, 16 Jun 2026 08:17:32 -0400 Subject: [PATCH] fix: drowned spawns not spawning in Ocean biomes (fixes #2147) (#2180) --- src/main/java/carpet/mixins/NaturalSpawnerMixin.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/carpet/mixins/NaturalSpawnerMixin.java b/src/main/java/carpet/mixins/NaturalSpawnerMixin.java index 7ab4f6f5..15f71ced 100644 --- a/src/main/java/carpet/mixins/NaturalSpawnerMixin.java +++ b/src/main/java/carpet/mixins/NaturalSpawnerMixin.java @@ -4,6 +4,8 @@ import carpet.CarpetSettings; import carpet.fakes.LevelInterface; import carpet.utils.SpawnReporter; import net.minecraft.world.entity.EntitySpawnReason; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.apache.commons.lang3.tuple.Pair; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -46,12 +48,12 @@ public class NaturalSpawnerMixin @Shadow @Final private static MobCategory[] SPAWNING_CATEGORIES; - @Redirect(method = "isValidSpawnPostitionForType", - at = @At( + @WrapOperation(method = "isValidSpawnPostitionForType", + at = @At( value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;noCollision(Lnet/minecraft/world/phys/AABB;)Z" )) - private static boolean doesNotCollide(ServerLevel world, AABB bb) + private static boolean doesNotCollide(ServerLevel world, AABB bb, Operation original) { //.doesNotCollide is VERY expensive. On the other side - most worlds are not made of trapdoors in // various configurations, but solid and 'passable' blocks, like air, water grass, etc. @@ -59,7 +61,7 @@ public class NaturalSpawnerMixin // in case something more complex happens - we default to full block collision check if (!CarpetSettings.lagFreeSpawning) { - return world.noCollision(bb); + return original.call(world, bb); } int minX = Mth.floor(bb.minX); int minY = Mth.floor(bb.minY);