480 lines
14 KiB
Java
480 lines
14 KiB
Java
package com.cypherx.xauth.commands;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.command.ConsoleCommandSender;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import com.cypherx.xauth.Account;
|
|
import com.cypherx.xauth.TeleLocation;
|
|
import com.cypherx.xauth.Util;
|
|
import com.cypherx.xauth.xAuth;
|
|
import com.cypherx.xauth.xAuthLog;
|
|
import com.cypherx.xauth.xAuthMessages;
|
|
import com.cypherx.xauth.xAuthPermissions;
|
|
import com.cypherx.xauth.xAuthPlayer;
|
|
import com.cypherx.xauth.xAuthSettings;
|
|
import com.cypherx.xauth.database.DbUtil;
|
|
|
|
public class xAuthCommand implements CommandExecutor {
|
|
private final xAuth plugin;
|
|
|
|
public xAuthCommand(xAuth plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
if (args.length < 1)
|
|
return false;
|
|
|
|
String subCommand = args[0];
|
|
if (subCommand.equals("register"))
|
|
return registerCommand(sender, args);
|
|
else if (subCommand.equals("changepw") || subCommand.equals("cpw") || subCommand.equals("changepassword") || subCommand.equals("changepass"))
|
|
return changePasswordCommand(sender, args);
|
|
else if (subCommand.equals("logout"))
|
|
return logoutCommand(sender, args);
|
|
else if (subCommand.equals("unregister"))
|
|
return unregisterCommand(sender, args);
|
|
else if (subCommand.equals("location") || subCommand.equals("loc"))
|
|
return locationCommand(sender, args);
|
|
else if (subCommand.equals("config") || subCommand.equals("conf"))
|
|
return configCommand(sender, args);
|
|
else if (subCommand.equals("reload"))
|
|
return reloadCommand(sender);
|
|
else if (subCommand.equals("version"))
|
|
return versionCommand(sender);
|
|
else {
|
|
if (sender instanceof Player)
|
|
xAuthMessages.send("admnUnknown", (Player)sender);
|
|
else if (sender instanceof ConsoleCommandSender)
|
|
xAuthLog.info("Unknown subcommand, try \"xauth\" for more information");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean versionCommand(CommandSender sender) {
|
|
if (sender instanceof Player)
|
|
((Player)sender).sendMessage("[" + xAuth.desc.getName() + "] This server is running version " + xAuth.desc.getVersion());
|
|
else if (sender instanceof ConsoleCommandSender)
|
|
xAuthLog.info("This server is running version " + xAuth.desc.getVersion());
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean registerCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.register")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 3) {
|
|
xAuthMessages.send("admnRegUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
String password = args[2];
|
|
String email = (args.length > 3 ? args[3] : null);
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (xPlayer.isRegistered()) {
|
|
xAuthMessages.send("admnRegRegistered", player, xPlayer.getPlayer());
|
|
return true;
|
|
}
|
|
|
|
Account account = new Account(targetName, Util.encrypt(password), email);
|
|
xPlayer.setAccount(account);
|
|
DbUtil.saveAccount(account);
|
|
|
|
xAuthMessages.send("admnRegSuccess", player, xPlayer.getPlayer());
|
|
xAuthLog.info(player.getName() + " has registered an account for " + targetName);
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
if (args.length < 3) {
|
|
xAuthLog.info("Correct Usage: xauth register <player> <password> [email]");
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
String password = args[2];
|
|
String email = (args.length > 3 ? args[3] : null);
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (xPlayer.isRegistered()) {
|
|
xAuthLog.info(targetName + " is already registered!");
|
|
return true;
|
|
}
|
|
|
|
Account account = new Account(targetName, Util.encrypt(password), email);
|
|
xPlayer.setAccount(account);
|
|
DbUtil.saveAccount(account);
|
|
|
|
xAuthLog.info("Account successfully created for: " + targetName);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean changePasswordCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.changepw")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 3) {
|
|
xAuthMessages.send("admnCpwUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.isRegistered()) {
|
|
xAuthMessages.send("admnCpwRegistered", player, xPlayer.getPlayer());
|
|
return true;
|
|
}
|
|
|
|
Account targetAcc = xPlayer.getAccount();
|
|
String newPassword = args[2];
|
|
|
|
plugin.changePassword(targetAcc, newPassword);
|
|
xAuthMessages.send("admnCpwSuccess", player, xPlayer.getPlayer());
|
|
xAuthLog.info(player.getName() + " changed " + targetName + "'s password");
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
if (args.length < 3) {
|
|
xAuthLog.info("Correct Usage: xauth changepw <player> <new password>");
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.isRegistered()) {
|
|
xAuthLog.info("This player is not registered!");
|
|
return true;
|
|
}
|
|
|
|
Account targetAcc = xPlayer.getAccount();
|
|
String newPassword = args[2];
|
|
|
|
plugin.changePassword(targetAcc, newPassword);
|
|
xAuthLog.info(targetName + "'s password has been changed");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean logoutCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.logout")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 2) {
|
|
xAuthMessages.send("admnLogoutUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.hasSession()) {
|
|
xAuthMessages.send("admnLogoutLogged", player, xPlayer.getPlayer());
|
|
return true;
|
|
}
|
|
|
|
plugin.createGuest(xPlayer);
|
|
Player target = xPlayer.getPlayer();
|
|
xAuthMessages.send("admnLogoutSuccess", player, target);
|
|
if (target != null)
|
|
xAuthMessages.send("logoutSuccess", target);
|
|
xAuthLog.info(targetName + " was logged out by " + player.getName());
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
if (args.length < 2) {
|
|
xAuthLog.info("Correct Usage: xauth logout <player>");
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.hasSession()) {
|
|
xAuthLog.info(targetName + " is not logged in!");
|
|
return true;
|
|
}
|
|
|
|
plugin.createGuest(xPlayer);
|
|
xAuthLog.info(targetName + " has been logged out");
|
|
Player target = xPlayer.getPlayer();
|
|
if (target != null)
|
|
xAuthMessages.send("logoutSuccess", target);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean unregisterCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.unregister")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 2) {
|
|
xAuthMessages.send("admnUnregUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.isRegistered()) {
|
|
xAuthMessages.send("admnUnregRegistered", player, xPlayer.getPlayer());
|
|
return true;
|
|
}
|
|
|
|
DbUtil.deleteAccount(xPlayer);
|
|
|
|
Player target = xPlayer.getPlayer();
|
|
if (target != null) {
|
|
if (xPlayer.mustRegister())
|
|
plugin.createGuest(xPlayer);
|
|
xAuthMessages.send("admnUnregSuccessTgt", target);
|
|
}
|
|
|
|
xAuthMessages.send("admnUnregSuccessPlyr", player, target);
|
|
xAuthLog.info(targetName + " has been unregistered by " + player.getName());
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
if (args.length < 2) {
|
|
xAuthLog.info("Correct Usage: xauth unregister <player>");
|
|
return true;
|
|
}
|
|
|
|
String targetName = args[1];
|
|
xAuthPlayer xPlayer = plugin.getPlayer(targetName);
|
|
|
|
if (!xPlayer.isRegistered()) {
|
|
xAuthLog.info(targetName + " is not registered!");
|
|
return true;
|
|
}
|
|
|
|
DbUtil.deleteAccount(xPlayer);
|
|
|
|
Player target = xPlayer.getPlayer();
|
|
if (target != null) {
|
|
if (xPlayer.mustRegister())
|
|
plugin.createGuest(xPlayer);
|
|
target.sendMessage("You have been unregistered and logged out!");
|
|
}
|
|
|
|
xAuthLog.info(targetName + " has been unregistered!");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean locationCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.location")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 2 || !(args[1].equals("set") || args[1].equals("remove"))) {
|
|
xAuthMessages.send("admnLocUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String action = args[1];
|
|
Boolean global = (args.length > 2 && args[2].equals("global") ? true : false);
|
|
|
|
if (action.equals("set")) {
|
|
if (!global && player.getWorld().getUID().equals(plugin.getGlobalUID())) {
|
|
xAuthMessages.send("admnLocSetErrGlobal", player);
|
|
return true;
|
|
}
|
|
|
|
plugin.setTeleLocation(new TeleLocation(player.getLocation(), global));
|
|
|
|
if (global)
|
|
xAuthMessages.send("admnLocSetGlobalSuccess", player);
|
|
else
|
|
xAuthMessages.send("admnLocSetSuccess", player);
|
|
} else {
|
|
if (global) {
|
|
TeleLocation tLoc = plugin.getTeleLocation(plugin.getGlobalUID());
|
|
if (tLoc == null) {
|
|
xAuthMessages.send("admnLocRmvGlobalNo", player);
|
|
return true;
|
|
}
|
|
|
|
plugin.removeTeleLocation(tLoc);
|
|
xAuthMessages.send("admnLocRmvGlobalSuccess", player);
|
|
} else {
|
|
TeleLocation tLoc = plugin.getTeleLocation(player.getWorld().getUID());
|
|
if (tLoc == null) {
|
|
xAuthMessages.send("admnLocRmvNo", player);
|
|
return true;
|
|
} else if (tLoc.getUID().equals(plugin.getGlobalUID())) {
|
|
xAuthMessages.send("admnLocRmvErrGlobal", player);
|
|
return true;
|
|
}
|
|
|
|
plugin.removeTeleLocation(tLoc);
|
|
xAuthMessages.send("admnLocRmvSuccess", player);
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean configCommand(CommandSender sender, String[] args) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (!xAuthPermissions.has(player, "xauth.admin.config")) {
|
|
xAuthMessages.send("admnPermission", player);
|
|
return true;
|
|
} else if (args.length < 2) {
|
|
xAuthMessages.send("admnConfUsage", player);
|
|
return true;
|
|
}
|
|
|
|
String setting = args[1];
|
|
Object value = (args.length > 2 ? args[2] : null);
|
|
Field field;
|
|
|
|
try {
|
|
field = xAuthSettings.class.getField(setting);
|
|
} catch (NoSuchFieldException e) {
|
|
xAuthMessages.send("admnConfNo", player);
|
|
return true;
|
|
}
|
|
|
|
String type = null;
|
|
if (field.getType().equals(String.class))
|
|
type = "String";
|
|
else if (field.getType().equals(Integer.TYPE))
|
|
type = "Integer";
|
|
else if (field.getType().equals(Boolean.TYPE))
|
|
type = "Boolean";
|
|
|
|
if (value == null) { // view setting info
|
|
//player.sendMessage("Setting: " + field.getName());
|
|
//player.sendMessage("Type: " + type);
|
|
try {
|
|
xAuthMessages.sendConfigDesc(player, field.getName(), type, field.get(xAuthSettings.class));
|
|
//player.sendMessage("Value: " + field.get(xAuthSettings.class));
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return true;
|
|
} else { // change setting
|
|
try {
|
|
if (type.equals("String"))
|
|
field.set(xAuthSettings.class, value.toString());
|
|
else if (type.equals("Integer"))
|
|
field.set(xAuthSettings.class, Integer.parseInt(value.toString()));
|
|
else if (type.equals("Boolean"))
|
|
field.set(xAuthSettings.class, Boolean.parseBoolean(value.toString()));
|
|
else
|
|
throw new IllegalArgumentException();
|
|
} catch (IllegalArgumentException e) {
|
|
xAuthMessages.send("admnConfInvalid", player);
|
|
return true;
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
return true;
|
|
}
|
|
|
|
xAuthSettings.changed = true;
|
|
xAuthMessages.send("admnConfSuccess", player);
|
|
xAuthLog.info(player.getName() + " has changed setting " + setting + " to " + value);
|
|
}
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
if (args.length < 2) {
|
|
xAuthLog.info("Correct Usage: xauth config <setting> [new value]");
|
|
return true;
|
|
}
|
|
|
|
String setting = args[1];
|
|
Object value = (args.length > 2 ? args[2] : null);
|
|
Field field = null;
|
|
|
|
try {
|
|
field = xAuthSettings.class.getField(setting);
|
|
} catch (NoSuchFieldException e) {
|
|
xAuthLog.info("No such setting!");
|
|
return true;
|
|
}
|
|
|
|
String type = null;
|
|
if (field.getType().equals(String.class))
|
|
type = "String";
|
|
else if (field.getType().equals(Integer.TYPE))
|
|
type = "Integer";
|
|
else if (field.getType().equals(Boolean.TYPE))
|
|
type = "Boolean";
|
|
|
|
if (value == null) { // view setting info
|
|
xAuthLog.info("Setting: " + field.getName());
|
|
xAuthLog.info("Type: " + type);
|
|
try {
|
|
xAuthLog.info("Value: " + field.get(xAuthSettings.class));
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
return true;
|
|
}
|
|
} else { // change setting
|
|
try {
|
|
if (type.equals("String"))
|
|
field.set(xAuthSettings.class, value.toString());
|
|
else if (type.equals("Integer"))
|
|
field.set(xAuthSettings.class, Integer.parseInt(value.toString()));
|
|
else if (type.equals("Boolean"))
|
|
field.set(xAuthSettings.class, Boolean.parseBoolean(value.toString()));
|
|
else
|
|
throw new IllegalArgumentException();
|
|
} catch (IllegalArgumentException e) {
|
|
xAuthLog.info("Invalid type");
|
|
return true;
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
return true;
|
|
}
|
|
|
|
xAuthSettings.changed = true;
|
|
xAuthLog.info("Setting changed!");
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private boolean reloadCommand(CommandSender sender) {
|
|
if (sender instanceof Player) {
|
|
Player player = (Player)sender;
|
|
|
|
if (xAuthPermissions.has(player, "xauth.admin.reload")) {
|
|
plugin.reload();
|
|
xAuthMessages.send("admnReloadSuccess", player);
|
|
xAuthLog.info("Reloaded by " + player.getName());
|
|
} else
|
|
xAuthMessages.send("admnPermission", player);
|
|
} else if (sender instanceof ConsoleCommandSender) {
|
|
plugin.reload();
|
|
xAuthLog.info("Reload complete!");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |