diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java index 0b88227a1..5c28fdc69 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommand.java @@ -74,7 +74,7 @@ public class RegisterAdminCommand implements ExecutableCommand { final Player player = bukkitService.getPlayerExact(playerName); if (player != null) { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> - player.kickPlayer(commonService.retrieveSingleMessage(MessageKey.KICK_FOR_ADMIN_REGISTER))); + player.kickPlayer(commonService.retrieveSingleMessage(MessageKey.KICK_FOR_ADMIN_REGISTER, player))); } }); } diff --git a/src/main/java/fr/xephi/authme/data/TempbanManager.java b/src/main/java/fr/xephi/authme/data/TempbanManager.java index a09212bde..288864376 100644 --- a/src/main/java/fr/xephi/authme/data/TempbanManager.java +++ b/src/main/java/fr/xephi/authme/data/TempbanManager.java @@ -97,7 +97,7 @@ public class TempbanManager implements SettingsDependent, HasCleanup { if (isEnabled) { final String name = player.getName(); final String ip = PlayerUtils.getPlayerIp(player); - final String reason = messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS); + final String reason = messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS, player); final Date expires = new Date(); long newTime = expires.getTime() + (length * MILLIS_PER_MINUTE); diff --git a/src/main/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManager.java b/src/main/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManager.java index 9b9373e61..2362b7736 100644 --- a/src/main/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManager.java +++ b/src/main/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManager.java @@ -51,7 +51,7 @@ class LimboPlayerTaskManager { int interval = settings.getProperty(RegistrationSettings.MESSAGE_INTERVAL); MessageResult messageResult = getMessageKey(player.getName(), isRegistered); if (interval > 0) { - String[] joinMessage = messages.retrieveSingle(messageResult.messageKey, messageResult.args).split("\n"); + String[] joinMessage = messages.retrieveSingle(messageResult.messageKey, player, messageResult.args).split("\n"); MessageTask messageTask = new MessageTask(player, joinMessage); bukkitService.runTaskTimer(messageTask, 2 * TICKS_PER_SECOND, interval * TICKS_PER_SECOND); limbo.setMessageTask(messageTask); @@ -67,7 +67,7 @@ class LimboPlayerTaskManager { void registerTimeoutTask(Player player, LimboPlayer limbo) { final int timeout = settings.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND; if (timeout > 0) { - String message = messages.retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR); + String message = messages.retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR, player); BukkitTask task = bukkitService.runTaskLater(new TimeoutTask(player, message, playerCache), timeout); limbo.setTimeoutTask(task); } diff --git a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java index ffd008059..c10b8fcc5 100644 --- a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java +++ b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java @@ -123,7 +123,7 @@ public class OnJoinVerifier implements Reloadable { return false; } else if (!permissionsManager.hasPermission(player, PlayerStatePermission.IS_VIP)) { // Server is full and player is NOT VIP; set kick message and proceed with kick - event.setKickMessage(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER)); + event.setKickMessage(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER, player)); return true; } @@ -135,12 +135,12 @@ public class OnJoinVerifier implements Reloadable { } Player nonVipPlayer = generateKickPlayer(onlinePlayers); if (nonVipPlayer != null) { - nonVipPlayer.kickPlayer(messages.retrieveSingle(MessageKey.KICK_FOR_VIP)); + nonVipPlayer.kickPlayer(messages.retrieveSingle(MessageKey.KICK_FOR_VIP, player)); event.allow(); return false; } else { ConsoleLogger.info("VIP player " + player.getName() + " tried to join, but the server was full"); - event.setKickMessage(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER)); + event.setKickMessage(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER, player)); return true; } } diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener.java b/src/main/java/fr/xephi/authme/listener/PlayerListener.java index b4709a564..4d906c58c 100644 --- a/src/main/java/fr/xephi/authme/listener/PlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/PlayerListener.java @@ -21,6 +21,8 @@ import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RestrictionSettings; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.Server; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -257,7 +259,7 @@ public class PlayerListener implements Listener { try { runOnJoinChecks(JoiningPlayer.fromName(name), event.getAddress().getHostAddress()); } catch (FailedVerificationException e) { - event.setKickMessage(m.retrieveSingle(e.getReason(), e.getArgs())); + event.setKickMessage(m.retrieveSingle(e.getReason(), name, e.getArgs())); event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); } } @@ -285,7 +287,7 @@ public class PlayerListener implements Listener { try { runOnJoinChecks(JoiningPlayer.fromPlayerObject(player), event.getAddress().getHostAddress()); } catch (FailedVerificationException e) { - event.setKickMessage(m.retrieveSingle(e.getReason(), e.getArgs())); + event.setKickMessage(m.retrieveSingle(e.getReason(), player, e.getArgs())); event.setResult(PlayerLoginEvent.Result.KICK_OTHER); } } diff --git a/src/main/java/fr/xephi/authme/message/Messages.java b/src/main/java/fr/xephi/authme/message/Messages.java index 7cc0ac285..3d9041111 100644 --- a/src/main/java/fr/xephi/authme/message/Messages.java +++ b/src/main/java/fr/xephi/authme/message/Messages.java @@ -18,7 +18,7 @@ public class Messages { // Custom Authme tag replaced to new line private static final String NEWLINE_TAG = "%nl%"; - private static final String PLAYER_TAG = "%username%"; + private static final String USERNAME_TAG = "%username%"; /** Contains the keys of the singular messages for time units. */ private static final Map TIME_UNIT_SINGULARS = ImmutableMap.builder() @@ -51,9 +51,9 @@ public class Messages { * @param key The key of the message to send */ public void send(CommandSender sender, MessageKey key) { - String[] lines = retrieve(key); + String[] lines = retrieve(key, sender); for (String line : lines) { - sender.sendMessage(line.replaceAll(PLAYER_TAG, sender.getName())); + sender.sendMessage(line); } } @@ -67,7 +67,7 @@ public class Messages { * @param replacements The replacements to apply for the tags */ public void send(CommandSender sender, MessageKey key, String... replacements) { - String message = retrieveSingle(key, replacements).replaceAll(PLAYER_TAG, sender.getName()); + String message = retrieveSingle(key, sender, replacements); for (String line : message.split("\n")) { sender.sendMessage(line); } @@ -77,10 +77,11 @@ public class Messages { * Retrieve the message from the text file and return it split by new line as an array. * * @param key The message key to retrieve + * @param sender The entity to send the message to * @return The message split by new lines */ - public String[] retrieve(MessageKey key) { - String message = retrieveMessage(key); + public String[] retrieve(MessageKey key, CommandSender sender) { + String message = retrieveMessage(key, sender); if (message.isEmpty()) { // Return empty array instead of array with 1 empty string as entry return new String[0]; @@ -101,18 +102,37 @@ public class Messages { ? TIME_UNIT_SINGULARS.get(duration.getTimeUnit()) : TIME_UNIT_PLURALS.get(duration.getTimeUnit()); - return value + " " + retrieveMessage(timeUnitKey); + return value + " " + retrieveMessage(timeUnitKey, ""); } /** * Retrieve the message from the text file. * * @param key The message key to retrieve + * @param sender The entity to send the message to * @return The message from the file */ - private String retrieveMessage(MessageKey key) { - return formatMessage( - messagesFileHandler.getMessage(key.getKey())); + private String retrieveMessage(MessageKey key, CommandSender sender) { + String message = messagesFileHandler.getMessage(key.getKey()); + + return ChatColor.translateAlternateColorCodes('&', message) + .replace(NEWLINE_TAG, "\n") + .replace(USERNAME_TAG, sender.getName()); + } + + /** + * Retrieve the message from the text file. + * + * @param key The message key to retrieve + * @param name The name of the entity to send the message to + * @return The message from the file + */ + private String retrieveMessage(MessageKey key, String name) { + String message = messagesFileHandler.getMessage(key.getKey()); + + return ChatColor.translateAlternateColorCodes('&', message) + .replace(NEWLINE_TAG, "\n") + .replace(USERNAME_TAG, name); } /** @@ -121,11 +141,12 @@ public class Messages { * the message key contains. * * @param key The key of the message to send + * @param sender The entity to send the message to * @param replacements The replacements to apply for the tags * @return The message from the file with replacements */ - public String retrieveSingle(MessageKey key, String... replacements) { - String message = retrieveMessage(key); + public String retrieveSingle(MessageKey key, CommandSender sender, String... replacements) { + String message = retrieveMessage(key, sender); String[] tags = key.getTags(); if (replacements.length == tags.length) { for (int i = 0; i < tags.length; ++i) { @@ -137,9 +158,26 @@ public class Messages { return message; } - private static String formatMessage(String message) { - return ChatColor.translateAlternateColorCodes('&', message) - .replace(NEWLINE_TAG, "\n"); + /** + * Retrieve the given message code with the given tag replacements. Note that this method + * logs an error if the number of supplied replacements doesn't correspond to the number of tags + * the message key contains. + * + * @param key The key of the message to send + * @param name The name of the entity to send the message to + * @param replacements The replacements to apply for the tags + * @return The message from the file with replacements + */ + public String retrieveSingle(MessageKey key, String name, String... replacements) { + String message = retrieveMessage(key, name); + String[] tags = key.getTags(); + if (replacements.length == tags.length) { + for (int i = 0; i < tags.length; ++i) { + message = message.replace(tags[i], replacements[i]); + } + } else { + ConsoleLogger.warning("Invalid number of replacements for message key '" + key + "'"); + } + return message; } - } 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 6cb16a674..da9e5127d 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -138,7 +138,7 @@ public class AsynchronousJoin implements AsynchronousProcess { private void handlePlayerWithUnmetNameRestriction(Player player, String ip) { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> { - player.kickPlayer(service.retrieveSingleMessage(MessageKey.NOT_OWNER_ERROR)); + player.kickPlayer(service.retrieveSingleMessage(MessageKey.NOT_OWNER_ERROR, player)); if (service.getProperty(RestrictionSettings.BAN_UNKNOWN_IP)) { server.banIP(ip); } @@ -188,7 +188,7 @@ public class AsynchronousJoin implements AsynchronousProcess { && countOnlinePlayersByIp(ip) > service.getProperty(RestrictionSettings.MAX_JOIN_PER_IP)) { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask( - () -> player.kickPlayer(service.retrieveSingleMessage(MessageKey.SAME_IP_ONLINE))); + () -> player.kickPlayer(service.retrieveSingleMessage(MessageKey.SAME_IP_ONLINE, player))); return false; } return true; diff --git a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java index c52202ef4..2731c59a1 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java @@ -197,7 +197,7 @@ public class AsynchronousLogin implements AsynchronousProcess { tempbanManager.tempbanPlayer(player); } else if (service.getProperty(RestrictionSettings.KICK_ON_WRONG_PASSWORD)) { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask( - () -> player.kickPlayer(service.retrieveSingleMessage(MessageKey.WRONG_PASSWORD))); + () -> player.kickPlayer(service.retrieveSingleMessage(MessageKey.WRONG_PASSWORD, player))); } else { service.send(player, MessageKey.WRONG_PASSWORD); diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java index 589c88aa2..f59bb28b1 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncPasswordRegister.java @@ -58,7 +58,7 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess { // Kick Player after Registration is enabled, kick the player if (service.getProperty(RegistrationSettings.FORCE_KICK_AFTER_REGISTER)) { - player.kickPlayer(service.retrieveSingleMessage(MessageKey.REGISTER_SUCCESS)); + player.kickPlayer(service.retrieveSingleMessage(MessageKey.REGISTER_SUCCESS, player)); return; } diff --git a/src/main/java/fr/xephi/authme/service/CommonService.java b/src/main/java/fr/xephi/authme/service/CommonService.java index 2422b1fa1..c95171b1c 100644 --- a/src/main/java/fr/xephi/authme/service/CommonService.java +++ b/src/main/java/fr/xephi/authme/service/CommonService.java @@ -66,8 +66,8 @@ public class CommonService { * @param key the key of the message * @return the message */ - public String retrieveSingleMessage(MessageKey key) { - return messages.retrieveSingle(key); + public String retrieveSingleMessage(MessageKey key, CommandSender sender) { + return messages.retrieveSingle(key, sender); } /** diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java index ce52ece6b..162de38ac 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/RegisterAdminCommandTest.java @@ -160,7 +160,7 @@ public class RegisterAdminCommandTest { Player player = mock(Player.class); given(bukkitService.getPlayerExact(user)).willReturn(player); String kickForAdminRegister = "Admin registered you -- log in again"; - given(commandService.retrieveSingleMessage(MessageKey.KICK_FOR_ADMIN_REGISTER)).willReturn(kickForAdminRegister); + given(commandService.retrieveSingleMessage(MessageKey.KICK_FOR_ADMIN_REGISTER, player)).willReturn(kickForAdminRegister); CommandSender sender = mock(CommandSender.class); setBukkitServiceToScheduleSyncTaskFromOptionallyAsyncTask(bukkitService); setBukkitServiceToRunTaskOptionallyAsync(bukkitService); diff --git a/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java b/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java index e5fb70429..5b1da8c7a 100644 --- a/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java +++ b/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java @@ -149,7 +149,7 @@ public class TempbanManagerTest { String ip = "123.45.67.89"; TestHelper.mockPlayerIp(player, ip); String banReason = "IP ban too many logins"; - given(messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS)).willReturn(banReason); + given(messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS, player)).willReturn(banReason); Settings settings = mockSettings(2, 100, ""); TempbanManager manager = new TempbanManager(bukkitService, messages, settings); setBukkitServiceToScheduleSyncDelayedTask(bukkitService); @@ -195,7 +195,7 @@ public class TempbanManagerTest { String ip = "22.44.66.88"; TestHelper.mockPlayerIp(player, ip); String banReason = "kick msg"; - given(messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS)).willReturn(banReason); + given(messages.retrieveSingle(MessageKey.TEMPBAN_MAX_LOGINS, player)).willReturn(banReason); Settings settings = mockSettings(10, 60, ""); TempbanManager manager = new TempbanManager(bukkitService, messages, settings); manager.increaseCount(ip, "user"); diff --git a/src/test/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManagerTest.java b/src/test/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManagerTest.java index 9a8d876ca..79fa4f4dc 100644 --- a/src/test/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManagerTest.java +++ b/src/test/java/fr/xephi/authme/data/limbo/LimboPlayerTaskManagerTest.java @@ -71,7 +71,7 @@ public class LimboPlayerTaskManagerTest { Player player = mock(Player.class); LimboPlayer limboPlayer = mock(LimboPlayer.class); MessageKey key = MessageKey.REGISTER_MESSAGE; - given(messages.retrieveSingle(key)).willReturn("Please register!"); + given(messages.retrieveSingle(key, player)).willReturn("Please register!"); int interval = 12; given(settings.getProperty(RegistrationSettings.MESSAGE_INTERVAL)).willReturn(interval); @@ -80,7 +80,7 @@ public class LimboPlayerTaskManagerTest { // then verify(limboPlayer).setMessageTask(any(MessageTask.class)); - verify(messages).retrieveSingle(key); + verify(messages).retrieveSingle(key, player); verify(bukkitService).runTaskTimer( any(MessageTask.class), eq(2L * TICKS_PER_SECOND), eq((long) interval * TICKS_PER_SECOND)); } @@ -110,7 +110,7 @@ public class LimboPlayerTaskManagerTest { MessageTask existingMessageTask = mock(MessageTask.class); limboPlayer.setMessageTask(existingMessageTask); given(settings.getProperty(RegistrationSettings.MESSAGE_INTERVAL)).willReturn(8); - given(messages.retrieveSingle(MessageKey.REGISTER_MESSAGE)).willReturn("Please register!"); + given(messages.retrieveSingle(MessageKey.REGISTER_MESSAGE, player)).willReturn("Please register!"); // when limboPlayerTaskManager.registerMessageTask(player, limboPlayer, false); @@ -119,7 +119,7 @@ public class LimboPlayerTaskManagerTest { assertThat(limboPlayer.getMessageTask(), not(nullValue())); assertThat(limboPlayer.getMessageTask(), not(sameInstance(existingMessageTask))); verify(registrationCaptchaManager).isCaptchaRequired(name); - verify(messages).retrieveSingle(MessageKey.REGISTER_MESSAGE); + verify(messages).retrieveSingle(MessageKey.REGISTER_MESSAGE, player); verify(existingMessageTask).cancel(); } @@ -134,14 +134,14 @@ public class LimboPlayerTaskManagerTest { given(registrationCaptchaManager.isCaptchaRequired(name)).willReturn(true); String captcha = "M032"; given(registrationCaptchaManager.getCaptchaCodeOrGenerateNew(name)).willReturn(captcha); - given(messages.retrieveSingle(MessageKey.CAPTCHA_FOR_REGISTRATION_REQUIRED, captcha)).willReturn("Need to use captcha"); + given(messages.retrieveSingle(MessageKey.CAPTCHA_FOR_REGISTRATION_REQUIRED, player, captcha)).willReturn("Need to use captcha"); // when limboPlayerTaskManager.registerMessageTask(player, limboPlayer, false); // then assertThat(limboPlayer.getMessageTask(), not(nullValue())); - verify(messages).retrieveSingle(MessageKey.CAPTCHA_FOR_REGISTRATION_REQUIRED, captcha); + verify(messages).retrieveSingle(MessageKey.CAPTCHA_FOR_REGISTRATION_REQUIRED, player, captcha); } @Test @@ -159,7 +159,7 @@ public class LimboPlayerTaskManagerTest { // then verify(limboPlayer).setTimeoutTask(bukkitTask); verify(bukkitService).runTaskLater(any(TimeoutTask.class), eq(600L)); // 30 * TICKS_PER_SECOND - verify(messages).retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR); + verify(messages).retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR, player); } @Test @@ -194,7 +194,7 @@ public class LimboPlayerTaskManagerTest { verify(existingTask).cancel(); assertThat(limboPlayer.getTimeoutTask(), equalTo(bukkitTask)); verify(bukkitService).runTaskLater(any(TimeoutTask.class), eq(360L)); // 18 * TICKS_PER_SECOND - verify(messages).retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR); + verify(messages).retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR, player); } } diff --git a/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java b/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java index 7ea3085a6..7d8c95176 100644 --- a/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java +++ b/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java @@ -101,7 +101,7 @@ public class OnJoinVerifierTest { event.setResult(PlayerLoginEvent.Result.KICK_FULL); given(permissionsManager.hasPermission(player, PlayerStatePermission.IS_VIP)).willReturn(false); String serverFullMessage = "server is full"; - given(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER)).willReturn(serverFullMessage); + given(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER, player)).willReturn(serverFullMessage); // when boolean result = onJoinVerifier.refusePlayerForFullServer(event); @@ -125,7 +125,7 @@ public class OnJoinVerifierTest { given(permissionsManager.hasPermission(onlinePlayers.get(1), PlayerStatePermission.IS_VIP)).willReturn(false); returnOnlineListFromBukkitServer(onlinePlayers); given(server.getMaxPlayers()).willReturn(onlinePlayers.size()); - given(messages.retrieveSingle(MessageKey.KICK_FOR_VIP)).willReturn("kick for vip"); + given(messages.retrieveSingle(MessageKey.KICK_FOR_VIP, player)).willReturn("kick for vip"); // when boolean result = onJoinVerifier.refusePlayerForFullServer(event); @@ -149,7 +149,7 @@ public class OnJoinVerifierTest { given(permissionsManager.hasPermission(onlinePlayers.get(0), PlayerStatePermission.IS_VIP)).willReturn(true); returnOnlineListFromBukkitServer(onlinePlayers); given(server.getMaxPlayers()).willReturn(onlinePlayers.size()); - given(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER)).willReturn("kick full server"); + given(messages.retrieveSingle(MessageKey.KICK_FULL_SERVER, player)).willReturn("kick full server"); // when boolean result = onJoinVerifier.refusePlayerForFullServer(event); diff --git a/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java b/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java index d4204315c..9fd750ff7 100644 --- a/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java +++ b/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java @@ -596,7 +596,7 @@ public class PlayerListenerTest { MessageKey.INVALID_NAME_CHARACTERS, "[a-z]"); doThrow(exception).when(onJoinVerifier).checkIsValidName(name); String message = "Invalid characters!"; - given(messages.retrieveSingle(exception.getReason(), exception.getArgs())).willReturn(message); + given(messages.retrieveSingle(exception.getReason(), player, exception.getArgs())).willReturn(message); // when listener.onPlayerLogin(event); diff --git a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java index 30af10773..69bbfe5d2 100644 --- a/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/message/MessagesIntegrationTest.java @@ -81,9 +81,11 @@ public class MessagesIntegrationTest { public void shouldLoadMessageAndSplitAtNewLines() { // given MessageKey key = MessageKey.UNKNOWN_USER; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - String[] message = messages.retrieve(key); + String[] message = messages.retrieve(key, sender); // then String[] lines = new String[]{"We've got", "new lines", "and ' apostrophes"}; @@ -94,9 +96,11 @@ public class MessagesIntegrationTest { public void shouldLoadMessageAsStringWithNewLines() { // given MessageKey key = MessageKey.UNKNOWN_USER; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - String message = messages.retrieveSingle(key); + String message = messages.retrieveSingle(key, sender); // then assertThat(message, equalTo("We've got\nnew lines\nand ' apostrophes")); @@ -106,9 +110,11 @@ public class MessagesIntegrationTest { public void shouldFormatColorCodes() { // given MessageKey key = MessageKey.LOGIN_SUCCESS; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - String[] message = messages.retrieve(key); + String[] message = messages.retrieve(key, sender); // then assertThat(message, arrayWithSize(1)); @@ -120,6 +126,7 @@ public class MessagesIntegrationTest { // given MessageKey key = MessageKey.EMAIL_ALREADY_USED_ERROR; CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when messages.send(sender, key); @@ -133,6 +140,7 @@ public class MessagesIntegrationTest { // given MessageKey key = MessageKey.LOGIN_SUCCESS; Player player = Mockito.mock(Player.class); + given(player.getName()).willReturn("Tester"); // when messages.send(player, key); @@ -146,6 +154,7 @@ public class MessagesIntegrationTest { // given MessageKey key = MessageKey.UNKNOWN_USER; Player player = Mockito.mock(Player.class); + given(player.getName()).willReturn("Tester"); // when messages.send(player, key); @@ -157,11 +166,26 @@ public class MessagesIntegrationTest { assertThat(captor.getAllValues(), contains(lines)); } + @Test + public void shouldSendMessageToPlayerWithNameReplacement() { + // given + MessageKey key = MessageKey.REGISTER_MESSAGE; + Player player = Mockito.mock(Player.class); + given(player.getName()).willReturn("Tester"); + + // when + messages.send(player, key); + + // then + verify(player).sendMessage("§3Please Tester, register to the server with the command: /register "); + } + @Test public void shouldSendMessageToPlayerWithTagReplacement() { // given MessageKey key = MessageKey.CAPTCHA_WRONG_ERROR; CommandSender sender = Mockito.mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when messages.send(sender, key, "1234"); @@ -175,6 +199,7 @@ public class MessagesIntegrationTest { // given MessageKey key = MessageKey.CAPTCHA_WRONG_ERROR; CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when messages.send(sender, key); @@ -189,9 +214,11 @@ public class MessagesIntegrationTest { Logger logger = mock(Logger.class); ConsoleLogger.setLogger(logger); MessageKey key = MessageKey.CAPTCHA_WRONG_ERROR; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - messages.send(mock(CommandSender.class), key, "rep", "rep2"); + messages.send(sender, key, "rep", "rep2"); // then verify(logger).warning(argThat(containsString("Invalid number of replacements"))); @@ -203,9 +230,11 @@ public class MessagesIntegrationTest { Logger logger = mock(Logger.class); ConsoleLogger.setLogger(logger); MessageKey key = MessageKey.UNKNOWN_USER; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - messages.send(mock(CommandSender.class), key, "Replacement"); + messages.send(sender, key, "Replacement"); // then verify(logger).warning(argThat(containsString("Invalid number of replacements"))); @@ -216,9 +245,11 @@ public class MessagesIntegrationTest { // given // Key is present in both files MessageKey key = MessageKey.WRONG_PASSWORD; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - String message = messages.retrieveSingle(key); + String message = messages.retrieveSingle(key, sender); // then assertThat(message, equalTo("§cWrong password!")); @@ -228,9 +259,11 @@ public class MessagesIntegrationTest { public void shouldRetrieveMessageWithReplacements() { // given MessageKey key = MessageKey.CAPTCHA_WRONG_ERROR; + CommandSender sender = mock(CommandSender.class); + given(sender.getName()).willReturn("Tester"); // when - String result = messages.retrieveSingle(key, "24680"); + String result = messages.retrieveSingle(key, sender.getName(), "24680"); // then assertThat(result, equalTo("Use /captcha 24680 to solve the captcha")); diff --git a/src/test/java/fr/xephi/authme/service/CommonServiceTest.java b/src/test/java/fr/xephi/authme/service/CommonServiceTest.java index 87cba2005..e4ff2817b 100644 --- a/src/test/java/fr/xephi/authme/service/CommonServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/CommonServiceTest.java @@ -83,15 +83,16 @@ public class CommonServiceTest { public void shouldRetrieveSingleMessage() { // given MessageKey key = MessageKey.ACCOUNT_NOT_ACTIVATED; + Player player = mock(Player.class); String text = "Test text"; - given(messages.retrieveSingle(key)).willReturn(text); + given(messages.retrieveSingle(key, player)).willReturn(text); // when - String result = commonService.retrieveSingleMessage(key); + String result = commonService.retrieveSingleMessage(key, player); // then assertThat(result, equalTo(text)); - verify(messages).retrieveSingle(key); + verify(messages).retrieveSingle(key, player); } @Test diff --git a/src/test/resources/fr/xephi/authme/message/messages_test.yml b/src/test/resources/fr/xephi/authme/message/messages_test.yml index b7670dc2d..86b38986e 100644 --- a/src/test/resources/fr/xephi/authme/message/messages_test.yml +++ b/src/test/resources/fr/xephi/authme/message/messages_test.yml @@ -2,6 +2,8 @@ error: unregistered_user: 'We''ve got%nl%new lines%nl%and '' apostrophes' +registration: + register_request: '&3Please %username%, register to the server with the command: /register ' login: success: '&cHere we have&bdefined some colors &dand some other <hings' wrong_password: '&cWrong password!'