From b9fa94e6f6fce4ec0381ffa78b50b213d5e41846 Mon Sep 17 00:00:00 2001 From: metaph0 Date: Thu, 29 Jan 2026 20:00:42 +0900 Subject: [PATCH] Fix NPE on tile entity copy --- .../fawe/v1_20_R2/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_20_R3/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_20_R4/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_R1/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_11/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_4/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_5/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_6/PaperweightGetBlocks.java | 29 +++++++++++-------- .../fawe/v1_21_9/PaperweightGetBlocks.java | 29 +++++++++++-------- 9 files changed, 153 insertions(+), 108 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java index 0153547529..0a379b0201 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java @@ -197,23 +197,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java index 12a92e9b40..37d37dbca4 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightGetBlocks.java @@ -197,23 +197,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java index a9b51fe6e9..f6428cdc9f 100644 --- a/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightGetBlocks.java @@ -198,23 +198,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java index d751e46eb2..ea54836bfd 100644 --- a/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightGetBlocks.java @@ -198,23 +198,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightGetBlocks.java index fff53b15cf..f15d14b64d 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_11/PaperweightGetBlocks.java @@ -198,23 +198,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java index cdef0e7f6b..38351500c8 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_4/PaperweightGetBlocks.java @@ -199,23 +199,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java index d76f5b256c..7812d301b6 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_5/PaperweightGetBlocks.java @@ -199,23 +199,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java index e30cd01f1d..fc5fddfb7f 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_6/PaperweightGetBlocks.java @@ -202,23 +202,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override diff --git a/worldedit-bukkit/adapters/adapter-1_21_9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_9/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_21_9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_9/PaperweightGetBlocks.java index f781fbad33..a84e200b10 100644 --- a/worldedit-bukkit/adapters/adapter-1_21_9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_9/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_21_9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_9/PaperweightGetBlocks.java @@ -202,23 +202,28 @@ public void removeSectionLighting(int layer, boolean sky) { @Override public FaweCompoundTag tile(final int x, final int y, final int z) { - BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + ( - chunkX << 4), y, (z & 15) + ( - chunkZ << 4))); - if (blockEntity == null) { - return null; - } - return NMS_TO_TILE.apply(blockEntity); + LevelChunk chunk = getChunk(); + if (chunk == null) return null; + + BlockPos pos = new BlockPos((x & 15) + (chunkX << 4), y, (z & 15) + (chunkZ << 4)); + Map tiles = chunk.getBlockEntities(); + if (tiles == null) return null; + + BlockEntity blockEntity = tiles.get(pos); + if (blockEntity == null) return null; + return NMS_TO_TILE.apply(blockEntity); } @Override public Map tiles() { - Map nmsTiles = getChunk().getBlockEntities(); - if (nmsTiles.isEmpty()) { - return Collections.emptyMap(); - } - return AdaptedMap.immutable(nmsTiles, posNms2We, NMS_TO_TILE); + LevelChunk chunk = getChunk(); + if (chunk == null) return Collections.emptyMap(); + + Map tiles = chunk.getBlockEntities(); + if (tiles == null || tiles.isEmpty()) return Collections.emptyMap(); + + return AdaptedMap.immutable(tiles, posNms2We, NMS_TO_TILE); } @Override