mirror of
https://github.com/SpigotMC/BungeeCord.git
synced 2024-11-27 12:46:05 +01:00
Add command ip and permissions.
This commit is contained in:
parent
7415afdbfd
commit
86b081ddfd
@ -15,6 +15,7 @@ import java.util.logging.Level;
|
||||
import static net.md_5.bungee.Logger.$;
|
||||
import net.md_5.bungee.command.Command;
|
||||
import net.md_5.bungee.command.CommandEnd;
|
||||
import net.md_5.bungee.command.CommandIP;
|
||||
import net.md_5.bungee.command.CommandList;
|
||||
import net.md_5.bungee.command.CommandSender;
|
||||
import net.md_5.bungee.command.CommandServer;
|
||||
@ -71,6 +72,7 @@ public class BungeeCord {
|
||||
commandMap.put("end", new CommandEnd());
|
||||
commandMap.put("glist", new CommandList());
|
||||
commandMap.put("server", new CommandServer());
|
||||
commandMap.put("ip", new CommandIP());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -107,7 +109,7 @@ public class BungeeCord {
|
||||
String[] split = commandLine.trim().split(" ");
|
||||
String commandName = split[0].toLowerCase();
|
||||
Command command = commandMap.get(commandName);
|
||||
if (command != null) {
|
||||
if (command != null && !config.disabledCommands.contains(commandName)) {
|
||||
String[] args = Arrays.copyOfRange(split, 1, split.length);
|
||||
try {
|
||||
command.execute(sender, args);
|
||||
|
@ -14,6 +14,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import static net.md_5.bungee.Logger.$;
|
||||
import net.md_5.bungee.command.CommandSender;
|
||||
import net.md_5.bungee.command.ConsoleCommandSender;
|
||||
import org.yaml.snakeyaml.DumperOptions;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
@ -95,6 +97,14 @@ public class Configuration {
|
||||
add("mbaxter");
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Commands which will be blocked completely.
|
||||
*/
|
||||
public List<String> disabledCommands = new ArrayList<String>() {
|
||||
{
|
||||
add("glist");
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Maximum number of lines to log before old ones are removed.
|
||||
*/
|
||||
@ -225,4 +235,20 @@ public class Configuration {
|
||||
save(reconnect, reconnectLocations);
|
||||
$().info("Saved reconnect locations to " + reconnect);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the highest permission a player has.
|
||||
*
|
||||
* @param sender to get permissions of
|
||||
* @return their permission
|
||||
*/
|
||||
public Permission getPermission(CommandSender sender) {
|
||||
Permission permission = Permission.DEFAULT;
|
||||
if (admins.contains(sender.getName()) || sender instanceof ConsoleCommandSender) {
|
||||
permission = Permission.ADMIN;
|
||||
} else if (moderators.contains(sender.getName())) {
|
||||
permission = Permission.MODERATOR;
|
||||
}
|
||||
return permission;
|
||||
}
|
||||
}
|
||||
|
17
src/main/java/net/md_5/bungee/Permission.java
Normal file
17
src/main/java/net/md_5/bungee/Permission.java
Normal file
@ -0,0 +1,17 @@
|
||||
package net.md_5.bungee;
|
||||
|
||||
public enum Permission {
|
||||
|
||||
/**
|
||||
* Can access all commands.
|
||||
*/
|
||||
ADMIN,
|
||||
/**
|
||||
* Can access commands which do not affect everyone.
|
||||
*/
|
||||
MODERATOR,
|
||||
/**
|
||||
* Can access other commands.
|
||||
*/
|
||||
DEFAULT;
|
||||
}
|
@ -2,8 +2,10 @@ package net.md_5.bungee;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import net.md_5.bungee.command.CommandSender;
|
||||
@ -86,6 +88,10 @@ public class UserConnection extends GenericConnection implements CommandSender {
|
||||
}
|
||||
}
|
||||
|
||||
public SocketAddress getAddress() {
|
||||
return socket.getRemoteSocketAddress();
|
||||
}
|
||||
|
||||
private void destroySelf(String reason) {
|
||||
if (BungeeCord.instance.isRunning) {
|
||||
BungeeCord.instance.connections.remove(username);
|
||||
@ -102,6 +108,11 @@ public class UserConnection extends GenericConnection implements CommandSender {
|
||||
packetQueue.add(new Packet3Chat(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return username;
|
||||
}
|
||||
|
||||
private class UpstreamBridge extends Thread {
|
||||
|
||||
public UpstreamBridge() {
|
||||
|
@ -1,5 +1,8 @@
|
||||
package net.md_5.bungee.command;
|
||||
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.Permission;
|
||||
|
||||
/**
|
||||
* Class which represents a proxy command. The {@link #execute(net.md_5.bungee.command.CommandSender, java.lang.String[])
|
||||
* } method will be called to dispatch the command.
|
||||
@ -14,4 +17,8 @@ public abstract class Command {
|
||||
* the original command.
|
||||
*/
|
||||
public abstract void execute(CommandSender sender, String[] args);
|
||||
|
||||
public Permission getPermission(CommandSender sender) {
|
||||
return BungeeCord.instance.config.getPermission(sender);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package net.md_5.bungee.command;
|
||||
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.ChatColor;
|
||||
import net.md_5.bungee.Permission;
|
||||
|
||||
/**
|
||||
* Command to terminate the proxy instance. May only be used by the console.
|
||||
@ -10,9 +11,10 @@ public class CommandEnd extends Command {
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (!(sender instanceof ConsoleCommandSender)) {
|
||||
sender.sendMessage(ChatColor.RED + "Only the console can use this command");
|
||||
if (getPermission(sender) != Permission.ADMIN) {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command");
|
||||
} else {
|
||||
BungeeCord.instance.stop();
|
||||
}
|
||||
BungeeCord.instance.stop();
|
||||
}
|
||||
}
|
||||
|
27
src/main/java/net/md_5/bungee/command/CommandIP.java
Normal file
27
src/main/java/net/md_5/bungee/command/CommandIP.java
Normal file
@ -0,0 +1,27 @@
|
||||
package net.md_5.bungee.command;
|
||||
|
||||
import net.md_5.bungee.BungeeCord;
|
||||
import net.md_5.bungee.ChatColor;
|
||||
import net.md_5.bungee.Permission;
|
||||
import net.md_5.bungee.UserConnection;
|
||||
|
||||
public class CommandIP extends Command {
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
if (getPermission(sender) != Permission.ADMIN) {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to use this command");
|
||||
return;
|
||||
}
|
||||
if (args.length < 1) {
|
||||
sender.sendMessage(ChatColor.RED + "Please follow this command by a user name");
|
||||
return;
|
||||
}
|
||||
UserConnection user = BungeeCord.instance.connections.get(args[0]);
|
||||
if (user == null) {
|
||||
sender.sendMessage(ChatColor.RED + "That user is not online");
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.BLUE + "IP of " + args[0] + " is " + user.getAddress());
|
||||
}
|
||||
}
|
||||
}
|
@ -16,8 +16,17 @@ public class CommandList extends Command {
|
||||
Collection<UserConnection> connections = BungeeCord.instance.connections.values();
|
||||
|
||||
for (UserConnection con : connections) {
|
||||
switch (getPermission(con)) {
|
||||
case ADMIN:
|
||||
users.append(ChatColor.RED);
|
||||
break;
|
||||
case MODERATOR:
|
||||
users.append(ChatColor.GREEN);
|
||||
break;
|
||||
}
|
||||
users.append(con.username);
|
||||
users.append(", ");
|
||||
users.append(ChatColor.RESET);
|
||||
}
|
||||
|
||||
users.setLength(users.length() - 2);
|
||||
|
@ -8,4 +8,11 @@ public interface CommandSender {
|
||||
* @param message the message to send
|
||||
*/
|
||||
public abstract void sendMessage(String message);
|
||||
|
||||
/**
|
||||
* Get the senders name or CONSOLE for console.
|
||||
*
|
||||
* @return the friendly name of the player.
|
||||
*/
|
||||
public abstract String getName();
|
||||
}
|
||||
|
@ -13,4 +13,9 @@ public class ConsoleCommandSender implements CommandSender {
|
||||
public void sendMessage(String message) {
|
||||
System.out.println(ChatColor.stripColor(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "CONSOLE";
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user