diff --git a/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java b/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
index b9220074293..b143669a07d 100644
--- a/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
+++ b/src/main/java/ch/njol/skript/util/visual/VisualEffectType.java
@@ -1,37 +1,65 @@
-/**
- * This file is part of Skript.
- *
- * Skript is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Skript is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Skript. If not, see .
- *
- * Copyright Peter Güttinger, SkriptLang team and contributors
- */
package ch.njol.skript.util.visual;
import ch.njol.skript.localization.Language;
import ch.njol.skript.localization.Noun;
import ch.njol.skript.log.BlockingLogHandler;
import ch.njol.skript.log.SkriptLogger;
+import ch.njol.skript.variables.Variables;
+import ch.njol.yggdrasil.Fields;
+import ch.njol.yggdrasil.YggdrasilSerializable;
+import ch.njol.yggdrasil.YggdrasilSerializer;
import org.bukkit.Effect;
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.jetbrains.annotations.Nullable;
+import java.io.NotSerializableException;
+import java.io.StreamCorruptedException;
import java.util.Objects;
import java.util.function.BiFunction;
-public class VisualEffectType {
+public class VisualEffectType implements YggdrasilSerializable {
+
+ static {
+ Variables.yggdrasil.registerClassResolver(new YggdrasilSerializer() {
+ @Override
+ public @Nullable Class extends VisualEffectType> getClass(String id) {
+ return id.equals("VisualEffectType") ? VisualEffectType.class : null;
+ }
+
+ @Override
+ public Fields serialize(VisualEffectType visualEffectType) {
+ Fields fields = new Fields();
+ fields.putObject("id", visualEffectType.getId());
+ return fields;
+ }
+
+ @Override
+ public @Nullable E newInstance(Class clazz) {
+ return null;
+ }
+
+ @Override
+ public boolean canBeInstantiated(Class extends VisualEffectType> clazz) {
+ return false;
+ }
+
+ @Override
+ public void deserialize(VisualEffectType visualEffectType, Fields fields) { }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public E deserialize(Class clazz, Fields fields) throws StreamCorruptedException, NotSerializableException {
+ return (E) VisualEffects.get(fields.getObject("id", String.class));
+ }
+
+ @Override
+ public @Nullable String getID(Class> clazz) {
+ return clazz.equals(VisualEffectType.class) ? "VisualEffectType" : null;
+ }
+ });
+ }
private static final String LANGUAGE_NODE = "visual effects";
diff --git a/src/main/java/ch/njol/skript/util/visual/VisualEffects.java b/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
index b6aaafe5fbc..664de5e97f8 100644
--- a/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
+++ b/src/main/java/ch/njol/skript/util/visual/VisualEffects.java
@@ -1,21 +1,3 @@
-/**
- * This file is part of Skript.
- *
- * Skript is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Skript is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Skript. If not, see .
- *
- * Copyright Peter Güttinger, SkriptLang team and contributors
- */
package ch.njol.skript.util.visual;
import ch.njol.skript.Skript;
@@ -60,7 +42,6 @@ public class VisualEffects {
private static VisualEffectType[] visualEffectTypes;
static {
- Variables.yggdrasil.registerSingleClass(VisualEffectType.class, "VisualEffect.NewType");
Variables.yggdrasil.registerSingleClass(Effect.class, "Bukkit_Effect");
Variables.yggdrasil.registerSingleClass(EntityEffect.class, "Bukkit_EntityEffect");
}
@@ -77,6 +58,14 @@ public static VisualEffectType get(int i) {
return visualEffectTypes[i];
}
+ public static @Nullable VisualEffectType get(String id) {
+ for (VisualEffectType type : visualEffectTypes) {
+ if (id.equals(type.getId()))
+ return type;
+ }
+ return null;
+ }
+
public static String getAllNames() {
List names = new ArrayList<>();
for (VisualEffectType visualEffectType : visualEffectTypes) {