aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches
diff options
context:
space:
mode:
authorNex <[email protected]>2022-09-18 04:06:53 +0000
committerGitHub <[email protected]>2022-09-18 05:06:53 +0100
commit63cb7472acb69d5a53bb806408d692e4df17cc32 (patch)
tree207310d1a553ba61f8ce3e50bd527083495aedba /patches
parentdbda8874577811ef644c8e2b5598c7c15d2d3fcd (diff)
downloadPaper-63cb7472acb69d5a53bb806408d692e4df17cc32.tar.gz
Paper-63cb7472acb69d5a53bb806408d692e4df17cc32.zip
Added byte array serialization/deserialization for PersistentDataContainers (#7505)
Diffstat (limited to 'patches')
-rw-r--r--patches/api/0393-Added-byte-array-serialization-deserialization-for-P.patch50
-rw-r--r--patches/server/0941-Missing-effect-cause.patch (renamed from patches/server/0940-Missing-effect-cause.patch)0
-rw-r--r--patches/server/0942-Added-byte-array-serialization-deserialization-for-P.patch38
3 files changed, 88 insertions, 0 deletions
diff --git a/patches/api/0393-Added-byte-array-serialization-deserialization-for-P.patch b/patches/api/0393-Added-byte-array-serialization-deserialization-for-P.patch
new file mode 100644
index 0000000000..9c197fc52f
--- /dev/null
+++ b/patches/api/0393-Added-byte-array-serialization-deserialization-for-P.patch
@@ -0,0 +1,50 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Nex <[email protected]>
+Date: Thu, 24 Feb 2022 16:28:08 +0100
+Subject: [PATCH] Added byte array serialization/deserialization for
+ PersistentDataContainers
+
+
+diff --git a/src/main/java/org/bukkit/persistence/PersistentDataContainer.java b/src/main/java/org/bukkit/persistence/PersistentDataContainer.java
+index eebb3da156e2d95efbe22d4afa470b977ce19f10..d30ad7cae1dfbb47ab1a6e3e2fcd6fb76163fe78 100644
+--- a/src/main/java/org/bukkit/persistence/PersistentDataContainer.java
++++ b/src/main/java/org/bukkit/persistence/PersistentDataContainer.java
+@@ -164,5 +164,38 @@ public interface PersistentDataContainer {
+ * @throws NullPointerException if the key to look up is null
+ */
+ boolean has(@NotNull NamespacedKey key);
++
++ /**
++ * Serialize this {@link PersistentDataContainer} instance to a
++ * byte array.
++ *
++ * @return a binary represenation of this container
++ * @throws java.io.IOException if we fail to write this container to a byte array
++ */
++ byte @NotNull [] serializeToBytes() throws java.io.IOException;
++
++ /**
++ * Read values from a serialised byte array into this
++ * {@link PersistentDataContainer} instance.
++ *
++ * @param bytes the byte array to read from
++ * @param clear if true, this {@link PersistentDataContainer} instance
++ * will be cleared before reading
++ * @throws java.io.IOException if the byte array has an invalid format
++ */
++ void readFromBytes(byte @NotNull [] bytes, boolean clear) throws java.io.IOException;
++
++ /**
++ * Read values from a serialised byte array into this
++ * {@link PersistentDataContainer} instance.
++ * This method has the same effect as
++ * <code>PersistentDataContainer#readFromBytes(bytes, true)</code>
++ *
++ * @param bytes the byte array to read from
++ * @throws java.io.IOException if the byte array has an invalid format
++ */
++ default void readFromBytes(byte @NotNull [] bytes) throws java.io.IOException {
++ this.readFromBytes(bytes, true);
++ }
+ // Paper end
+ }
diff --git a/patches/server/0940-Missing-effect-cause.patch b/patches/server/0941-Missing-effect-cause.patch
index 70a763eeb3..70a763eeb3 100644
--- a/patches/server/0940-Missing-effect-cause.patch
+++ b/patches/server/0941-Missing-effect-cause.patch
diff --git a/patches/server/0942-Added-byte-array-serialization-deserialization-for-P.patch b/patches/server/0942-Added-byte-array-serialization-deserialization-for-P.patch
new file mode 100644
index 0000000000..3553cbd00c
--- /dev/null
+++ b/patches/server/0942-Added-byte-array-serialization-deserialization-for-P.patch
@@ -0,0 +1,38 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Nex <[email protected]>
+Date: Thu, 24 Feb 2022 16:28:07 +0100
+Subject: [PATCH] Added byte array serialization/deserialization for
+ PersistentDataContainers
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
+index f0588bec9be09cb8273c310fb3de8bfe72dee9e5..20c7144307ecf1eb5c600f3b84df7bc15fa941d6 100644
+--- a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
++++ b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java
+@@ -168,5 +168,26 @@ public class CraftPersistentDataContainer implements PersistentDataContainer {
+
+ return this.customDataTags.containsKey(key.toString());
+ }
++
++ @Override
++ public byte[] serializeToBytes() throws java.io.IOException {
++ net.minecraft.nbt.CompoundTag root = this.toTagCompound();
++ java.io.ByteArrayOutputStream byteArrayOutput = new java.io.ByteArrayOutputStream();
++ try (java.io.DataOutputStream dataOutput = new java.io.DataOutputStream(byteArrayOutput)) {
++ net.minecraft.nbt.NbtIo.write(root, dataOutput);
++ return byteArrayOutput.toByteArray();
++ }
++ }
++
++ @Override
++ public void readFromBytes(byte[] bytes, boolean clear) throws java.io.IOException {
++ if (clear) {
++ this.clear();
++ }
++ try (java.io.DataInputStream dataInput = new java.io.DataInputStream(new java.io.ByteArrayInputStream(bytes))) {
++ net.minecraft.nbt.CompoundTag compound = net.minecraft.nbt.NbtIo.read(dataInput);
++ this.putAll(compound);
++ }
++ }
+ // Paper end
+ }