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 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 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) {