Adding global tp command handler + security fix of /local command
Dieser Commit ist enthalten in:
Ursprung
e63e742c8e
Commit
8814c6b6cc
1
pom.xml
1
pom.xml
@ -60,7 +60,6 @@
|
|||||||
<groupId>steamwar</groupId>
|
<groupId>steamwar</groupId>
|
||||||
<artifactId>PersistentBungeeCore</artifactId>
|
<artifactId>PersistentBungeeCore</artifactId>
|
||||||
<version>1.0</version>
|
<version>1.0</version>
|
||||||
<type>jar</type>
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -56,7 +56,13 @@ public class BungeeCore extends Plugin {
|
|||||||
new ChatListener();
|
new ChatListener();
|
||||||
new BanListener();
|
new BanListener();
|
||||||
|
|
||||||
commands.put("/bau", "");
|
commands.put("/b", null);
|
||||||
|
commands.put("/gs", null);
|
||||||
|
commands.put("/bau", null);
|
||||||
|
commands.put("/tp", null);
|
||||||
|
commands.put("/bc", null);
|
||||||
|
commands.put("/bauchat", null);
|
||||||
|
commands.put("/local", null);
|
||||||
|
|
||||||
new TeamchatCommand();
|
new TeamchatCommand();
|
||||||
new MsgCommand();
|
new MsgCommand();
|
||||||
@ -66,6 +72,7 @@ public class BungeeCore extends Plugin {
|
|||||||
new AlertCommand();
|
new AlertCommand();
|
||||||
new KickCommand();
|
new KickCommand();
|
||||||
new JoinmeCommand();
|
new JoinmeCommand();
|
||||||
|
new TpCommand();
|
||||||
new FightCommand();
|
new FightCommand();
|
||||||
new HelpCommand();
|
new HelpCommand();
|
||||||
new BanCommand();
|
new BanCommand();
|
||||||
|
@ -18,7 +18,7 @@ public class JoinmeCommand extends BasicCommand {
|
|||||||
private static final String DENY_MESSAGE = "§cDu kannst diesem Spieler derzeit nicht folgen.";
|
private static final String DENY_MESSAGE = "§cDu kannst diesem Spieler derzeit nicht folgen.";
|
||||||
|
|
||||||
public JoinmeCommand() {
|
public JoinmeCommand() {
|
||||||
super("join", "", "joinme");
|
super("joinme", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -34,14 +34,14 @@ public class JoinmeCommand extends BasicCommand {
|
|||||||
} else if (args.length == 1) {
|
} else if (args.length == 1) {
|
||||||
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
|
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
|
||||||
if(target == null || !target.isConnected()){
|
if(target == null || !target.isConnected()){
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + "§cDieser Spieler ist offline.");
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§cDieser Spieler ist offline.");
|
||||||
return;
|
return;
|
||||||
}else if(target.equals(player)){
|
}else if(target.equals(player)){
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + "§cSei eins mit dir selbst!");
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§cSei eins mit dir selbst!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ServerInfo server = target.getServer().getInfo();
|
ServerInfo server = target.getServer().getInfo();
|
||||||
String ServerPerm = BungeeCore.serverPermissions.get(server.getName());
|
String serverPerm = BungeeCore.serverPermissions.get(server.getName());
|
||||||
Subserver subserver = Subserver.getSubserver(target);
|
Subserver subserver = Subserver.getSubserver(target);
|
||||||
|
|
||||||
if(subserver != null) {
|
if(subserver != null) {
|
||||||
@ -55,18 +55,18 @@ public class JoinmeCommand extends BasicCommand {
|
|||||||
subserver.sendPlayer(player);
|
subserver.sendPlayer(player);
|
||||||
} else {
|
} else {
|
||||||
SubserverSystem.sendDeniedMessage(player, bauserver.getOwner());
|
SubserverSystem.sendDeniedMessage(player, bauserver.getOwner());
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if(ServerPerm != null && !player.hasPermission(ServerPerm)){
|
}else if(serverPerm != null && !player.hasPermission(serverPerm)){
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
}else if(ServerPerm == null && !player.getGroups().contains("team")) {
|
}else if(serverPerm == null && !player.getGroups().contains("team")) {
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
}else{
|
}else{
|
||||||
player.connect(server);
|
player.connect(server);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(BungeeCore.CHAT_PREFIX + "§7Mit §8/§ejoin §8[§eSpieler§8] §7kannst du einem Spieler folgen §8(z.B. in eine Arena)§7.");
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§7Mit §8/§ejoin §8[§eSpieler§8] §7kannst du einem Spieler folgen §8(z.B. in eine Arena)§7.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,44 +1,116 @@
|
|||||||
package de.steamwar.bungeecore.commands;
|
package de.steamwar.bungeecore.commands;
|
||||||
|
|
||||||
import de.steamwar.bungeecore.BungeeCore;
|
import de.steamwar.bungeecore.*;
|
||||||
|
import de.steamwar.bungeecore.sql.BauweltMember;
|
||||||
|
import de.steamwar.bungeecore.sql.Event;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
|
import de.steamwar.bungeecore.sql.Team;
|
||||||
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
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.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.ChatEvent;
|
import net.md_5.bungee.api.event.ChatEvent;
|
||||||
|
|
||||||
public class TpCommand {
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
private TpCommand(){}
|
public class TpCommand extends BasicCommand {
|
||||||
|
|
||||||
|
private static final String DENY_MESSAGE = "§cDu kannst diesem Spieler derzeit nicht folgen.";
|
||||||
|
|
||||||
public static void onTp(ChatEvent e, String[] command){
|
public static void onTp(ChatEvent e, String[] command){
|
||||||
if(!(e.getSender() instanceof ProxiedPlayer))
|
if(!(e.getSender() instanceof ProxiedPlayer))
|
||||||
return;
|
return;
|
||||||
ProxiedPlayer player = (ProxiedPlayer) e.getSender();
|
if(onTp((ProxiedPlayer) e.getSender(), Arrays.copyOfRange(command, 1, command.length)))
|
||||||
|
|
||||||
if(command.length == 1){
|
|
||||||
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§c/tp [Spieler]");
|
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SteamwarUser user = SteamwarUser.get(player);
|
public TpCommand(){
|
||||||
if(user == null){
|
super("join", null);
|
||||||
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§cUnbekannter Spieler");
|
|
||||||
e.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender sender, String[] args) {
|
||||||
|
if(!(sender instanceof ProxiedPlayer))
|
||||||
|
return;
|
||||||
|
if(!onTp((ProxiedPlayer) sender, args))
|
||||||
|
BungeeCore.send(sender, BungeeCore.CHAT_PREFIX + "§cKonnte das angegebene Ziel nicht finden.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<String> onTabComplete(CommandSender commandSender, String[] args) {
|
||||||
|
if(args.length == 1){
|
||||||
|
return allPlayers(args[0]);
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean onTp(ProxiedPlayer player, String[] args){
|
||||||
|
if(args.length == 0){
|
||||||
|
if(Event.get() == null)
|
||||||
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§8/§etp §8[§7Spieler§8]");
|
||||||
|
else
|
||||||
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§8/§etp §8[§7Spieler §8oder §7Team§8]");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get target player server
|
||||||
|
ServerInfo server = getTargetPlayer(args[0]);
|
||||||
|
|
||||||
|
//Get target team event arena
|
||||||
|
if(server == null){
|
||||||
|
Team team = Team.get(args[0]);
|
||||||
|
if(team != null){
|
||||||
|
Subserver eventArena = EventStarter.getEventServer().get(team);
|
||||||
|
if(eventArena != null && Subserver.getServerList().contains(eventArena))
|
||||||
|
server = eventArena.getServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Give control of teleport command to server
|
||||||
|
if(server == null || server == player.getServer().getInfo())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
teleport(player, server);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ServerInfo getTargetPlayer(String playerName){
|
||||||
|
SteamwarUser user = SteamwarUser.get(playerName);
|
||||||
|
if(user == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(user.getUuid());
|
ProxiedPlayer target = ProxyServer.getInstance().getPlayer(user.getUuid());
|
||||||
if(target == null){
|
if(target == null)
|
||||||
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + "§cDieser Spieler ist derzeit offline");
|
return null;
|
||||||
e.setCancelled(true);
|
|
||||||
return;
|
return target.getServer().getInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(target.getServer() == player.getServer())
|
private static void teleport(ProxiedPlayer player, ServerInfo server){
|
||||||
return;
|
String serverPerm = BungeeCore.serverPermissions.get(server.getName());
|
||||||
|
Subserver subserver = Subserver.getSubserver(server);
|
||||||
|
|
||||||
e.setCancelled(true);
|
if(subserver != null) {
|
||||||
//TODO: Implement Joinme-Command Option
|
Servertype type = subserver.getType();
|
||||||
|
if (type == Servertype.ARENA) {
|
||||||
|
subserver.sendPlayer(player);
|
||||||
|
} else if (type == Servertype.BAUSERVER) {
|
||||||
|
Bauserver bauserver = (Bauserver) subserver;
|
||||||
|
if (bauserver.getOwner().equals(player.getUniqueId()) ||
|
||||||
|
BauweltMember.getBauMember(bauserver.getOwner(), player.getUniqueId()) != null) {
|
||||||
|
subserver.sendPlayer(player);
|
||||||
|
} else {
|
||||||
|
SubserverSystem.sendDeniedMessage(player, bauserver.getOwner());
|
||||||
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else if(serverPerm != null && !player.hasPermission(serverPerm)){
|
||||||
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
|
}else if(serverPerm == null && !player.getGroups().contains("team")) {
|
||||||
|
BungeeCore.send(player, BungeeCore.CHAT_PREFIX + DENY_MESSAGE);
|
||||||
|
}else{
|
||||||
|
player.connect(server);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import de.steamwar.bungeecore.BungeeCore;
|
|||||||
import de.steamwar.bungeecore.Servertype;
|
import de.steamwar.bungeecore.Servertype;
|
||||||
import de.steamwar.bungeecore.Subserver;
|
import de.steamwar.bungeecore.Subserver;
|
||||||
import de.steamwar.bungeecore.commands.BauCommand;
|
import de.steamwar.bungeecore.commands.BauCommand;
|
||||||
|
import de.steamwar.bungeecore.commands.TpCommand;
|
||||||
import de.steamwar.bungeecore.sql.SteamwarUser;
|
import de.steamwar.bungeecore.sql.SteamwarUser;
|
||||||
import de.steamwar.bungeecore.sql.Team;
|
import de.steamwar.bungeecore.sql.Team;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
@ -11,6 +12,7 @@ import net.md_5.bungee.api.ChatMessageType;
|
|||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.Title;
|
import net.md_5.bungee.api.Title;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.connection.Connection;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.ChatEvent;
|
import net.md_5.bungee.api.event.ChatEvent;
|
||||||
import net.md_5.bungee.api.event.TabCompleteEvent;
|
import net.md_5.bungee.api.event.TabCompleteEvent;
|
||||||
@ -35,16 +37,27 @@ public class ChatListener extends BasicListener {
|
|||||||
|
|
||||||
private void onCommand(ChatEvent e){
|
private void onCommand(ChatEvent e){
|
||||||
String [] command = e.getMessage().split(" ");
|
String [] command = e.getMessage().split(" ");
|
||||||
if(command[0].contains(":")){
|
if(isBadCommand(e.getSender(), command[0])){
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
if(e.getSender() instanceof ProxiedPlayer){
|
return;
|
||||||
ProxiedPlayer sender = (ProxiedPlayer) e.getSender();
|
|
||||||
BungeeCore.send(sender, BungeeCore.CHAT_PREFIX + "§cUnbekannter Befehl.");
|
|
||||||
}
|
}
|
||||||
}else if((command[0].equalsIgnoreCase("/bau") || command[0].equalsIgnoreCase("/b") || command[0].equalsIgnoreCase("/gs")) && e.getSender() instanceof ProxiedPlayer){
|
|
||||||
|
switch(command[0].toLowerCase()){
|
||||||
|
case "/bau":
|
||||||
|
case "/b":
|
||||||
|
case "/gs":
|
||||||
BauCommand.onBau(e, command);
|
BauCommand.onBau(e, command);
|
||||||
}else if(command[0].equalsIgnoreCase("/bc") || command[0].equalsIgnoreCase("/bauchat") || command[0].equalsIgnoreCase("/local")){
|
break;
|
||||||
|
case "/bc":
|
||||||
|
case "/bauchat":
|
||||||
|
case "/local":
|
||||||
localChat(e, command);
|
localChat(e, command);
|
||||||
|
break;
|
||||||
|
case "/tp":
|
||||||
|
TpCommand.onTp(e, command);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//do nothing, let the normal command handlers proceed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,9 +149,23 @@ public class ChatListener extends BasicListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isBadCommand(sender, command[1])){
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
e.setMessage(e.getMessage().substring(command[0].length() + 1));
|
e.setMessage(e.getMessage().substring(command[0].length() + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isBadCommand(Connection connection, String command){
|
||||||
|
if(command.startsWith("/") && command.contains(":")){
|
||||||
|
if(connection instanceof ProxiedPlayer)
|
||||||
|
BungeeCore.send((ProxiedPlayer) connection, BungeeCore.CHAT_PREFIX + "§cUnbekannter Befehl.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTabCompleteEvent(TabCompleteEvent e){
|
public void onTabCompleteEvent(TabCompleteEvent e){
|
||||||
List<String> suggestions = e.getSuggestions();
|
List<String> suggestions = e.getSuggestions();
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren