Skip to content

Commit c1c127d

Browse files
authored
Merge pull request #7455 from Moderocky/fix-it-duck
Fix queue serialisation.
2 parents 76cbae6 + dd64f51 commit c1c127d

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/main/java/ch/njol/skript/classes/data/SkriptClasses.java

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@
2525
import ch.njol.skript.util.visual.VisualEffect;
2626
import ch.njol.skript.util.visual.VisualEffects;
2727
import ch.njol.yggdrasil.Fields;
28-
import org.skriptlang.skript.lang.util.SkriptQueue;
2928
import org.bukkit.Material;
3029
import org.bukkit.enchantments.Enchantment;
3130
import org.bukkit.inventory.ItemStack;
3231
import org.jetbrains.annotations.Nullable;
3332
import org.skriptlang.skript.lang.script.Script;
33+
import org.skriptlang.skript.lang.util.SkriptQueue;
3434
import org.skriptlang.skript.util.Executable;
3535

3636
import java.io.File;
37+
import java.io.NotSerializableException;
3738
import java.io.StreamCorruptedException;
3839
import java.nio.file.Path;
3940
import java.util.Arrays;
4041
import java.util.Iterator;
42+
import java.util.List;
4143
import java.util.Locale;
4244
import java.util.regex.Pattern;
4345

@@ -731,7 +733,51 @@ public void change(SkriptQueue[] what, Object @Nullable [] delta, ChangeMode mod
731733
}
732734
}
733735
})
734-
.serializer(new YggdrasilSerializer<>())
736+
.parser(new Parser<SkriptQueue>() {
737+
738+
@Override
739+
public boolean canParse(ParseContext context) {
740+
return false;
741+
}
742+
743+
@Override
744+
public String toString(SkriptQueue queue, int flags) {
745+
return Classes.toString(queue.toArray(), flags, true);
746+
}
747+
748+
@Override
749+
public String toVariableNameString(SkriptQueue queue) {
750+
return this.toString(queue, 0);
751+
}
752+
753+
})
754+
.serializer(new Serializer<SkriptQueue>() {
755+
@Override
756+
public Fields serialize(SkriptQueue queue) throws NotSerializableException {
757+
Fields fields = new Fields();
758+
fields.putObject("contents", queue.toArray());
759+
return fields;
760+
}
761+
762+
@Override
763+
public void deserialize(SkriptQueue queue, Fields fields)
764+
throws StreamCorruptedException, NotSerializableException {
765+
Object[] contents = fields.getObject("contents", Object[].class);
766+
queue.clear();
767+
if (contents != null)
768+
queue.addAll(List.of(contents));
769+
}
770+
771+
@Override
772+
public boolean mustSyncDeserialization() {
773+
return false;
774+
}
775+
776+
@Override
777+
protected boolean canBeInstantiated() {
778+
return true;
779+
}
780+
})
735781
);
736782

737783

src/main/java/org/skriptlang/skript/lang/util/SkriptQueue.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import ch.njol.skript.lang.util.common.AnyAmount;
44
import ch.njol.skript.util.Container;
5-
import ch.njol.yggdrasil.YggdrasilSerializable;
65
import org.jetbrains.annotations.NotNull;
76

87
import java.util.*;
@@ -13,7 +12,7 @@
1312
*/
1413
@Container.ContainerType(Object.class)
1514
public class SkriptQueue extends LinkedList<@NotNull Object>
16-
implements Deque<Object>, Queue<Object>, YggdrasilSerializable, AnyAmount, Container<Object> {
15+
implements Deque<Object>, Queue<Object>, AnyAmount, Container<Object> {
1716

1817
@Override
1918
public boolean add(Object element) {

0 commit comments

Comments
 (0)