From adbc3a595b7378962f0fed906876e7a128e1be6c Mon Sep 17 00:00:00 2001 From: minenash Date: Sun, 7 Apr 2019 16:31:51 -0400 Subject: `/server [no args]` now shows a list of servers instead of an error. Also made /server the command name and made the aliases, /join and /goto. The permission has been changed to `rser.command.server`. --- com/redstoner/bungee/joinmessages/.gitignore | 1 + com/redstoner/bungee/joinmessages/CommandGoto.java | 75 --------------- .../bungee/joinmessages/CommandServer.java | 103 +++++++++++++++++++++ .../bungee/joinmessages/JoinMessages.java | 57 ++++++------ 4 files changed, 135 insertions(+), 101 deletions(-) delete mode 100644 com/redstoner/bungee/joinmessages/CommandGoto.java create mode 100644 com/redstoner/bungee/joinmessages/CommandServer.java diff --git a/com/redstoner/bungee/joinmessages/.gitignore b/com/redstoner/bungee/joinmessages/.gitignore index 025ee5c..495a8da 100644 --- a/com/redstoner/bungee/joinmessages/.gitignore +++ b/com/redstoner/bungee/joinmessages/.gitignore @@ -1,2 +1,3 @@ /CommandGoto.class /JoinMessages.class +/CommandServer.class diff --git a/com/redstoner/bungee/joinmessages/CommandGoto.java b/com/redstoner/bungee/joinmessages/CommandGoto.java deleted file mode 100644 index 71e6a7d..0000000 --- a/com/redstoner/bungee/joinmessages/CommandGoto.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.redstoner.bungee.joinmessages; - -import java.util.ArrayList; -import java.util.List; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.config.ServerInfo; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.connection.Server; -import net.md_5.bungee.api.plugin.Command; - -public class CommandGoto - extends Command -{ - private String switchto = "&c&l- &7%s &o(to %s)"; - private String switchfrom = "&a&l+ &7%s &o(from %s)"; - public static List justSwitched = new ArrayList(); - - public CommandGoto() - { - super("goto", "rser.command.goto", new String[] { "join", "server" }); - } - - public void execute(CommandSender sender, String[] args) - { - if (args.length == 0) - { - sendMessage(sender, true, "Ussuage: &e/goto "); - return; - } - if (!(sender instanceof ProxiedPlayer)) - { - sendMessage(sender, true, "This command can only be run by players!"); - return; - } - ServerInfo from = ((ProxiedPlayer)sender).getServer().getInfo(); - ServerInfo target = ProxyServer.getInstance().getServerInfo(args[0]); - if (target == null) - { - sendMessage(sender, true, "That server doesn't exist!"); - } - else if (from.getName().equals(target.getName())) - { - sendMessage(sender, true, "You're already connected to that server!"); - } - else - { - ProxiedPlayer s = (ProxiedPlayer)sender; - - String fromMessage = String.format(this.switchfrom, new Object[] { sender.getName(), from.getName() }); - for (ProxiedPlayer p : target.getPlayers()) { - sendRawMessage(p, fromMessage); - } - String toMessage = String.format(this.switchto, new Object[] { sender.getName(), target.getName() }); - for (ProxiedPlayer p : from.getPlayers()) { - sendRawMessage(p, toMessage); - } - sendMessage(sender, false, "&6Connecting you to &e" + target.getName()); - sendRawMessage(s, fromMessage); - justSwitched.add(s); - s.connect(target); - } - } - - private void sendMessage(CommandSender sender, boolean error, String msg) - { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&8[&" + (error ? "c" : "2") + "Bungee&8]&7 " + msg)); - } - - private void sendRawMessage(ProxiedPlayer p, String msg) - { - p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } -} diff --git a/com/redstoner/bungee/joinmessages/CommandServer.java b/com/redstoner/bungee/joinmessages/CommandServer.java new file mode 100644 index 0000000..6efdfa1 --- /dev/null +++ b/com/redstoner/bungee/joinmessages/CommandServer.java @@ -0,0 +1,103 @@ +package com.redstoner.bungee.joinmessages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +public class CommandServer extends Command { + + private String switchto = "&c&l- &7%s &o(to %s)"; + private String switchfrom = "&a&l+ &7%s &o(from %s)"; + + public static List justSwitched = new ArrayList<>(); + + public CommandServer() { + super("server", "rser.command.server", new String[] { "join", "goto" }); + } + + @SuppressWarnings("deprecation") + public void execute(CommandSender sender, String[] args) { + + if (args.length == 0) { + Map servers = ProxyServer.getInstance().getServers(); + + if ((sender instanceof ProxiedPlayer)) { + sender.sendMessage("§8[§2Bungee§8]§7 You are currently connected to §a" + ((ProxiedPlayer)sender).getServer().getInfo().getName() ); + } + ComponentBuilder serverList = new ComponentBuilder("").append(TextComponent.fromLegacyText("§8[§2Bungee§8]§7 You can connect to the following servers: ")); + boolean first = true; + for (ServerInfo server : servers.values()) { + if (server.canAccess(sender)) + { + TextComponent serverTextComponent = new TextComponent((!first?"§7, §e": "§e") + server.getName()); + int count = server.getPlayers().size(); + serverTextComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(count + (count == 1 ? " player" : " players") + "\n") + + .append("Click to connect to the server").italic(true) + .create())); + serverTextComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/server " + server.getName())); + serverList.append(serverTextComponent); + + } + first = false; + } + sender.sendMessage(serverList.create()); + return; + } + + if (!(sender instanceof ProxiedPlayer)) { + sendMessage(sender, true, "You must be a player!"); + return; + } + + ServerInfo from = ((ProxiedPlayer)sender).getServer().getInfo(); + ServerInfo target = ProxyServer.getInstance().getServerInfo(args[0]); + + if (target == null) { + sendMessage(sender, true, "That server doesn't exist!"); + } + else if (from.getName().equals(target.getName())) { + sendMessage(sender, true, "You're already connected to that server!"); + } + else { + ProxiedPlayer s = (ProxiedPlayer)sender; + + String fromMessage = String.format(this.switchfrom, new Object[] { sender.getName(), from.getName() }); + for (ProxiedPlayer p : target.getPlayers()) + sendRawMessage(p, fromMessage); + + String toMessage = String.format(this.switchto, new Object[] { sender.getName(), target.getName() }); + for (ProxiedPlayer p : from.getPlayers()) + sendRawMessage(p, toMessage); + + sendMessage(sender, false, "&6Connecting you to &e" + target.getName()); + sendRawMessage(s, fromMessage); + justSwitched.add(s); + s.connect(target); + } + } + + @SuppressWarnings("deprecation") + private void sendMessage(CommandSender sender, boolean error, String msg) + { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&8[&" + (error ? "c" : "2") + "Bungee&8]&7 " + msg)); + } + + @SuppressWarnings("deprecation") + private void sendRawMessage(ProxiedPlayer p, String msg) + { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); + } + +} diff --git a/com/redstoner/bungee/joinmessages/JoinMessages.java b/com/redstoner/bungee/joinmessages/JoinMessages.java index 21a4c66..13e6c0d 100644 --- a/com/redstoner/bungee/joinmessages/JoinMessages.java +++ b/com/redstoner/bungee/joinmessages/JoinMessages.java @@ -1,59 +1,64 @@ package com.redstoner.bungee.joinmessages; -import java.util.List; import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ServerConnectEvent; import net.md_5.bungee.api.event.ServerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; -import net.md_5.bungee.api.plugin.PluginManager; import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; -public class JoinMessages - extends Plugin - implements Listener -{ +public class JoinMessages extends Plugin implements Listener { + private String loginString = "&a&l+ &7%s"; private String logoutString = "&c&l- &7%s"; - public void onEnable() - { + public void onEnable() { getProxy().registerChannel("JoinMessage"); - getProxy().getPluginManager().registerCommand(this, new CommandGoto()); + getProxy().getPluginManager().registerCommand(this, new CommandServer()); getProxy().getPluginManager().registerListener(this, this); } - @EventHandler - public void onServerConnect(ServerConnectEvent e) - { + @EventHandler(priority = EventPriority.HIGHEST) + @SuppressWarnings("deprecation") + public void onServerConnect(ServerConnectEvent e) { + + if (e.isCancelled()) + return; + ServerInfo target = e.getTarget(); ProxiedPlayer jp = e.getPlayer(); - if (CommandGoto.justSwitched.contains(jp)) { + + if (CommandServer.justSwitched.contains(jp)) return; - } - String joinMessage = ChatColor.translateAlternateColorCodes('&', String.format(this.loginString, new Object[] { jp.getName() })); - for (ProxiedPlayer p : target.getPlayers()) { + + String joinMessage = ChatColor.translateAlternateColorCodes('&', + String.format(this.loginString, new Object[] { jp.getName() })); + + for (ProxiedPlayer p : target.getPlayers()) p.sendMessage(joinMessage); - } + jp.sendMessage(joinMessage); } @EventHandler - public void onServerDisconnect(ServerDisconnectEvent e) - { + @SuppressWarnings("deprecation") + public void onServerDisconnect(ServerDisconnectEvent e) { + ServerInfo target = e.getTarget(); ProxiedPlayer jp = e.getPlayer(); - if (CommandGoto.justSwitched.contains(jp)) - { - CommandGoto.justSwitched.remove(jp); + + if (CommandServer.justSwitched.contains(jp)) { + CommandServer.justSwitched.remove(jp); return; } - String leaveMessage = ChatColor.translateAlternateColorCodes('&', String.format(this.logoutString, new Object[] { jp.getName() })); - for (ProxiedPlayer p : target.getPlayers()) { + + String leaveMessage = ChatColor.translateAlternateColorCodes('&', + String.format(this.logoutString, new Object[] { jp.getName() })); + + for (ProxiedPlayer p : target.getPlayers()) p.sendMessage(leaveMessage); - } } } -- cgit v1.2.3