diff --git a/.gitignore b/.gitignore
index 9103db8..f5f928a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-# ProxyUtils
+# Chat
+*/target/
.idea
testserver
run
diff --git a/api/pom.xml b/api/pom.xml
new file mode 100644
index 0000000..e10dc6e
--- /dev/null
+++ b/api/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+
+
+ 11
+ 11
+
+
+
+ com.alttd.chat
+ Chat
+ 1.0
+
+
+ chat-api
+ jar
+
+
+ clean package
+ ${project.name}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 11
+ 11
+
+
+
+
+
+ src/main
+ true
+
+
+
+
+
+
+ net.luckperms
+ api
+ 5.3
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/api/src/main/java/com/alttd/chat/ChatAPI.java b/api/src/main/java/com/alttd/chat/ChatAPI.java
new file mode 100644
index 0000000..e377084
--- /dev/null
+++ b/api/src/main/java/com/alttd/chat/ChatAPI.java
@@ -0,0 +1,12 @@
+package com.alttd.chat;
+
+import net.luckperms.api.LuckPerms;
+
+public interface ChatAPI {
+
+ /*public static ChatAPI get() {
+ return ChatImplementation.INSTANCE;
+ }*/
+
+ LuckPerms getLuckPerms();
+}
diff --git a/api/src/main/java/com/alttd/chat/ChatImplementation.java b/api/src/main/java/com/alttd/chat/ChatImplementation.java
new file mode 100644
index 0000000..f9dae8b
--- /dev/null
+++ b/api/src/main/java/com/alttd/chat/ChatImplementation.java
@@ -0,0 +1,23 @@
+package com.alttd.chat;
+
+import net.luckperms.api.LuckPerms;
+import net.luckperms.api.LuckPermsProvider;
+
+public class ChatImplementation implements ChatAPI{
+
+ //public static final ChatAPI INSTANCE = new ChatImplementation();
+
+ private LuckPerms luckPerms;
+
+ ChatImplementation() {
+ // init database
+ // init depends//or set them the first time they are called?
+ }
+
+ @Override
+ public LuckPerms getLuckPerms() {
+ if(luckPerms == null)
+ luckPerms = LuckPermsProvider.get();
+ return luckPerms;
+ }
+}
diff --git a/galaxy/pom.xml b/galaxy/pom.xml
new file mode 100644
index 0000000..da639cd
--- /dev/null
+++ b/galaxy/pom.xml
@@ -0,0 +1,60 @@
+
+
+ 4.0.0
+
+
+ 11
+ 11
+
+
+
+ com.alttd.chat
+ Chat
+ 1.0
+
+
+ galaxy-chat
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ Alttd-Nexus
+ http://leo:8081/snapshots/
+
+
+
+
+
+ com.alttd.galaxy
+ galaxy-api
+ 1.16.5-R0.1-SNAPSHOT
+
+
+ com.alttd.chat
+ chat-api
+ ${project.version}
+ compile
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f7e7fc1..5030d11 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.alttd.chat
Chat
1.0
- jar
+ pom
Chat
@@ -17,102 +17,42 @@
11
+
- clean package
- ${project.name}
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.7.0
-
- 11
- 11
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.2.4
-
-
- package
-
- shade
-
-
-
-
- net.kyori:*
-
- META-INF/*.MF
-
-
-
-
-
- net.kyori:adventure-text-minimessage
-
-
- META-INF/*.MF
-
-
-
-
-
-
-
-
-
- src/main
- true
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
-
-
- velocitypowered-repo
- https://repo.velocitypowered.com/releases/
-
-
- minecraft-libraries
- https://libraries.minecraft.net/
-
-
- jcenter
- jcenter-bintray
- https://jcenter.bintray.com
-
-
- sonatype-oss-snapshots
- https://oss.sonatype.org/content/repositories/snapshots/
-
-
-
-
-
- com.velocitypowered
- velocity-api
- 1.1.4
- provided
-
-
- net.luckperms
- api
- 5.3
- provided
-
-
- net.dv8tion
- JDA
- 4.2.0_168
- provided
-
-
- net.kyori
- adventure-text-minimessage
- 4.1.0-SNAPSHOT
-
-
+
+ api
+ galaxy
+ velocity
+
diff --git a/src/main/java/com/alttd/chat/handlers/ChatHandler.java b/src/main/java/com/alttd/chat/handlers/ChatHandler.java
deleted file mode 100644
index c758017..0000000
--- a/src/main/java/com/alttd/chat/handlers/ChatHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.alttd.chat.handlers;
-
-import com.alttd.chat.config.Config;
-import com.velocitypowered.api.command.CommandSource;
-import com.velocitypowered.api.proxy.Player;
-import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.minimessage.MiniMessage;
-
-import java.util.*;
-
-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) {
- String senderName, serverName;
- Map map = new HashMap<>();
-
- if (source instanceof Player) {
- Player sender = (Player) source;
- senderName = sender.getUsername();
- serverName = sender.getCurrentServer().isPresent() ? sender.getCurrentServer().get().getServerInfo().getName() : "Altitude";
- } else {
- senderName = "Console"; // TODO console name from config
- serverName = "Altitude";
- }
- map.put("sender", senderName);
- map.put("message", message);
- map.put("server", serverName);
-
- for(ChatPlayer p: chatPlayers) {
- if(p.isGlobalChatEnabled());
- p.getPlayer().sendMessage(MiniMessage.get().parse(Config.GCFORMAT, map));
- //TODO send global chat with format from config
- }
- }
-}
diff --git a/velocity/pom.xml b/velocity/pom.xml
new file mode 100644
index 0000000..04f6295
--- /dev/null
+++ b/velocity/pom.xml
@@ -0,0 +1,121 @@
+
+
+ 4.0.0
+
+
+ 11
+ 11
+
+
+
+ com.alttd.chat
+ Chat
+ 1.0
+
+
+ velocity-chat
+ jar
+
+
+ clean package
+ ${project.name}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 11
+ 11
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+
+
+ net.kyori:*
+
+ META-INF/*.MF
+
+
+
+
+
+ net.kyori:adventure-text-minimessage
+
+
+ META-INF/*.MF
+
+
+
+
+
+
+
+
+
+ src/main
+ true
+
+
+
+
+
+
+ velocitypowered-repo
+ https://repo.velocitypowered.com/releases/
+
+
+ minecraft-libraries
+ https://libraries.minecraft.net/
+
+
+ jcenter
+ jcenter-bintray
+ https://jcenter.bintray.com
+
+
+ sonatype-oss-snapshots
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+
+
+
+
+ com.velocitypowered
+ velocity-api
+ 1.1.4
+ provided
+
+
+ net.luckperms
+ api
+ 5.3
+ provided
+
+
+ net.kyori
+ adventure-text-minimessage
+ 4.1.0-SNAPSHOT
+
+
+ com.alttd.chat
+ chat-api
+ ${project.version}
+ compile
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/alttd/chat/ChatPlugin.java b/velocity/src/main/java/com/alttd/chat/ChatPlugin.java
similarity index 75%
rename from src/main/java/com/alttd/chat/ChatPlugin.java
rename to velocity/src/main/java/com/alttd/chat/ChatPlugin.java
index a35eeb1..8a9eaf6 100644
--- a/src/main/java/com/alttd/chat/ChatPlugin.java
+++ b/velocity/src/main/java/com/alttd/chat/ChatPlugin.java
@@ -1,11 +1,15 @@
package com.alttd.chat;
+import com.alttd.chat.commands.GlobalAdminChat;
+import com.alttd.chat.commands.GlobalChat;
+import com.alttd.chat.commands.GlobalChatToggle;
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;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
+import com.velocitypowered.api.plugin.Dependency;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer;
@@ -18,7 +22,8 @@ import java.nio.file.Path;
@Plugin(id = "chatplugin", name = "ChatPlugin", version = "1.0.0",
description = "A chat plugin for Altitude Minecraft Server",
- authors = {"destro174", "teri"}
+ authors = {"destro174", "teri"},
+ dependencies = {@Dependency(id = "luckperms")}
)
public class ChatPlugin {
@@ -26,15 +31,15 @@ public class ChatPlugin {
private final ProxyServer server;
private final Logger logger;
private final Path dataDirectory;
- private LuckPerms luckPerms;
+ private ChatAPI chatAPI;
private ChatHandler chatHandler;
@Inject
- public ChatPlugin(ProxyServer proxyServer, Logger proxylogger, @DataDirectory Path proxydataDirectory) {
+ public ChatPlugin(ProxyServer proxyServer, Logger proxyLogger, @DataDirectory Path proxydataDirectory) {
plugin = this;
server = proxyServer;
- logger = proxylogger;
+ logger = proxyLogger;
dataDirectory = proxydataDirectory;
}
@@ -42,10 +47,9 @@ public class ChatPlugin {
public void onProxyInitialization(ProxyInitializeEvent event) {
Config.init(getDataDirectory());
loadCommands();
+ chatAPI = new ChatImplementation();
chatHandler = new ChatHandler();
server.getEventManager().register(this, new ChatListener());
- //statusTask = new StatusTask();
- //statusTask.init();
}
public File getDataDirectory() {
@@ -56,11 +60,6 @@ public class ChatPlugin {
return plugin;
}
- public LuckPerms getLuckPerms() {
- if(luckPerms == null)
- luckPerms = LuckPermsProvider.get();
- return luckPerms;
- }
public Logger getLogger() {
return logger;
@@ -71,9 +70,16 @@ public class ChatPlugin {
}
public void loadCommands() {
+ new GlobalAdminChat(server);
+ new GlobalChatToggle(server);
+ new GlobalChat(server);
// all commands go here
}
+ public ChatAPI API() {
+ return chatAPI;
+ }
+
public ChatHandler getChatHandler() {
return chatHandler;
}
diff --git a/velocity/src/main/java/com/alttd/chat/api/GlobalStaffChatEvent.java b/velocity/src/main/java/com/alttd/chat/api/GlobalStaffChatEvent.java
new file mode 100644
index 0000000..ededb1f
--- /dev/null
+++ b/velocity/src/main/java/com/alttd/chat/api/GlobalStaffChatEvent.java
@@ -0,0 +1,21 @@
+package com.alttd.chat.api;
+
+import com.velocitypowered.api.command.CommandSource;
+
+public class GlobalStaffChatEvent {
+ private final CommandSource sender;
+ private final String message;
+
+ public GlobalStaffChatEvent(CommandSource sender, String message) {
+ this.sender = sender;
+ this.message = message;
+ }
+
+ public CommandSource getSender() {
+ return sender;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
diff --git a/src/main/java/com/alttd/chat/api/MessageEvent.java b/velocity/src/main/java/com/alttd/chat/api/MessageEvent.java
similarity index 100%
rename from src/main/java/com/alttd/chat/api/MessageEvent.java
rename to velocity/src/main/java/com/alttd/chat/api/MessageEvent.java
diff --git a/velocity/src/main/java/com/alttd/chat/commands/GlobalAdminChat.java b/velocity/src/main/java/com/alttd/chat/commands/GlobalAdminChat.java
new file mode 100644
index 0000000..17deb72
--- /dev/null
+++ b/velocity/src/main/java/com/alttd/chat/commands/GlobalAdminChat.java
@@ -0,0 +1,42 @@
+package com.alttd.chat.commands;
+
+import com.alttd.chat.api.GlobalStaffChatEvent;
+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 GlobalAdminChat {
+
+ public GlobalAdminChat(ProxyServer proxyServer) {
+ LiteralCommandNode command = LiteralArgumentBuilder
+ .literal("globaladminchat")
+ .requires(ctx -> ctx.hasPermission("command.proxy.globaladminchat"))// TODO permission system? load permissions from config?
+ .then(RequiredArgumentBuilder
+ .argument("message", StringArgumentType.greedyString())
+ .executes(context -> {
+ proxyServer.getEventManager().fire(new GlobalStaffChatEvent(context.getSource(), context.getArgument("message", String.class)));
+ return 1;
+ }) // TODO call in the same way as gc?
+ )
+ .executes(context -> 0)
+ .build();
+
+ BrigadierCommand brigadierCommand = new BrigadierCommand(command);
+
+ CommandMeta.Builder metaBuilder = proxyServer.getCommandManager().metaBuilder(brigadierCommand);
+
+ for (String alias : Config.GACECOMMANDALIASES) {
+ metaBuilder.aliases(alias);
+ }
+
+ CommandMeta meta = metaBuilder.build();
+
+ proxyServer.getCommandManager().register(meta, brigadierCommand);
+ }
+}
diff --git a/src/main/java/com/alttd/chat/commands/GlobalChat.java b/velocity/src/main/java/com/alttd/chat/commands/GlobalChat.java
similarity index 96%
rename from src/main/java/com/alttd/chat/commands/GlobalChat.java
rename to velocity/src/main/java/com/alttd/chat/commands/GlobalChat.java
index 4e0848c..9f46f39 100644
--- a/src/main/java/com/alttd/chat/commands/GlobalChat.java
+++ b/velocity/src/main/java/com/alttd/chat/commands/GlobalChat.java
@@ -16,6 +16,7 @@ public class GlobalChat {
public GlobalChat(ProxyServer proxyServer) {
LiteralCommandNode command = LiteralArgumentBuilder
.literal("globalchat")
+ .requires(ctx -> ctx.hasPermission(Config.GCPERMISSION))
.requires(ctx -> ctx.hasPermission("command.proxy.globalchat"))// TODO permission system? load permissions from config?
.then(RequiredArgumentBuilder
.argument("message", StringArgumentType.greedyString())
@@ -25,7 +26,6 @@ public class GlobalChat {
})
)
.executes(context -> 0)
- .executes(context -> 0)
.build();
BrigadierCommand brigadierCommand = new BrigadierCommand(command);
diff --git a/velocity/src/main/java/com/alttd/chat/commands/GlobalChatToggle.java b/velocity/src/main/java/com/alttd/chat/commands/GlobalChatToggle.java
new file mode 100644
index 0000000..a408b36
--- /dev/null
+++ b/velocity/src/main/java/com/alttd/chat/commands/GlobalChatToggle.java
@@ -0,0 +1,51 @@
+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.Player;
+import com.velocitypowered.api.proxy.ProxyServer;
+import net.luckperms.api.LuckPerms;
+import net.luckperms.api.node.Node;
+
+public class GlobalChatToggle {
+
+ public GlobalChatToggle(ProxyServer proxyServer) {
+ LiteralCommandNode command = LiteralArgumentBuilder
+ .literal("toggleglobalchat")
+ .requires(ctx -> ctx instanceof Player)
+ .requires(ctx -> ctx.hasPermission("command.proxy.globalchat"))// TODO permission system? load permissions from config?
+ .then(RequiredArgumentBuilder
+ .argument("message", StringArgumentType.greedyString())
+ .executes(context -> {
+ LuckPerms luckPerms = ChatPlugin.getPlugin().API().getLuckPerms();
+ Player player = (Player) context;
+ luckPerms.getUserManager().modifyUser(player.getUniqueId(), user -> {
+ if(player.hasPermission(Config.GCPERMISSION)) { //TODO THIS MUST BE A CONSTANT FROM CONFIG?
+ user.data().add(Node.builder(Config.GCPERMISSION).build());
+ } else {
+ user.data().remove(Node.builder(Config.GCPERMISSION).build());
+ }
+ });
+ return 1;
+ })
+ )
+ .executes(context -> 0)
+ .build();
+
+ BrigadierCommand brigadierCommand = new BrigadierCommand(command);
+
+ CommandMeta.Builder metaBuilder = proxyServer.getCommandManager().metaBuilder(brigadierCommand);
+ metaBuilder.aliases("togglegc");
+
+ CommandMeta meta = metaBuilder.build();
+
+ proxyServer.getCommandManager().register(meta, brigadierCommand);
+ }
+}
diff --git a/src/main/java/com/alttd/chat/commands/Message.java b/velocity/src/main/java/com/alttd/chat/commands/Message.java
similarity index 100%
rename from src/main/java/com/alttd/chat/commands/Message.java
rename to velocity/src/main/java/com/alttd/chat/commands/Message.java
diff --git a/src/main/java/com/alttd/chat/config/Config.java b/velocity/src/main/java/com/alttd/chat/config/Config.java
similarity index 61%
rename from src/main/java/com/alttd/chat/config/Config.java
rename to velocity/src/main/java/com/alttd/chat/config/Config.java
index 0df1fb4..6ff3cd0 100644
--- a/src/main/java/com/alttd/chat/config/Config.java
+++ b/velocity/src/main/java/com/alttd/chat/config/Config.java
@@ -1,6 +1,8 @@
package com.alttd.chat.config;
+import com.alttd.chat.ChatPlugin;
import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
import ninja.leaping.configurate.ConfigurationNode;
import ninja.leaping.configurate.objectmapping.ObjectMappingException;
@@ -34,11 +36,17 @@ public final class Config {
.setFlowStyle(DumperOptions.FlowStyle.BLOCK)
.build();
if (!CONFIG_FILE.getParentFile().exists()) {
- CONFIG_FILE.getParentFile().mkdirs();
+ if(!CONFIG_FILE.getParentFile().mkdirs()) {
+ ChatPlugin.getPlugin().getLogger().error("Could create config and/or directory");
+ return;
+ }
}
if (!CONFIG_FILE.exists()) {
try {
- CONFIG_FILE.createNewFile();
+ if(!CONFIG_FILE.createNewFile()) {
+ ChatPlugin.getPlugin().getLogger().error("Could create config and/or directory");
+ return;
+ }
} catch (IOException error) {
error.printStackTrace();
}
@@ -71,9 +79,8 @@ public final class Config {
try {
method.setAccessible(true);
method.invoke(instance);
- } catch (InvocationTargetException ex) {
+ } catch (InvocationTargetException | IllegalAccessException ex) {
throw Throwables.propagate(ex.getCause());
- } catch (Exception ex) {
}
}
}
@@ -81,15 +88,15 @@ public final class Config {
try {
configLoader.save(config);
} catch (IOException ex) {
+ throw Throwables.propagate(ex.getCause());
}
}
- public static boolean saveConfig() {
+ public static void saveConfig() {
try {
configLoader.save(config);
- return true;
} catch (IOException ex) {
- return false;
+ throw Throwables.propagate(ex.getCause());
}
}
@@ -102,6 +109,14 @@ public final class Config {
config.getNode(splitPath(path)).setValue(def);
}
+ private static void setString(String path, String def) {
+ try {
+ if(config.getNode(splitPath(path)).isVirtual())
+ config.getNode(splitPath(path)).setValue(TypeToken.of(String.class), def);
+ } catch(ObjectMappingException ex) {
+ }
+ }
+
private static boolean getBoolean(String path, boolean def) {
set(path, def);
return config.getNode(splitPath(path)).getBoolean(def);
@@ -118,7 +133,7 @@ public final class Config {
}
private static String getString(String path, String def) {
- set(path, def);
+ setString(path, def);
return config.getNode(splitPath(path)).getString(def);
}
@@ -127,7 +142,7 @@ public final class Config {
return config.getNode(splitPath(path)).getLong(def);
}
- private static List getList(String path, T def) {
+ private static List getList(String path, T def) {
try {
set(path, def);
return config.getNode(splitPath(path)).getList(TypeToken.of(String.class));
@@ -137,38 +152,39 @@ public final class Config {
}
/** ONLY EDIT ANYTHING BELOW THIS LINE **/
+ public static List PREFIXGROUPS = new ArrayList<>();
+ private static void settings() {
+ PREFIXGROUPS = getList("settings.prefix-groups",
+ Lists.newArrayList("discord", "socialmedia", "eventteam", "eventleader", "youtube", "twitch", "developer"));
+ }
public static List MESSAGECOMMANDALIASES = new ArrayList<>();
public static List REPLYCOMMANDALIASES = new ArrayList<>();
- public static String MESSAGESENDER = " '>(Me -> ) ";
- public static String MESSAGERECIEVER = " '>( on -> Me) ";
+ 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");
- add("tell");
- }}).forEach(key -> {
- MESSAGECOMMANDALIASES.add(key.toString());
- });
- getList("commands.reply.aliases", new ArrayList(){{
- add("r");
- }}).forEach(key -> {
- REPLYCOMMANDALIASES.add(key.toString());
- });
+ MESSAGECOMMANDALIASES = getList("commands.message.aliases", Lists.newArrayList("msg", "whisper", "tell"));
+ REPLYCOMMANDALIASES = getList("commands.reply.aliases", Lists.newArrayList("r"));
MESSAGESENDER = getString("commands.message.sender-message", MESSAGESENDER);
MESSAGERECIEVER = getString("commands.message.reciever-message", MESSAGERECIEVER);
}
public static List GCCOMMANDALIASES = new ArrayList<>();
- public static String GCFORMAT = "[&d{luckperms_prefix_element_highest}&f] &7{cmi_user_display_name} &eto Global&7: {message}";
+ public static String GCFORMAT = " >to Global: ";
+ public static String GCPERMISSION = "proxy.globalchat";
private static void globalChat() {
MESSAGERECIEVER = getString("commands.globalchat.format", MESSAGERECIEVER);
- getList("commands.globalchat.aliases", new ArrayList(){{
- add("gc");
- }}).forEach(key -> {
- GCCOMMANDALIASES.add(key.toString());
- });
+ GCPERMISSION = getString("commands.globalchat.view-chat-permission", GCPERMISSION);
+ GCCOMMANDALIASES = getList("commands.globalchat.aliases", Lists.newArrayList("gc"));
}
+
+ public static List GACECOMMANDALIASES = new ArrayList<>();
+ public static String GACFORMAT = " >( on -> Team) ";
+ private static void globalAdminChat() {
+ GACECOMMANDALIASES = getList("commands.globaladminchat.aliases", Lists.newArrayList("acg"));
+ GACFORMAT = getString("commands.globaladminchat.format", GACFORMAT);
+ }
+
}
diff --git a/src/main/java/com/alttd/chat/config/ServerConfig.java b/velocity/src/main/java/com/alttd/chat/config/ServerConfig.java
similarity index 82%
rename from src/main/java/com/alttd/chat/config/ServerConfig.java
rename to velocity/src/main/java/com/alttd/chat/config/ServerConfig.java
index eaf8a6e..c6eaad4 100644
--- a/src/main/java/com/alttd/chat/config/ServerConfig.java
+++ b/velocity/src/main/java/com/alttd/chat/config/ServerConfig.java
@@ -1,5 +1,8 @@
package com.alttd.chat.config;
+import com.google.common.reflect.TypeToken;
+import ninja.leaping.configurate.objectmapping.ObjectMappingException;
+
import java.util.regex.Pattern;
public final class ServerConfig {
@@ -31,6 +34,14 @@ public final class ServerConfig {
}
}
+ private static void setString(String path, String def) {
+ try {
+ if(Config.config.getNode(splitPath(path)).isVirtual())
+ Config.config.getNode(splitPath(path)).setValue(TypeToken.of(String.class), def);
+ } catch(ObjectMappingException ex) {
+ }
+ }
+
private boolean getBoolean(String path, boolean def) {
set(defaultPath +path, def);
return Config.config.getNode(splitPath(configPath+path)).getBoolean(
diff --git a/velocity/src/main/java/com/alttd/chat/handlers/ChatHandler.java b/velocity/src/main/java/com/alttd/chat/handlers/ChatHandler.java
new file mode 100644
index 0000000..d99767e
--- /dev/null
+++ b/velocity/src/main/java/com/alttd/chat/handlers/ChatHandler.java
@@ -0,0 +1,132 @@
+package com.alttd.chat.handlers;
+
+import com.alttd.chat.ChatPlugin;
+import com.alttd.chat.config.Config;
+import com.velocitypowered.api.command.CommandSource;
+import com.velocitypowered.api.proxy.Player;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+import net.luckperms.api.LuckPerms;
+import net.luckperms.api.model.group.Group;
+import net.luckperms.api.model.user.User;
+
+import java.util.*;
+
+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) {
+ String senderName, serverName, prefix;
+ Map map = new HashMap<>();
+
+ if (source instanceof Player) {
+ Player sender = (Player) source;
+ senderName = sender.getUsername();
+ serverName = sender.getCurrentServer().isPresent() ? sender.getCurrentServer().get().getServerInfo().getName() : "Altitude";
+ prefix = getPrefix(sender);
+ } else {
+ senderName = "Console"; // TODO console name from config
+ serverName = "Altitude";
+ prefix = "";
+ }
+
+ MiniMessage miniMessage = MiniMessage.get();
+
+ map.put("sender", senderName);
+ map.put("message", message);
+ map.put("server", serverName);
+ map.put("prefix", prefix);
+
+ Component component = miniMessage.parse(Config.GCFORMAT, map);
+
+ for(Player p: ChatPlugin.getPlugin().getProxy().getAllPlayers()) {
+ if(p.hasPermission(Config.GCPERMISSION));
+ p.sendMessage(component);
+ //TODO send global chat with format from config
+ }
+
+ }
+
+ /**
+ * returns a component containing all prefixes a player has.
+ *
+ * @param player the player
+ * @return a prefix component
+ */
+ public String getPrefix(Player player) {
+ return getPrefix(player, false);
+ }
+
+ /**
+ * returns a component containing all or only the highest prefix a player has.
+ *
+ * @param player the player
+ * @param highest
+ * @return a prefix component
+ */
+ public String getPrefix(Player player, boolean highest) {
+ // TODO cache these components on load, and return them here?
+ StringBuilder prefix = new StringBuilder();
+ LuckPerms luckPerms = ChatPlugin.getPlugin().API().getLuckPerms();
+ User user = luckPerms.getUserManager().getUser(player.getUniqueId());
+ if(user == null) return "";
+ if(!highest) {
+ Collection inheritedGroups = user.getInheritedGroups(user.getQueryOptions());
+ inheritedGroups.stream()
+ .sorted(Comparator.comparingInt(o -> o.getWeight().orElse(0)))
+ .forEach(group -> {
+ if (Config.PREFIXGROUPS.contains(group.getName())) {
+ prefix.append("[").append(group.getCachedData().getMetaData().getPrefix()).append("]");
+ }
+ });
+ }
+ LegacyComponentSerializer.builder().character('&').hexColors();
+ prefix.append("[").append(user.getCachedData().getMetaData().getPrefix()).append("]");
+ /*component= MiniMessage.get().parse(prefix.toString());
+ CompletableFuture userFuture = luckPerms.getUserManager().loadUser(player.getUniqueId());
+ userFuture.thenAcceptAsync(user -> {
+ Collection inheritedGroups = user.getInheritedGroups(user.getQueryOptions());
+ inheritedGroups.stream()
+ .sorted((o1, o2) -> Integer.compare(o1.getWeight().orElse(0), o2.getWeight().orElse(0)))
+ .forEach(group -> {
+ if(Config.PREFIXGROUPS.contains(group.getName())) {
+ prefix.append("[").append(group.getCachedData().getMetaData().getPrefix()).append("]");
+ }
+ });
+ return MiniMessage.get().parse(prefix.toString());
+ });*/
+ //return MiniMessage.get().parse(prefix.toString());
+ return prefix.toString();
+ }
+}
diff --git a/src/main/java/com/alttd/chat/handlers/ChatPlayer.java b/velocity/src/main/java/com/alttd/chat/handlers/ChatPlayer.java
similarity index 100%
rename from src/main/java/com/alttd/chat/handlers/ChatPlayer.java
rename to velocity/src/main/java/com/alttd/chat/handlers/ChatPlayer.java
diff --git a/src/main/java/com/alttd/chat/listeners/ChatListener.java b/velocity/src/main/java/com/alttd/chat/listeners/ChatListener.java
similarity index 64%
rename from src/main/java/com/alttd/chat/listeners/ChatListener.java
rename to velocity/src/main/java/com/alttd/chat/listeners/ChatListener.java
index ef12336..eba136b 100644
--- a/src/main/java/com/alttd/chat/listeners/ChatListener.java
+++ b/velocity/src/main/java/com/alttd/chat/listeners/ChatListener.java
@@ -1,6 +1,7 @@
package com.alttd.chat.listeners;
import com.alttd.chat.ChatPlugin;
+import com.alttd.chat.api.GlobalStaffChatEvent;
import com.alttd.chat.api.MessageEvent;
import com.alttd.chat.config.Config;
import com.velocitypowered.api.command.CommandSource;
@@ -13,7 +14,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
import java.util.HashMap;
import java.util.Map;
-
+// TODO code CLEANUP
public class ChatListener {
private ChatPlugin plugin;
@@ -52,6 +53,35 @@ public class ChatListener {
event.getRecipient().sendMessage(receiverMessage);
}
+ @Subscribe(order = PostOrder.FIRST)
+ public void onGlobalStaffChat(GlobalStaffChatEvent event) {
+ String senderName;
+ String serverName;
+ CommandSource commandSource = event.getSender();
+ if (commandSource instanceof Player) {
+ Player sender = (Player) event.getSender();
+ senderName = sender.getUsername();
+ serverName = sender.getCurrentServer().isPresent() ? sender.getCurrentServer().get().getServerInfo().getName() : "Altitude";
+ } else {
+ senderName = "Console"; // TODO console name from config
+ serverName = "Proxy";
+ }
+
+ MiniMessage miniMessage = MiniMessage.get();
+
+ Map map = new HashMap<>();
+
+ map.put("sender", senderName);
+ map.put("message", event.getMessage());
+ map.put("server", serverName);
+
+ Component message = miniMessage.parse(Config.GACFORMAT, map);
+
+ plugin.getProxy().getAllPlayers().stream().filter(target -> target.hasPermission("command.proxy.globaladminchat")).forEach(target -> {
+ target.sendMessage(message);
+ });
+ }
+
@Subscribe(order = PostOrder.FIRST)
public void onPlayerChat(PlayerChatEvent event) {
// do stuff
diff --git a/src/main/java/com/alttd/chat/listeners/PlayerListener.java b/velocity/src/main/java/com/alttd/chat/listeners/PlayerListener.java
similarity index 100%
rename from src/main/java/com/alttd/chat/listeners/PlayerListener.java
rename to velocity/src/main/java/com/alttd/chat/listeners/PlayerListener.java
diff --git a/src/main/java/com/alttd/chat/util/Regex.java b/velocity/src/main/java/com/alttd/chat/util/Regex.java
similarity index 94%
rename from src/main/java/com/alttd/chat/util/Regex.java
rename to velocity/src/main/java/com/alttd/chat/util/Regex.java
index 641fe5f..353c2f6 100644
--- a/src/main/java/com/alttd/chat/util/Regex.java
+++ b/velocity/src/main/java/com/alttd/chat/util/Regex.java
@@ -11,6 +11,7 @@ public class Regex {
private static final HashMap> cancelRegex = new HashMap<>();
private static final HashMap replaceRegex = new HashMap<>();
+ // IDEA: Regex object -> RegexPattern, shatteredPattern, replacement, replacements
public static void initRegex() {
//TODO load data from config (a regex string, and it's exceptions if there are any)
cancelRegex.put(Pattern.compile("\\b([R]+[^\\w]?[4A]+[^\\w]?[P]+(([^\\w]?[E3]+[^\\w]?[DT]*)|([^\\w]?[I!1]+[^\\w]?[S5]+[^\\w]?[T7]+)|([^\\w]?[I!1]+[^\\w]?[N]+[^\\w]?[G69]+)))\\b"), new ArrayList<>());