From 78e6cd5696d6c21f14f30df08bb5ad1574205b5c Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 17 Mar 2019 14:55:36 +0100 Subject: [PATCH] Various updates --- src/de/warking/bungeecore/BungeeCore.java | 15 +++ src/de/warking/bungeecore/PlayerListener.java | 92 +++++++++++++++++- .../warking/bungeecore/arenasystem/Arena.java | 96 ++++++++++++++++--- .../bungeecore/arenasystem/ArenaSystem.java | 27 ++++++ .../bungeecore/commands/AlertCommand.java | 7 +- .../warking/bungeecore/commands/Command.java | 32 +++++++ .../bungeecore/commands/DenyCommand.java | 1 - .../bungeecore/commands/FightCommand.java | 35 +++++-- .../bungeecore/commands/HelpCommand.java | 1 - .../bungeecore/commands/JoinmeCommand.java | 59 ++++++++---- .../bungeecore/commands/KickCommand.java | 21 ++-- .../bungeecore/commands/MsgCommand.java | 24 +++-- .../bungeecore/commands/PingCommand.java | 4 +- .../warking/bungeecore/commands/RCommand.java | 13 ++- .../commands/ServerSwitchCommand.java | 11 +-- .../bungeecore/commands/TeamchatCommand.java | 7 +- .../bungeecore/commands/WebpwCommand.java | 10 +- 17 files changed, 363 insertions(+), 92 deletions(-) create mode 100644 src/de/warking/bungeecore/commands/Command.java diff --git a/src/de/warking/bungeecore/BungeeCore.java b/src/de/warking/bungeecore/BungeeCore.java index dd2e438..289c640 100644 --- a/src/de/warking/bungeecore/BungeeCore.java +++ b/src/de/warking/bungeecore/BungeeCore.java @@ -2,6 +2,7 @@ package de.warking.bungeecore; import de.warking.bungeecore.arenasystem.ArenaSystem; import de.warking.bungeecore.commands.*; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; @@ -13,6 +14,7 @@ import java.io.IOException; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; +import java.util.logging.Level; public class BungeeCore extends Plugin { @@ -23,6 +25,7 @@ public class BungeeCore extends Plugin { public static final DateTimeFormatter DateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); public static String LobbyServer; public static final HashMap serverPermissions = new HashMap<>(); + public static final HashMap commands = new HashMap<>(); @Override public void onEnable(){ @@ -76,6 +79,8 @@ public class BungeeCore extends Plugin { commands.toArray(new String[0]) )); } + commands.put("/bau", ""); + commands.remove("/bauserver"); addCmd(new TeamchatCommand()); addCmd(new MsgCommand()); @@ -94,6 +99,16 @@ public class BungeeCore extends Plugin { public void onDisable(){ ArenaSystem.shutdown(); sql.close(); + getProxy().getPluginManager().unregisterCommands(this); + getProxy().getPluginManager().unregisterListeners(this); + } + + public static void log(final String message, final ServerInfo server){ + log("[" + server.getName() + "] " + message); + } + + public static void log(final String message){ + instance.getLogger().log(Level.INFO, message); } private void addCmd(Command cmd){ diff --git a/src/de/warking/bungeecore/PlayerListener.java b/src/de/warking/bungeecore/PlayerListener.java index 31d8682..e97b50c 100644 --- a/src/de/warking/bungeecore/PlayerListener.java +++ b/src/de/warking/bungeecore/PlayerListener.java @@ -1,6 +1,8 @@ package de.warking.bungeecore; +import de.warking.bungeecore.arenasystem.ArenaSystem; import net.md_5.bungee.api.AbstractReconnectHandler; +import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; @@ -24,7 +26,6 @@ public class PlayerListener implements Listener { event.setCancelReason(new TextComponent(BungeeCore.ChatPrefix + " Du bist bis zum " + user.BanTime.toLocalDateTime().format(BungeeCore.DateFormat) + " gebannt. §r§lGrund§r: §c" + user.BanReason)); } - return; } } @@ -35,17 +36,41 @@ public class PlayerListener implements Listener { player.removeGroups("Admin", "team"); switch(user.UserGroup){ case "Admin": + player.addGroups("admin", "team"); + player.setPermission("bungeecore.group.admin", true); + player.setDisplayName("§4Admin " + player.getName() + "§r"); + break; case "Developer": - player.addGroups("admin", "team", "default"); + player.addGroups("admin", "team"); + player.setPermission("bungeecore.group.developer", true); + player.setDisplayName("§3Developer " + player.getName() + "§r"); break; case "Moderator": + player.addGroups("team"); + player.setPermission("bungeecore.group.moderator", true); + player.setDisplayName("§bModerator " + player.getName() + "§r"); + break; case "Supporter": + player.addGroups("team"); + player.setPermission("bungeecore.group.supporter", true); + player.setDisplayName("§1Supporter " + player.getName() + "§r"); + break; case "Builder": - player.addGroups("team", "default"); + player.addGroups("team"); + player.setPermission("bungeecore.group.builder", true); + player.setDisplayName("§2Architekt " + player.getName() + "§r"); + break; + case "Youtuber": + player.setPermission("bungeecore.group.youtuber", true); + player.setDisplayName("§5Youtuber " + player.getName() + "§r"); + break; + case "Premium": + player.setPermission("bungeecore.group.premium", true); + player.setDisplayName("§6Premium " + player.getName() + "§r"); break; case "Member": default: - player.addGroups("default"); + player.setDisplayName("§7" + player.getName() + "§r"); break; } @@ -89,6 +114,57 @@ public class PlayerListener implements Listener { ProxiedPlayer sender = (ProxiedPlayer) e.getSender(); sender.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Befehl."); } + }else if(command[0].equals("/bau") && e.getSender() instanceof ProxiedPlayer){ + ProxiedPlayer sender = (ProxiedPlayer) e.getSender(); + if(!sender.getServer().getInfo().getName().equals("Bauserver")){ + e.setCancelled(true); + sender.connect(ProxyServer.getInstance().getServerInfo("Bauserver")); + } + } + }else{ + if(e.getSender() instanceof ProxiedPlayer){ + ProxiedPlayer sender = (ProxiedPlayer) e.getSender(); + if(sender.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){ + sender.sendMessage(BungeeCore.ChatPrefix + "§cUm Chatnachrichten versenden zu können, musst du erst einmal welche empfangen!"); + e.setCancelled(true); + return; + } + if(ArenaSystem.getPlayer(sender) != null){ + return; + } + + String name = sender.getDisplayName(); + String message = e.getMessage(); + String chatsuffix = "§7» "; + e.setCancelled(true); + + if(sender.hasPermission("bungeecore.group.admin")){ + chatsuffix = "§7» §6"; + message = ChatColor.translateAlternateColorCodes('&', message); + }else if(sender.hasPermission("bungeecore.group.developer")){ + chatsuffix = "§7» §r"; + message = ChatColor.translateAlternateColorCodes('&', message); + }else if(sender.hasPermission("bungeecore.group.moderator")){ + chatsuffix = "§7» §r"; + message = ChatColor.translateAlternateColorCodes('&', message); + }else if(sender.hasPermission("bungeecore.group.supporter")){ + chatsuffix = "§7» §r"; + message = ChatColor.translateAlternateColorCodes('&', message); + }else if(sender.hasPermission("bungeecore.group.builder")){ + chatsuffix = "§7» §r"; + message = ChatColor.translateAlternateColorCodes('&', message); + }else if(sender.hasPermission("bungeecore.group.youtuber") || + sender.hasPermission("bungeecore.group.premium")){ + message = ChatColor.translateAlternateColorCodes('&', message); + } + + String msg = name + chatsuffix + message; + for(ProxiedPlayer target : sender.getServer().getInfo().getPlayers()){ + if(target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){ + target.sendMessage(msg); + } + } + BungeeCore.log(msg, sender.getServer().getInfo()); } } } @@ -104,6 +180,14 @@ public class PlayerListener implements Listener { suggestions.add(name); } } + if(e.getSender() instanceof ProxiedPlayer && cursor.length == 1 && cursor[0].startsWith("/")){ + ProxiedPlayer player = (ProxiedPlayer) e.getSender(); + for(String cmd : BungeeCore.commands.keySet()){ + if(cmd.startsWith(cursor[0]) && player.hasPermission(BungeeCore.commands.get(cmd))){ + suggestions.add(cmd); + } + } + } } @EventHandler diff --git a/src/de/warking/bungeecore/arenasystem/Arena.java b/src/de/warking/bungeecore/arenasystem/Arena.java index 7a9927d..3726959 100644 --- a/src/de/warking/bungeecore/arenasystem/Arena.java +++ b/src/de/warking/bungeecore/arenasystem/Arena.java @@ -2,7 +2,6 @@ package de.warking.bungeecore.arenasystem; import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -11,19 +10,26 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetSocketAddress; -import java.util.Vector; +import java.util.ArrayList; +import java.util.List; public class Arena implements Runnable{ public final String serverName; public final int arenenNummer; + public final String spielModus; + private Process p; + private PrintWriter writer; private ServerInfo server; private boolean started = false; - private Vector cachedPlayers = new Vector<>(); - private PrintWriter writer; + + private final List cachedPlayers = new ArrayList<>(); + private final List players = new ArrayList<>(); + public Arena(String modus, int id){ + spielModus = modus; arenenNummer = id; serverName = modus + id; int port = 2500 + arenenNummer; @@ -44,12 +50,55 @@ public class Arena implements Runnable{ } } - public void sendPlayer(ArenaPlayer p){ - if(!started) { - p.player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "Die Arena wird gestartet, einen Moment bitte...")); + private void sendPlayer(ArenaPlayer p){ + if(!started){ + p.player.sendMessage(BungeeCore.ChatPrefix + "Die Arena wird gestartet, einen Moment bitte..."); cachedPlayers.add(p); - }else - p.player.connect(server); + }else{ + if(players.contains(p)){ + p.player.connect(server); + players.add(p); + } + p.player.getServer().sendData("FightSystem:NewPlayer", p.role.name().getBytes()); + } + } + + public void sendPlayer(ProxiedPlayer p){ + ArenaRole role; + switch(cachedPlayers.size() + players.size()){ + case 0: + role = ArenaRole.RED_LEADER; + break; + case 1: + role = ArenaRole.BLUE_LEADER; + break; + default: + role = ArenaRole.SPECTATOR; + } + + ArenaPlayer aP = new ArenaPlayer(p, role); + sendPlayer(aP); + } + + public void sendPlayer(ProxiedPlayer p, ProxiedPlayer initiator){ + ArenaPlayer parent = getPlayer(initiator); + if(parent == null) + return; + + switch(parent.role){ + case RED_LEADER: + case RED_MEMBER: + sendPlayer(new ArenaPlayer(p, ArenaRole.RED_MEMBER)); + break; + case BLUE_MEMBER: + case BLUE_LEADER: + sendPlayer(new ArenaPlayer(p, ArenaRole.BLUE_MEMBER)); + break; + case SPECTATOR: + default: + sendPlayer(new ArenaPlayer(p, ArenaRole.SPECTATOR)); + break; + } } protected void stop(){ @@ -69,6 +118,28 @@ public class Arena implements Runnable{ ArenaSystem.arenen.remove(this); } + public ArenaPlayer getPlayer(ProxiedPlayer p){ + for(int i = 0; i < cachedPlayers.size(); i++) + if(cachedPlayers.get(i).player.equals(p)){ + if(server.equals(p.getServer().getInfo())) { + return cachedPlayers.get(i); + }else{ + cachedPlayers.remove(i); + return null; + } + } + for(int i = 0; i < players.size(); i++) + if(players.get(i).player.equals(p)){ + if(server.equals(p.getServer().getInfo())) { + return players.get(i); + }else{ + players.remove(i); + return null; + } + } + return null; + } + @Override public void run() { try { @@ -76,10 +147,11 @@ public class Arena implements Runnable{ String line; while (!started && (line = reader.readLine()) != null) { - started = line.contains(" INFO]: Done ("); + //started = line.contains(" INFO]: Done ("); Problematisch + started = line.contains("INFO]: [AAC] AAC has been enabled."); } - Thread.sleep(1000); + //Thread.sleep(1000); for(ArenaPlayer aP : cachedPlayers){ sendPlayer(aP); @@ -90,7 +162,7 @@ public class Arena implements Runnable{ }catch(IOException e){ e.printStackTrace(); }catch(InterruptedException e){ - System.out.println("Arena "+serverName+" was interrupted!"); + BungeeCore.log("Arena "+serverName+" was interrupted!"); } stop(); } diff --git a/src/de/warking/bungeecore/arenasystem/ArenaSystem.java b/src/de/warking/bungeecore/arenasystem/ArenaSystem.java index 8544b5a..1e10df9 100644 --- a/src/de/warking/bungeecore/arenasystem/ArenaSystem.java +++ b/src/de/warking/bungeecore/arenasystem/ArenaSystem.java @@ -1,6 +1,8 @@ package de.warking.bungeecore.arenasystem; +import net.md_5.bungee.api.connection.ProxiedPlayer; + import java.util.Vector; public class ArenaSystem { @@ -33,4 +35,29 @@ public class ArenaSystem { while(!arenen.isEmpty()) arenen.firstElement().stop(); } + + public static ArenaPlayer getPlayer(ProxiedPlayer p){ + for(Arena a : arenen){ + ArenaPlayer aP = a.getPlayer(p); + if(aP != null) + return aP; + } + return null; + } + + public static Arena getArena(ProxiedPlayer p){ + for(Arena a : arenen){ + ArenaPlayer aP = a.getPlayer(p); + if(aP != null) + return a; + } + return null; + } + + public static Arena getArena(String serverName){ + for(Arena a : arenen) + if(a.serverName.equals(serverName)) + return a; + return null; + } } diff --git a/src/de/warking/bungeecore/commands/AlertCommand.java b/src/de/warking/bungeecore/commands/AlertCommand.java index 24e9897..caab80b 100644 --- a/src/de/warking/bungeecore/commands/AlertCommand.java +++ b/src/de/warking/bungeecore/commands/AlertCommand.java @@ -4,19 +4,18 @@ import de.warking.bungeecore.BungeeCore; 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.TextComponent; -import net.md_5.bungee.api.plugin.Command; public class AlertCommand extends Command { public AlertCommand() { - super("bc", "bungeecore.alert"); + super("bc", "bungeecore.alert", "alert"); } @Override public void execute(CommandSender sender, String[] args) { if(args.length == 0){ - sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "/alert [Nachricht]")); + sender.sendMessage(BungeeCore.ChatPrefix + "/alert [Nachricht]"); + return; } StringBuilder msgBuilder = new StringBuilder(); diff --git a/src/de/warking/bungeecore/commands/Command.java b/src/de/warking/bungeecore/commands/Command.java new file mode 100644 index 0000000..c1b7ec7 --- /dev/null +++ b/src/de/warking/bungeecore/commands/Command.java @@ -0,0 +1,32 @@ +package de.warking.bungeecore.commands; + +import de.warking.bungeecore.BungeeCore; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.TabExecutor; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Command extends net.md_5.bungee.api.plugin.Command implements TabExecutor { + + public Command(String name, String permission, String... aliases) { + super(name, permission, aliases); + BungeeCore.commands.put("/" + name, permission); + } + + public Iterable allPlayers(String begin) { + List suggestions = new ArrayList<>(); + for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){ + String playerName = player.getName(); + if(playerName.startsWith(begin)) + suggestions.add(playerName); + } + return suggestions; + } + + public Iterable onTabComplete(CommandSender commandSender, String[] args) { + return null; + } +} diff --git a/src/de/warking/bungeecore/commands/DenyCommand.java b/src/de/warking/bungeecore/commands/DenyCommand.java index db50ba3..80b1ef5 100644 --- a/src/de/warking/bungeecore/commands/DenyCommand.java +++ b/src/de/warking/bungeecore/commands/DenyCommand.java @@ -4,7 +4,6 @@ import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class DenyCommand extends Command { diff --git a/src/de/warking/bungeecore/commands/FightCommand.java b/src/de/warking/bungeecore/commands/FightCommand.java index 1607ff1..49086d0 100644 --- a/src/de/warking/bungeecore/commands/FightCommand.java +++ b/src/de/warking/bungeecore/commands/FightCommand.java @@ -2,13 +2,17 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; import de.warking.bungeecore.arenasystem.Arena; -import de.warking.bungeecore.arenasystem.ArenaPlayer; -import de.warking.bungeecore.arenasystem.ArenaRole; import de.warking.bungeecore.arenasystem.ArenaSystem; 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.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; + +import java.util.ArrayList; +import java.util.List; public class FightCommand extends Command { @@ -24,16 +28,33 @@ public class FightCommand extends Command { } if(sender instanceof ProxiedPlayer){ ProxiedPlayer player = (ProxiedPlayer) sender; + Arena arena; switch(args[0].toLowerCase()){ case "as": case "airship": - Arena arena = ArenaSystem.startServer("Airship"); - arena.sendPlayer(new ArenaPlayer(player, ArenaRole.RED_LEADER)); + arena = ArenaSystem.startServer("Airship"); break; default: - sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cUnbekannter Spielmodus: " + args[0])); - break; + sender.sendMessage(BungeeCore.ChatPrefix + "§cUnbekannter Spielmodus: " + args[0]); + return; } + + arena.sendPlayer(player); + TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Kämpfe jetzt " + arena.spielModus + " gegen " + player.getName() + "[Hier Klicken]!"); + tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aGegen Spieler kämpfen").create())); + tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName())); + ProxyServer.getInstance().broadcast(tc); } } + + @Override + public Iterable onTabComplete(CommandSender commandSender, String[] args) { + List gamemodes = new ArrayList<>(); + if(args.length == 1){ + gamemodes.add("airship"); + gamemodes.add("as"); + } + System.out.println(args); + return gamemodes; + } } diff --git a/src/de/warking/bungeecore/commands/HelpCommand.java b/src/de/warking/bungeecore/commands/HelpCommand.java index cf86595..7b4cd5a 100644 --- a/src/de/warking/bungeecore/commands/HelpCommand.java +++ b/src/de/warking/bungeecore/commands/HelpCommand.java @@ -6,7 +6,6 @@ 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.plugin.Command; public class HelpCommand extends Command { public HelpCommand() { diff --git a/src/de/warking/bungeecore/commands/JoinmeCommand.java b/src/de/warking/bungeecore/commands/JoinmeCommand.java index 89db77c..8cc123a 100644 --- a/src/de/warking/bungeecore/commands/JoinmeCommand.java +++ b/src/de/warking/bungeecore/commands/JoinmeCommand.java @@ -1,6 +1,9 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; +import de.warking.bungeecore.arenasystem.Arena; +import de.warking.bungeecore.arenasystem.ArenaPlayer; +import de.warking.bungeecore.arenasystem.ArenaSystem; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ClickEvent; @@ -9,12 +12,11 @@ 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 JoinmeCommand extends Command { public JoinmeCommand() { - super("join", ""); + super("join", "", "joinme"); } @Override @@ -22,25 +24,48 @@ public class JoinmeCommand extends Command { if(sender instanceof ProxiedPlayer) { ProxiedPlayer player = (ProxiedPlayer) sender; - if (args.length == 0) { - if(player.hasPermission("bungeecore.joinme")){ - TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Klicke hier, um dem Server " + player.getServer().getInfo().getName() + " beizutreten!"); - tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§cServer beitreten").create())); - tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName())); - ProxyServer.getInstance().broadcast(tc); - }else { - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDu hast dazu keine Berechtigung.")); - } + if (args.length == 0 && player.hasPermission("bungeecore.joinme")) { + TextComponent tc = new TextComponent(BungeeCore.ChatPrefix + "Klicke hier, um dem Spieler " + player.getName() + " auf " + player.getServer().getInfo().getName() + " zu folgen!"); + tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aSpieler folgen").create())); + tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/join " + player.getName())); + ProxyServer.getInstance().broadcast(tc); } else if (args.length == 1) { - //TODO: Joinme to player - ServerInfo server = ProxyServer.getInstance().getPlayer(args[0]).getServer().getInfo(); - String ServerPerm = BungeeCore.serverPermissions.get(server.getName()); - if(ServerPerm == null || !player.hasPermission(ServerPerm)){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDiesen Server gibt es nicht.")); + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + if(target == null || !target.isConnected()){ + player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit offline."); + return; + }else if(target.equals(player)){ + player.sendMessage(BungeeCore.ChatPrefix + "§cDu bist bereits in deiner Sphäre."); return; } - player.connect(server); + ServerInfo server = ProxyServer.getInstance().getPlayer(args[0]).getServer().getInfo(); + String ServerPerm = BungeeCore.serverPermissions.get(server.getName()); + + if(ServerPerm == null){ + Arena arena = ArenaSystem.getArena(player); + + if(arena == null){ + player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen."); + return; + } + + arena.sendPlayer(player, target); + }else if(!player.hasPermission(ServerPerm)){ + player.sendMessage(BungeeCore.ChatPrefix + "§cDu kannst diesem Spieler derzeit nicht folgen."); + }else{ + player.connect(server); + } + } else { + player.sendMessage(BungeeCore.ChatPrefix + "/join [Spieler]"); } } } + + @Override + public Iterable onTabComplete(CommandSender commandSender, String[] args) { + if(args.length == 1){ + return allPlayers(args[0]); + } + return null; + } } diff --git a/src/de/warking/bungeecore/commands/KickCommand.java b/src/de/warking/bungeecore/commands/KickCommand.java index 2c015ab..4445f8f 100644 --- a/src/de/warking/bungeecore/commands/KickCommand.java +++ b/src/de/warking/bungeecore/commands/KickCommand.java @@ -3,9 +3,7 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class KickCommand extends Command { @@ -16,25 +14,34 @@ public class KickCommand extends Command { @Override public void execute(CommandSender sender, String[] args) { if(args.length == 0){ - sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "/kick [Spieler] [Nachricht]")); + sender.sendMessage(BungeeCore.ChatPrefix + "/kick [Spieler] [Nachricht]"); + return; } ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); if(target == null){ - sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!")); + sender.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!"); return; } if(args.length == 1){ - target.disconnect(new TextComponent(BungeeCore.ChatPrefix + "§cDu wurdest gekickt.")); + target.disconnect(BungeeCore.ChatPrefix + "§cDu wurdest gekickt."); }else{ StringBuilder msgBuilder = new StringBuilder(); msgBuilder.append(BungeeCore.ChatPrefix).append("§c"); for (int i = 1; i < args.length; i++){ msgBuilder.append(args[i]).append(" "); } - target.disconnect(new TextComponent(msgBuilder.toString())); + target.disconnect(msgBuilder.toString()); } - sender.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "Der Spieler " + target.getName() + " wurde gekickt.")); + sender.sendMessage(BungeeCore.ChatPrefix + "Der Spieler " + target.getName() + " wurde gekickt."); + } + + @Override + public Iterable onTabComplete(CommandSender commandSender, String[] args) { + if(args.length == 1){ + return allPlayers(args[0]); + } + return null; } } diff --git a/src/de/warking/bungeecore/commands/MsgCommand.java b/src/de/warking/bungeecore/commands/MsgCommand.java index 51176ba..055b770 100644 --- a/src/de/warking/bungeecore/commands/MsgCommand.java +++ b/src/de/warking/bungeecore/commands/MsgCommand.java @@ -3,14 +3,13 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; + import java.util.HashMap; public class MsgCommand extends Command { - public static HashMap lastChats = new HashMap<>(); + protected static final HashMap lastChats = new HashMap<>(); public MsgCommand() { super("msg", "", "w", "tell"); @@ -22,19 +21,19 @@ public class MsgCommand extends Command { ProxiedPlayer player = (ProxiedPlayer) sender; if (args.length < 2) { - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "/msg [Benutzer] [Nachricht]")); + player.sendMessage(BungeeCore.ChatPrefix + "/msg [Benutzer] [Nachricht]"); return; } ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); if(target == null){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!"); return; }else if(target.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDieser Spieler empfängt derzeit keine Chatnachrichten!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler empfängt derzeit keine Chatnachrichten!"); return; }else if(target.equals(player)){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cNachrichten an dich selbst hast du wirklich nicht nötig!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cNachrichten an dich selbst hast du wirklich nicht nötig!"); return; } @@ -43,14 +42,21 @@ public class MsgCommand extends Command { for (int i = 1; i < args.length; i++){ msgBuilder.append(args[i]).append(" "); } - TextComponent msg = new TextComponent(msgBuilder.toString()); + String msg = msgBuilder.toString(); player.sendMessage(msg); target.sendMessage(msg); + BungeeCore.log(msg); lastChats.put(player.getName().toLowerCase(), target); lastChats.put(target.getName().toLowerCase(), player); } } - + @Override + public Iterable onTabComplete(CommandSender commandSender, String[] args) { + if(args.length == 1){ + return allPlayers(args[0]); + } + return null; + } } diff --git a/src/de/warking/bungeecore/commands/PingCommand.java b/src/de/warking/bungeecore/commands/PingCommand.java index 5b01bb5..b21ecd6 100644 --- a/src/de/warking/bungeecore/commands/PingCommand.java +++ b/src/de/warking/bungeecore/commands/PingCommand.java @@ -2,9 +2,7 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class PingCommand extends Command { @@ -16,7 +14,7 @@ public class PingCommand extends Command { public void execute(CommandSender sender, String[] args) { if(sender instanceof ProxiedPlayer){ ProxiedPlayer player = (ProxiedPlayer) sender; - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§7Dein Ping beträgt §c" + player.getPing() + "§r§7 ms!")); + player.sendMessage(BungeeCore.ChatPrefix + "§7Dein Ping beträgt §c" + player.getPing() + "§r§7 ms!"); } } } diff --git a/src/de/warking/bungeecore/commands/RCommand.java b/src/de/warking/bungeecore/commands/RCommand.java index c934293..776d38c 100644 --- a/src/de/warking/bungeecore/commands/RCommand.java +++ b/src/de/warking/bungeecore/commands/RCommand.java @@ -2,9 +2,7 @@ package de.warking.bungeecore.commands; import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class RCommand extends Command { @@ -17,21 +15,21 @@ public class RCommand extends Command { if(sender instanceof ProxiedPlayer){ ProxiedPlayer player = (ProxiedPlayer) sender; if(args.length == 0){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "/r [Antwort]")); + player.sendMessage(BungeeCore.ChatPrefix + "/r [Antwort]"); return; } ProxiedPlayer target = MsgCommand.lastChats.get(player.getName().toLowerCase()); if(target == null){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDu hast bisher mit niemandem geschrieben!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDu hast bisher mit niemandem geschrieben!"); return; } if(!target.isConnected()){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler ist derzeit nicht online!"); return; }else if(target.getChatMode() != ProxiedPlayer.ChatMode.SHOWN){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDieser Spieler empfängt derzeit keine Chatnachrichten!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDieser Spieler empfängt derzeit keine Chatnachrichten!"); return; } @@ -40,9 +38,10 @@ public class RCommand extends Command { for (String arg : args){ msgBuilder.append(arg).append(" "); } - TextComponent msg = new TextComponent(msgBuilder.toString()); + String msg = msgBuilder.toString(); player.sendMessage(msg); target.sendMessage(msg); + BungeeCore.log(msg); MsgCommand.lastChats.put(target.getName().toLowerCase(), player); } diff --git a/src/de/warking/bungeecore/commands/ServerSwitchCommand.java b/src/de/warking/bungeecore/commands/ServerSwitchCommand.java index dd57917..949ffe0 100644 --- a/src/de/warking/bungeecore/commands/ServerSwitchCommand.java +++ b/src/de/warking/bungeecore/commands/ServerSwitchCommand.java @@ -1,12 +1,9 @@ package de.warking.bungeecore.commands; -import de.warking.bungeecore.BungeeCore; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -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 ServerSwitchCommand extends Command { @@ -21,12 +18,8 @@ public class ServerSwitchCommand extends Command { public void execute(CommandSender sender, String[] strings) { if(sender instanceof ProxiedPlayer){ ProxiedPlayer player = (ProxiedPlayer) sender; - if(!player.getServer().getInfo().getName().equalsIgnoreCase(serverName)){ - ServerInfo target = ProxyServer.getInstance().getServerInfo(serverName); - player.connect(target); - }else{ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDu bist bereits auf diesem Server!")); - } + ServerInfo target = ProxyServer.getInstance().getServerInfo(serverName); + player.connect(target); } } } diff --git a/src/de/warking/bungeecore/commands/TeamchatCommand.java b/src/de/warking/bungeecore/commands/TeamchatCommand.java index 26c4229..b8db735 100644 --- a/src/de/warking/bungeecore/commands/TeamchatCommand.java +++ b/src/de/warking/bungeecore/commands/TeamchatCommand.java @@ -4,9 +4,7 @@ import de.warking.bungeecore.BungeeCore; 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.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class TeamchatCommand extends Command { @@ -20,7 +18,7 @@ public class TeamchatCommand extends Command { ProxiedPlayer player = (ProxiedPlayer) sender; if(args.length == 0){ - player.sendMessage(new TextComponent(BungeeCore.TeamchatPrefix + "/teamchat [Nachricht an das Team]")); + player.sendMessage(BungeeCore.TeamchatPrefix + "/teamchat [Nachricht an das Team]"); return; } @@ -31,12 +29,11 @@ public class TeamchatCommand extends Command { } String msg = msgBuilder.toString(); msg = ChatColor.translateAlternateColorCodes('&', msg); - TextComponent message = new TextComponent(msg); for (ProxiedPlayer target : ProxyServer.getInstance().getPlayers()){ if ((target.hasPermission("bungeecore.teamchat") || target.hasPermission("bungeecore.*")) && target.getChatMode() == ProxiedPlayer.ChatMode.SHOWN){ - target.sendMessage(message); + target.sendMessage(msg); } } } diff --git a/src/de/warking/bungeecore/commands/WebpwCommand.java b/src/de/warking/bungeecore/commands/WebpwCommand.java index 20a7273..8dead66 100644 --- a/src/de/warking/bungeecore/commands/WebpwCommand.java +++ b/src/de/warking/bungeecore/commands/WebpwCommand.java @@ -4,9 +4,7 @@ import de.warking.bungeecore.BungeeCore; import de.warking.bungeecore.WarkingUser; import de.warking.bungeecore.sql; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; public class WebpwCommand extends Command { @@ -19,18 +17,18 @@ public class WebpwCommand extends Command { if(sender instanceof ProxiedPlayer){ ProxiedPlayer player = (ProxiedPlayer) sender; if(args.length != 2){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "/webpw [Passwort] [Passwort wiederholen]")); + player.sendMessage(BungeeCore.ChatPrefix + "/webpw [Passwort] [Passwort wiederholen]"); return; }else if(!args[0].equals(args[1])){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDie Passwörter stimmen nicht überein!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDie Passwörter stimmen nicht überein!"); return; }else if(args[0].length() < 6){ - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "§cDas Passwort muss mindestens 6 Zeichen lang sein!")); + player.sendMessage(BungeeCore.ChatPrefix + "§cDas Passwort muss mindestens 6 Zeichen lang sein!"); return; } sql.setWebpw(new WarkingUser(player), args[0]); - player.sendMessage(new TextComponent(BungeeCore.ChatPrefix + "Webpasswort gesetzt!")); + player.sendMessage(BungeeCore.ChatPrefix + "Webpasswort gesetzt!"); } } }