From 3a60dada350ea9b1d67cbf4337c4d22f5c258984 Mon Sep 17 00:00:00 2001 From: destro174 <40720638+destro174@users.noreply.github.com> Date: Thu, 24 Jun 2021 23:08:13 +0200 Subject: [PATCH] git somehow ignored these files --- .../com/alttd/chat/commands/GlobalChat.java | 38 ++++++++ .../java/com/alttd/chat/commands/Message.java | 27 ++++++ .../java/com/alttd/chat/commands/Reply.java | 28 ++++++ .../alttd/chat/listeners/ChatListener.java | 89 +++++++++++++++++++ 4 files changed, 182 insertions(+) create mode 100755 galaxy/src/main/java/com/alttd/chat/commands/GlobalChat.java create mode 100644 galaxy/src/main/java/com/alttd/chat/commands/Message.java create mode 100644 galaxy/src/main/java/com/alttd/chat/commands/Reply.java create mode 100755 galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java diff --git a/galaxy/src/main/java/com/alttd/chat/commands/GlobalChat.java b/galaxy/src/main/java/com/alttd/chat/commands/GlobalChat.java new file mode 100755 index 0000000..96930d5 --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/commands/GlobalChat.java @@ -0,0 +1,38 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.ChatPlugin; +import com.alttd.chat.managers.ChatUserManager; +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Objects; + +public class GlobalChat implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { // must be a player + return true; + } + Player player = (Player) sender; + if(args.length == 0) return false; + if(args[0].equalsIgnoreCase("togglegc")) { + new BukkitRunnable() { + @Override + public void run() { + Objects.requireNonNull(ChatUserManager.getChatUser(((Player) sender).getUniqueId())).toggleGc(); + } + }.runTask(ChatPlugin.getInstance()); + return false; + } + + String message = StringUtils.join(args, " ", 0, args.length); + ChatPlugin.getInstance().getChatHandler().globalChat(player, message); + return false; + } + +} diff --git a/galaxy/src/main/java/com/alttd/chat/commands/Message.java b/galaxy/src/main/java/com/alttd/chat/commands/Message.java new file mode 100644 index 0000000..59c840f --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/commands/Message.java @@ -0,0 +1,27 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.ChatPlugin; +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +public class Message implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { // must be a player, @teri should console be able to /msg? + return true; + } + Player player = (Player) sender; + if(args.length > 2) return false; // todo error message or command info + + String message = StringUtils.join(args, " ", 1, args.length); + ChatPlugin.getInstance().getChatHandler().privateMessage(player, args[0], message); + return false; + } + + // Teri, is Tabcompleter needed here? we already have spigot setup to complete playernames on tab, doesn't work for crossserver stuff and offline players +} diff --git a/galaxy/src/main/java/com/alttd/chat/commands/Reply.java b/galaxy/src/main/java/com/alttd/chat/commands/Reply.java new file mode 100644 index 0000000..50cf6ab --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/commands/Reply.java @@ -0,0 +1,28 @@ +package com.alttd.chat.commands; + +import com.alttd.chat.ChatPlugin; +import com.alttd.chat.managers.ChatUserManager; +import com.alttd.chat.objects.ChatUser; +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Reply implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(!(sender instanceof Player)) { // must be a player, @teri should console be able to /msg? + return true; + } + Player player = (Player) sender; + ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); + if (user.getReplyTarget() == null) return false; + if(args.length == 0) return false; // todo error message or command info + + String message = StringUtils.join(args, " ", 0, args.length); + ChatPlugin.getInstance().getChatHandler().privateMessage(player, user.getReplyTarget(), message); + return false; + } +} diff --git a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java new file mode 100755 index 0000000..3ba14d5 --- /dev/null +++ b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java @@ -0,0 +1,89 @@ +package com.alttd.chat.listeners; + +import com.alttd.chat.config.Config; +import com.alttd.chat.handler.ChatHandler; +import com.alttd.chat.managers.ChatUserManager; +import com.alttd.chat.managers.RegexManager; +import com.alttd.chat.objects.ChatUser; +import com.alttd.chat.util.Utility; +import io.papermc.paper.chat.ChatRenderer; +import io.papermc.paper.event.player.AsyncChatEvent; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.Template; +import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class ChatListener implements Listener, ChatRenderer { + + @EventHandler(ignoreCancelled = true) + public void onPlayerChat(AsyncChatEvent event) { // this should also include a way to prevent a player from seeing chat + // @teri what about mutes? + Player player = event.getPlayer(); + ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); + + // tweak this to make this slightly better:/ + event.viewers().removeIf(audience -> audience instanceof Player + && user.getIgnoredPlayers().contains(((Player) audience).getUniqueId())); +/* Set viewers = event.viewers(); + Set ignores = new HashSet<>(); + for(Audience audience : viewers) { // I don't like this setup, might alter this API to expose players... + if(audience instanceof Player) { // the player option is removed in 1.17=/ bad paper devs + UUID uuid = ((Player) audience).getUniqueId(); + if(user.getIgnoredPlayers().contains(uuid)) { + ignores.add(audience); + } + } + } + event.viewers().removeAll(ignores);*/ + + Component input = event.message(); + String message = PlainComponentSerializer.plain().serialize(input); + + message = RegexManager.replaceText(message); // todo a better way for this + if(message == null) return; // the message was blocked + + MiniMessage miniMessage = MiniMessage.get(); + if(!player.hasPermission("chat.format")) { + message = miniMessage.stripTokens(message); + } else { + message = Utility.parseColors(message); + } + + if(message.contains("[i]")) + message = message.replace("[i]", "<[i]>"); // end of todo + + List