From e94c43bc4a8d8190f42cf8cacb50fb6accbb797a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 16 Sep 2021 22:55:16 -0400 Subject: [PATCH 1/6] Add chat question config option --- .../src/main/java/com/earth2me/essentials/ISettings.java | 2 ++ .../src/main/java/com/earth2me/essentials/Settings.java | 5 +++++ Essentials/src/main/resources/config.yml | 3 +++ .../com/earth2me/essentials/chat/EssentialsChatPlayer.java | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index fe1913af72d..bbef5dc3fed 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -46,6 +46,8 @@ public interface ISettings extends IConf { char getChatQuestion(); + boolean isChatQuestionEnabled(); + BigDecimal getCommandCost(IEssentialsCommand cmd); BigDecimal getCommandCost(String label); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 18a42e8bb24..188dd2bd56d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -226,6 +226,11 @@ public char getChatQuestion() { return chatQuestion; } + @Override + public boolean isChatQuestionEnabled() { + return config.getBoolean("chat.question-enabled", true); + } + public boolean _isTeleportSafetyEnabled() { return config.getBoolean("teleport-safety", true); } diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 85a2cf628b0..69090a21e33 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -921,6 +921,9 @@ chat: # plots: "&dP&r" # creative: "&eC&r" + # Whether chat questions should be enabled or not. + question-enabled: true + ############################################################ # +------------------------------------------------------+ # # | EssentialsX Protect | # 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 d5ff4320f79..6a3251f2cda 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java @@ -38,7 +38,7 @@ String getChatType(final User user, final String message) { final char prefix = message.charAt(0); if (prefix == ess.getSettings().getChatShout() || user.isToggleShout()) { return message.length() > 1 ? "shout" : ""; - } else if (prefix == ess.getSettings().getChatQuestion()) { + } else if (ess.getSettings().isChatQuestionEnabled() && prefix == ess.getSettings().getChatQuestion()) { return message.length() > 1 ? "question" : ""; } else { return ""; From b0e7cee8266267b4ed8c411a7aaf4262901d5f6a Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 20:31:44 -0400 Subject: [PATCH 2/6] Add config for default shout state and for persisting shout state --- .../main/java/com/earth2me/essentials/ISettings.java | 4 ++++ .../main/java/com/earth2me/essentials/Settings.java | 10 ++++++++++ .../src/main/java/com/earth2me/essentials/User.java | 10 ++++++++-- .../main/java/com/earth2me/essentials/UserData.java | 12 ++++++++++++ .../essentials/config/holders/UserConfigHolder.java | 10 ++++++++++ Essentials/src/main/resources/config.yml | 6 ++++++ 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index bbef5dc3fed..4da7f52549b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -46,6 +46,10 @@ public interface ISettings extends IConf { char getChatQuestion(); + boolean isShoutDefault(); + + boolean isPersistShout(); + boolean isChatQuestionEnabled(); BigDecimal getCommandCost(IEssentialsCommand cmd); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 188dd2bd56d..d9aae83fbeb 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -226,6 +226,16 @@ public char getChatQuestion() { return chatQuestion; } + @Override + public boolean isShoutDefault() { + return config.getBoolean("chat.shout-default", false); + } + + @Override + public boolean isPersistShout() { + return config.getBoolean("chat.persist-shout", false); + } + @Override public boolean isChatQuestionEnabled() { return config.getBoolean("chat.question-enabled", true); diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 12952aff928..d21f91ed4d4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -90,7 +90,7 @@ public class User extends UserData implements Comparable, IMessageRecipien private long lastNotifiedAboutMailsMs; private String lastHomeConfirmation; private long lastHomeConfirmationTimestamp; - private boolean toggleShout = false; + private Boolean toggleShout; private transient final List signCopy = Lists.newArrayList("", "", "", ""); public User(final Player base, final IEssentials ess) { @@ -1202,10 +1202,16 @@ public Block getTargetBlock(int maxDistance) { @Override public void setToggleShout(boolean toggleShout) { this.toggleShout = toggleShout; + if (ess.getSettings().isPersistShout()) { + setShouting(toggleShout); + } } @Override public boolean isToggleShout() { - return toggleShout; + if (ess.getSettings().isPersistShout()) { + return toggleShout = isShouting(); + } + return toggleShout == null ? toggleShout = ess.getSettings().isShoutDefault() : toggleShout; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index 313b984cc90..79126b5b3a1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -722,6 +722,18 @@ public void setBaltopExemptCache(boolean baltopExempt) { config.save(); } + public boolean isShouting() { + if (holder.shouting() == null) { + holder.shouting(ess.getSettings().isShoutDefault()); + } + return holder.shouting(); + } + + public void setShouting(boolean shouting) { + holder.shouting(shouting); + config.save(); + } + public UUID getConfigUUID() { return config.getUuid(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/holders/UserConfigHolder.java b/Essentials/src/main/java/com/earth2me/essentials/config/holders/UserConfigHolder.java index 5f1de20c26f..6a468d7a4db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/holders/UserConfigHolder.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/holders/UserConfigHolder.java @@ -322,6 +322,16 @@ public void baltopExempt(final boolean value) { this.baltopExempt = value; } + private @MonotonicNonNull Boolean shouting; + + public Boolean shouting() { + return shouting; + } + + public void shouting(final Boolean value) { + this.shouting = value; + } + private @NonNull Timestamps timestamps = new Timestamps(); public Timestamps timestamps() { diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 69090a21e33..9e1b62135f9 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -921,6 +921,12 @@ chat: # plots: "&dP&r" # creative: "&eC&r" + # Whether players should be placed into shout mode by default. + shout-default: false + + # Whether a player's shout mode should persist restarts. + persist-shout: false + # Whether chat questions should be enabled or not. question-enabled: true From 6ee71a2e9948c5420d87c218d91570a09ab8030f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 21:26:47 -0400 Subject: [PATCH 3/6] Add permission for local channel chat --- .../src/main/resources/messages.properties | 5 ++-- .../EssentialsChatPlayerListenerNormal.java | 30 ++++++++++++------- EssentialsChat/src/main/resources/plugin.yml | 3 ++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 516f78ed02c..98ff5e7d851 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -833,8 +833,9 @@ noPlacePermission=\u00a74You do not have permission to place a block near that s noPotionEffectPerm=\u00a74You do not have permission to apply potion effect \u00a7c{0} \u00a74to this potion. noPowerTools=\u00a76You have no power tools assigned. notAcceptingPay=\u00a74{0} \u00a74is not accepting payment. -notAllowedToQuestion=\u00a74You are not authorized to use question. -notAllowedToShout=\u00a74You are not authorized to shout. +notAllowedToLocal=\u00a74You don't have permission to speak in local chat. +notAllowedToQuestion=\u00a74You don't have permission to use question. +notAllowedToShout=\u00a74You don't have permission to shout. notEnoughExperience=\u00a74You do not have enough experience. notEnoughMoney=\u00a74You do not have sufficient funds. notFlying=not flying 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 1adbf24389a..fc77e2341ca 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java @@ -43,21 +43,29 @@ public void onPlayerChat(final AsyncPlayerChatEvent event) { final User user = chatStore.getUser(); chatStore.setRadius(radius); - if (event.getMessage().length() > 1 && chatStore.getType().length() > 0) { - final StringBuilder permission = new StringBuilder(); - permission.append("essentials.chat.").append(chatStore.getType()); + if (event.getMessage().length() > 1) { + if (chatStore.getType().isEmpty()) { + if (!user.isAuthorized("essentials.chat.local")) { + user.sendMessage(tl("notAllowedToLocal")); + event.setCancelled(true); + return; + } + } else { + final StringBuilder permission = new StringBuilder(); + permission.append("essentials.chat.").append(chatStore.getType()); - if (user.isAuthorized(permission.toString())) { - if (event.getMessage().charAt(0) == ess.getSettings().getChatShout() || event.getMessage().charAt(0) == ess.getSettings().getChatQuestion()) { - event.setMessage(event.getMessage().substring(1)); + if (user.isAuthorized(permission.toString())) { + 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; } - event.setFormat(tl(chatStore.getType() + "Format", event.getFormat())); + + user.sendMessage(tl("notAllowedTo" + chatStore.getType().substring(0, 1).toUpperCase(Locale.ENGLISH) + chatStore.getType().substring(1))); + event.setCancelled(true); return; } - - user.sendMessage(tl("notAllowedTo" + chatStore.getType().substring(0, 1).toUpperCase(Locale.ENGLISH) + chatStore.getType().substring(1))); - event.setCancelled(true); - return; } final Location loc = user.getLocation(); diff --git a/EssentialsChat/src/main/resources/plugin.yml b/EssentialsChat/src/main/resources/plugin.yml index 68ba619202a..63264456876 100644 --- a/EssentialsChat/src/main/resources/plugin.yml +++ b/EssentialsChat/src/main/resources/plugin.yml @@ -13,3 +13,6 @@ commands: description: Toggles whether you are talking in shout mode usage: / [player] [on|off] aliases: [etoggleshout] +permissions: + essentials.chat.local: + default: true From 8817c01dc5280410188427c37ef7da7f0d1402e6 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 21:43:22 -0400 Subject: [PATCH 4/6] Add permissions to receive certain channel channels --- .../chat/EssentialsChatPlayerListenerNormal.java | 7 ++++--- EssentialsChat/src/main/resources/plugin.yml | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) 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 fc77e2341ca..9fa34b67281 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java @@ -50,15 +50,16 @@ public void onPlayerChat(final AsyncPlayerChatEvent event) { event.setCancelled(true); return; } + event.getRecipients().removeIf(player -> !ess.getUser(player).isAuthorized("essentials.chat.receive.local")); } else { - final StringBuilder permission = new StringBuilder(); - permission.append("essentials.chat.").append(chatStore.getType()); + final String permission = "essentials.chat." + chatStore.getType(); - if (user.isAuthorized(permission.toString())) { + if (user.isAuthorized(permission)) { 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())); + event.getRecipients().removeIf(player -> !ess.getUser(player).isAuthorized("essentials.chat.receive." + chatStore.getType())); return; } diff --git a/EssentialsChat/src/main/resources/plugin.yml b/EssentialsChat/src/main/resources/plugin.yml index 63264456876..ab1d85c5a36 100644 --- a/EssentialsChat/src/main/resources/plugin.yml +++ b/EssentialsChat/src/main/resources/plugin.yml @@ -16,3 +16,9 @@ commands: permissions: essentials.chat.local: default: true + essentials.chat.receive.local: + default: true + essentials.chat.receive.shout: + default: true + essentials.chat.receive.question: + default: true From c47979fe060f99ee1f4423b05030efabebe59d50 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 28 Sep 2021 21:48:06 -0400 Subject: [PATCH 5/6] Add some color to the local prefix by default --- Essentials/src/main/resources/messages.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 98ff5e7d851..9d7d24357d5 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -126,7 +126,7 @@ cantReadGeoIpDB=Failed to read GeoIP database\! cantSpawnItem=\u00a74You are not allowed to spawn the item\u00a7c {0}\u00a74. cartographytableCommandDescription=Opens up a cartography table. cartographytableCommandUsage=/ -chatTypeLocal=[L] +chatTypeLocal=\u00a73[L] chatTypeSpy=[Spy] cleaned=Userfiles Cleaned. cleaning=Cleaning userfiles. @@ -669,7 +669,7 @@ listGroupTag=\u00a76{0}\u00a7r\: listHiddenTag=\u00a77[HIDDEN]\u00a7r listRealName=({0}) loadWarpError=\u00a74Failed to load warp {0}. -localFormat=[L]<{0}> {1} +localFormat=\u00a73[L] \u00a7r<{0}> {1} localNoOne= loomCommandDescription=Opens up a loom. loomCommandUsage=/ From f26547e75c5a29d9fe5e6ca2fac197f88d81db96 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 29 Sep 2021 21:05:12 -0400 Subject: [PATCH 6/6] Fix toggleshout causing issues with question/local chat --- .../com/earth2me/essentials/chat/EssentialsChatPlayer.java | 7 ++++++- .../chat/EssentialsChatPlayerListenerNormal.java | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) 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 6a3251f2cda..32988091a01 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayer.java @@ -36,10 +36,15 @@ String getChatType(final User user, final String message) { } final char prefix = message.charAt(0); - if (prefix == ess.getSettings().getChatShout() || user.isToggleShout()) { + if (prefix == ess.getSettings().getChatShout()) { + if (user.isToggleShout()) { + return ""; + } return message.length() > 1 ? "shout" : ""; } else if (ess.getSettings().isChatQuestionEnabled() && prefix == ess.getSettings().getChatQuestion()) { return message.length() > 1 ? "question" : ""; + } else if (user.isToggleShout()) { + return message.length() > 1 ? "shout" : ""; } else { return ""; } 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 9fa34b67281..a216a1e7fb8 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChatPlayerListenerNormal.java @@ -50,12 +50,17 @@ public void onPlayerChat(final AsyncPlayerChatEvent event) { event.setCancelled(true); return; } + + if (user.isToggleShout() && event.getMessage().length() > 1 && event.getMessage().charAt(0) == ess.getSettings().getChatShout()) { + event.setMessage(event.getMessage().substring(1)); + } + event.getRecipients().removeIf(player -> !ess.getUser(player).isAuthorized("essentials.chat.receive.local")); } else { final String permission = "essentials.chat." + chatStore.getType(); if (user.isAuthorized(permission)) { - if (event.getMessage().charAt(0) == ess.getSettings().getChatShout() || event.getMessage().charAt(0) == ess.getSettings().getChatQuestion()) { + if (event.getMessage().charAt(0) == ess.getSettings().getChatShout() || (event.getMessage().charAt(0) == ess.getSettings().getChatQuestion() && ess.getSettings().isChatQuestionEnabled())) { event.setMessage(event.getMessage().substring(1)); } event.setFormat(tl(chatStore.getType() + "Format", event.getFormat()));