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
+ );
+
+ }
+
+ }
}