From 6cfa890923e89ae885afbc8e039b26aec9f46870 Mon Sep 17 00:00:00 2001 From: len <40720638+destro174@users.noreply.github.com> Date: Mon, 3 May 2021 17:51:35 +0200 Subject: [PATCH] Added ChatPlayer object and handlers, started working on globalchat command --- src/main/java/com/alttd/chat/ChatPlugin.java | 10 +++- .../com/alttd/chat/commands/GlobalChat.java | 43 ++++++++++++++++ .../java/com/alttd/chat/commands/Message.java | 7 +-- .../java/com/alttd/chat/config/Config.java | 13 +++++ .../com/alttd/chat/handlers/ChatHandler.java | 49 +++++++++++++++++++ .../com/alttd/chat/handlers/ChatPlayer.java | 32 ++++++++++++ .../alttd/chat/listeners/ChatListener.java | 26 ++++++++-- .../alttd/chat/listeners/PlayerListener.java | 21 ++++++++ 8 files changed, 191 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/alttd/chat/commands/GlobalChat.java create mode 100644 src/main/java/com/alttd/chat/handlers/ChatHandler.java create mode 100644 src/main/java/com/alttd/chat/handlers/ChatPlayer.java create mode 100644 src/main/java/com/alttd/chat/listeners/PlayerListener.java diff --git a/src/main/java/com/alttd/chat/ChatPlugin.java b/src/main/java/com/alttd/chat/ChatPlugin.java index d805f3b..a35eeb1 100644 --- a/src/main/java/com/alttd/chat/ChatPlugin.java +++ b/src/main/java/com/alttd/chat/ChatPlugin.java @@ -1,6 +1,7 @@ package com.alttd.chat; import com.alttd.chat.config.Config; +import com.alttd.chat.handlers.ChatHandler; import com.alttd.chat.listeners.ChatListener; import com.google.inject.Inject; import com.velocitypowered.api.event.Subscribe; @@ -27,6 +28,8 @@ public class ChatPlugin { private final Path dataDirectory; private LuckPerms luckPerms; + private ChatHandler chatHandler; + @Inject public ChatPlugin(ProxyServer proxyServer, Logger proxylogger, @DataDirectory Path proxydataDirectory) { plugin = this; @@ -39,6 +42,7 @@ public class ChatPlugin { public void onProxyInitialization(ProxyInitializeEvent event) { Config.init(getDataDirectory()); loadCommands(); + chatHandler = new ChatHandler(); server.getEventManager().register(this, new ChatListener()); //statusTask = new StatusTask(); //statusTask.init(); @@ -48,7 +52,7 @@ public class ChatPlugin { return dataDirectory.toFile(); } - public static ChatPlugin getInstance() { + public static ChatPlugin getPlugin() { return plugin; } @@ -69,4 +73,8 @@ public class ChatPlugin { public void loadCommands() { // all commands go here } + + public ChatHandler getChatHandler() { + return chatHandler; + } } diff --git a/src/main/java/com/alttd/chat/commands/GlobalChat.java b/src/main/java/com/alttd/chat/commands/GlobalChat.java new file mode 100644 index 0000000..4e0848c --- /dev/null +++ b/src/main/java/com/alttd/chat/commands/GlobalChat.java @@ -0,0 +1,43 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.ChatPlugin; +import com.alttd.chat.config.Config; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.builder.RequiredArgumentBuilder; +import com.mojang.brigadier.tree.LiteralCommandNode; +import com.velocitypowered.api.command.BrigadierCommand; +import com.velocitypowered.api.command.CommandMeta; +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.ProxyServer; + +public class GlobalChat { + + public GlobalChat(ProxyServer proxyServer) { + LiteralCommandNode command = LiteralArgumentBuilder + .literal("globalchat") + .requires(ctx -> ctx.hasPermission("command.proxy.globalchat"))// TODO permission system? load permissions from config? + .then(RequiredArgumentBuilder + .argument("message", StringArgumentType.greedyString()) + .executes(context -> { + ChatPlugin.getPlugin().getChatHandler().globalChat(context.getSource(), context.getArgument("message", String.class)); + return 1; + }) + ) + .executes(context -> 0) + .executes(context -> 0) + .build(); + + BrigadierCommand brigadierCommand = new BrigadierCommand(command); + + CommandMeta.Builder metaBuilder = proxyServer.getCommandManager().metaBuilder(brigadierCommand); + + for (String alias : Config.GCCOMMANDALIASES) { + metaBuilder.aliases(alias); + } + + CommandMeta meta = metaBuilder.build(); + + proxyServer.getCommandManager().register(meta, brigadierCommand); + } +} diff --git a/src/main/java/com/alttd/chat/commands/Message.java b/src/main/java/com/alttd/chat/commands/Message.java index 8183dde..88eeff1 100644 --- a/src/main/java/com/alttd/chat/commands/Message.java +++ b/src/main/java/com/alttd/chat/commands/Message.java @@ -9,14 +9,9 @@ import com.mojang.brigadier.tree.LiteralCommandNode; import com.velocitypowered.api.command.BrigadierCommand; import com.velocitypowered.api.command.CommandMeta; import com.velocitypowered.api.command.CommandSource; -import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; -import java.util.HashMap; -import java.util.Map; import java.util.Optional; public class Message { @@ -43,6 +38,8 @@ public class Message { proxyServer.getEventManager().fire(new MessageEvent(context.getSource(), receiver, context.getArgument("message", String.class))); return 1; + } else { + // TODO NOBODY TO REPLY TO } return 0; }) diff --git a/src/main/java/com/alttd/chat/config/Config.java b/src/main/java/com/alttd/chat/config/Config.java index 5fc4069..d40ef18 100644 --- a/src/main/java/com/alttd/chat/config/Config.java +++ b/src/main/java/com/alttd/chat/config/Config.java @@ -139,10 +139,13 @@ public final class Config { /** ONLY EDIT ANYTHING BELOW THIS LINE **/ public static List MESSAGECOMMANDALIASES = new ArrayList<>(); + public static List REPLYCOMMANDALIASES = new ArrayList<>(); + public static List GCCOMMANDALIASES = new ArrayList<>(); public static String MESSAGESENDER = " '>(Me -> ) "; public static String MESSAGERECIEVER = " '>( on -> Me) "; private static void messageCommand() { MESSAGECOMMANDALIASES.clear(); + REPLYCOMMANDALIASES.clear(); getList("commands.message.aliases", new ArrayList(){{ add("msg"); add("whisper"); @@ -150,6 +153,16 @@ public final class Config { }}).forEach(key -> { MESSAGECOMMANDALIASES.add(key.toString()); }); + getList("commands.reply.aliases", new ArrayList(){{ + add("r"); + }}).forEach(key -> { + REPLYCOMMANDALIASES.add(key.toString()); + }); + getList("commands.globalchat.aliases", new ArrayList(){{ + add("gc"); + }}).forEach(key -> { + GCCOMMANDALIASES.add(key.toString()); + }); MESSAGESENDER = getString("commands.message.sender-message", MESSAGESENDER); MESSAGERECIEVER = getString("commands.message.reciever-message", MESSAGERECIEVER); } diff --git a/src/main/java/com/alttd/chat/handlers/ChatHandler.java b/src/main/java/com/alttd/chat/handlers/ChatHandler.java new file mode 100644 index 0000000..355e0fd --- /dev/null +++ b/src/main/java/com/alttd/chat/handlers/ChatHandler.java @@ -0,0 +1,49 @@ +package com.alttd.chat.handlers; + +import com.velocitypowered.api.command.CommandSource; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +public class ChatHandler { + + private List chatPlayers; + + public ChatHandler() { + chatPlayers = new ArrayList<>(); + } + + public void addPlayer(ChatPlayer chatPlayer) { + chatPlayers.add(chatPlayer); + } + + public void removePlayer(ChatPlayer chatPlayer) { + if(chatPlayer != null) + chatPlayers.remove(chatPlayer); + } + + public void removePlayer(UUID uuid) { + removePlayer(getChatPlayer(uuid)); + } + + public ChatPlayer getChatPlayer(UUID uuid) { + for(ChatPlayer p: chatPlayers) { + if(p.getUuid() == uuid) + return p; + } + return null; + } + + public List getChatPlayers() { + return Collections.unmodifiableList(chatPlayers); + } + + public void globalChat(CommandSource source, String message) { + for(ChatPlayer p: chatPlayers) { + if(p.isGlobalChatEnabled()); + //TODO send global chat with format from config + } + } +} diff --git a/src/main/java/com/alttd/chat/handlers/ChatPlayer.java b/src/main/java/com/alttd/chat/handlers/ChatPlayer.java new file mode 100644 index 0000000..d718ce2 --- /dev/null +++ b/src/main/java/com/alttd/chat/handlers/ChatPlayer.java @@ -0,0 +1,32 @@ +package com.alttd.chat.handlers; + +import java.util.UUID; + +public class ChatPlayer { + + private UUID uuid; + private UUID replyTarget; + private boolean globalChatEnabled; + + public ChatPlayer(UUID uuid) { + this.uuid = uuid; + this.replyTarget = null; + } + + public UUID getUuid() { + return uuid; + } + + public boolean isGlobalChatEnabled() { + return globalChatEnabled; + } + + public UUID getReplyTarget() { + return replyTarget; + } + + public void setReplyTarget(UUID uuid) { + if(!replyTarget.equals(uuid)) + replyTarget = uuid; + } +} diff --git a/src/main/java/com/alttd/chat/listeners/ChatListener.java b/src/main/java/com/alttd/chat/listeners/ChatListener.java index 2c32d66..ef12336 100644 --- a/src/main/java/com/alttd/chat/listeners/ChatListener.java +++ b/src/main/java/com/alttd/chat/listeners/ChatListener.java @@ -1,8 +1,12 @@ package com.alttd.chat.listeners; +import com.alttd.chat.ChatPlugin; import com.alttd.chat.api.MessageEvent; import com.alttd.chat.config.Config; +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.player.PlayerChatEvent; import com.velocitypowered.api.proxy.Player; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -12,16 +16,23 @@ import java.util.Map; public class ChatListener { - @Subscribe + private ChatPlugin plugin; + + public ChatListener() { + plugin = ChatPlugin.getPlugin(); + } + + @Subscribe(order = PostOrder.FIRST) public void onMessage(MessageEvent event) { String senderName; String receiverName; - - if (event.getSender() instanceof Player) { + CommandSource commandSource = event.getSender(); + if (commandSource instanceof Player) { Player sender = (Player) event.getSender(); senderName = sender.getUsername(); + plugin.getChatHandler().getChatPlayer(sender.getUniqueId()).setReplyTarget(event.getRecipient().getUniqueId()); // TODO this needs to be cleaner } else { - senderName = "UNKNOWN"; + senderName = "Console"; // TODO console name from config } receiverName = event.getRecipient().getUsername(); @@ -40,4 +51,11 @@ public class ChatListener { event.getSender().sendMessage(senderMessage); event.getRecipient().sendMessage(receiverMessage); } + + @Subscribe(order = PostOrder.FIRST) + public void onPlayerChat(PlayerChatEvent event) { + // do stuff + } + + } diff --git a/src/main/java/com/alttd/chat/listeners/PlayerListener.java b/src/main/java/com/alttd/chat/listeners/PlayerListener.java new file mode 100644 index 0000000..d690a1c --- /dev/null +++ b/src/main/java/com/alttd/chat/listeners/PlayerListener.java @@ -0,0 +1,21 @@ +package com.alttd.chat.listeners; + +import com.alttd.chat.ChatPlugin; +import com.alttd.chat.handlers.ChatPlayer; +import com.velocitypowered.api.event.PostOrder; +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.connection.DisconnectEvent; +import com.velocitypowered.api.event.connection.LoginEvent; + +public class PlayerListener { + + @Subscribe(order = PostOrder.FIRST) + public void onPlayerLogin(LoginEvent event) { + ChatPlugin.getPlugin().getChatHandler().addPlayer(new ChatPlayer(event.getPlayer().getUniqueId())); + } + + @Subscribe + public void quitEvent(DisconnectEvent event) { + ChatPlugin.getPlugin().getChatHandler().removePlayer(event.getPlayer().getUniqueId()); + } +}