Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-21 05:50:05 +01:00
60 Zeilen
2.7 KiB
Diff
60 Zeilen
2.7 KiB
Diff
--- a/net/minecraft/server/IChunkLoader.java
|
|
+++ b/net/minecraft/server/IChunkLoader.java
|
|
@@ -18,15 +18,54 @@
|
|
this.a = new IOWorker(new RegionFileCache(file), "chunk");
|
|
}
|
|
|
|
- public NBTTagCompound getChunkData(DimensionManager dimensionmanager, Supplier<WorldPersistentData> supplier, NBTTagCompound nbttagcompound) {
|
|
+ // CraftBukkit start
|
|
+ private boolean check(ChunkProviderServer cps, int x, int z) throws IOException {
|
|
+ ChunkCoordIntPair pos = new ChunkCoordIntPair(x, z);
|
|
+ if (cps != null) {
|
|
+ com.google.common.base.Preconditions.checkState(org.bukkit.Bukkit.isPrimaryThread(), "primary thread");
|
|
+ if (cps.isLoaded(x, z)) {
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ NBTTagCompound nbt = read(pos);
|
|
+ if (nbt != null) {
|
|
+ NBTTagCompound level = nbt.getCompound("Level");
|
|
+ if (level.getBoolean("TerrainPopulated")) {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ ChunkStatus status = ChunkStatus.a(level.getString("Status"));
|
|
+ if (status != null && status.b(ChunkStatus.FEATURES)) {
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
+
|
|
+ public NBTTagCompound getChunkData(DimensionManager dimensionmanager, Supplier<WorldPersistentData> supplier, NBTTagCompound nbttagcompound, ChunkCoordIntPair pos, @Nullable GeneratorAccess generatoraccess) throws IOException {
|
|
int i = a(nbttagcompound);
|
|
boolean flag = true;
|
|
|
|
+ // CraftBukkit start
|
|
+ if (i < 1466) {
|
|
+ NBTTagCompound level = nbttagcompound.getCompound("Level");
|
|
+ if (level.getBoolean("TerrainPopulated") && !level.getBoolean("LightPopulated")) {
|
|
+ ChunkProviderServer cps = (generatoraccess == null) ? null : ((WorldServer) generatoraccess).getChunkProvider();
|
|
+ if (check(cps, pos.x - 1, pos.z) && check(cps, pos.x - 1, pos.z - 1) && check(cps, pos.x, pos.z - 1)) {
|
|
+ level.setBoolean("LightPopulated", true);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // CraftBukkit end
|
|
+
|
|
if (i < 1493) {
|
|
nbttagcompound = GameProfileSerializer.a(this.b, DataFixTypes.CHUNK, nbttagcompound, i, 1493);
|
|
if (nbttagcompound.getCompound("Level").getBoolean("hasLegacyStructureData")) {
|
|
if (this.c == null) {
|
|
- this.c = PersistentStructureLegacy.a(dimensionmanager, (WorldPersistentData) supplier.get());
|
|
+ this.c = PersistentStructureLegacy.a(dimensionmanager.getType(), (WorldPersistentData) supplier.get()); // CraftBukkit - getType
|
|
}
|
|
|
|
nbttagcompound = this.c.a(nbttagcompound);
|