From 7bd34204c13f25c79cdc0c9e86b6ef81e22b2abe Mon Sep 17 00:00:00 2001 From: HyacinthHaru Date: Wed, 11 Feb 2026 13:37:23 +0800 Subject: [PATCH] fix: guard MapMeta#getMapView against IllegalStateException --- .../objectholders/MapMarkerEditManager.java | 35 ++----------------- .../imageframe/utils/ImageFilledMapUtils.java | 25 +++++++++++-- .../com/loohp/imageframe/utils/MapUtils.java | 26 +++++++------- 3 files changed, 37 insertions(+), 49 deletions(-) diff --git a/common/src/main/java/com/loohp/imageframe/objectholders/MapMarkerEditManager.java b/common/src/main/java/com/loohp/imageframe/objectholders/MapMarkerEditManager.java index e122093..f1d9407 100644 --- a/common/src/main/java/com/loohp/imageframe/objectholders/MapMarkerEditManager.java +++ b/common/src/main/java/com/loohp/imageframe/objectholders/MapMarkerEditManager.java @@ -32,7 +32,6 @@ import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; @@ -46,8 +45,6 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.MapMeta; import org.bukkit.map.MapCursor; import org.bukkit.map.MapView; import org.bukkit.util.RayTraceResult; @@ -110,21 +107,7 @@ private void editTask() { } Vector hitPosition = result.getHitPosition(); ItemStack itemStack = itemFrame.getItem(); - if (itemStack == null || itemStack.getType().equals(Material.AIR)) { - continue; - } - if (!itemStack.hasItemMeta()) { - continue; - } - ItemMeta itemMeta = itemStack.getItemMeta(); - if (!(itemMeta instanceof MapMeta)) { - continue; - } - MapMeta mapMeta = (MapMeta) itemMeta; - if (!mapMeta.hasMapView()) { - continue; - } - MapView mapView = mapMeta.getMapView(); + MapView mapView = MapUtils.getItemMapView(itemStack); if (mapView == null) { continue; } @@ -194,21 +177,7 @@ public void handlePlayerInteract(T event) return; } ItemStack itemStack = itemFrame.getItem(); - if (itemStack == null || itemStack.getType().equals(Material.AIR)) { - return; - } - if (!itemStack.hasItemMeta()) { - return; - } - ItemMeta itemMeta = itemStack.getItemMeta(); - if (!(itemMeta instanceof MapMeta)) { - return; - } - MapMeta mapMeta = (MapMeta) itemMeta; - if (!mapMeta.hasMapView()) { - return; - } - MapView mapView = mapMeta.getMapView(); + MapView mapView = MapUtils.getItemMapView(itemStack); if (mapView == null) { return; } diff --git a/common/src/main/java/com/loohp/imageframe/utils/ImageFilledMapUtils.java b/common/src/main/java/com/loohp/imageframe/utils/ImageFilledMapUtils.java index 9dc5283..4458a63 100644 --- a/common/src/main/java/com/loohp/imageframe/utils/ImageFilledMapUtils.java +++ b/common/src/main/java/com/loohp/imageframe/utils/ImageFilledMapUtils.java @@ -57,7 +57,7 @@ public static ItemStack processImageFilledMap(ItemStack itemStack) { return null; } MapMeta mapMeta = (MapMeta) itemMeta; - MapView mapView = mapMeta.hasMapView() ? mapMeta.getMapView() : null; + MapView mapView = getMapViewSafely(mapMeta); FilledMapItemInfo info = NMS.getInstance().getFilledMapItemInfo(itemStack); if (info == null) { if (mapView != null) { @@ -72,7 +72,17 @@ public static ItemStack processImageFilledMap(ItemStack itemStack) { } } else { ImageMap imageMap = ImageFrame.imageMapManager.getFromImageId(info.getImageMapIndex()); - MapView correctMapView = imageMap.getMapViews().get(info.getMapPartIndex()); + if (imageMap == null || !imageMap.isValid()) { + return null; + } + int mapPartIndex = info.getMapPartIndex(); + if (mapPartIndex < 0 || mapPartIndex >= imageMap.getMapViews().size()) { + return null; + } + MapView correctMapView = imageMap.getMapViews().get(mapPartIndex); + if (correctMapView == null) { + return null; + } if (mapView == null || correctMapView.getId() != mapView.getId()) { mapMeta.setMapView(correctMapView); itemStack.setItemMeta(mapMeta); @@ -81,4 +91,15 @@ public static ItemStack processImageFilledMap(ItemStack itemStack) { return null; } + private static MapView getMapViewSafely(MapMeta mapMeta) { + try { + if (!mapMeta.hasMapView()) { + return null; + } + return mapMeta.getMapView(); + } catch (IllegalStateException ignored) { + return null; + } + } + } diff --git a/common/src/main/java/com/loohp/imageframe/utils/MapUtils.java b/common/src/main/java/com/loohp/imageframe/utils/MapUtils.java index e618136..193ebd2 100644 --- a/common/src/main/java/com/loohp/imageframe/utils/MapUtils.java +++ b/common/src/main/java/com/loohp/imageframe/utils/MapUtils.java @@ -227,13 +227,22 @@ public static MapView getItemMapView(ItemStack itemStack) { return null; } MapMeta mapMeta = (MapMeta) meta; - if (!mapMeta.hasMapView()) { + MapView mapView; + try { + if (!mapMeta.hasMapView()) { + return null; + } + mapView = mapMeta.getMapView(); + } catch (IllegalStateException ignored) { + return null; + } + if (mapView == null) { return null; } if (mapMeta.hasMapId()) { tryDeleteBlankDataFile(getMainWorld(), mapMeta.getMapId()); } - return mapMeta.getMapView(); + return mapView; } public static MapView getPlayerMapView(Player player) { @@ -286,18 +295,7 @@ public static ImageMapHitTargetResult rayTraceTargetImageMap(Location start, Vec } Vector hitPosition = rayTraceResult.getHitPosition(); ItemStack itemStack = itemFrame.getItem(); - if (itemStack == null || itemStack.getType().equals(Material.AIR) || !itemStack.hasItemMeta()) { - return null; - } - ItemMeta itemMeta = itemStack.getItemMeta(); - if (!(itemMeta instanceof MapMeta)) { - return null; - } - MapMeta mapMeta = (MapMeta) itemMeta; - if (!mapMeta.hasMapView()) { - return null; - } - MapView mapView = mapMeta.getMapView(); + MapView mapView = getItemMapView(itemStack); if (mapView == null) { return null; }