From 93dc8c4b41b6dfbae7cae86c4e58c8ddea025430 Mon Sep 17 00:00:00 2001 From: Ausonia Date: Tue, 4 Mar 2025 23:59:28 -0600 Subject: [PATCH] Add Melon Proxy Plugin Files --- .idea/.gitignore | 3 + .idea/.name | 1 + .idea/compiler.xml | 15 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 30 ++++ .idea/misc.xml | 14 ++ .idea/modules.xml | 10 ++ MelonEconomy-Proxy.iml | 14 ++ Melon_Proxy.iml | 14 ++ Melon_Proxy_Helper.iml | 13 ++ pom.xml | 62 +++++++ .../org/derek/melon_proxy/MelonProxy.java | 151 ++++++++++++++++++ 12 files changed, 334 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 MelonEconomy-Proxy.iml create mode 100644 Melon_Proxy.iml create mode 100644 Melon_Proxy_Helper.iml create mode 100644 pom.xml create mode 100644 src/main/java/org/derek/melon_proxy/MelonProxy.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..7aad4db --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +MelonProxy.java \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..20a94da --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..31fd7b4 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..463551f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fe15007 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/MelonEconomy-Proxy.iml b/MelonEconomy-Proxy.iml new file mode 100644 index 0000000..a587e97 --- /dev/null +++ b/MelonEconomy-Proxy.iml @@ -0,0 +1,14 @@ + + + + + + + VELOCITY + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/Melon_Proxy.iml b/Melon_Proxy.iml new file mode 100644 index 0000000..a587e97 --- /dev/null +++ b/Melon_Proxy.iml @@ -0,0 +1,14 @@ + + + + + + + VELOCITY + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/Melon_Proxy_Helper.iml b/Melon_Proxy_Helper.iml new file mode 100644 index 0000000..0572102 --- /dev/null +++ b/Melon_Proxy_Helper.iml @@ -0,0 +1,13 @@ + + + + + + + VELOCITY + + 1 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..17d51d2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + + org.derek + MelonEconomy-Proxy + 1.3.1 + jar + + Melon Proxy + + + 17 + UTF-8 + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + + kyori + https://repo.kyori.net/repository/maven-public/ + + + + + + com.velocitypowered + velocity-api + 3.3.0-SNAPSHOT + provided + + + net.kyori + adventure-platform-api + 4.3.0 + + + net.kyori + adventure-text-minimessage + 4.14.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + + \ No newline at end of file diff --git a/src/main/java/org/derek/melon_proxy/MelonProxy.java b/src/main/java/org/derek/melon_proxy/MelonProxy.java new file mode 100644 index 0000000..ab69149 --- /dev/null +++ b/src/main/java/org/derek/melon_proxy/MelonProxy.java @@ -0,0 +1,151 @@ +package org.derek.melon_proxy; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.command.SimpleCommand; +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; +import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.proxy.ProxyServer; +import com.velocitypowered.api.proxy.server.RegisteredServer; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; + +import javax.inject.Inject; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +@Plugin(id = "melon_proxy", name = "Melon Proxy", version = "1.3", authors = {"Derek1256"}) +public class MelonProxy { + + private final ProxyServer server; + + @Inject + public MelonProxy(ProxyServer server) { + this.server = server; + } + + @Subscribe + public void onProxyInitialization(ProxyInitializeEvent event) { + server.getCommandManager().register("melonproxy", new MelonProxyCommand(server)); + } + + public static class MelonProxyCommand implements SimpleCommand { + + private final ProxyServer server; + private final MiniMessage miniMessage = MiniMessage.miniMessage(); + + public MelonProxyCommand(ProxyServer server) { + this.server = server; + } + + @Override + public void execute(Invocation invocation) { + CommandSource source = invocation.source(); + String[] args = invocation.arguments(); + + if (args.length == 0) { + source.sendMessage(Component.text("Usage: /melonproxy ")); + return; + } + + String subCommand = args[0].toLowerCase(); + + switch (subCommand) { + case "broadcast": + handleBroadcast(source, String.join(" ", Arrays.copyOfRange(args, 1, args.length))); + break; + case "storebroadcast": + handleStoreBroadcast(source, String.join(" ", Arrays.copyOfRange(args, 1, args.length))); + break; + default: + source.sendMessage(Component.text("Usage: /melonproxy ")); + break; + } + } + + private void handleBroadcast(CommandSource source, String message) { + if (message.isEmpty()) { + source.sendMessage(miniMessage.deserialize("Usage: /melonproxy broadcast ")); + return; + } + + String formattedMessage = convertLegacyColorsToMiniMessage(message); + Component broadcastMessage = miniMessage.deserialize( + "Melon Nexu" + + "s" + + " | Pro" + + "xy » " + + "" + formattedMessage + "" + ); + + for (RegisteredServer registeredServer : server.getAllServers()) { + for (var player : registeredServer.getPlayersConnected()) { + player.sendMessage(broadcastMessage); + } + } + } + + private void handleStoreBroadcast(CommandSource source, String message) { + if (message.isEmpty()) { + source.sendMessage(miniMessage.deserialize("Usage: /melonproxy storebroadcast ")); + return; + } + + String formattedMessage = convertLegacyColorsToMiniMessage(message); + Component storeBroadcastMessage = miniMessage.deserialize( + "Melon Nexu" + + "s" + + " | Sto" + + "re » " + + "" + formattedMessage + "" + ); + + for (RegisteredServer registeredServer : server.getAllServers()) { + if (!registeredServer.getServerInfo().getName().equalsIgnoreCase("prisons")) { + for (var player : registeredServer.getPlayersConnected()) { + player.sendMessage(storeBroadcastMessage); + } + } + } + } + + + private String convertLegacyColorsToMiniMessage(String message) { + Map legacyToMiniMessage = new HashMap<>(); + legacyToMiniMessage.put("&0", ""); + legacyToMiniMessage.put("&1", ""); + legacyToMiniMessage.put("&2", ""); + legacyToMiniMessage.put("&3", ""); + legacyToMiniMessage.put("&4", ""); + legacyToMiniMessage.put("&5", ""); + legacyToMiniMessage.put("&6", ""); + legacyToMiniMessage.put("&7", ""); + legacyToMiniMessage.put("&8", ""); + legacyToMiniMessage.put("&9", ""); + legacyToMiniMessage.put("&a", ""); + legacyToMiniMessage.put("&b", ""); + legacyToMiniMessage.put("&c", ""); + legacyToMiniMessage.put("&d", ""); + legacyToMiniMessage.put("&e", ""); + legacyToMiniMessage.put("&f", ""); + legacyToMiniMessage.put("&k", ""); + legacyToMiniMessage.put("&l", ""); + legacyToMiniMessage.put("&m", ""); + legacyToMiniMessage.put("&n", ""); + legacyToMiniMessage.put("&o", ""); + legacyToMiniMessage.put("&r", ""); + + for (Map.Entry entry : legacyToMiniMessage.entrySet()) { + message = message.replace(entry.getKey(), entry.getValue()); + } + + return message; + } + + @Override + public boolean hasPermission(Invocation invocation) { + return invocation.source().hasPermission("melonproxy.use"); + } + } +}