--- a/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -261,7 +261,7 @@ while (iterator.hasNext()) { Holder> holder = (Holder) iterator.next(); - Stream stream = set1.stream(); + Stream> stream = set1.stream(); // CraftBukkit - decompile error HolderSet holderset1 = ((StructureFeature) holder.value()).biomes(); Objects.requireNonNull(holderset1); @@ -411,7 +411,7 @@ return null; } - public void applyBiomeDecoration(GeneratorAccessSeed generatoraccessseed, IChunkAccess ichunkaccess, StructureManager structuremanager) { + public void addVanillaDecorations(GeneratorAccessSeed generatoraccessseed, IChunkAccess ichunkaccess, StructureManager structuremanager) { // CraftBukkit ChunkCoordIntPair chunkcoordintpair = ichunkaccess.getPos(); if (!SharedConstants.debugVoidTerrain(chunkcoordintpair)) { @@ -427,7 +427,7 @@ Set set = new ObjectArraySet(); if (this instanceof ChunkProviderFlat) { - Stream stream = this.biomeSource.possibleBiomes().stream().map(Holder::value); + Stream stream = this.biomeSource.possibleBiomes().stream().map(Holder::value); // CraftBukkit - decompile error Objects.requireNonNull(set); stream.forEach(set::add); @@ -467,7 +467,7 @@ StructureFeature structurefeature = (StructureFeature) iterator.next(); seededrandom.setFeatureSeed(i, i1, l); - Supplier supplier = () -> { + Supplier supplier = () -> { // CraftBukkit - decompile error Optional optional = iregistry.getResourceKey(structurefeature).map(Object::toString); Objects.requireNonNull(structurefeature); @@ -552,6 +552,33 @@ } } + public void applyBiomeDecoration(GeneratorAccessSeed generatoraccessseed, IChunkAccess ichunkaccess, StructureManager structuremanager) { + // CraftBukkit start + applyBiomeDecoration(generatoraccessseed, ichunkaccess, structuremanager, true); + } + + public void applyBiomeDecoration(GeneratorAccessSeed generatoraccessseed, IChunkAccess ichunkaccess, StructureManager structuremanager, boolean vanilla) { + if (vanilla) { + addVanillaDecorations(generatoraccessseed, ichunkaccess, structuremanager); + } + + org.bukkit.World world = generatoraccessseed.getMinecraftWorld().getWorld(); + // only call when a populator is present (prevents unnecessary entity conversion) + if (!world.getPopulators().isEmpty()) { + org.bukkit.craftbukkit.generator.CraftLimitedRegion limitedRegion = new org.bukkit.craftbukkit.generator.CraftLimitedRegion(generatoraccessseed, ichunkaccess.getPos()); + int x = ichunkaccess.getPos().x; + int z = ichunkaccess.getPos().z; + for (org.bukkit.generator.BlockPopulator populator : world.getPopulators()) { + SeededRandom seededrandom = new SeededRandom(new net.minecraft.world.level.levelgen.LegacyRandomSource(generatoraccessseed.getSeed())); + seededrandom.setDecorationSeed(generatoraccessseed.getSeed(), x, z); + populator.populate(world, seededrandom, x, z, limitedRegion); + } + limitedRegion.saveEntities(); + limitedRegion.breakLink(); + } + // CraftBukkit end + } + public boolean hasFeatureChunkInRange(ResourceKey resourcekey, long i, int j, int k, int l) { StructureSet structureset = (StructureSet) this.structureSets.get(resourcekey);