From 09da9cbe662a87f62f30e81697760d3db6cd931c Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Tue, 22 Sep 2026 10:59:34 -0500 Subject: [PATCH] 2.0.0 Fixed: - Map handling errors Changed: - Java 21 to java 25 --- pom.xml | 8 +- .../rswarehouse/item/ItemsMenu.java | 41 +++------ .../rswarehouse/utils/ItemStackUtils.java | 91 ++++++++++++------- 3 files changed, 76 insertions(+), 64 deletions(-) diff --git a/pom.xml b/pom.xml index 2714df0..95ca431 100644 --- a/pom.xml +++ b/pom.xml @@ -8,11 +8,11 @@ com.rsscripting RS-Warehouse RS-Warehouse - 1.6.0 + 2.0.0 - 21 - 21 + 25 + 25 UTF-8 @@ -99,7 +99,7 @@ io.papermc.paper paper-api - 1.21.6-R0.1-SNAPSHOT + 26.3.build.32-alpha provided diff --git a/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java index 27bdda0..abe2cb0 100644 --- a/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java +++ b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java @@ -15,7 +15,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.MapMeta; +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.MapId; import org.bukkit.map.MapView; import java.util.List; @@ -314,49 +315,31 @@ public class ItemsMenu { warehouseItem.serializedItem() ); - if ( - item == null - || - item.getType() - != Material.FILLED_MAP - ) { - + if (item == null) { continue; - } - if ( - !(item.getItemMeta() - instanceof MapMeta mapMeta) - ) { + MapId mapId = + item.getData( + DataComponentTypes.MAP_ID + ); + if (mapId == null) { continue; - - } - - if ( - !mapMeta.hasMapView() - ) { - - continue; - } MapView mapView = - mapMeta.getMapView(); - - if ( - mapView == null - ) { + Bukkit.getMap( + mapId.id() + ); + if (mapView == null) { continue; - } player.sendMap( mapView ); - } player.openInventory( diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java b/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java index 77667f9..830b1c4 100644 --- a/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java +++ b/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java @@ -8,16 +8,12 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; -import org.bukkit.util.io.BukkitObjectInputStream; -import org.bukkit.util.io.BukkitObjectOutputStream; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.SuspiciousStewEffects; import io.papermc.paper.potion.SuspiciousEffectEntry; import net.kyori.adventure.text.Component; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -28,6 +24,10 @@ public class ItemStackUtils { ItemStack item ) { + if (item == null) { + return null; + } + ItemStack serializedItem = item.clone(); @@ -37,38 +37,31 @@ public class ItemStackUtils { try { - ByteArrayOutputStream outputStream = - new ByteArrayOutputStream(); - - BukkitObjectOutputStream dataOutput = - new BukkitObjectOutputStream( - outputStream - ); - - dataOutput.writeObject( - serializedItem - ); - - dataOutput.close(); - return Base64.getEncoder() .encodeToString( - outputStream.toByteArray() + serializedItem.serializeAsBytes() ); } catch (Exception e) { + e.printStackTrace(); + return null; } } + public static ItemStack deserialize( String data ) { + if (data == null || data.isBlank()) { + return null; + } + try { byte[] bytes = @@ -77,22 +70,58 @@ public class ItemStackUtils { data ); - ByteArrayInputStream inputStream = - new ByteArrayInputStream( - bytes - ); + /* + * New format: + * Paper NBT ItemStack serialization. + */ + try { - BukkitObjectInputStream dataInput = - new BukkitObjectInputStream( - inputStream - ); + return ItemStack.deserializeBytes( + bytes + ); - ItemStack item = - (ItemStack) dataInput.readObject(); + } - dataInput.close(); + catch (Exception modernException) { - return item; + /* + * Legacy format: + * BukkitObjectOutputStream serialization. + * + * Existing warehouse databases may still + * contain these entries. + */ + try ( + java.io.ByteArrayInputStream inputStream = + new java.io.ByteArrayInputStream( + bytes + ); + + org.bukkit.util.io.BukkitObjectInputStream dataInput = + new org.bukkit.util.io.BukkitObjectInputStream( + inputStream + ) + ) { + + ItemStack item = + (ItemStack) dataInput.readObject(); + + if (item == null) { + return null; + } + + /* + * Ask Paper to convert legacy item data + * to the current server representation. + */ + return Bukkit.getItemFactory() + .ensureServerConversions( + item + ); + + } + + } }