Fix null handling in getLoadedChunkAsync for paper/spigot 1.21.3/1.21.4

This commit is contained in:
Tom Cesko 2025-03-07 17:31:29 +01:00
parent cb89181590
commit 8fc2994925
2 changed files with 10 additions and 16 deletions

View file

@ -38,18 +38,15 @@ public class MapChunkCache121_3 extends GenericMapChunkCache {
@Override @Override
protected Supplier<GenericChunk> getLoadedChunkAsync(DynmapChunk chunk) { protected Supplier<GenericChunk> getLoadedChunkAsync(DynmapChunk chunk) {
CompletableFuture<SerializableChunkData> chunkData = CompletableFuture.supplyAsync(() -> { CompletableFuture<Optional<SerializableChunkData>> chunkData = CompletableFuture.supplyAsync(() -> {
CraftWorld cw = (CraftWorld) w; CraftWorld cw = (CraftWorld) w;
Chunk c = cw.getHandle().getChunkIfLoaded(chunk.x, chunk.z); Chunk c = cw.getHandle().getChunkIfLoaded(chunk.x, chunk.z);
if (c == null || !c.q) { //!c.loaded if (c == null || !c.q) { // !c.loaded
return null; return Optional.empty();
} }
return SerializableChunkData.a(cw.getHandle(), c); //SerializableChunkData.copyOf return Optional.of(SerializableChunkData.a(cw.getHandle(), c)); // SerializableChunkData.copyOf
}, ((CraftServer) Bukkit.getServer()).getServer()); }, ((CraftServer) Bukkit.getServer()).getServer());
return () -> { return () -> chunkData.join().map(SerializableChunkData::a).map(NBT.NBTCompound::new).map(this::parseChunkFromNBT).orElse(null); // SerializableChunkData::write
NBTTagCompound nbt = chunkData.join().a(); // SerializableChunkData.write
return parseChunkFromNBT(new NBT.NBTCompound(nbt));
};
} }
protected GenericChunk getLoadedChunk(DynmapChunk chunk) { protected GenericChunk getLoadedChunk(DynmapChunk chunk) {

View file

@ -38,18 +38,15 @@ public class MapChunkCache121_4 extends GenericMapChunkCache {
@Override @Override
protected Supplier<GenericChunk> getLoadedChunkAsync(DynmapChunk chunk) { protected Supplier<GenericChunk> getLoadedChunkAsync(DynmapChunk chunk) {
CompletableFuture<SerializableChunkData> chunkData = CompletableFuture.supplyAsync(() -> { CompletableFuture<Optional<SerializableChunkData>> chunkData = CompletableFuture.supplyAsync(() -> {
CraftWorld cw = (CraftWorld) w; CraftWorld cw = (CraftWorld) w;
Chunk c = cw.getHandle().getChunkIfLoaded(chunk.x, chunk.z); Chunk c = cw.getHandle().getChunkIfLoaded(chunk.x, chunk.z);
if (c == null || !c.q) { //!c.loaded if (c == null || !c.q) { // !c.loaded
return null; return Optional.empty();
} }
return SerializableChunkData.a(cw.getHandle(), c); //SerializableChunkData.copyOf return Optional.of(SerializableChunkData.a(cw.getHandle(), c)); // SerializableChunkData.copyOf
}, ((CraftServer) Bukkit.getServer()).getServer()); }, ((CraftServer) Bukkit.getServer()).getServer());
return () -> { return () -> chunkData.join().map(SerializableChunkData::a).map(NBT.NBTCompound::new).map(this::parseChunkFromNBT).orElse(null); // SerializableChunkData::write
NBTTagCompound nbt = chunkData.join().a(); // SerializableChunkData.write
return parseChunkFromNBT(new NBT.NBTCompound(nbt));
};
} }
protected GenericChunk getLoadedChunk(DynmapChunk chunk) { protected GenericChunk getLoadedChunk(DynmapChunk chunk) {