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 9e5e65bc8c
commit c785bd7430
2 changed files with 10 additions and 16 deletions

View file

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

View file

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