From 315f6b043bb86980d8a4ec200ebf1ce59a07fc9e Mon Sep 17 00:00:00 2001 From: Adrian3d04 Date: Sat, 6 Aug 2022 03:30:48 +0000 Subject: [PATCH] feat(paper): Implement Paper Debug feat(velocity): improved PluginMessageListener --- build.gradle.kts | 4 +- common/build.gradle.kts | 1 + .../authmevelocity/common/MessageType.java | 4 ++ .../common/configuration/Loader.java | 3 +- .../configuration/PaperConfiguration.java | 12 ++++- .../configuration/ProxyConfiguration.java | 6 +++ gradle.properties | 6 +-- .../paper/AuthMeVelocityPlugin.java | 30 ++++++++++- .../paper/listeners/AuthMeListener.java | 14 +++-- .../paper/listeners/MessageListener.java | 19 +++++-- .../listener/PluginMessageListener.java | 53 ++++++++++--------- 11 files changed, 111 insertions(+), 41 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a20e596..8e8365c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,4 +41,6 @@ tasks { options.release.set(17) } -} \ No newline at end of file +} + +java.toolchain.languageVersion.set(JavaLanguageVersion.of(17)) \ No newline at end of file diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 2b07cc9..08b142e 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { compileOnly("org.spongepowered:configurate-hocon:4.1.2") compileOnly("org.slf4j:slf4j-api:1.7.36") compileOnly("net.byteflux:libby-core:1.1.5") + compileOnly("net.kyori:adventure-api:4.11.0") } tasks { diff --git a/common/src/main/java/me/adrianed/authmevelocity/common/MessageType.java b/common/src/main/java/me/adrianed/authmevelocity/common/MessageType.java index ffcec61..a37b41f 100644 --- a/common/src/main/java/me/adrianed/authmevelocity/common/MessageType.java +++ b/common/src/main/java/me/adrianed/authmevelocity/common/MessageType.java @@ -1,5 +1,9 @@ package me.adrianed.authmevelocity.common; +import net.kyori.adventure.util.Index; + public enum MessageType { LOGIN, REGISTER, LOGOUT, FORCE_UNREGISTER, UNREGISTER; + + public static final Index INDEX = Index.create((value) -> value.toString(), MessageType.values()); } diff --git a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/Loader.java b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/Loader.java index a9ca594..ebfc68f 100644 --- a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/Loader.java +++ b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/Loader.java @@ -11,7 +11,8 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable; import org.spongepowered.configurate.objectmapping.meta.Comment; -public class Loader { +public final class Loader { + private Loader() {} public static ConfigurationContainer loadMainConfig(final Path path, Class clazz, Logger logger){ final HoconConfigurationLoader loader = HoconConfigurationLoader.builder() .defaultOptions(opts -> opts diff --git a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/PaperConfiguration.java b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/PaperConfiguration.java index 9f376cd..ca1f937 100644 --- a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/PaperConfiguration.java +++ b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/PaperConfiguration.java @@ -1,5 +1,13 @@ package me.adrianed.authmevelocity.common.configuration; -public interface PaperConfiguration { - boolean debug(); +import org.spongepowered.configurate.objectmapping.ConfigSerializable; +import org.spongepowered.configurate.objectmapping.meta.Comment; + +@ConfigSerializable +public class PaperConfiguration { + @Comment("Enable Debug Mode") + private boolean debug = false; + public boolean debug() { + return this.debug; + } } diff --git a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/ProxyConfiguration.java b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/ProxyConfiguration.java index 05f373e..fdba18d 100644 --- a/common/src/main/java/me/adrianed/authmevelocity/common/configuration/ProxyConfiguration.java +++ b/common/src/main/java/me/adrianed/authmevelocity/common/configuration/ProxyConfiguration.java @@ -7,6 +7,12 @@ import java.util.List; @ConfigSerializable public class ProxyConfiguration { + @Comment("Enable debug mode") + private boolean debug = false; + public boolean debug() { + return this.debug; + } + @Comment("List of login/registration servers") private List authServers = List.of("auth1", "auth2"); public List authServers() { diff --git a/gradle.properties b/gradle.properties index 8b4950a..9c70bbe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group = me.adrianed.authmevelocity version = 3.0.0-SNAPSHOT -description = A global chat regulator for you Velocity network -url = https://forums.velocitypowered.com/t/chatregulator-a-global-chat-regulator-for-velocity/962 -id = chatregulator +description = AuthMe Bridge with Velocity Proxy +url = https://github.com/4drian3d/AuthMeVelocity +id = authmevelocity caffeine-version = 3.1.1 configurate-version = 4.1.2 diff --git a/paper/src/main/java/me/adrianed/authmevelocity/paper/AuthMeVelocityPlugin.java b/paper/src/main/java/me/adrianed/authmevelocity/paper/AuthMeVelocityPlugin.java index b52df81..dc6ee22 100644 --- a/paper/src/main/java/me/adrianed/authmevelocity/paper/AuthMeVelocityPlugin.java +++ b/paper/src/main/java/me/adrianed/authmevelocity/paper/AuthMeVelocityPlugin.java @@ -2,7 +2,11 @@ package me.adrianed.authmevelocity.paper; import me.adrianed.authmevelocity.paper.listeners.AuthMeListener; import me.adrianed.authmevelocity.paper.listeners.MessageListener; +import me.adrianed.authmevelocity.common.configuration.ConfigurationContainer; +import me.adrianed.authmevelocity.common.configuration.Loader; +import me.adrianed.authmevelocity.common.configuration.PaperConfiguration; import me.adrianed.authmevelocity.common.MessageType; +import me.adrianed.authmevelocity.common.LibsManager; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; @@ -11,13 +15,23 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; -public class AuthMeVelocityPlugin extends JavaPlugin { +import net.byteflux.libby.BukkitLibraryManager; + +public final class AuthMeVelocityPlugin extends JavaPlugin { private static final String CHANNEL = "authmevelocity:main"; + private ConfigurationContainer config; + @Override public void onEnable() { + final LibsManager libraries + = new LibsManager(new BukkitLibraryManager(this)); + libraries.loadLibraries(); + + this.config = Loader.loadMainConfig(getDataFolder().toPath(), PaperConfiguration.class, getSLF4JLogger()); + this.getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL); - this.getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL, new MessageListener()); + this.getServer().getMessenger().registerIncomingPluginChannel(this, CHANNEL, new MessageListener(this)); this.getServer().getPluginManager().registerEvents(new AuthMeListener(this), this); if (this.getServer().getPluginManager().isPluginEnabled("MiniPlaceholders")) { @@ -41,9 +55,21 @@ public class AuthMeVelocityPlugin extends JavaPlugin { out.writeUTF(playername); if (player == null) { + logDebug("MessageToProxy | Null Player, Player Name: "+playername); Bukkit.getServer().sendPluginMessage(this, CHANNEL, out.toByteArray()); } else { + logDebug("MessageToProxy | Player Present: "+player.getName()+", Player Name: "+playername); player.sendPluginMessage(this, CHANNEL, out.toByteArray()); } } + + public ConfigurationContainer config() { + return this.config; + } + + public void logDebug(String debug) { + if (config.get().debug()) { + getSLF4JLogger().info("[DEBUG] "+debug); + } + } } diff --git a/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/AuthMeListener.java b/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/AuthMeListener.java index 1453ef5..5539261 100644 --- a/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/AuthMeListener.java +++ b/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/AuthMeListener.java @@ -25,29 +25,35 @@ public final class AuthMeListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onLogin(LoginEvent event) { final Player player = event.getPlayer(); + plugin.logDebug("LoginEvent | Start"); if (new PreSendLoginEvent(player).callEvent()) { plugin.sendMessageToProxy(player, MessageType.LOGIN, player.getName()); + plugin.getSLF4JLogger().info("LoginEvent | PreSendLoginEvent allowed"); } } @EventHandler - public void onRegister(RegisterEvent event){ + public void onRegister(RegisterEvent event) { + plugin.logDebug("RegisterEvent | Executed"); plugin.sendMessageToProxy(event.getPlayer(), MessageType.REGISTER, event.getPlayer().getName()); } @EventHandler - public void onLogout(LogoutEvent event){ + public void onLogout(LogoutEvent event) { + plugin.logDebug("LogoutEvent | Executed"); plugin.sendMessageToProxy(event.getPlayer(), MessageType.LOGOUT, event.getPlayer().getName()); } @EventHandler - public void onUnRegister(UnregisterByPlayerEvent event){ + public void onUnRegister(UnregisterByPlayerEvent event) { + plugin.logDebug("UnregisterByPlayerEvent | Executed"); plugin.sendMessageToProxy(event.getPlayer(), MessageType.UNREGISTER, event.getPlayer().getName()); } @EventHandler - public void onAdminUnRegister(UnregisterByAdminEvent event){ + public void onAdminUnRegister(UnregisterByAdminEvent event) { + plugin.logDebug("UnregisterByAdminEvent | Executed"); plugin.sendMessageToProxy(event.getPlayer(), MessageType.FORCE_UNREGISTER, event.getPlayerName()); } } diff --git a/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/MessageListener.java b/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/MessageListener.java index f713562..3ba00ad 100644 --- a/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/MessageListener.java +++ b/paper/src/main/java/me/adrianed/authmevelocity/paper/listeners/MessageListener.java @@ -7,21 +7,34 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; import org.jetbrains.annotations.NotNull; +import me.adrianed.authmevelocity.paper.AuthMeVelocityPlugin; + import fr.xephi.authme.api.v3.AuthMeApi; public class MessageListener implements PluginMessageListener { + private final AuthMeVelocityPlugin plugin; + + public MessageListener(AuthMeVelocityPlugin plugin) { + this.plugin = plugin; + } @Override public void onPluginMessageReceived(@NotNull String identifier, @NotNull Player player, @NotNull byte[] bytes) { if (!identifier.equals("authmevelocity")) { + plugin.logDebug("PluginMessage | Not AuthMeVelocity identifier"); return; } - ByteArrayDataInput input = ByteStreams.newDataInput(bytes); - String subchannel = input.readUTF(); + plugin.logDebug("PluginMessage | AuthMeVelocity identifier"); + + final ByteArrayDataInput input = ByteStreams.newDataInput(bytes); + final String subchannel = input.readUTF(); + if ("main".equals(subchannel)) { - String msg = input.readUTF(); + plugin.logDebug("PluginMessage | Main Subchannel"); + final String msg = input.readUTF(); if ("LOGIN".equals(msg)) { + plugin.logDebug("PluginMessage | Login Message"); AuthMeApi.getInstance().forceLogin(player); } } diff --git a/velocity/src/main/java/me/adrianed/authmevelocity/velocity/listener/PluginMessageListener.java b/velocity/src/main/java/me/adrianed/authmevelocity/velocity/listener/PluginMessageListener.java index ea137c0..90e09ff 100644 --- a/velocity/src/main/java/me/adrianed/authmevelocity/velocity/listener/PluginMessageListener.java +++ b/velocity/src/main/java/me/adrianed/authmevelocity/velocity/listener/PluginMessageListener.java @@ -2,6 +2,7 @@ package me.adrianed.authmevelocity.velocity.listener; import java.util.List; import java.util.Random; +import java.util.Locale; import me.adrianed.authmevelocity.api.velocity.event.PreSendOnLoginEvent; import me.adrianed.authmevelocity.api.velocity.event.ProxyForcedUnregisterEvent; @@ -9,6 +10,7 @@ import me.adrianed.authmevelocity.api.velocity.event.ProxyLoginEvent; import me.adrianed.authmevelocity.api.velocity.event.ProxyLogoutEvent; import me.adrianed.authmevelocity.api.velocity.event.ProxyRegisterEvent; import me.adrianed.authmevelocity.api.velocity.event.ProxyUnregisterEvent; +import me.adrianed.authmevelocity.common.MessageType; import com.google.common.io.ByteArrayDataInput; import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Subscribe; @@ -53,33 +55,34 @@ public class PluginMessageListener { event.setResult(PluginMessageEvent.ForwardResult.handled()); final ByteArrayDataInput input = event.dataAsDataStream(); - final String sChannel = input.readUTF(); - final String playername = input.readUTF(); - final @Nullable Player loggedPlayer = proxy.getPlayer(playername).orElse(null); - switch (sChannel) { - case "LOGIN" : - if (loggedPlayer != null && plugin.addPlayer(loggedPlayer)){ - proxy.getEventManager().fireAndForget(new ProxyLoginEvent(loggedPlayer)); - this.createServerConnectionRequest(loggedPlayer, connection); + final String message = input.readUTF(); + final MessageType type = MessageType.INDEX.value( + message.toUpperCase(Locale.ROOT)); + final String name = input.readUTF(); + final @Nullable Player player = proxy.getPlayer(name).orElse(null); + + switch (type) { + case LOGIN -> { + if (player != null && plugin.addPlayer(player)){ + proxy.getEventManager().fireAndForget(new ProxyLoginEvent(player)); + this.createServerConnectionRequest(player, connection); } - break; - case "LOGOUT": - if (loggedPlayer != null && plugin.removePlayer(loggedPlayer)){ - proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(loggedPlayer)); + } + case LOGOUT -> { + if (player != null && plugin.removePlayer(player)){ + proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(player)); } - break; - case "REGISTER": - if (loggedPlayer != null) - proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(loggedPlayer)); - break; - case "UNREGISTER": - if(loggedPlayer != null) - proxy.getEventManager().fireAndForget(new ProxyUnregisterEvent(loggedPlayer)); - break; - case "FORCE_UNREGISTER": - proxy.getEventManager().fireAndForget(new ProxyForcedUnregisterEvent(loggedPlayer)); - break; - default: break; + } + case REGISTER -> { + if (player != null) + proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(player)); + } + case UNREGISTER -> { + if(player != null) + proxy.getEventManager().fireAndForget(new ProxyUnregisterEvent(player)); + } + case FORCE_UNREGISTER -> + proxy.getEventManager().fireAndForget(new ProxyForcedUnregisterEvent(player)); } continuation.resume(); }