31 lines
2.0 KiB
Diff
31 lines
2.0 KiB
Diff
--- a/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java
|
|
+++ b/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java
|
|
@@ -36,7 +36,7 @@
|
|
static CompletableFuture<IChunkAccess> generateStructureStarts(WorldGenContext worldgencontext, ChunkStep chunkstep, StaticCache2D<GenerationChunkHolder> staticcache2d, IChunkAccess ichunkaccess) {
|
|
WorldServer worldserver = worldgencontext.level();
|
|
|
|
- if (worldserver.getServer().getWorldData().worldGenOptions().generateStructures()) {
|
|
+ if (worldserver.serverLevelData.worldGenOptions().generateStructures()) { // CraftBukkit
|
|
worldgencontext.generator().createStructures(worldserver.registryAccess(), worldserver.getChunkSource().getGeneratorState(), worldserver.structureManager(), ichunkaccess, worldgencontext.structureManager(), worldserver.dimension());
|
|
}
|
|
|
|
@@ -170,7 +170,17 @@
|
|
|
|
private static void postLoadProtoChunk(WorldServer worldserver, List<NBTTagCompound> list) {
|
|
if (!list.isEmpty()) {
|
|
- worldserver.addWorldGenChunkEntities(EntityTypes.loadEntitiesRecursive(list, worldserver, EntitySpawnReason.LOAD));
|
|
+ // CraftBukkit start - these are spawned serialized (DefinedStructure) and we don't call an add event below at the moment due to ordering complexities
|
|
+ worldserver.addWorldGenChunkEntities(EntityTypes.loadEntitiesRecursive(list, worldserver, EntitySpawnReason.LOAD).filter((entity) -> {
|
|
+ boolean needsRemoval = false;
|
|
+ net.minecraft.server.dedicated.DedicatedServer server = worldserver.getCraftServer().getServer();
|
|
+ if (!worldserver.getChunkSource().spawnFriendlies && (entity instanceof net.minecraft.world.entity.animal.EntityAnimal || entity instanceof net.minecraft.world.entity.animal.EntityWaterAnimal)) {
|
|
+ entity.discard(null); // CraftBukkit - add Bukkit remove cause
|
|
+ needsRemoval = true;
|
|
+ }
|
|
+ return !needsRemoval;
|
|
+ }));
|
|
+ // CraftBukkit end
|
|
}
|
|
|
|
}
|