From bdda266671ba1503a5c66917cd20472b8183d5be Mon Sep 17 00:00:00 2001 From: Moderocky Date: Thu, 16 Jan 2025 14:34:55 +0000 Subject: [PATCH] Fix Queue serialisation. --- .../skript/classes/data/SkriptClasses.java | 50 ++++++++++++++++++- .../skript/lang/util/SkriptQueue.java | 3 +- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/SkriptClasses.java b/src/main/java/ch/njol/skript/classes/data/SkriptClasses.java index 79cc665ae60..edae0fba4ad 100644 --- a/src/main/java/ch/njol/skript/classes/data/SkriptClasses.java +++ b/src/main/java/ch/njol/skript/classes/data/SkriptClasses.java @@ -25,19 +25,21 @@ import ch.njol.skript.util.visual.VisualEffect; import ch.njol.skript.util.visual.VisualEffects; import ch.njol.yggdrasil.Fields; -import org.skriptlang.skript.lang.util.SkriptQueue; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.lang.script.Script; +import org.skriptlang.skript.lang.util.SkriptQueue; import org.skriptlang.skript.util.Executable; import java.io.File; +import java.io.NotSerializableException; import java.io.StreamCorruptedException; import java.nio.file.Path; import java.util.Arrays; import java.util.Iterator; +import java.util.List; import java.util.Locale; import java.util.regex.Pattern; @@ -731,7 +733,51 @@ public void change(SkriptQueue[] what, Object @Nullable [] delta, ChangeMode mod } } }) - .serializer(new YggdrasilSerializer<>()) + .parser(new Parser() { + + @Override + public boolean canParse(ParseContext context) { + return false; + } + + @Override + public String toString(SkriptQueue queue, int flags) { + return Classes.toString(queue.toArray(), flags, true); + } + + @Override + public String toVariableNameString(SkriptQueue queue) { + return this.toString(queue, 0); + } + + }) + .serializer(new Serializer() { + @Override + public Fields serialize(SkriptQueue queue) throws NotSerializableException { + Fields fields = new Fields(); + fields.putObject("contents", queue.toArray()); + return fields; + } + + @Override + public void deserialize(SkriptQueue queue, Fields fields) + throws StreamCorruptedException, NotSerializableException { + Object[] contents = fields.getObject("contents", Object[].class); + queue.clear(); + if (contents != null) + queue.addAll(List.of(contents)); + } + + @Override + public boolean mustSyncDeserialization() { + return false; + } + + @Override + protected boolean canBeInstantiated() { + return true; + } + }) ); diff --git a/src/main/java/org/skriptlang/skript/lang/util/SkriptQueue.java b/src/main/java/org/skriptlang/skript/lang/util/SkriptQueue.java index d730acf8a99..98fec67f4a0 100644 --- a/src/main/java/org/skriptlang/skript/lang/util/SkriptQueue.java +++ b/src/main/java/org/skriptlang/skript/lang/util/SkriptQueue.java @@ -2,7 +2,6 @@ import ch.njol.skript.lang.util.common.AnyAmount; import ch.njol.skript.util.Container; -import ch.njol.yggdrasil.YggdrasilSerializable; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -13,7 +12,7 @@ */ @Container.ContainerType(Object.class) public class SkriptQueue extends LinkedList<@NotNull Object> - implements Deque, Queue, YggdrasilSerializable, AnyAmount, Container { + implements Deque, Queue, AnyAmount, Container { @Override public boolean add(Object element) {