From 38b18e5867b5f12605552873eecb160a3e477924 Mon Sep 17 00:00:00 2001 From: Taah Date: Thu, 5 May 2022 21:27:32 -0700 Subject: [PATCH] add the ability to overide the chat --- .../java/dev/plex/api/chat/IChatHandler.java | 8 +++++ .../java/dev/plex/api/plugin/PlexPlugin.java | 28 +++++++++++++++ .../plex/listener/impl/ServerListener.java | 3 +- .../dev/plex/settings/ServerSettings.java | 2 +- proxy/src/main/resources/config.toml | 2 +- server/src/main/java/dev/plex/Plex.java | 8 +++-- .../dev/plex/listener/impl/ChatListener.java | 35 ++++++++++++------- 7 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 api/src/main/java/dev/plex/api/chat/IChatHandler.java create mode 100644 api/src/main/java/dev/plex/api/plugin/PlexPlugin.java diff --git a/api/src/main/java/dev/plex/api/chat/IChatHandler.java b/api/src/main/java/dev/plex/api/chat/IChatHandler.java new file mode 100644 index 0000000..182ee72 --- /dev/null +++ b/api/src/main/java/dev/plex/api/chat/IChatHandler.java @@ -0,0 +1,8 @@ +package dev.plex.api.chat; + +import io.papermc.paper.event.player.AsyncChatEvent; + +public interface IChatHandler +{ + void doChat(AsyncChatEvent event); +} diff --git a/api/src/main/java/dev/plex/api/plugin/PlexPlugin.java b/api/src/main/java/dev/plex/api/plugin/PlexPlugin.java new file mode 100644 index 0000000..27afb07 --- /dev/null +++ b/api/src/main/java/dev/plex/api/plugin/PlexPlugin.java @@ -0,0 +1,28 @@ +package dev.plex.api.plugin; + +import dev.plex.api.chat.IChatHandler; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.plugin.java.JavaPlugin; + +@Getter +@Setter +public abstract class PlexPlugin extends JavaPlugin +{ + @Setter(AccessLevel.NONE) + private static PlexPlugin plugin; + + private IChatHandler chatHandler; + + @Override + public void onLoad() + { + plugin = this; + } + + public static PlexPlugin get() + { + return plugin; + } +} diff --git a/proxy/src/main/java/dev/plex/listener/impl/ServerListener.java b/proxy/src/main/java/dev/plex/listener/impl/ServerListener.java index da86af6..b12d5b2 100644 --- a/proxy/src/main/java/dev/plex/listener/impl/ServerListener.java +++ b/proxy/src/main/java/dev/plex/listener/impl/ServerListener.java @@ -13,6 +13,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -23,7 +24,7 @@ public class ServerListener extends PlexListener @Subscribe(order = PostOrder.FIRST) public void onPing(ProxyPingEvent event) { - String baseMotd = plugin.getConfig().as(ServerSettings.class).getServer().getMotd(); + String baseMotd = plugin.getConfig().as(ServerSettings.class).getServer().getMotd().get(ThreadLocalRandom.current().nextInt(plugin.getConfig().as(ServerSettings.class).getServer().getMotd().size())); baseMotd = baseMotd.replace("\\n", "\n"); baseMotd = baseMotd.replace("%servername%", plugin.getConfig().as(ServerSettings.class).getServer().getName()); baseMotd = baseMotd.replace("%mcversion%", plugin.getServer().getVersion().getVersion().split(" ")[0]); diff --git a/proxy/src/main/java/dev/plex/settings/ServerSettings.java b/proxy/src/main/java/dev/plex/settings/ServerSettings.java index ef40d3b..f645db0 100644 --- a/proxy/src/main/java/dev/plex/settings/ServerSettings.java +++ b/proxy/src/main/java/dev/plex/settings/ServerSettings.java @@ -15,7 +15,7 @@ public class ServerSettings @Data public static class Server { private String name = "Server"; - private String motd = "%randomgradient%%servername% - %mcversion%"; + private List motd = Lists.newArrayList("%randomgradient%%servername% - %mcversion%", "Another motd"); private boolean colorizeMotd = false; private boolean debug = false; private final List sample = Lists.newArrayList("example", "example"); diff --git a/proxy/src/main/resources/config.toml b/proxy/src/main/resources/config.toml index 37c5eaa..28b100e 100644 --- a/proxy/src/main/resources/config.toml +++ b/proxy/src/main/resources/config.toml @@ -13,7 +13,7 @@ # %servername% - The name provided above # %randomgradient% - Creates a random gradient every ping of two random colors for the whole string # Supports MiniMessage strings, no legacy & and ยง - motd = "%randomgradient%%servername% - %mcversion%" + motd = ["%randomgradient%%servername% - %mcversion%", "Another motd"] colorizeMotd = false # Enables debug messages diff --git a/server/src/main/java/dev/plex/Plex.java b/server/src/main/java/dev/plex/Plex.java index d7d4896..856d21e 100644 --- a/server/src/main/java/dev/plex/Plex.java +++ b/server/src/main/java/dev/plex/Plex.java @@ -7,8 +7,10 @@ import dev.plex.cache.PlayerCache; import dev.plex.config.Config; import dev.plex.handlers.CommandHandler; import dev.plex.handlers.ListenerHandler; +import dev.plex.listener.impl.ChatListener; import dev.plex.module.ModuleManager; import dev.plex.player.PlexPlayer; +import dev.plex.api.plugin.PlexPlugin; import dev.plex.punishment.PunishmentManager; import dev.plex.rank.RankManager; import dev.plex.services.ServiceManager; @@ -34,11 +36,10 @@ import net.milkbowl.vault.permission.Permission; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; @Getter @Setter -public class Plex extends JavaPlugin +public class Plex extends PlexPlugin { private static Plex plugin; @@ -83,6 +84,7 @@ public class Plex extends JavaPlugin @Override public void onLoad() { + super.onLoad(); plugin = this; config = new Config(this, "config.yml"); messages = new Config(this, "messages.yml"); @@ -99,6 +101,8 @@ public class Plex extends JavaPlugin moduleManager = new ModuleManager(); moduleManager.loadAllModules(); moduleManager.loadModules(); + + this.setChatHandler(new ChatListener.ChatHandlerImpl()); } @Override diff --git a/server/src/main/java/dev/plex/listener/impl/ChatListener.java b/server/src/main/java/dev/plex/listener/impl/ChatListener.java index 08cfbcb..05c92da 100644 --- a/server/src/main/java/dev/plex/listener/impl/ChatListener.java +++ b/server/src/main/java/dev/plex/listener/impl/ChatListener.java @@ -1,5 +1,6 @@ package dev.plex.listener.impl; +import dev.plex.api.chat.IChatHandler; import dev.plex.cache.PlayerCache; import dev.plex.listener.PlexListener; import dev.plex.listener.annotation.Toggleable; @@ -24,26 +25,34 @@ import org.jetbrains.annotations.NotNull; public class ChatListener extends PlexListener { private final static TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig.builder().match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]").replacement((matchResult, builder) -> Component.empty().content(matchResult.group()).clickEvent(ClickEvent.openUrl(matchResult.group()))).build(); - private final PlexChatRenderer renderer = new PlexChatRenderer(); @EventHandler public void onChat(AsyncChatEvent event) { - PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(event.getPlayer().getUniqueId()); - Component prefix = plugin.getRankManager().getPrefix(plexPlayer); + plugin.getChatHandler().doChat(event); + } - if (prefix != null) + public static class ChatHandlerImpl implements IChatHandler + { + private final PlexChatRenderer renderer = new PlexChatRenderer(); + @Override + public void doChat(AsyncChatEvent event) { - renderer.hasPrefix = true; - renderer.prefix = prefix; - } - else - { - renderer.hasPrefix = false; - renderer.prefix = null; - } + PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(event.getPlayer().getUniqueId()); + Component prefix = plugin.getRankManager().getPrefix(plexPlayer); - event.renderer(renderer); + if (prefix != null) + { + renderer.hasPrefix = true; + renderer.prefix = prefix; + } else + { + renderer.hasPrefix = false; + renderer.prefix = null; + } + + event.renderer(renderer); + } } public static class PlexChatRenderer implements ChatRenderer