9df2066642
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: dfe1fb48 PR-906: Add missing MinecraftExperimental annotation to Bundles 825ab30d PR-905: Add missing MapCursor.Type and update documentation e03d10e6 PR-903: Make BARRIER Waterlogged 1961ead6 PR-898: Use Java Consumer instead of Bukkit Consumer CraftBukkit Changes: f71a799f0 Make BARRIER Waterlogged 172f76a45 Upgrade specialsource-maven-plugin f0702775c SPIGOT-7486: Alternate approach to null profile names 069495671 SPIGOT-7485: Allow air entity items since required for Vanilla logic 5dfd33dc2 SPIGOT-7484: Cancelling PlayerEditBookEvent does not update client's book contents 02d490788 PR-1250: Standardize and centralize Bukkit / Minecraft registry conversion 9024a09b9 PR-1251: Use Java Consumer instead of Bukkit Consumer 6d4b25bf1 Increase diff stability
138 Zeilen
8.3 KiB
Diff
138 Zeilen
8.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
|
|
Date: Thu, 6 Jan 2022 15:59:06 -0800
|
|
Subject: [PATCH] Expose vanilla BiomeProvider from WorldInfo
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 6c02d5233c782b0e5049afdf84250687ae71dcde..2503e2b2436a6e07fa22c0e55ad1539bae06de1a 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -550,7 +550,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
List<CustomSpawner> list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(iworlddataserver));
|
|
LevelStem worlddimension = (LevelStem) dimensions.get(dimensionKey);
|
|
|
|
- org.bukkit.generator.WorldInfo worldInfo = new org.bukkit.craftbukkit.generator.CraftWorldInfo(iworlddataserver, worldSession, org.bukkit.World.Environment.getEnvironment(dimension), worlddimension.type().value());
|
|
+ org.bukkit.generator.WorldInfo worldInfo = new org.bukkit.craftbukkit.generator.CraftWorldInfo(iworlddataserver, worldSession, org.bukkit.World.Environment.getEnvironment(dimension), worlddimension.type().value(), worlddimension.generator(), this.registryAccess()); // Paper
|
|
if (biomeProvider == null && gen != null) {
|
|
biomeProvider = gen.getDefaultBiomeProvider(worldInfo);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index a68374e527a9d8f29863baf8e18fbd09d45e4185..02faa85848ab286c7219f09e0b2048fdad0cd005 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -1223,7 +1223,7 @@ public final class CraftServer implements Server {
|
|
List<CustomSpawner> list = ImmutableList.of(new PhantomSpawner(), new PatrolSpawner(), new CatSpawner(), new VillageSiege(), new WanderingTraderSpawner(worlddata));
|
|
LevelStem worlddimension = iregistry.get(actualDimension);
|
|
|
|
- WorldInfo worldInfo = new CraftWorldInfo(worlddata, worldSession, creator.environment(), worlddimension.type().value());
|
|
+ WorldInfo worldInfo = new CraftWorldInfo(worlddata, worldSession, creator.environment(), worlddimension.type().value(), worlddimension.generator(), this.getHandle().getServer().registryAccess()); // Paper
|
|
if (biomeProvider == null && generator != null) {
|
|
biomeProvider = generator.getDefaultBiomeProvider(worldInfo);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 99f075d23484301259daabbab0569fc780e02b5b..e138428fe35c075cfffcc931b53f836129307154 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -202,6 +202,29 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
public int getPlayerCount() {
|
|
return world.players().size();
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public BiomeProvider vanillaBiomeProvider() {
|
|
+ net.minecraft.server.level.ServerChunkCache serverCache = this.getHandle().chunkSource;
|
|
+
|
|
+ final net.minecraft.world.level.biome.BiomeSource biomeSource = serverCache.getGenerator().getBiomeSource();
|
|
+ final net.minecraft.world.level.biome.Climate.Sampler sampler = serverCache.randomState().sampler();
|
|
+
|
|
+ final List<Biome> possibleBiomes = biomeSource.possibleBiomes().stream()
|
|
+ .map(biome -> org.bukkit.craftbukkit.block.CraftBiome.minecraftHolderToBukkit(biome))
|
|
+ .toList();
|
|
+ return new BiomeProvider() {
|
|
+ @Override
|
|
+ public Biome getBiome(final org.bukkit.generator.WorldInfo worldInfo, final int x, final int y, final int z) {
|
|
+ return org.bukkit.craftbukkit.block.CraftBiome.minecraftHolderToBukkit(biomeSource.getNoiseBiome(x >> 2, y >> 2, z >> 2, sampler));
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public List<Biome> getBiomes(final org.bukkit.generator.WorldInfo worldInfo) {
|
|
+ return possibleBiomes;
|
|
+ }
|
|
+ };
|
|
+ }
|
|
// Paper end
|
|
|
|
private static final Random rand = new Random();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftWorldInfo.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftWorldInfo.java
|
|
index 5d655d6cd3e23e0287069f8bdf77601487e862fd..cf57c6e9ce63f7b1d95d91ead2453409a31a5c52 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/generator/CraftWorldInfo.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftWorldInfo.java
|
|
@@ -17,8 +17,14 @@ public class CraftWorldInfo implements WorldInfo {
|
|
private final long seed;
|
|
private final int minHeight;
|
|
private final int maxHeight;
|
|
+ // Paper start
|
|
+ private final net.minecraft.world.level.chunk.ChunkGenerator vanillaChunkGenerator;
|
|
+ private final net.minecraft.core.RegistryAccess.Frozen registryAccess;
|
|
|
|
- public CraftWorldInfo(ServerLevelData worldDataServer, LevelStorageSource.LevelStorageAccess session, World.Environment environment, DimensionType dimensionManager) {
|
|
+ public CraftWorldInfo(ServerLevelData worldDataServer, LevelStorageSource.LevelStorageAccess session, World.Environment environment, DimensionType dimensionManager, net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator, net.minecraft.core.RegistryAccess.Frozen registryAccess) {
|
|
+ this.registryAccess = registryAccess;
|
|
+ this.vanillaChunkGenerator = chunkGenerator;
|
|
+ // Paper end
|
|
this.name = worldDataServer.getLevelName();
|
|
this.uuid = WorldUUID.getUUID(session.levelDirectory.path().toFile());
|
|
this.environment = environment;
|
|
@@ -27,15 +33,6 @@ public class CraftWorldInfo implements WorldInfo {
|
|
this.maxHeight = dimensionManager.minY() + dimensionManager.height();
|
|
}
|
|
|
|
- public CraftWorldInfo(String name, UUID uuid, World.Environment environment, long seed, int minHeight, int maxHeight) {
|
|
- this.name = name;
|
|
- this.uuid = uuid;
|
|
- this.environment = environment;
|
|
- this.seed = seed;
|
|
- this.minHeight = minHeight;
|
|
- this.maxHeight = maxHeight;
|
|
- }
|
|
-
|
|
@Override
|
|
public String getName() {
|
|
return this.name;
|
|
@@ -65,4 +62,34 @@ public class CraftWorldInfo implements WorldInfo {
|
|
public int getMaxHeight() {
|
|
return this.maxHeight;
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public org.bukkit.generator.BiomeProvider vanillaBiomeProvider() {
|
|
+ final net.minecraft.world.level.levelgen.RandomState randomState;
|
|
+ if (vanillaChunkGenerator instanceof net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator noiseBasedChunkGenerator) {
|
|
+ randomState = net.minecraft.world.level.levelgen.RandomState.create(noiseBasedChunkGenerator.generatorSettings().value(),
|
|
+ registryAccess.lookupOrThrow(net.minecraft.core.registries.Registries.NOISE), getSeed());
|
|
+ } else {
|
|
+ randomState = net.minecraft.world.level.levelgen.RandomState.create(net.minecraft.world.level.levelgen.NoiseGeneratorSettings.dummy(),
|
|
+ registryAccess.lookupOrThrow(net.minecraft.core.registries.Registries.NOISE), getSeed());
|
|
+ }
|
|
+
|
|
+ final java.util.List<org.bukkit.block.Biome> possibleBiomes = CraftWorldInfo.this.vanillaChunkGenerator.getBiomeSource().possibleBiomes().stream()
|
|
+ .map(biome -> org.bukkit.craftbukkit.block.CraftBiome.minecraftHolderToBukkit(biome))
|
|
+ .toList();
|
|
+ return new org.bukkit.generator.BiomeProvider() {
|
|
+ @Override
|
|
+ public org.bukkit.block.Biome getBiome(final WorldInfo worldInfo, final int x, final int y, final int z) {
|
|
+ return org.bukkit.craftbukkit.block.CraftBiome.minecraftHolderToBukkit(
|
|
+ CraftWorldInfo.this.vanillaChunkGenerator.getBiomeSource().getNoiseBiome(x >> 2, y >> 2, z >> 2, randomState.sampler()));
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public java.util.List<org.bukkit.block.Biome> getBiomes(final org.bukkit.generator.WorldInfo worldInfo) {
|
|
+ return possibleBiomes;
|
|
+ }
|
|
+ };
|
|
+ }
|
|
+ // Paper end
|
|
}
|