import java.util.LinkedHashMap;
import java.util.logging.Logger;
public class ServerConsoleCommands {
private static final Logger log = Logger.getLogger("Minecraft");
private static ServerConsoleCommands instance;
private final LinkedHashMap<String, BaseCommand> commands = new LinkedHashMap<String, BaseCommand>();
private ServerConsoleCommands() {
add("reload", reload);
add("listplugins", listplugins);
add("enableplugin", enableplugin);
add("reloadplugin", reloadplugin);
add("disableplugin", disableplugin);
add("modify", modify);
add("mp", modify);
add("reservelist", reservelist);
add("whitelist", whitelist);
add("version", version);
}
/**
* Add a command to the server list.
*
* @param name
* @param cmd
*/
public void add(String name, BaseCommand cmd) {
if (name != null && cmd != null)
commands.put(name, cmd);
}
/**
* Remove a command from the server list.
*
* @param name
*/
public void remove(String name) {
if (name != null) {
etc.getInstance().removeCommand(name);
commands.remove(name);
}
}
/**
* Performs a lookup for a command of the given name and executes it if
* found. Returns false if command not found.
*
* @param command
* @param player
* @param parameters
* @return
*/
public static boolean parseServerConsoleCommand(MessageReceiver caller, String command, String[] args) {
if (instance == null)
instance = new ServerConsoleCommands();
BaseCommand cmd = instance.getCommand(command);
if (cmd != null) {
cmd.parseCommand(caller, args);
// Inform caller a matching command was found.
return true;
}
return false;
}
public BaseCommand getCommand(String command) {
return commands.get(command);
}
public static final BaseCommand reload = new BaseCommand("- Reloads hMod") {
@Override
void execute(MessageReceiver caller, String[] parameters) {
etc.getInstance().load();
etc.getInstance().loadData();
for (Player p : etc.getServer().getPlayerList())
p.getUser().reloadPlayer();
log.info("hMod reloaded by " + caller.getName());
caller.notify("Successfully reloaded config");
}
};
public static final BaseCommand modify = new BaseCommand("[player] [key] [value] - Type /modify for more info", "Overriden onBadSyntax", 3) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (parameters.length > 2 && parameters[2].contains(":")) {
for (int i = 3; i < parameters.length; i++)
if (!parameters[i].contains(":")) {
onBadSyntax(caller, null);
return;
}
Player player = etc.getServer().matchPlayer(parameters[1]);
if (player == null) {
caller.notify("Player does not exist.");
return;
}
for (int i = 2; i < parameters.length; i++) {
if (parameters[i].split(":").length != 2) {
caller.notify("This key:value pair is deformed... " + parameters[i]);
return;
}
String key = parameters[i].split(":")[0];
String value = parameters[i].split(":")[1];
boolean newUser = false;
if (!etc.getDataSource().doesPlayerExist(player.getName())) {
if (!key.equalsIgnoreCase("groups") && !key.equalsIgnoreCase("g")) {
caller.notify("When adding a new user, set their group(s) first.");
return;
}
caller.notify("Adding new user.");
newUser = true;
player.setCanModifyWorld(true);
}
updatePlayerValues(player, key, value);
saveChanges(player, newUser);
log.info("Modifed user " + parameters[1] + ". " + key + " => " + value + " by " + caller.getName());
}
caller.notify("Modified user.");
} else {
if (parameters.length < 4) {
onBadSyntax(caller, null);
return;
}
Player player = etc.getServer().matchPlayer(parameters[1]);
if (player == null) {
caller.notify("Player does not exist.");
return;
}
String key = parameters[2];
String value = parameters[3];
boolean newUser = false;
if (!etc.getDataSource().doesPlayerExist(player.getName())) {
if (!key.equalsIgnoreCase("groups") && !key.equalsIgnoreCase("g")) {
caller.notify("When adding a new user, set their group(s) first.");
return;
}
caller.notify("Adding new user.");
newUser = true;
}
updatePlayerValues(player, key, value);
saveChanges(player, newUser);
caller.notify("Modified user.");
// Send to server
// log too,
// regardless of
// caller.
log.info("Modifed user " + parameters[1] + ". " + key + " => " + value + " by " + caller.getName());
}
}
private void saveChanges(Player player, boolean newUser) {
if (newUser)
etc.getDataSource().addPlayer(player);
else
etc.getDataSource().modifyPlayer(player);
}
private void updatePlayerValues(Player player, String key, String value) {
if (key.equalsIgnoreCase("prefix") || key.equalsIgnoreCase("p"))
player.setPrefix(value);
else if (key.equalsIgnoreCase("commands") || key.equalsIgnoreCase("c"))
player.setCommands(value.split(","));
else if (key.equalsIgnoreCase("groups") || key.equalsIgnoreCase("g"))
player.setGroups(value.split(","));
else if (key.equalsIgnoreCase("ignoresrestrictions") || key.equalsIgnoreCase("ir"))
player.setIgnoreRestrictions(value.equalsIgnoreCase("true") || value.equals("1"));
else if (key.equalsIgnoreCase("admin") || key.equalsIgnoreCase("a"))
player.setAdmin(value.equalsIgnoreCase("true") || value.equals("1"));
else if (key.equalsIgnoreCase("modworld") || key.equalsIgnoreCase("mw"))
player.setCanModifyWorld(value.equalsIgnoreCase("true") || value.equals("1"));
}
@Override
public void onBadSyntax(MessageReceiver caller, String[] params) {
caller.notify("Usage is: /modify [player] [key] [value]");
caller.notify("Keys:");
caller.notify("prefix: only the letter the color represents");
caller.notify("commands: list seperated by comma");
caller.notify("groups: list seperated by comma");
caller.notify("ignoresrestrictions: true or false");
caller.notify("admin: true or false");
caller.notify("modworld: true or false");
}
};
public final static BaseCommand whitelist = new BaseCommand("[operation (add or remove)] [player]", "whitelist [operation (toggle, add or remove)] <player>", 2) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (parameters[1].equalsIgnoreCase("toggle"))
caller.notify((etc.getInstance().toggleWhitelist() ? "Whitelist enabled" : "Whitelist disabled"));
else if (parameters.length == 3) {
if (parameters[1].equalsIgnoreCase("add")) {
etc.getDataSource().addToWhitelist(parameters[2]);
caller.notify(parameters[2] + " added to whitelist");
} else if (parameters[1].equalsIgnoreCase("remove")) {
etc.getDataSource().removeFromWhitelist(parameters[2]);
caller.notify(parameters[2] + " removed from whitelist");
} else
caller.notify("Invalid operation.");
} else
caller.notify("Invalid operation.");
}
};
public final static BaseCommand reservelist = new BaseCommand("[operation (add or remove)] [player]", "reservelist [operation (add or remove)] [player]", 3, 3) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (parameters[1].equalsIgnoreCase("add")) {
etc.getDataSource().addToReserveList(parameters[2]);
caller.notify(parameters[2] + " added to reservelist");
} else if (parameters[1].equalsIgnoreCase("remove")) {
etc.getDataSource().removeFromReserveList(parameters[2]);
caller.notify(parameters[2] + " removed from reservelist");
} else
caller.notify("Invalid operation.");
}
};
public final static BaseCommand listplugins = new BaseCommand("- Lists all plugins") {
@Override
void execute(MessageReceiver caller, String[] parameters) {
caller.notify("Plugins" + Colors.White + ": " + etc.getLoader().getPluginList());
}
};
public final static BaseCommand reloadplugin = new BaseCommand("[plugin] - Reloads plugin", "Correct usage is: /reloadplugin [plugin]", 2) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (etc.getLoader().reloadPlugin(parameters[1]))
caller.notify("Plugin reloaded.");
else
caller.notify("Unable to reload plugin. Check capitalization and/or server logfile.");
}
};
public final static BaseCommand enableplugin = new BaseCommand("[plugin] - Enables plugin", "Correct usage is: /enableplugin [plugin]", 2) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (etc.getLoader().enablePlugin(parameters[1]))
caller.notify("Plugin enabled.");
else
caller.notify("Unable to enable plugin. Check capitalization and/or server logfile.");
}
};
public final static BaseCommand disableplugin = new BaseCommand("[plugin] - Disables plugin", "Correct usage is: /disableplugin [plugin]", 2) {
@Override
void execute(MessageReceiver caller, String[] parameters) {
etc.getLoader().disablePlugin(parameters[1]);
caller.notify("Plugin disabled.");
}
};
public final static BaseCommand version = new BaseCommand("- Displays the server version") {
@Override
void execute(MessageReceiver caller, String[] parameters) {
if (!etc.getInstance().getTainted())
caller.notify(Colors.Gold + "Hey0 Server Mod Build " + etc.getInstance().getVersion());
else
caller.notify(Colors.Gold + "Unofficial hMod Build " + etc.getInstance().getVersionStr());
}
};
}