2022-03-01 02:00:00 +11:00

73 lines
3.8 KiB
Diff

--- a/net/minecraft/world/level/chunk/ChunkGenerator.java
+++ b/net/minecraft/world/level/chunk/ChunkGenerator.java
@@ -261,7 +261,7 @@
while (iterator.hasNext()) {
Holder<StructureFeature<?, ?>> holder = (Holder) iterator.next();
- Stream stream = set1.stream();
+ Stream<Holder<BiomeBase>> 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<BiomeBase> set = new ObjectArraySet();
if (this instanceof ChunkProviderFlat) {
- Stream stream = this.biomeSource.possibleBiomes().stream().map(Holder::value);
+ Stream<BiomeBase> 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<String> 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<StructureSet> resourcekey, long i, int j, int k, int l) {
StructureSet structureset = (StructureSet) this.structureSets.get(resourcekey);