From d2452450830f2c6e1fba08b265360f16526e3610 Mon Sep 17 00:00:00 2001 From: William Date: Sat, 23 Sep 2023 18:45:06 +0100 Subject: [PATCH] Fix `#get` call when appling locked map data, Fix #169 --- .../husksync/util/BukkitMapPersister.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/bukkit/src/main/java/net/william278/husksync/util/BukkitMapPersister.java b/bukkit/src/main/java/net/william278/husksync/util/BukkitMapPersister.java index aa98fd9b..73e6fcde 100644 --- a/bukkit/src/main/java/net/william278/husksync/util/BukkitMapPersister.java +++ b/bukkit/src/main/java/net/william278/husksync/util/BukkitMapPersister.java @@ -133,12 +133,15 @@ public interface BukkitMapPersister { final MapMeta meta = Objects.requireNonNull((MapMeta) map.getItemMeta()); NBT.get(map, nbt -> { if (!nbt.hasTag(MAP_DATA_KEY)) { - return nbt; + return; } final ReadableNBT mapData = nbt.getCompound(MAP_DATA_KEY); + final ReadableNBT mapIds = nbt.getCompound(MAP_VIEW_ID_MAPPINGS_KEY); + if (mapData == null || mapIds == null) { + return; + } // Search for an existing map view - final ReadableNBT mapIds = nbt.getCompound(MAP_VIEW_ID_MAPPINGS_KEY); Optional world = Optional.empty(); for (String worldUid : mapIds.getKeys()) { world = Bukkit.getWorlds().stream() @@ -157,7 +160,7 @@ public interface BukkitMapPersister { meta.setMapView(view); map.setItemMeta(meta); getPlugin().debug(String.format("View exists (#%s); updated map (UID: %s)", view.getId(), uid)); - return nbt; + return; } } @@ -165,10 +168,11 @@ public interface BukkitMapPersister { final MapData canvasData; try { getPlugin().debug("Deserializing map data from NBT and generating view..."); - canvasData = MapData.fromByteArray(mapData.getByteArray(MAP_PIXEL_DATA_KEY)); + canvasData = MapData.fromByteArray(Objects.requireNonNull(mapData.getByteArray(MAP_PIXEL_DATA_KEY), + "Map pixel data is null")); } catch (Throwable e) { getPlugin().log(Level.WARNING, "Failed to deserialize map data from NBT", e); - return nbt; + return; } // Add a renderer to the map with the data @@ -179,10 +183,11 @@ public interface BukkitMapPersister { // Set the map view ID in NBT NBT.modify(map, editable -> { - editable.getCompound(MAP_VIEW_ID_MAPPINGS_KEY).setInteger(worldUid, view.getId()); + Objects.requireNonNull(editable.getCompound(MAP_VIEW_ID_MAPPINGS_KEY), + "Map view ID mappings compound is null") + .setInteger(worldUid, view.getId()); }); getPlugin().debug(String.format("Generated view (#%s) and updated map (UID: %s)", view.getId(), worldUid)); - return nbt; }); return map; }