From cff8ccd76aabbbd2e640057129e6accff6cd1e4b Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Fri, 19 May 2017 19:21:05 +0200 Subject: [PATCH] Implement onSessionLogin trigger for commands.yml (#1198) * Implement onSessionLogin trigger for commands.yml Needs test methods, @ljacqu any advice? * Add simple onSessionLogin test --- .../authme/process/join/AsynchronousJoin.java | 2 ++ .../settings/commandconfig/CommandConfig.java | 9 +++++++++ .../settings/commandconfig/CommandManager.java | 12 ++++++++++++ .../commandconfig/CommandSettingsHolder.java | 2 +- src/main/resources/commands.yml | 5 +++-- .../commandconfig/CommandManagerTest.java | 15 +++++++++++++++ .../settings/commandconfig/commands.complete.yml | 4 ++++ 7 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index 8e190d81..d5dbeaca 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -123,6 +123,8 @@ public class AsynchronousJoin implements AsynchronousProcess { // Session logic if (canResumeSession(player)) { service.send(player, MessageKey.SESSION_RECONNECTION); + // Run commands + bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> commandManager.runCommandsOnSessionLogin(player)); bukkitService.runTaskOptionallyAsync(() -> asynchronousLogin.forceLogin(player)); return; } diff --git a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandConfig.java b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandConfig.java index 4bf83691..24f9d82a 100644 --- a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandConfig.java +++ b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandConfig.java @@ -12,6 +12,7 @@ public class CommandConfig { private Map onJoin = new LinkedHashMap<>(); private Map onLogin = new LinkedHashMap<>(); + private Map onSessionLogin = new LinkedHashMap<>(); private Map onRegister = new LinkedHashMap<>(); private Map onUnregister = new LinkedHashMap<>(); @@ -31,6 +32,14 @@ public class CommandConfig { this.onLogin = onLogin; } + public Map getOnSessionLogin() { + return onSessionLogin; + } + + public void setOnSessionLogin(Map onSessionLogin) { + this.onSessionLogin = onSessionLogin; + } + public Map getOnRegister() { return onRegister; } diff --git a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandManager.java b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandManager.java index abebd9b7..b105cda7 100644 --- a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandManager.java +++ b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandManager.java @@ -33,6 +33,7 @@ public class CommandManager implements Reloadable { private WrappedTagReplacer onJoinCommands; private WrappedTagReplacer onLoginCommands; + private WrappedTagReplacer onSessionLoginCommands; private WrappedTagReplacer onRegisterCommands; private WrappedTagReplacer onUnregisterCommands; @@ -73,6 +74,16 @@ public class CommandManager implements Reloadable { executeCommands(player, onLoginCommands.getAdaptedItems(player)); } + + /** + * Runs the configured commands for when a player has logged in successfully due to session. + * + * @param player the player that logged in + */ + public void runCommandsOnSessionLogin(Player player) { + executeCommands(player, onSessionLoginCommands.getAdaptedItems(player)); + } + /** * Runs the configured commands for when a player has been unregistered. * @@ -103,6 +114,7 @@ public class CommandManager implements Reloadable { CommandConfig commandConfig = settingsManager.getProperty(CommandSettingsHolder.COMMANDS); onJoinCommands = newReplacer(commandConfig.getOnJoin()); onLoginCommands = newReplacer(commandConfig.getOnLogin()); + onSessionLoginCommands = newReplacer(commandConfig.getOnSessionLogin()); onRegisterCommands = newReplacer(commandConfig.getOnRegister()); onUnregisterCommands = newReplacer(commandConfig.getOnUnregister()); } diff --git a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandSettingsHolder.java b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandSettingsHolder.java index 9024ca9a..3e18cc0b 100644 --- a/src/main/java/fr/xephi/authme/settings/commandconfig/CommandSettingsHolder.java +++ b/src/main/java/fr/xephi/authme/settings/commandconfig/CommandSettingsHolder.java @@ -48,7 +48,7 @@ public final class CommandSettingsHolder implements SettingsHolder { " command: 'broadcast %p has joined, welcome back!'", " executor: CONSOLE", "", - "Supported command events: onLogin, onJoin, onRegister, onUnregister" + "Supported command events: onLogin, onSessionLogin, onJoin, onRegister, onUnregister" }; Map commentMap = new HashMap<>(); commentMap.put("", comments); diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 80fbd103..2d359fdb 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -24,9 +24,10 @@ # command: 'broadcast %p has joined, welcome back!' # executor: CONSOLE # -# Supported command events: onLogin, onJoin, onRegister, onUnregister +# Supported command events: onLogin, onSessionLogin, onJoin, onRegister, onUnregister onJoin: {} onLogin: {} +onSessionLogin: {} onRegister: {} # Commands to run whenever a player is unregistered (by himself, or by an admin) -onUnregister: {} \ No newline at end of file +onUnregister: {} diff --git a/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java b/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java index 3ec3b447..f43f252d 100644 --- a/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java +++ b/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java @@ -92,6 +92,21 @@ public class CommandManagerTest { verifyZeroInteractions(geoIpService); } + @Test + public void shouldExecuteCommandsOnSessionLogin() { + // given + copyJarFileAsCommandsYml(TEST_FILES_FOLDER + "commands.complete.yml"); + initManager(); + + // when + manager.runCommandsOnSessionLogin(player); + + // then + verify(bukkitService).dispatchConsoleCommand("msg Bobby Session login!"); + verifyNoMoreInteractions(bukkitService); + verifyZeroInteractions(geoIpService); + } + @Test public void shouldExecuteCommandsOnJoin() { // given diff --git a/src/test/resources/fr/xephi/authme/settings/commandconfig/commands.complete.yml b/src/test/resources/fr/xephi/authme/settings/commandconfig/commands.complete.yml index 757f09ca..83b717cf 100644 --- a/src/test/resources/fr/xephi/authme/settings/commandconfig/commands.complete.yml +++ b/src/test/resources/fr/xephi/authme/settings/commandconfig/commands.complete.yml @@ -21,3 +21,7 @@ onLogin: display_list: command: 'list' executor: PLAYER +onSessionLogin: + welcome: + command: 'msg %p Session login!' + executor: CONSOLE