mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 04:31:58 +01:00
0b20f94297
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: 96340858 PR-938: Various Sound API improvements cbfe0ff0 PR-937: Minor improvements to World#rayTrace documentation e979ee95 PR-935: Change Consumer and Predicates to super 27ae46dc SPIGOT-3641, SPIGOT-7479, PR-931: Add missing values to EntityEffect 0616ec8b Add eclipse .factorypath file to .gitignore CraftBukkit Changes: 8e162d008 PR-1301: Various Sound API improvements eeb7dfc2d SPIGOT-7520: Attribute LootTableSeed missing for generated containers with attached LootTable d433f086d PR-1297: Change Consumer and Predicates to super 864f616da SPIGOT-7518: Fix NullPointerException when calling Block#applyBoneMeal() 5a2d905af Add eclipse .factorypath file to .gitignore 7c6bf15d4 Fix SkullMeta configuration serialization / deserialization with note block sound Spigot Changes: 7de1049b Rebuild patches
137 lines
8.3 KiB
Diff
137 lines
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 f7c1d07c95f7b67e32bd6679af88612aec74f54f..9d4c9368fcc3a44e452c1b71b5bdb43d097132d2 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 dbddca7d3188c7729d276159f2fb05300fdd97ed..43877a44ff5c0af7ff4819b63d234af6d9c32b11 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -1225,7 +1225,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 e45d6bcf2d604b7412f8c19469ee6f0f9a5e727a..fec640da33879e09a8564e2c579dd0f0302d809d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -205,6 +205,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
|
|
}
|