From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Thu, 29 Jun 2023 22:40:24 +0800 Subject: [PATCH] Spawn ignore lc diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java index 63ca6becabdd12a61b7ce5b6046bfb7c72a5bf56..595f2480a61c9f8d3aa66667b93a1f0e90e7a7ac 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -198,6 +198,19 @@ public final class NaturalSpawner { } public static int spawnCategoryForChunk(MobCategory group, ServerLevel world, LevelChunk chunk, NaturalSpawner.SpawnPredicate checker, NaturalSpawner.AfterSpawnCallback runner, int maxSpawns, Consumer trackEntity) { // Paper end - Optional per player mob spawns + // Leaves start - ignore lc + if (org.leavesmc.leaves.LeavesConfig.ignoreLC) { + int spawnN = 0; + for (int i = chunk.getMinBuildHeight(); i < chunk.getMaxBuildHeight(); i += 16) { + net.minecraft.world.level.chunk.LevelChunkSection section = chunk.getSections()[chunk.getSectionIndex(i)]; + if (section != null && !section.hasOnlyAir()) { + BlockPos pos = getRandomPosInChunk(world, chunk).offset(0, i, 0); + spawnN += spawnCategoryForPosition(group, world, chunk, pos, checker, runner, maxSpawns, trackEntity); + } + } + return spawnN; + } + // Leaves stop - ignore lc BlockPos blockposition = NaturalSpawner.getRandomPosWithin(world, chunk); if (blockposition.getY() >= world.getMinBuildHeight() + 1) { @@ -206,6 +219,16 @@ public final class NaturalSpawner { return 0; // Paper - Optional per player mob spawns } + // Leaves start - ignore lc + private static BlockPos getRandomPosInChunk(Level world, LevelChunk chunk) { + ChunkPos chunkPos = chunk.getPos(); + int x = chunkPos.getMinBlockX() + world.random.nextInt(16); + int z = chunkPos.getMinBlockZ() + world.random.nextInt(16); + int y = world.random.nextInt(16) + 1; + return new BlockPos(x, y, z); + } + // Leaves stop - ignore lc + @VisibleForDebug public static void spawnCategoryForPosition(MobCategory group, ServerLevel world, BlockPos pos) { NaturalSpawner.spawnCategoryForPosition(group, world, world.getChunk(pos), pos, (entitytypes, blockposition1, ichunkaccess) -> {