diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index ea9e984..fbe9169 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -140,17 +140,18 @@ public class ZNpcsPlus extends JavaPlugin { UserManager userManager = new UserManager(); shutdownTasks.add(userManager::shutdown); + BungeeConnector bungeeConnector = new BungeeConnector(this); DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile(), - propertyRegistry, skinCache, npcRegistry); + propertyRegistry, skinCache, npcRegistry, bungeeConnector); log(ChatColor.WHITE + " * Registerring components..."); - BungeeUtil.registerChannel(this); - shutdownTasks.add(() -> BungeeUtil.unregisterChannel(this)); + bungeeConnector.registerChannel(); + shutdownTasks.add(bungeeConnector::unregisterChannel); typeRegistry.registerDefault(packetEvents, propertyRegistry); - actionRegistry.registerTypes(scheduler, adventure, textSerializer); + actionRegistry.registerTypes(scheduler, adventure, textSerializer, bungeeConnector); packetEvents.getEventManager().registerListener(new InteractionPacketListener(userManager, npcRegistry, scheduler), PacketListenerPriority.MONITOR); new Metrics(this, 18244); pluginManager.registerEvents(new UserListener(userManager), this); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java index 98a7c0d..1bb4372 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/DataImporterRegistry.java @@ -9,6 +9,7 @@ import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; +import lol.pyr.znpcsplus.util.BungeeConnector; import lol.pyr.znpcsplus.util.LazyLoader; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -25,12 +26,12 @@ public class DataImporterRegistry { public DataImporterRegistry(ConfigManager configManager, BukkitAudiences adventure, TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, NpcTypeRegistryImpl typeRegistry, File pluginsFolder, EntityPropertyRegistryImpl propertyRegistry, - MojangSkinCache skinCache, NpcRegistryImpl npcRegistry) { + MojangSkinCache skinCache, NpcRegistryImpl npcRegistry, BungeeConnector bungeeConnector) { register("znpcs", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, taskScheduler, - packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ServersNPC/data.json")))); + packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ServersNPC/data.json"), bungeeConnector))); register("znpcsplus_legacy", LazyLoader.of(() -> new ZNpcImporter(configManager, adventure, taskScheduler, - packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ZNPCsPlusLegacy/data.json")))); + packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "ZNPCsPlusLegacy/data.json"), bungeeConnector))); register("citizens", LazyLoader.of(() -> new CitizensImporter(configManager, adventure, taskScheduler, packetFactory, textSerializer, typeRegistry, propertyRegistry, skinCache, new File(pluginsFolder, "Citizens/saves.yml"), npcRegistry))); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java index 4e0553c..39ce7e7 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/conversion/znpcs/ZNpcImporter.java @@ -29,6 +29,7 @@ import lol.pyr.znpcsplus.skin.Skin; import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor; import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor; +import lol.pyr.znpcsplus.util.BungeeConnector; import lol.pyr.znpcsplus.util.ItemSerializationUtil; import lol.pyr.znpcsplus.util.NpcLocation; import net.kyori.adventure.platform.bukkit.BukkitAudiences; @@ -53,10 +54,11 @@ public class ZNpcImporter implements DataImporter { private final MojangSkinCache skinCache; private final File dataFile; private final Gson gson; + private final BungeeConnector bungeeConnector; public ZNpcImporter(ConfigManager configManager, BukkitAudiences adventure, TaskScheduler taskScheduler, PacketFactory packetFactory, LegacyComponentSerializer textSerializer, - NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, MojangSkinCache skinCache, File dataFile) { + NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, MojangSkinCache skinCache, File dataFile, BungeeConnector bungeeConnector) { this.configManager = configManager; this.adventure = adventure; @@ -67,6 +69,7 @@ public class ZNpcImporter implements DataImporter { this.propertyRegistry = propertyRegistry; this.skinCache = skinCache; this.dataFile = dataFile; + this.bungeeConnector = bungeeConnector; gson = new GsonBuilder() .create(); } @@ -161,7 +164,7 @@ public class ZNpcImporter implements DataImporter { case "message": return new MessageAction(adventure, parameter, clickType, textSerializer, cooldown * 1000L, 0); case "server": - return new SwitchServerAction(parameter, clickType, cooldown * 1000L, 0); + return new SwitchServerAction(parameter, clickType, cooldown * 1000L, 0, bungeeConnector); } throw new IllegalArgumentException("Couldn't adapt znpcs click action: " + type); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/ActionRegistry.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/ActionRegistry.java index ecaf4e4..dacc909 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/ActionRegistry.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/ActionRegistry.java @@ -7,6 +7,7 @@ import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatActionType; import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandActionType; import lol.pyr.znpcsplus.interaction.switchserver.SwitchServerActionType; import lol.pyr.znpcsplus.scheduling.TaskScheduler; +import lol.pyr.znpcsplus.util.BungeeConnector; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -22,10 +23,10 @@ public class ActionRegistry { public ActionRegistry() { } - public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer) { + public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer, BungeeConnector bungeeConnector) { register(new ConsoleCommandActionType(taskScheduler)); register(new PlayerCommandActionType(taskScheduler)); - register(new SwitchServerActionType()); + register(new SwitchServerActionType(bungeeConnector)); register(new MessageActionType(adventure, textSerializer)); register(new PlayerChatActionType(taskScheduler)); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerAction.java index a590a3b..d62c35d 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerAction.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerAction.java @@ -3,7 +3,7 @@ package lol.pyr.znpcsplus.interaction.switchserver; import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.interaction.InteractionActionImpl; -import lol.pyr.znpcsplus.util.BungeeUtil; +import lol.pyr.znpcsplus.util.BungeeConnector; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; @@ -12,15 +12,17 @@ import org.bukkit.entity.Player; public class SwitchServerAction extends InteractionActionImpl { private final String server; + private final BungeeConnector bungeeConnector; - public SwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay) { + public SwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay, BungeeConnector bungeeConnector) { super(cooldown, delay, interactionType); this.server = server; + this.bungeeConnector = bungeeConnector; } @Override public void run(Player player) { - BungeeUtil.connectPlayer(player, server); + bungeeConnector.connectPlayer(player, server); } @Override diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerActionType.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerActionType.java index 5aee9ec..ad2db5b 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerActionType.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/switchserver/SwitchServerActionType.java @@ -6,6 +6,7 @@ import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; +import lol.pyr.znpcsplus.util.BungeeConnector; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -13,6 +14,12 @@ import java.util.Collections; import java.util.List; public class SwitchServerActionType implements InteractionActionType, InteractionCommandHandler { + private final BungeeConnector bungeeConnector; + + public SwitchServerActionType(BungeeConnector bungeeConnector) { + this.bungeeConnector = bungeeConnector; + } + @Override public String serialize(SwitchServerAction obj) { return Base64.getEncoder().encodeToString(obj.getServer().getBytes(StandardCharsets.UTF_8)) + ";" + obj.getCooldown() + ";" + obj.getInteractionType().name() + ";" + obj.getDelay(); @@ -22,7 +29,7 @@ public class SwitchServerActionType implements InteractionActionType 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK; - return new SwitchServerAction(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0")); + return new SwitchServerAction(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0"), bungeeConnector); } @Override @@ -46,7 +53,7 @@ public class SwitchServerActionType implements InteractionActionType