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.broadcast"); } } }