From 81571fc014b973f7edaa5395d127b8362855159d Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sat, 20 Feb 2021 11:37:16 -0500 Subject: [PATCH] Add /toggleshout command (#3965) Adds a command to toggle shout mode of a user allowing them not to have to prefix all their messages with `!` if they're shouting a lot. Closes #3958. --- .../java/com/earth2me/essentials/IUser.java | 4 ++ .../java/com/earth2me/essentials/User.java | 11 ++++++ .../essentials/commands/Commandfly.java | 2 +- .../essentials/commands/Commandgod.java | 2 +- .../essentials/commands/Commandmsgtoggle.java | 2 +- .../essentials/commands/Commandpaytoggle.java | 2 +- .../essentials/commands/Commandrtoggle.java | 2 +- .../essentials/commands/Commandtpauto.java | 2 +- .../essentials/commands/Commandtptoggle.java | 2 +- .../essentials/commands/Commandvanish.java | 2 +- .../commands/EssentialsToggleCommand.java | 2 +- .../src/main/resources/messages.properties | 6 +++ .../essentials/chat/Commandtoggleshout.java | 38 +++++++++++++++++++ .../essentials/chat/EssentialsChat.java | 11 +++++- .../essentials/chat/EssentialsChatPlayer.java | 4 +- .../EssentialsChatPlayerListenerLowest.java | 2 +- .../EssentialsChatPlayerListenerNormal.java | 4 +- EssentialsChat/src/main/resources/plugin.yml | 5 +++ 18 files changed, 88 insertions(+), 15 deletions(-) create mode 100644 EssentialsChat/src/main/java/com/earth2me/essentials/chat/Commandtoggleshout.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/IUser.java b/Essentials/src/main/java/com/earth2me/essentials/IUser.java index 0dcd8b846..6ae20d3ee 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IUser.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IUser.java @@ -212,4 +212,8 @@ public interface IUser { Map getConfirmingPayments(); Block getTargetBlock(int maxDistance); + + void setToggleShout(boolean toggleShout); + + boolean isToggleShout(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 6b9f78cb7..ca77fa215 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -72,6 +72,7 @@ public class User extends UserData implements Comparable, IMessageRecipien private long lastNotifiedAboutMailsMs; private String lastHomeConfirmation; private long lastHomeConfirmationTimestamp; + private boolean toggleShout = false; private transient final List signCopy = Lists.newArrayList("", "", "", ""); public User(final Player base, final IEssentials ess) { @@ -1068,4 +1069,14 @@ public class User extends UserData implements Comparable, IMessageRecipien } return block; } + + @Override + public void setToggleShout(boolean toggleShout) { + this.toggleShout = toggleShout; + } + + @Override + public boolean isToggleShout() { + return toggleShout; + } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfly.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfly.java index e4303c217..e23a3fb50 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfly.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfly.java @@ -23,7 +23,7 @@ public class Commandfly extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.getBase().getAllowFlight(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgod.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgod.java index 1ea09d838..4200d1085 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgod.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgod.java @@ -23,7 +23,7 @@ public class Commandgod extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isGodModeEnabled(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsgtoggle.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsgtoggle.java index 07548c73f..60e0eb9a6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsgtoggle.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmsgtoggle.java @@ -22,7 +22,7 @@ public class Commandmsgtoggle extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isIgnoreMsg(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpaytoggle.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpaytoggle.java index 81f98e4b5..2a0ffc42a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpaytoggle.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpaytoggle.java @@ -29,7 +29,7 @@ public class Commandpaytoggle extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isAcceptingPay(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrtoggle.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrtoggle.java index 2b7886abc..ba501027d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrtoggle.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrtoggle.java @@ -22,7 +22,7 @@ public class Commandrtoggle extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isLastMessageReplyRecipient(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpauto.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpauto.java index 2ac525955..922f529fb 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpauto.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpauto.java @@ -22,7 +22,7 @@ public class Commandtpauto extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isAutoTeleportEnabled(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtptoggle.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtptoggle.java index 15304eef4..f0d646f08 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtptoggle.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtptoggle.java @@ -22,7 +22,7 @@ public class Commandtptoggle extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isTeleportEnabled(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandvanish.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandvanish.java index c8ce0f704..bb5f748b3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandvanish.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandvanish.java @@ -23,7 +23,7 @@ public class Commandvanish extends EssentialsToggleCommand { } @Override - void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { if (enabled == null) { enabled = !user.isVanished(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsToggleCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsToggleCommand.java index 6197bad81..dee5ed24a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsToggleCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsToggleCommand.java @@ -68,7 +68,7 @@ public abstract class EssentialsToggleCommand extends EssentialsCommand { } // Make sure when implementing this method that all 3 Boolean states are handled, 'null' should toggle the existing state. - abstract void togglePlayer(CommandSource sender, User user, Boolean enabled) throws NotEnoughArgumentsException; + protected abstract void togglePlayer(CommandSource sender, User user, Boolean enabled) throws NotEnoughArgumentsException; @Override protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 9b8b76f61..c853ed060 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -733,6 +733,10 @@ setwarpCommandUsage=/ setworthCommandDescription=Set the sell value of an item. setworthCommandUsage=/ [itemname|id] sheepMalformedColor=\u00a74Malformed color. +shoutDisabled=\u00a76Shout mode \u00a7cdisabled\u00a76. +shoutDisabledFor=\u00a76Shout mode \u00a7cdisabled \u00a76for \u00a7c{0}\u00a76. +shoutEnabled=\u00a76Shout mode \u00a7cenabled\u00a76. +shoutEnabledFor=\u00a76Shout mode \u00a7cenabled \u00a76for \u00a7c{0}\u00a76. shoutFormat=\u00a76[Shout]\u00a7r {0} editsignCommandClear=\u00a76Sign cleared. editsignCommandClearLine=\u00a76Cleared line\u00a7c {0}\u00a76. @@ -839,6 +843,8 @@ timeWorldCurrent=\u00a76The current time in\u00a7c {0} \u00a76is \u00a7c{1}\u00a timeWorldSet=\u00a76The time was set to\u00a7c {0} \u00a76in\: \u00a7c{1}\u00a76. togglejailCommandDescription=Jails/Unjails a player, TPs them to the jail specified. togglejailCommandUsage=/ [datediff] +toggleshoutCommandDescription=Toggles whether you are talking in shout mode +toggleshoutCommandUsage=/ [player] [on|off] topCommandDescription=Teleport to the highest block at your current position. topCommandUsage=/ totalSellableAll=\u00a7aThe total worth of all sellable items and blocks is \u00a7c{1}\u00a7a. diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/Commandtoggleshout.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/Commandtoggleshout.java new file mode 100644 index 000000000..b3e2da6e4 --- /dev/null +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/Commandtoggleshout.java @@ -0,0 +1,38 @@ +package com.earth2me.essentials.chat; + +import com.earth2me.essentials.CommandSource; +import com.earth2me.essentials.User; +import com.earth2me.essentials.commands.EssentialsToggleCommand; +import org.bukkit.Server; + +import static com.earth2me.essentials.I18n.tl; + +public class Commandtoggleshout extends EssentialsToggleCommand { + public Commandtoggleshout() { + super("toggleshout", "essentials.toggleshout.others"); + } + + @Override + protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { + toggleOtherPlayers(server, sender, args); + } + + @Override + protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { + handleToggleWithArgs(server, user, args); + } + + @Override + protected void togglePlayer(final CommandSource sender, final User user, Boolean enabled) { + if (enabled == null) { + enabled = !user.isToggleShout(); + } + + user.setToggleShout(enabled); + + user.sendMessage(enabled ? tl("shoutEnabled") : tl("shoutDisabled")); + if (!sender.isPlayer() || !user.getBase().equals(sender.getPlayer())) { + sender.sendMessage(enabled ? tl("shoutEnabledFor", user.getDisplayName()) : tl("shoutDisabledFor", user.getDisplayName())); + } + } +} diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java index 29dc149ce..374f40749 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java @@ -2,6 +2,8 @@ package com.earth2me.essentials.chat; import com.earth2me.essentials.metrics.MetricsWrapper; import net.ess3.api.IEssentials; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -14,13 +16,13 @@ import java.util.logging.Level; import static com.earth2me.essentials.I18n.tl; public class EssentialsChat extends JavaPlugin { - + private transient IEssentials ess; private transient MetricsWrapper metrics = null; @Override public void onEnable() { final PluginManager pluginManager = getServer().getPluginManager(); - final IEssentials ess = (IEssentials) pluginManager.getPlugin("Essentials"); + ess = (IEssentials) pluginManager.getPlugin("Essentials"); if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion())) { getLogger().log(Level.WARNING, tl("versionMismatchAll")); } @@ -43,4 +45,9 @@ public class EssentialsChat extends JavaPlugin { } } + @Override + public boolean onCommand(final CommandSender sender, final Command command, final String commandLabel, final String[] args) { + metrics.markCommand(command.getName(), true); + return ess.onCommandEssentials(sender, command, commandLabel, args, EssentialsChat.class.getClassLoader(), "com.earth2me.essentials.chat.Command", "essentials.", null); + } } diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java index 2d9fd9f03..d5ff4320f 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java @@ -29,14 +29,14 @@ public abstract class EssentialsChatPlayer implements Listener { return event.isCancelled(); } - String getChatType(final String message) { + String getChatType(final User user, final String message) { if (message.length() == 0) { //Ignore empty chat events generated by plugins return ""; } final char prefix = message.charAt(0); - if (prefix == ess.getSettings().getChatShout()) { + if (prefix == ess.getSettings().getChatShout() || user.isToggleShout()) { return message.length() > 1 ? "shout" : ""; } else if (prefix == ess.getSettings().getChatQuestion()) { return message.length() > 1 ? "question" : ""; diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java index 1af1b1531..8d41947e6 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java @@ -33,7 +33,7 @@ public class EssentialsChatPlayerListenerLowest extends EssentialsChatPlayer { return; } - final ChatStore chatStore = new ChatStore(ess, user, getChatType(event.getMessage())); + final ChatStore chatStore = new ChatStore(ess, user, getChatType(user, event.getMessage())); setChatStore(event, chatStore); // This listener should apply the general chat formatting only...then return control back the event handler diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java index 8122ddeaa..1adbf2438 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java @@ -48,7 +48,9 @@ public class EssentialsChatPlayerListenerNormal extends EssentialsChatPlayer { permission.append("essentials.chat.").append(chatStore.getType()); if (user.isAuthorized(permission.toString())) { - event.setMessage(event.getMessage().substring(1)); + if (event.getMessage().charAt(0) == ess.getSettings().getChatShout() || event.getMessage().charAt(0) == ess.getSettings().getChatQuestion()) { + event.setMessage(event.getMessage().substring(1)); + } event.setFormat(tl(chatStore.getType() + "Format", event.getFormat())); return; } diff --git a/EssentialsChat/src/main/resources/plugin.yml b/EssentialsChat/src/main/resources/plugin.yml index ce21b5d39..06e8aed01 100644 --- a/EssentialsChat/src/main/resources/plugin.yml +++ b/EssentialsChat/src/main/resources/plugin.yml @@ -8,3 +8,8 @@ description: Provides chat control features for Essentials. Requires Permission authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Okamosy, Iaccidentally] depend: [Essentials] api-version: 1.13 +commands: + toggleshout: + description: Toggles whether you are talking in shout mode + usage: / [player] [on|off] + aliases: [etoggleshout]