package lol.pyr.znpcsplus.interaction; import lol.pyr.znpcsplus.interaction.types.*; import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.util.BungeeUtil; import lol.pyr.znpcsplus.util.StringSerializer; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class ActionRegistry { private final Map, StringSerializer> serializerMap = new HashMap<>(); public ActionRegistry(TaskScheduler taskScheduler, BukkitAudiences adventure, BungeeUtil bungeeUtil) { register(ConsoleCommandAction.class, new ConsoleCommandActionSerializer(taskScheduler)); register(PlayerCommandAction.class, new PlayerCommandActionSerializer(taskScheduler)); register(SwitchServerAction.class, new SwitchServerActionSerializer(bungeeUtil)); register(MessageAction.class, new MessageActionSerializer(adventure)); } public void register(Class clazz, StringSerializer serializer) { serializerMap.put(clazz, serializer); } @SuppressWarnings("unchecked") public T deserialize(String str) { try { String[] split = str.split(";"); Class clazz = Class.forName(split[0]); StringSerializer serializer = (StringSerializer) serializerMap.get(clazz); if (serializer == null) return null; return serializer.deserialize(String.join(";", Arrays.copyOfRange(split, 1, split.length))); } catch (ClassNotFoundException e) { return null; } } @SuppressWarnings("unchecked") public String serialize(T action) { StringSerializer serializer = (StringSerializer) serializerMap.get(action.getClass()); if (serializer == null) return null; return action.getClass().getName() + ";" + serializer.serialize(action); } }