From 1ced5d8ffc07edc2696fdb16e9c8723a8ba16687 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Sat, 18 May 2019 10:40:06 -0700 Subject: [PATCH] Confirmation messages for admin commands are now moved into the convenience methods in NotificationManager --- Changelog.txt | 3 +- .../gmail/nossr50/commands/XprateCommand.java | 2 - .../nossr50/commands/skills/SkillCommand.java | 13 +------ .../util/player/NotificationManager.java | 38 ++++++++++++++++--- .../resources/locale/locale_en_US.properties | 5 ++- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index d90b4566c..b1b9e602b 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -7,7 +7,8 @@ Version 2.1.62 Diamond tools & armor in the repair config now have a minimum level of 0 (Update your config, temporary hotfix, 2.2 addresses this issue, see notes) Guardian default combat XP multiplier reduced from 3.0 to 1.0 (update config if you want this change) New locale string - 'Server.ConsoleName' the name of the server console, this will be used in place of player names when sending admin notifications out if the command was used from console - New locale string - 'Notifications.Admin.Format' style formatting + prefix for admin notifications used in the other new strings below + New locale string - 'Notifications.Admin.Format.Others' style formatting + prefix for admin notifications used in the other new strings below + New locale string - 'Notifications.Admin.Format.Self' style formatting + prefix for admin command confirmations send to the user who executed the command New locale string - 'Notifications.Admin.XPRate.Start.Self' sent to the user who modifies the XP rate regardless of whether or not messages for the event are enabled New locale string - 'Notifications.Admin.XPRate.Start.Others' details of who started an XP rate event are sent to players who have Operator status or admin chat permission when the command to start or modify XP of an event has been issued New locale string - 'Notifications.Admin.XPRate.End.Self' sent to the user who ended the XP rate event regardless of whether or not messages for the event are enabled diff --git a/src/main/java/com/gmail/nossr50/commands/XprateCommand.java b/src/main/java/com/gmail/nossr50/commands/XprateCommand.java index b4de0bbe0..d7471e47c 100644 --- a/src/main/java/com/gmail/nossr50/commands/XprateCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/XprateCommand.java @@ -54,7 +54,6 @@ public class XprateCommand implements TabExecutor { } NotificationManager.processSensitiveCommandNotification(sender, SensitiveCommandType.XPRATE_END); - sender.sendMessage(LocaleLoader.getString("Notifications.Admin.XPRate.End.Self")); mcMMO.p.toggleXpEventEnabled(); } @@ -108,7 +107,6 @@ public class XprateCommand implements TabExecutor { //Admin notification NotificationManager.processSensitiveCommandNotification(sender, SensitiveCommandType.XPRATE_MODIFY, String.valueOf(newXpRate)); - sender.sendMessage(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", newXpRate)); return true; diff --git a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java index 7d6765e06..2fbea687a 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/SkillCommand.java @@ -11,6 +11,7 @@ import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.TextComponentFactory; import com.gmail.nossr50.util.commands.CommandUtils; +import com.gmail.nossr50.util.player.NotificationManager; import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.random.RandomChanceUtil; import com.gmail.nossr50.util.scoreboards.ScoreboardManager; @@ -268,21 +269,11 @@ public abstract class SkillCommand implements TabExecutor { return LocaleLoader.getString(templateKey, LocaleLoader.getString(statDescriptionKey, vars)); else { - String[] mergedList = addItemToFirstPositionOfArray(LocaleLoader.getString(statDescriptionKey), vars); + String[] mergedList = NotificationManager.addItemToFirstPositionOfArray(LocaleLoader.getString(statDescriptionKey), vars); return LocaleLoader.getString(templateKey, mergedList); } } - - public static String[] addItemToFirstPositionOfArray(String itemToAdd, String... existingArray) { - String[] newArray = new String[existingArray.length + 1]; - newArray[0] = itemToAdd; - - System.arraycopy(existingArray, 0, newArray, 1, existingArray.length); - - return newArray; - } - protected abstract void dataCalculations(Player player, float skillValue); protected abstract void permissionsCheck(Player player); diff --git a/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java b/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java index 6f97b6e74..546fb88e9 100644 --- a/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java +++ b/src/main/java/com/gmail/nossr50/util/player/NotificationManager.java @@ -164,19 +164,28 @@ public class NotificationManager { /** * Sends a message to all admins with the admin notification formatting from the locale * Admins are currently players with either Operator status or Admin Chat permission - * @param msg message contents + * @param msg message fetched from locale */ private static void sendAdminNotification(String msg) { for(Player player : Bukkit.getServer().getOnlinePlayers()) { if(player.isOp() || Permissions.adminChat(player)) { - player.sendMessage(LocaleLoader.getString("Notifications.Admin", msg)); + player.sendMessage(LocaleLoader.getString("Notifications.Admin.Format.Others", msg)); } } //Copy it out to Console too - mcMMO.p.getLogger().info(LocaleLoader.getString("Notifications.Admin", msg)); + mcMMO.p.getLogger().info(LocaleLoader.getString("Notifications.Admin.Format.Others", msg)); + } + + /** + * Sends a confirmation message to the CommandSender who just executed an admin command + * @param commandSender target command sender + * @param msg message fetched from locale + */ + private static void sendAdminCommandConfirmation(CommandSender commandSender, String msg) { + commandSender.sendMessage(LocaleLoader.getString("Notifications.Admin.Format.Self", msg)); } /** @@ -203,11 +212,30 @@ public class NotificationManager { switch(sensitiveCommandType) { case XPRATE_MODIFY: - sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others", senderName, args)); + sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others", addItemToFirstPositionOfArray(senderName, args))); + sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", args)); break; case XPRATE_END: - sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.End.Others", senderName, args)); + sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.End.Others", addItemToFirstPositionOfArray(senderName, args))); + sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.End.Self", args)); break; } } + + /** + * Takes an array and an object, makes a new array with object in the first position of the new array, + * and the following elements in this new array being a copy of the existing array retaining their order + * @param itemToAdd the string to put at the beginning of the new array + * @param existingArray the existing array to be copied to the new array at position [0]+1 relative to their original index + * @return the new array combining itemToAdd at the start and existing array elements following while retaining their order + */ + public static String[] addItemToFirstPositionOfArray(String itemToAdd, String... existingArray) { + String[] newArray = new String[existingArray.length + 1]; + newArray[0] = itemToAdd; + + System.arraycopy(existingArray, 0, newArray, 1, existingArray.length); + + return newArray; + } + } diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 8c3b7dfdc..34b95c506 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -829,11 +829,12 @@ Commands.xprate.started.1=[[GOLD]]mcMMO XP RATE IS NOW {0}x! # Admin Notifications Server.ConsoleName=[Server Console] -Notifications.Admin.XPRate.Start.Self=[[GREEN]]You have set the XP rate to [[GOLD]]{0}[[GREEN]]x! +Notifications.Admin.XPRate.Start.Self=[[GRAY]]You have set the XP rate to [[GOLD]]{0}[[GREEN]]x! Notifications.Admin.XPRate.End.Self=[[GRAY]]You ended the XP rate event. Notifications.Admin.XPRate.End.Others=The user {0} [[GRAY]]has ended the XP rate event Notifications.Admin.XPRate.Start.Others=The user {0} [[GRAY]]has started or modified an XP rate event with properties: {1}x -Notifications.Admin.Format=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]Admin Notification[[GOLD]]) [[GRAY]]{0} +Notifications.Admin.Format.Others=[[GOLD]]([[GREEN]]mcMMO [[DARK_AQUA]]Admin Notification[[GOLD]]) [[GRAY]]{0} +Notifications.Admin.Format.Self=[[GOLD]]([[GREEN]]mcMMO [[DARK_RED]]Admin Command Executed[[GOLD]]) [[GRAY]]{0} # Event XPRate.Event=[[GOLD]]mcMMO is currently in an XP rate event! XP rate is {0}x!