--- a/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -63,7 +63,7 @@ protected final WorldChunkManager biomeSource; protected final WorldChunkManager runtimeBiomeSource; private final StructureSettings settings; - private final long strongholdSeed; + public final long strongholdSeed; // PAIL private -> public private final List strongholdPositions; private final BaseStoneSource defaultBaseStoneSource; @@ -217,7 +217,7 @@ } } - public void addDecorations(RegionLimitedWorldAccess regionlimitedworldaccess, StructureManager structuremanager) { + public void addVanillaDecorations(RegionLimitedWorldAccess regionlimitedworldaccess, StructureManager structuremanager) { // CraftBukkit ChunkCoordIntPair chunkcoordintpair = regionlimitedworldaccess.a(); int i = chunkcoordintpair.d(); int j = chunkcoordintpair.e(); @@ -236,8 +236,45 @@ } } + public void addDecorations(RegionLimitedWorldAccess regionlimitedworldaccess, StructureManager structuremanager) { + // CraftBukkit start + addDecorations(regionlimitedworldaccess, structuremanager, true); + } + + public void addDecorations(RegionLimitedWorldAccess regionlimitedworldaccess, StructureManager structuremanager, boolean vanilla) { + if (vanilla) { + addVanillaDecorations(regionlimitedworldaccess, structuremanager); + } + + org.bukkit.World world = regionlimitedworldaccess.getMinecraftWorld().getWorld(); + // only call when a populator is present (prevents unnecessary entity conversion) + if (world.getPopulators().size() != 0) { + org.bukkit.craftbukkit.generator.CraftLimitedRegion limitedRegion = new org.bukkit.craftbukkit.generator.CraftLimitedRegion(regionlimitedworldaccess); + int x = regionlimitedworldaccess.a().x; + int z = regionlimitedworldaccess.a().z; + for (org.bukkit.generator.BlockPopulator populator : world.getPopulators()) { + SeededRandom seededrandom = new SeededRandom(); + seededrandom.a(regionlimitedworldaccess.getSeed(), x, z); + populator.populate(world, seededrandom, x, z, limitedRegion); + } + limitedRegion.saveEntities(); + limitedRegion.breakLink(); + } + // CraftBukkit end + } + public abstract void buildBase(RegionLimitedWorldAccess regionlimitedworldaccess, IChunkAccess ichunkaccess); + // CraftBukkit start - spilt surface and bedrock generation code + public SeededRandom buildSurface(RegionLimitedWorldAccess regionlimitedworldaccess, IChunkAccess iChunkAccess) { + throw new UnsupportedOperationException("Methode not overridden"); + } + + public void buildBedrock(IChunkAccess iChunkAccess, Random random) { + throw new UnsupportedOperationException("Methode not overridden"); + } + // CraftBukkit end + public void addMobs(RegionLimitedWorldAccess regionlimitedworldaccess) {} public StructureSettings getSettings() { @@ -269,7 +306,16 @@ while (iterator.hasNext()) { Supplier> supplier = (Supplier) iterator.next(); - this.a((StructureFeature) supplier.get(), iregistrycustom, structuremanager, ichunkaccess, definedstructuremanager, i, biomebase); + // CraftBukkit start + StructureFeature structurefeature = (StructureFeature) supplier.get(); + if (structurefeature.LIST_CODEC == StructureGenerator.STRONGHOLD) { + synchronized (structurefeature) { + this.a((StructureFeature) supplier.get(), iregistrycustom, structuremanager, ichunkaccess, definedstructuremanager, i, biomebase); + } + } else { + this.a((StructureFeature) supplier.get(), iregistrycustom, structuremanager, ichunkaccess, definedstructuremanager, i, biomebase); + } + // CraftBukkit end } } @@ -364,9 +410,11 @@ } static { - IRegistry.a(IRegistry.CHUNK_GENERATOR, "noise", (Object) ChunkGeneratorAbstract.CODEC); - IRegistry.a(IRegistry.CHUNK_GENERATOR, "flat", (Object) ChunkProviderFlat.CODEC); - IRegistry.a(IRegistry.CHUNK_GENERATOR, "debug", (Object) ChunkProviderDebug.CODEC); + // CraftBukkit start - decompile errors + IRegistry.a(IRegistry.CHUNK_GENERATOR, "noise", ChunkGeneratorAbstract.CODEC); + IRegistry.a(IRegistry.CHUNK_GENERATOR, "flat", ChunkProviderFlat.CODEC); + IRegistry.a(IRegistry.CHUNK_GENERATOR, "debug", ChunkProviderDebug.CODEC); + // CraftBukkit end CODEC = IRegistry.CHUNK_GENERATOR.dispatchStable(ChunkGenerator::a, Function.identity()); } }