mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-21 07:49:35 +00:00
56 lines
3.0 KiB
Diff
56 lines
3.0 KiB
Diff
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 797725f7472ed36bf5a1369a7dfe600a9749cbac..7eec9dc8237ff04c53b573c3cc87e6cdbfdda7ed 100644
|
|
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
|
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
|
@@ -40,6 +40,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
|
import net.minecraft.world.level.chunk.LevelChunk;
|
|
+import net.minecraft.world.level.chunk.LevelChunkSection;
|
|
import net.minecraft.world.level.levelgen.Heightmap;
|
|
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
|
|
import net.minecraft.world.level.levelgen.structure.Structure;
|
|
@@ -204,6 +205,19 @@ public final class NaturalSpawner {
|
|
}
|
|
public static int spawnCategoryForChunk(MobCategory group, ServerLevel world, LevelChunk chunk, NaturalSpawner.SpawnPredicate checker, NaturalSpawner.AfterSpawnCallback runner, int maxSpawns, Consumer<Entity> trackEntity) {
|
|
// Paper end - add parameters and int ret type
|
|
+ // Leaves start - ignore lc
|
|
+ if (top.leavesmc.leaves.LeavesConfig.ignoreLC) {
|
|
+ int spawnN = 0;
|
|
+ for (int i = chunk.getMinBuildHeight(); i < chunk.getMaxBuildHeight(); i += 16) {
|
|
+ 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) {
|
|
@@ -212,6 +226,16 @@ public final class NaturalSpawner {
|
|
return 0; // Paper
|
|
}
|
|
|
|
+ // 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) -> {
|