From a88fbe139eada1e95fa5a596a26035627aafddcb Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 15 May 2022 22:38:37 +0200 Subject: [PATCH] Added debug messages Added a way to clear all locks on a server when it was empty when a user joins --- src/main/java/com/alttd/datalock/Config.java | 8 ++++-- .../java/com/alttd/datalock/DataLock.java | 1 + .../com/alttd/datalock/EventListener.java | 26 +++++++++++++++++ .../com/alttd/datalock/PlayerListener.java | 28 +++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alttd/datalock/PlayerListener.java diff --git a/src/main/java/com/alttd/datalock/Config.java b/src/main/java/com/alttd/datalock/Config.java index 65b9392..c329f94 100644 --- a/src/main/java/com/alttd/datalock/Config.java +++ b/src/main/java/com/alttd/datalock/Config.java @@ -30,7 +30,7 @@ public final class Config { public static File CONFIG_PATH; public static void init() { // todo setup share for the config - CONFIG_PATH = new File(DataLock.getDataDirectory().toAbsolutePath() + File.separator + "DataLock"); + CONFIG_PATH = new File(DataLock.getDataDirectory().toAbsolutePath().toString()); File configFile = new File(CONFIG_PATH, "config.yml"); configLoader = YAMLConfigurationLoader.builder() @@ -152,8 +152,12 @@ public final class Config { * ONLY EDIT ANYTHING BELOW THIS LINE **/ public static List PLUGIN_MESSAGE_CHANNELS = new ArrayList<>(List.of("example_plugin:table_1")); + public static boolean DEBUG = false; - private static void loadGroups() { + private static void loadSettings() { PLUGIN_MESSAGE_CHANNELS = getList("settings.channels", new ArrayList<>(List.of("example_plugin:table_1"))); + DEBUG = getBoolean("settings.debug", DEBUG); + if (DEBUG) + Logger.info("DEBUG: on"); } } diff --git a/src/main/java/com/alttd/datalock/DataLock.java b/src/main/java/com/alttd/datalock/DataLock.java index 4c723bb..feb4cec 100644 --- a/src/main/java/com/alttd/datalock/DataLock.java +++ b/src/main/java/com/alttd/datalock/DataLock.java @@ -37,6 +37,7 @@ public class DataLock { public void onProxyInitialization(ProxyInitializeEvent event) { reloadConfig(); server.getEventManager().register(this, EventListener.getInstance()); + server.getEventManager().register(this, new PlayerListener()); new Reload(server); } diff --git a/src/main/java/com/alttd/datalock/EventListener.java b/src/main/java/com/alttd/datalock/EventListener.java index 8550fdb..7b5d660 100644 --- a/src/main/java/com/alttd/datalock/EventListener.java +++ b/src/main/java/com/alttd/datalock/EventListener.java @@ -8,6 +8,7 @@ import com.velocitypowered.api.event.connection.PluginMessageEvent; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.messages.ChannelIdentifier; +import com.velocitypowered.api.proxy.messages.ChannelRegistrar; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.api.proxy.server.RegisteredServer; @@ -29,6 +30,7 @@ public class EventListener { if (instance == null) instance = new EventListener(); EventListener.channelIdentifierList.clear(); + ChannelRegistrar channelRegistrar = DataLock.getServer().getChannelRegistrar(); for (String s : Config.PLUGIN_MESSAGE_CHANNELS) { String[] split = s.split(":"); if (split.length != 2) { @@ -40,13 +42,34 @@ public class EventListener { Logger.warn("Duplicate message channel [%] in config.", s); continue; } + if (Config.DEBUG) + Logger.info("Loaded entry [%] as [%].", s, minecraftChannelIdentifier.asKey().asString()); EventListener.channelIdentifierList.add(minecraftChannelIdentifier); + channelRegistrar.register(minecraftChannelIdentifier); } } + public void clearServer(int hashCode) { + channelLockMap.forEach((identifier, value) -> { + HashSet temp = new HashSet<>(); + for (Lock lock : value) { + if (lock.getServerHash() == hashCode) + temp.add(lock); + } + for (Lock lock : temp) { + value.remove(lock); + queueNextLock(value, lock, identifier); + if (Config.DEBUG) + Logger.info("Clearing % from % due to clear server being called for the server that lock is on", lock.getData(), identifier.getId()); + } + }); + } + @Subscribe public void onPluginMessageEvent(PluginMessageEvent event) { ChannelIdentifier identifier = event.getIdentifier(); + if (Config.DEBUG) + Logger.info("Received message on [%].", identifier.getId()); if (!EventListener.channelIdentifierList.contains(identifier)) return; @@ -81,6 +104,9 @@ public class EventListener { return; } + if (Config.DEBUG) + Logger.info("Plugin message channel: [%]", channel.toLowerCase()); + switch (channel.toLowerCase()) { case "try-lock" -> tryLock(identifier, hashLock, data, serverConnection); case "check-lock" -> checkLock(identifier, hashLock, data, serverConnection); diff --git a/src/main/java/com/alttd/datalock/PlayerListener.java b/src/main/java/com/alttd/datalock/PlayerListener.java new file mode 100644 index 0000000..a56ccc9 --- /dev/null +++ b/src/main/java/com/alttd/datalock/PlayerListener.java @@ -0,0 +1,28 @@ +package com.alttd.datalock; + +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.player.ServerConnectedEvent; +import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.server.RegisteredServer; +import com.velocitypowered.api.proxy.server.ServerInfo; + +import java.util.Optional; + +public class PlayerListener { + + @Subscribe + void onPlayerConnect(ServerConnectedEvent event) { + Player player = event.getPlayer(); + ServerInfo serverInfo = event.getServer().getServerInfo(); + if (event.getServer().getPlayersConnected().stream().filter(p -> p.equals(player)).findAny().isEmpty()) + EventListener.getInstance().clearServer(serverInfo.hashCode()); + + Optional previousServer = event.getPreviousServer(); + if (previousServer.isEmpty()) + return; + serverInfo = previousServer.get().getServerInfo(); + if (event.getServer().getPlayersConnected().stream().filter(p -> p.equals(player)).findAny().isEmpty()) + EventListener.getInstance().clearServer(serverInfo.hashCode()); + } + +}