From 3df9b548bf4f47f9443c4f781915646889b85ebc Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:11:53 -0400 Subject: [PATCH 1/3] Bump to 1.19.4 --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 4 ++-- README.md | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index 2ddb520b5d2..c03d315ab9a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -37,9 +37,9 @@ public final class VersionUtil { public static final BukkitVersion v1_18_2_R01 = BukkitVersion.fromString("1.18.2-R0.1-SNAPSHOT"); public static final BukkitVersion v1_19_R01 = BukkitVersion.fromString("1.19-R0.1-SNAPSHOT"); public static final BukkitVersion v1_19_2_R01 = BukkitVersion.fromString("1.19.2-R0.1-SNAPSHOT"); - public static final BukkitVersion v1_19_3_R01 = BukkitVersion.fromString("1.19.3-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_19_4_R01 = BukkitVersion.fromString("1.19.3-R0.1-SNAPSHOT"); - private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_2_R01, v1_19_3_R01); + private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_2_R01, v1_19_4_R01); public static final boolean PRE_FLATTENING = VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01); diff --git a/README.md b/README.md index 3ad247fa5c2..e6adf858d34 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ however, have some new requirements: * **EssentialsX requires CraftBukkit, Spigot or Paper to run.** Other server software may work, but these are not tested by the team and we may not be able to help with any issues that occur. * **EssentialsX currently supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, - 1.16.5, 1.17.1, 1.18.2, and 1.19.3.** + 1.16.5, 1.17.1, 1.18.2, and 1.19.4.** * **EssentialsX currently requires Java 8 or higher.** We recommend using the latest Java version supported by your server software. * **EssentialsX requires [Vault](http://dev.bukkit.org/bukkit-plugins/vault/) to enable using chat prefix/suffixes and diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 09fee8162e7..e7596e9c958 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.19.3-R0.1-SNAPSHOT" +val spigotVersion = "1.19.4-R0.1-SNAPSHOT" val junit5Version = "5.7.0" val mockitoVersion = "3.2.0" From 82a41fedbc4f4afbb99dff9c60cb58f6b178a38f Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 16 Mar 2023 20:40:56 -0400 Subject: [PATCH 2/3] Fix signed messages --- .../essentials/chat/EssentialsChat.java | 12 +- .../chat/processing/AbstractChatHandler.java | 28 +--- ...egacyChatHandler.java => ChatHandler.java} | 4 +- .../chat/processing/ChatProcessingCache.java | 87 ++----------- .../chat/processing/SignedChatHandler.java | 120 ------------------ 5 files changed, 20 insertions(+), 231 deletions(-) rename EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/{LegacyChatHandler.java => ChatHandler.java} (91%) delete mode 100644 EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/SignedChatHandler.java 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 969714aa6a4..03b9cb215e3 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/EssentialsChat.java @@ -2,8 +2,7 @@ import com.earth2me.essentials.Essentials; import com.earth2me.essentials.EssentialsLogger; -import com.earth2me.essentials.chat.processing.LegacyChatHandler; -import com.earth2me.essentials.chat.processing.SignedChatHandler; +import com.earth2me.essentials.chat.processing.ChatHandler; import com.earth2me.essentials.metrics.MetricsWrapper; import net.ess3.api.IEssentials; import org.bukkit.command.Command; @@ -32,13 +31,8 @@ public void onEnable() { return; } - final SignedChatHandler signedHandler = new SignedChatHandler((Essentials) ess, this); - if (signedHandler.tryRegisterListeners()) { - getLogger().info("Secure signed chat and previews are enabled."); - } else { - final LegacyChatHandler legacyHandler = new LegacyChatHandler((Essentials) ess, this); - legacyHandler.registerListeners(); - } + final ChatHandler legacyHandler = new ChatHandler((Essentials) ess, this); + legacyHandler.registerListeners(); if (metrics == null) { metrics = new MetricsWrapper(this, 3814, false); diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java index fb9eadce06b..dd4ea5d8b5f 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java @@ -60,10 +60,10 @@ protected void handleChatFormat(AsyncPlayerChatEvent event) { } // Reuse cached IntermediateChat if available - ChatProcessingCache.IntermediateChat chat = cache.getIntermediateChat(event.getPlayer()); + ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer()); if (chat == null) { - chat = new ChatProcessingCache.IntermediateChat(user, getChatType(user, event.getMessage()), event.getMessage()); - cache.setIntermediateChat(event.getPlayer(), chat); + chat = new ChatProcessingCache.ProcessedChat(user, getChatType(user, event.getMessage()), event.getMessage()); + cache.setProcessedChat(event.getPlayer(), chat); } final long configRadius = ess.getSettings().getChatRadius(); @@ -118,9 +118,6 @@ protected void handleChatFormat(AsyncPlayerChatEvent event) { synchronized (format) { event.setFormat(format); } - - chat.setFormatResult(event.getFormat()); - chat.setMessageResult(event.getMessage()); } /** @@ -133,7 +130,7 @@ protected void handleChatRecipients(AsyncPlayerChatEvent event) { return; } - final ChatProcessingCache.Chat chat = cache.getIntermediateOrElseProcessedChat(event.getPlayer()); + final ChatProcessingCache.Chat chat = cache.getProcessedChat(event.getPlayer()); // If local chat is enabled, handle the recipients here; else we have nothing to do if (chat.getRadius() < 1) { @@ -264,17 +261,9 @@ protected void callChatEvent(final AsyncPlayerChatEvent event, final ChatType ch * {@link #handleChatFormat(AsyncPlayerChatEvent)} when previews are not available. */ protected void handleChatPostFormat(AsyncPlayerChatEvent event) { - final ChatProcessingCache.IntermediateChat intermediateChat = cache.clearIntermediateChat(event.getPlayer()); - if (isAborted(event) || intermediateChat == null) { - return; + if (isAborted(event)) { + cache.clearProcessedChat(event.getPlayer()); } - - // in case of modifications by other plugins during the preview - intermediateChat.setFormatResult(event.getFormat()); - intermediateChat.setMessageResult(event.getMessage()); - - final ChatProcessingCache.ProcessedChat processed = new ChatProcessingCache.ProcessedChat(ess, intermediateChat); - cache.setProcessedChat(event.getPlayer(), processed); } /** @@ -295,11 +284,6 @@ boolean isAborted(final AsyncPlayerChatEvent event) { return event.isCancelled(); } - boolean isPlayerChat(final AsyncPlayerChatEvent event) { - // Used to distinguish chats from Player#chat (sync) from chats sent by the player (async) - return event.isAsynchronous(); - } - ChatType getChatType(final User user, final String message) { if (message.length() == 0) { //Ignore empty chat events generated by plugins diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/LegacyChatHandler.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatHandler.java similarity index 91% rename from EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/LegacyChatHandler.java rename to EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatHandler.java index b10cf9ca257..8da640bd769 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/LegacyChatHandler.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatHandler.java @@ -7,8 +7,8 @@ import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.plugin.PluginManager; -public class LegacyChatHandler extends AbstractChatHandler { - public LegacyChatHandler(Essentials ess, EssentialsChat essChat) { +public class ChatHandler extends AbstractChatHandler { + public ChatHandler(Essentials ess, EssentialsChat essChat) { super(ess, essChat); } diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatProcessingCache.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatProcessingCache.java index de3f0cec1dd..89ca9c785ab 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatProcessingCache.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/ChatProcessingCache.java @@ -2,57 +2,27 @@ import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import net.ess3.api.IEssentials; import net.essentialsx.api.v2.ChatType; import org.bukkit.entity.Player; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; public class ChatProcessingCache { - private final Map intermediateChats = Collections.synchronizedMap(new HashMap<>()); - - private final Cache processedChats = CacheBuilder.newBuilder() - .expireAfterWrite(5, TimeUnit.MINUTES) - .build(); - - public IntermediateChat getIntermediateChat(final Player player) { - return intermediateChats.get(player); - } - - public void setIntermediateChat(final Player player, final IntermediateChat intermediateChat) { - intermediateChats.put(player, intermediateChat); - } - - public IntermediateChat clearIntermediateChat(final Player player) { - return intermediateChats.remove(player); - } + private final Map chats = Collections.synchronizedMap(new HashMap<>()); public ProcessedChat getProcessedChat(final Player player) { - return processedChats.getIfPresent(player); + return chats.get(player); } public void setProcessedChat(final Player player, final ProcessedChat chat) { - processedChats.put(player, chat); - } - - public ProcessedChat clearProcessedChat(final Player player) { - final ProcessedChat chat = processedChats.getIfPresent(player); - processedChats.invalidate(player); - return chat; + chats.put(player, chat); } - public Chat getIntermediateOrElseProcessedChat(final Player player) { - final IntermediateChat chat = getIntermediateChat(player); - if (chat != null) { - return chat; - } - return getProcessedChat(player); + public void clearProcessedChat(final Player player) { + chats.remove(player); } public abstract static class Chat { @@ -89,58 +59,19 @@ public final String getLongType() { } public static class ProcessedChat extends Chat { - private final String message; - private final String format; private final Trade charge; - public ProcessedChat(final IEssentials ess, final IntermediateChat sourceChat) { - super(sourceChat.getUser(), sourceChat.getType(), sourceChat.getOriginalMessage()); - this.message = sourceChat.messageResult; - this.format = sourceChat.formatResult; - this.radius = sourceChat.radius; - this.charge = new Trade(getLongType(), ess); - } - - public String getMessage() { - return message; - } - - public String getFormat() { - return format; - } - - public Trade getCharge() { - return charge; - } - } - - public static class IntermediateChat extends Chat { - private String messageResult; - private String formatResult; - - public IntermediateChat(final User user, final ChatType type, final String originalMessage) { + public ProcessedChat(final User user, final ChatType type, final String originalMessage) { super(user, type, originalMessage); + this.charge = new Trade(getLongType(), user.getEssentials()); } public void setRadius(final long radius) { this.radius = radius; } - public String getMessageResult() { - return messageResult; - } - - public void setMessageResult(String messageResult) { - this.messageResult = messageResult; - } - - public String getFormatResult() { - return formatResult; - } - - public void setFormatResult(String formatResult) { - this.formatResult = formatResult; + public Trade getCharge() { + return charge; } } - } diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/SignedChatHandler.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/SignedChatHandler.java deleted file mode 100644 index da53657eaef..00000000000 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/SignedChatHandler.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.earth2me.essentials.chat.processing; - -import com.earth2me.essentials.Essentials; -import com.earth2me.essentials.I18n; -import com.earth2me.essentials.chat.EssentialsChat; -import com.earth2me.essentials.utils.VersionUtil; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.AsyncPlayerChatPreviewEvent; -import org.bukkit.plugin.PluginManager; - -public class SignedChatHandler extends AbstractChatHandler { - - public SignedChatHandler(Essentials ess, EssentialsChat essChat) { - super(ess, essChat); - } - - public boolean tryRegisterListeners() { - if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_19_2_R01)) { - return false; - } - - try { - final Class previewClass = Class.forName("org.bukkit.event.player.AsyncPlayerChatPreviewEvent"); - if (!AsyncPlayerChatEvent.class.isAssignableFrom(previewClass)) { - essChat.getLogger().severe(I18n.tl("essChatNoSecureMsg", essChat.getDescription().getVersion())); - return false; - } - } catch (ClassNotFoundException e) { - essChat.getLogger().severe(I18n.tl("essChatNoSecureMsg", essChat.getDescription().getVersion())); - return false; - } - - final PluginManager pm = essChat.getServer().getPluginManager(); - pm.registerEvents(new PreviewLowest(), essChat); - pm.registerEvents(new PreviewHighest(), essChat); - pm.registerEvents(new ChatLowest(), essChat); - pm.registerEvents(new ChatNormal(), essChat); - pm.registerEvents(new ChatHighest(), essChat); - return true; - } - - private void handleChatApplyPreview(AsyncPlayerChatEvent event) { - final ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer()); - if (!isPlayerChat(event) || chat == null) { - handleChatFormat(event); - handleChatPostFormat(event); - } else { - event.setFormat(chat.getFormat()); - event.setMessage(chat.getMessage()); - } - } - - private void handleChatConfirmPreview(AsyncPlayerChatEvent event) { - if (!ess.getSettings().isDebug()) return; - - final ChatProcessingCache.ProcessedChat chat = cache.getProcessedChat(event.getPlayer()); - if (chat == null) { - // Can't confirm preview for some reason - essChat.getLogger().info("Processed chat missing for " + event.getPlayer()); - } else { - if (!event.getFormat().equals(chat.getFormat())) { - // Chat format modified by another plugin - essChat.getLogger().info("Chat format has been modified for " + event.getPlayer()); - essChat.getLogger().info("Expected '" + chat.getFormat() + "', got '" + event.getFormat()); - } - if (!event.getMessage().equals(chat.getMessage())) { - // Chat message modified by another plugin - essChat.getLogger().info("Chat message has been modified for " + event.getPlayer()); - essChat.getLogger().info("Expected '" + chat.getMessage() + "', got '" + event.getMessage()); - } - } - } - - private interface PreviewListener extends Listener { - void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event); - } - - private class PreviewLowest implements PreviewListener { - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event) { - handleChatFormat(event); - } - } - - private class PreviewHighest implements PreviewListener { - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerChatPreview(AsyncPlayerChatPreviewEvent event) { - handleChatPostFormat(event); - } - } - - private class ChatLowest implements ChatListener { - @Override - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerChat(AsyncPlayerChatEvent event) { - handleChatApplyPreview(event); - } - } - - private class ChatNormal implements ChatListener { - @Override - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerChat(AsyncPlayerChatEvent event) { - handleChatRecipients(event); - } - } - - private class ChatHighest implements ChatListener { - @Override - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerChat(AsyncPlayerChatEvent event) { - handleChatConfirmPreview(event); - handleChatSubmit(event); - } - } - -} From 82c02cf9af5b575150751fbc67fca6fa5e21e511 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 16 Mar 2023 21:07:23 -0400 Subject: [PATCH 3/3] Update Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index c03d315ab9a..e61786346d2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -37,7 +37,7 @@ public final class VersionUtil { public static final BukkitVersion v1_18_2_R01 = BukkitVersion.fromString("1.18.2-R0.1-SNAPSHOT"); public static final BukkitVersion v1_19_R01 = BukkitVersion.fromString("1.19-R0.1-SNAPSHOT"); public static final BukkitVersion v1_19_2_R01 = BukkitVersion.fromString("1.19.2-R0.1-SNAPSHOT"); - public static final BukkitVersion v1_19_4_R01 = BukkitVersion.fromString("1.19.3-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_19_4_R01 = BukkitVersion.fromString("1.19.4-R0.1-SNAPSHOT"); private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_2_R01, v1_19_4_R01);