geforkt von Mirrors/Paper
06db5d08b0
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: 44cfe143 SPIGOT-6249: Add Missing Effect Constants CraftBukkit Changes: 14928261 SPIGOT-6249: Add Missing Effect Constants 332335e1 SPIGOT-6731: "Nag author" message in CraftServer lists one author only 6cd975d0 SPIGOT-5732, SPIGOT-6387: Overhaul Hanging entities
68 Zeilen
3.7 KiB
Diff
68 Zeilen
3.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MiniDigger <admin@minidigger.me>
|
|
Date: Wed, 29 Apr 2020 02:10:32 +0200
|
|
Subject: [PATCH] Allow delegation to vanilla chunk gen
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index ecc65fe9783f0f369695edc1183f3d49686d66f9..f150b3558783c70b63114e3c9e23767b16ba4564 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -2172,6 +2172,32 @@ public final class CraftServer implements Server {
|
|
return new OldCraftChunkData(world);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public ChunkGenerator.ChunkData createVanillaChunkData(World world, int x, int z) {
|
|
+ // get empty object
|
|
+ OldCraftChunkData data = (OldCraftChunkData) createChunkData(world);
|
|
+ // do bunch of vanilla shit
|
|
+ net.minecraft.server.level.ServerLevel nmsWorld = ((CraftWorld) world).getHandle();
|
|
+ net.minecraft.world.level.chunk.ProtoChunk protoChunk = new net.minecraft.world.level.chunk.ProtoChunk(new net.minecraft.world.level.ChunkPos(x, z), null, nmsWorld, nmsWorld);
|
|
+ List<net.minecraft.world.level.chunk.ChunkAccess> list = new ArrayList<>();
|
|
+ list.add(protoChunk);
|
|
+ net.minecraft.server.level.WorldGenRegion genRegion = new net.minecraft.server.level.WorldGenRegion(nmsWorld, list, net.minecraft.world.level.chunk.ChunkStatus.EMPTY, -1);
|
|
+ // call vanilla generator, one feature after another. Order here is important!
|
|
+ net.minecraft.world.level.chunk.ChunkGenerator chunkGenerator = nmsWorld.getChunkSource().generator;
|
|
+ if (chunkGenerator instanceof org.bukkit.craftbukkit.generator.CustomChunkGenerator) {
|
|
+ chunkGenerator = ((org.bukkit.craftbukkit.generator.CustomChunkGenerator) chunkGenerator).delegate;
|
|
+ }
|
|
+ chunkGenerator.createBiomes(nmsWorld.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), protoChunk);
|
|
+ chunkGenerator.fillFromNoise((runnable) -> {}, nmsWorld.structureFeatureManager(), protoChunk);
|
|
+ chunkGenerator.buildSurfaceAndBedrock(genRegion, protoChunk);
|
|
+ // copy over generated sections
|
|
+ data.setRawChunkData(protoChunk.getSections());
|
|
+ // hooray!
|
|
+ return data;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public BossBar createBossBar(String title, BarColor color, BarStyle style, BarFlag... flags) {
|
|
return new CraftBossBar(title, color, style, flags);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/OldCraftChunkData.java b/src/main/java/org/bukkit/craftbukkit/generator/OldCraftChunkData.java
|
|
index a48c659c02c6c33a8efdac6daf9c9a0708f05071..932bd3334b5852c8f209678b1444fc0e43a637f0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/generator/OldCraftChunkData.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/generator/OldCraftChunkData.java
|
|
@@ -22,7 +22,7 @@ import org.bukkit.material.MaterialData;
|
|
public final class OldCraftChunkData implements ChunkGenerator.ChunkData {
|
|
private final int minHeight;
|
|
private final int maxHeight;
|
|
- private final LevelChunkSection[] sections;
|
|
+ private LevelChunkSection[] sections;
|
|
private Set<BlockPos> tiles;
|
|
private final Set<BlockPos> lights = new HashSet<>();
|
|
private World world; // Paper - Anti-Xray - Add parameters
|
|
@@ -195,4 +195,10 @@ public final class OldCraftChunkData implements ChunkGenerator.ChunkData {
|
|
Set<BlockPos> getLights() {
|
|
return this.lights;
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ public void setRawChunkData(LevelChunkSection[] sections) {
|
|
+ this.sections = sections;
|
|
+ }
|
|
+ // Paper end
|
|
}
|