package com.cypherx.xauth; import org.bukkit.command.Command; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; public class CommandHandler { private final xAuth plugin; private final PluginDescriptionFile pdfFile; public CommandHandler(final xAuth instance) { plugin = instance; pdfFile = plugin.getDescription(); } public void handlePlayerCommand(Player player, Command cmd, String[] args) { if (cmd.getName().equalsIgnoreCase("register")) { if (args.length != 1) player.sendMessage(xAuth.strings.getString("register.usage")); else if (!xAuth.settings.getBool("registration.enabled")) player.sendMessage(xAuth.strings.getString("register.err.disabled")); else if (plugin.isRegistered(player.getName())) player.sendMessage(xAuth.strings.getString("register.err.registered")); else if (!plugin.isValidPass(args[0])) player.sendMessage(xAuth.strings.getString("password.invalid", xAuth.settings.getInt("password.min-length"))); else { plugin.addAuth(player.getName(), args[0]); plugin.login(player); player.sendMessage(xAuth.strings.getString("register.success1")); player.sendMessage(xAuth.strings.getString("register.success2", args[0])); System.out.println("[" + pdfFile.getName() + "] Player '" + player.getName() + "' has registered"); } } else if (cmd.getName().equalsIgnoreCase("login")) { if (args.length != 1) player.sendMessage(xAuth.strings.getString("login.usage")); else if (!plugin.isRegistered(player.getName())) player.sendMessage(xAuth.strings.getString("login.err.registered")); else if (plugin.sessionExists(player.getName())) player.sendMessage(xAuth.strings.getString("login.err.logged")); else { if (plugin.checkPass(player, args[0])) { if (xAuth.settings.getBool("login.strikes.enabled")) plugin.clearStrikes(player); plugin.login(player); player.sendMessage(xAuth.strings.getString("login.success")); System.out.println("[" + pdfFile.getName() + "] Player '" + player.getName() + "' has authenticated"); } else { player.sendMessage(xAuth.strings.getString("login.err.password")); if (xAuth.settings.getBool("login.strikes.enabled")) { plugin.addStrike(player); if (plugin.getStrikes(player) >= xAuth.settings.getInt("login.strikes.amount")) { String action; if (xAuth.settings.getStr("login.strikes.action").equals("banip")) { String addr = player.getAddress().getAddress().getHostAddress(); plugin.getServer().dispatchCommand(new ConsoleCommandSender(plugin.getServer()), "ban-ip " + addr); action = addr + " banned"; } else action = player.getName() + " kicked"; player.kickPlayer(xAuth.strings.getString("login.err.kick")); plugin.clearStrikes(player); System.out.println("[" + pdfFile.getName() + "] " + action + " by strike system"); } } } } } else if (cmd.getName().equalsIgnoreCase("changepw")) { if (plugin.canUseCommand(player, "xauth.admin.changepw")) { if (args.length == 1) { if (!plugin.sessionExists(player.getName())) player.sendMessage(xAuth.strings.getString("changepw.err.login")); else if (!xAuth.settings.getBool("misc.allow-changepw")) player.sendMessage(xAuth.strings.getString("changepw.err.disabled")); else if (!plugin.isValidPass(args[0])) player.sendMessage(xAuth.strings.getString("password.invalid", xAuth.settings.getInt("password.min-length"))); else { plugin.changePass(player.getName(), args[0]); player.sendMessage(xAuth.strings.getString("changepw.success.self", args[0])); System.out.println("[" + pdfFile.getName() + "] Player '" + player.getName() + "' has changed their password"); } } else if (args.length == 2) { if (!plugin.isRegistered(args[0])) player.sendMessage(xAuth.strings.getString("changepw.err.registered")); else { plugin.changePass(args[0], args[1]); player.sendMessage(xAuth.strings.getString("changepw.success.other")); System.out.println("[" + pdfFile.getName() + "] " + player.getName() + " has changed " + args[0] + "'s password"); } } else player.sendMessage(xAuth.strings.getString("changepw.usage2")); } else { if (args.length != 1) player.sendMessage(xAuth.strings.getString("changepw.usage1")); else if (!plugin.sessionExists(player.getName())) player.sendMessage(xAuth.strings.getString("changepw.err.login")); else if (!xAuth.settings.getBool("misc.allow-changepw")) player.sendMessage(xAuth.strings.getString("changepw.err.disabled")); else if (!plugin.isValidPass(args[0])) player.sendMessage(xAuth.strings.getString("password.invalid", xAuth.settings.getInt("password.min-length"))); else { plugin.changePass(player.getName(), args[0]); player.sendMessage(xAuth.strings.getString("changepw.success.self", args[0])); System.out.println("[" + pdfFile.getName() + "] Player '" + player.getName() + "' has changed their password"); } } } else if (cmd.getName().equalsIgnoreCase("unregister")) { if (plugin.canUseCommand(player, "xauth.admin.unregister")) { if (args.length != 1) player.sendMessage(xAuth.strings.getString("unregister.usage")); else if (!plugin.isRegistered(args[0])) player.sendMessage(xAuth.strings.getString("changepw.err.registered")); else { plugin.removeAuth(args[0]); Player target = plugin.getServer().getPlayer(args[0]); if (target != null) { if (plugin.mustRegister(target)) { plugin.saveLocation(target); plugin.saveInventory(target); } target.sendMessage(xAuth.strings.getString("unregister.target")); } player.sendMessage(xAuth.strings.getString("unregister.success", args[0])); System.out.println("[" + pdfFile.getName() + "] " + player.getName() + " has unregistered " + args[0]); } } } else if (cmd.getName().equalsIgnoreCase("authreload")) { if (plugin.canUseCommand(player, "xauth.admin.reload")) { plugin.reload(); player.sendMessage(xAuth.strings.getString("reload.success")); } } else if (cmd.getName().equalsIgnoreCase("toggle")) { if (plugin.canUseCommand(player, "xauth.admin.toggle")) { String node = null; if (args.length < 1) { player.sendMessage(xAuth.strings.getString("toggle.usage")); return; } if (args[0].equalsIgnoreCase("reg")) node = "registration.enabled"; else if (args[0].equalsIgnoreCase("changepw")) node = "misc.allow-changepw"; else if (args[0].equalsIgnoreCase("autosave")) node = "misc.autosave"; else if (args[0].equalsIgnoreCase("filter")) node = "filter.enabled"; else if (args[0].equalsIgnoreCase("blankname")) node = "filter.blankname"; else if (args[0].equalsIgnoreCase("verifyip")) node = "session.verifyip"; else if (args[0].equalsIgnoreCase("strike")) node = "login.strikes.enabled"; else if (args[0].equalsIgnoreCase("forcereg")) node = "registration.forced"; else { player.sendMessage(xAuth.strings.getString("toggle.usage")); return; } Boolean b = xAuth.settings.getBool(node); xAuth.settings.updateValue(node, (b ? false : true)); player.sendMessage(xAuth.strings.getString("toggle.success", (b ? xAuth.strings.getString("misc.disabled") : xAuth.strings.getString("misc.enabled")))); } } else if (cmd.getName().equalsIgnoreCase("logout")) { //logout current player if (args.length == 0) plugin.killSession(player); //logout other player else { if (plugin.canUseCommand(player, "xauth.admin.logout")) { String target = buildString(args); if (!plugin.sessionExists(target)) player.sendMessage(xAuth.strings.getString("logout.err.session")); else { Player pTarget = plugin.getServer().getPlayer(target); plugin.removeSession(target); if (pTarget != null) { plugin.saveLocation(pTarget); plugin.saveInventory(pTarget); pTarget.sendMessage(xAuth.strings.getString("logout.success.ended")); } player.sendMessage(xAuth.strings.getString("logout.success.other", target)); } } } } } public void handleConsoleCommand(Command cmd, String[] args) { if (cmd.getName().equalsIgnoreCase("register")) { if (args.length != 2) System.out.println("Correct Usage: /register "); else if (plugin.isRegistered(args[0])) System.out.println("Player '" + args[0] + "' is already registered"); else { plugin.addAuth(args[0], args[1]); System.out.println(args[0] + " has been registered with password: " + args[1]); } } else if (cmd.getName().equalsIgnoreCase("changepw")) { if (args.length != 2) System.out.println("Correct Usage: /changepw "); else if (!plugin.isRegistered(args[0])) System.out.println("Player '" + args[0] + "' is not registered"); else { plugin.changePass(args[0], args[1]); System.out.println(args[0] + "'s password has been changed to: " + args[1]); } } else if (cmd.getName().equalsIgnoreCase("unregister")) { if (args.length != 1) System.out.println("Correct Usage: /unregister "); else if (!plugin.isRegistered(args[0])) System.out.println("Player '" + args[0] + "' is not registered"); else { plugin.removeAuth(args[0]); Player target = plugin.getServer().getPlayer(args[0]); if (target != null) { if (plugin.mustRegister(target)) { plugin.saveLocation(target); plugin.saveInventory(target); } target.sendMessage(xAuth.strings.getString("unregister.target")); } System.out.println(args[0] + " has been unregistered"); } } else if (cmd.getName().equalsIgnoreCase("authreload")) plugin.reload(); else if (cmd.getName().equalsIgnoreCase("toggle")) { String node = null; if (args.length < 1) { System.out.println("[" + pdfFile.getName() + "] Correct Usage: /toggle "); return; } if (args[0].equalsIgnoreCase("reg")) node = "registration.enabled"; else if (args[0].equalsIgnoreCase("changepw")) node = "misc.allow-changepw"; else if (args[0].equalsIgnoreCase("autosave")) node = "misc.autosave"; else if (args[0].equalsIgnoreCase("filter")) node = "filter.enabled"; else if (args[0].equalsIgnoreCase("blankname")) node = "filter.blankname"; else if (args[0].equalsIgnoreCase("verifyip")) node = "session.verifyip"; else if (args[0].equalsIgnoreCase("strike")) node = "login.strikes.enabled"; else if (args[0].equalsIgnoreCase("forcereg")) node = "registration.forced"; else { System.out.println("[" + pdfFile.getName() + "] Correct Usage: /toggle "); return; } Boolean b = xAuth.settings.getBool(node); xAuth.settings.updateValue(node, (b ? false : true)); System.out.println("[" + pdfFile.getName() + "] Node " + (b ? "disabled" : "enabled")); } else if (cmd.getName().equalsIgnoreCase("logout")) { if (args.length < 1) System.out.println("Correct Usage: /logout "); else { String target = buildString(args); if (!plugin.sessionExists(target)) System.out.println("[" + pdfFile.getName() + "] This player does not have an active session."); else { Player pTarget = plugin.getServer().getPlayer(target); plugin.removeSession(target); if (pTarget != null) { plugin.saveLocation(pTarget); plugin.saveInventory(pTarget); pTarget.sendMessage(xAuth.strings.getString("logout.success.ended")); } System.out.println("[" + pdfFile.getName() + "] " + target + "'s session has been terminated"); } } } } private String buildString(String[] args) { String s = ""; for (int i = 0; i < args.length; i++) { if (args[i] == null) continue; s += args[i] + " "; } return s.trim(); } }