diff --git a/src/com/projectkorra/projectkorra/Commands.java b/src/com/projectkorra/projectkorra/Commands.java deleted file mode 100644 index f00babfa..00000000 --- a/src/com/projectkorra/projectkorra/Commands.java +++ /dev/null @@ -1,1953 +0,0 @@ -package com.projectkorra.projectkorra; - -import java.io.File; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; - -import com.projectkorra.projectkorra.ability.AbilityModuleManager; -import com.projectkorra.projectkorra.ability.StockAbility; -import com.projectkorra.projectkorra.ability.combo.ComboManager; -import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; -import com.projectkorra.projectkorra.airbending.AirMethods; -import com.projectkorra.projectkorra.chiblocking.ChiMethods; -import com.projectkorra.projectkorra.earthbending.EarthMethods; -import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; -import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; -import com.projectkorra.projectkorra.firebending.FireMethods; -import com.projectkorra.projectkorra.object.Preset; -import com.projectkorra.projectkorra.storage.DBConnection; -import com.projectkorra.projectkorra.waterbending.WaterMethods; -import com.projectkorra.rpg.RPGMethods; - -public class Commands { - - private ProjectKorra plugin; - - private static BukkitTask importTask; - public static Set invincible = new HashSet(); - public static boolean debug = false; - public static boolean isToggledForAll = false; - - public Commands(ProjectKorra plugin) { - this.plugin = plugin; - debug = ProjectKorra.plugin.getConfig().getBoolean("debug"); - init(); - } - - /* - * Element Aliases - */ - String[] airaliases = { "air", "a", "airbending", "airbender" }; - String[] avataraliases = { "avatar", "ava" }; - String[] chialiases = { "chi", "c", "chiblocking", "chiblocker" }; - String[] earthaliases = { "earth", "e", "earthbending", "earthbender" }; - String[] firealiases = { "fire", "f", "firebending", "firebender" }; - String[] wateraliases = { "water", "w", "waterbending", "waterbender" }; - - /* - * Combo Aliases - */ - String[] aircomboaliases = { "aircombo", "ac", "aircombos", "airbendingcombos"}; - String[] chicomboaliases = { "chicombo", "cc", "chicombos", "chiblockingcombos", "chiblockercombos"}; - String[] earthcomboaliases = { "earthcombo", "ec", "earthcombos", "earthbendingcombos" }; - String[] firecomboaliases = { "firecombo", "fc", "firecombos", "firebendingcombos" }; - String[] watercomboaliases = { "watercombo", "wc", "watercombos", "waterbendingcombos" }; - - /* - * Subelement Aliases - */ - //Air - String[] flightaliases = { "flight", "fl" }; - String[] spiritualprojectionaliases = { "spiritualprojection", "sp", "spiritual" }; - - //Water - String[] bloodaliases = { "bloodbending", "bb" }; - String[] healingaliases = { "healing", "heal" }; - String[] icealiases = { "icebending", "ice", "ib" }; - String[] plantaliases = { "plantbending", "plant" }; - - //Earth - String[] metalbendingaliases = { "metalbending", "mb", "metal" }; - String[] lavabendingaliases = { "lavabending", "lb", "lava" }; - String[] sandbendingaliases = { "sandbending", "sb", "sand" }; - - //Firebending - String[] combustionaliases = { "combustionbending", "combustion", "cb" }; - String[] lightningaliases = { "lightningbending", "lightning" }; - - /* - * Command Aliases - */ - String[] addaliases = { "add", "a" }; - String[] bindaliases = { "bind", "b" }; - String[] checkaliases = { "check", "chk" }; - String[] choosealiases = { "choose", "ch" }; - String[] clearaliases = { "clear", "cl", "c" }; - String[] displayaliases = { "display", "d" }; - String[] helpaliases = { "help", "h" }; - String[] importaliases = { "import", "i" }; - String[] invinciblealiases = { "invincible", "inv" }; - String[] permaremovealiases = { "permaremove", "premove", "permremove", "pr" }; - String[] presetaliases = { "preset", "presets", "pre", "set", "p" }; - String[] reloadaliases = { "reload", "r" }; - String[] removealiases = { "remove", "rm" }; - String[] togglealiases = { "toggle", "t" }; - String[] versionaliases = { "version", "v" }; - String[] whoaliases = { "who", "w" }; - - private void init() { - PluginCommand projectkorra = plugin.getCommand("projectkorra"); - CommandExecutor exe; - - exe = new CommandExecutor() { - @SuppressWarnings("deprecation") - @Override - public boolean onCommand(CommandSender s, Command c, String label, String[] args) { - for (int i = 0; i < args.length; i++) { - args[i] = args[i].toLowerCase(); - } - - if (args.length == 0) { - s.sendMessage(ChatColor.RED + "/bending help [Ability/Command] " + ChatColor.YELLOW + "Display help."); - s.sendMessage(ChatColor.RED + "/bending choose [Element] " + ChatColor.YELLOW + "Choose an element."); - s.sendMessage(ChatColor.RED + "/bending bind [Ability] # " + ChatColor.YELLOW + "Bind an ability."); - return true; - } - - else if (Arrays.asList(addaliases).contains(args[0])) { - //bending add [Player] [Element] - if (args.length > 3) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending add [Player] [Element]"); - s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, Chi"); - return true; - } - if (args.length == 3) { - if (!s.hasPermission("bending.command.add.others")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - if (player == null) { - s.sendMessage(ChatColor.RED + "That player is not online."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - bPlayer = GeneralMethods.getBendingPlayer(player); - } - if (Arrays.asList(airaliases).contains(args[2])) { - bPlayer.addElement(Element.Air); - GeneralMethods.saveElements(bPlayer); - player.sendMessage(AirMethods.getAirColor() + "You are also an Airbender."); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + AirMethods.getAirColor() + " is also an Airbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, Element.Air, Result.ADD)); - return true; - } - - if (Arrays.asList(wateraliases).contains(args[2])) { - bPlayer.addElement(Element.Water); - GeneralMethods.saveElements(bPlayer); - player.sendMessage(WaterMethods.getWaterColor() + "You are also a waterbender."); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + WaterMethods.getWaterColor() + " is also a Waterbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, Element.Water, Result.ADD)); - return true; - } - - if (Arrays.asList(earthaliases).contains(args[2])) { - bPlayer.addElement(Element.Earth); - GeneralMethods.saveElements(bPlayer); - player.sendMessage(EarthMethods.getEarthColor() + "You are also an Earthbender."); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + EarthMethods.getEarthColor() + " is also an Earthbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, Element.Earth, Result.ADD)); - return true; - } - - if (Arrays.asList(firealiases).contains(args[2])) { - bPlayer.addElement(Element.Fire); - GeneralMethods.saveElements(bPlayer); - player.sendMessage(FireMethods.getFireColor() + "You are also a Firebender."); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + FireMethods.getFireColor() + " is also a Firebender"); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, Element.Fire, Result.ADD)); - return true; - } - - if (Arrays.asList(chialiases).contains(args[2].toLowerCase())) { - bPlayer.addElement(Element.Chi); - GeneralMethods.saveElements(bPlayer); - player.sendMessage(ChiMethods.getChiColor() + "You are also a ChiBlocker."); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + ChiMethods.getChiColor() + " is also a ChiBlocker"); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, Element.Chi, Result.ADD)); - return true; - } - - s.sendMessage(ChatColor.RED + "You must specify an element."); - return true; - } - if (args.length == 2) { - // Target = Self - if (!s.hasPermission("bending.command.add")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by Players."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) s).getUniqueId(), s.getName()); - bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - } - - if (Arrays.asList(airaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.add.air")) { - s.sendMessage(ChatColor.RED + "You don't have permsision to add " + AirMethods.getAirColor() + "Airbending"); - return true; - } - bPlayer.addElement(Element.Air); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(AirMethods.getAirColor() + "You are also an Airbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Air, Result.ADD)); - return true; - } - - if (Arrays.asList(wateraliases).contains(args[1])) { - if (!s.hasPermission("bending.command.add.water")) { - s.sendMessage(ChatColor.RED + "You don't have permission to add " + WaterMethods.getWaterColor() + "Waterbending"); - return true; - } - bPlayer.addElement(Element.Water); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(WaterMethods.getWaterColor() + "You are also a Waterbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Water, Result.ADD)); - return true; - } - - if (Arrays.asList(earthaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.add.earth")) { - s.sendMessage(ChatColor.RED + "You dont' have permission to add " + EarthMethods.getEarthColor() + "Earthbending"); - return true; - } - bPlayer.addElement(Element.Earth); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(EarthMethods.getEarthColor() + "You are also an Earthbender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Earth, Result.ADD)); - return true; - } - - if (Arrays.asList(firealiases).contains(args[1])) { - if (!s.hasPermission("bending.command.add.fire")) { - s.sendMessage(ChatColor.RED + "You don't have permission to add " + FireMethods.getFireColor() + "Firebending"); - return true; - } - bPlayer.addElement(Element.Fire); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(FireMethods.getFireColor() + "You are also a Firebender."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Fire, Result.ADD)); - return true; - } - if (Arrays.asList(chialiases).contains(args[1])) { - if (!s.hasPermission("bending.command.add.chi")) { - s.sendMessage(ChatColor.RED + "You don't have permission to add " + ChiMethods.getChiColor() + "Chiblocking"); - return true; - } - bPlayer.addElement(Element.Chi); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(ChiMethods.getChiColor() + "You are also a ChiBlocker."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Chi, Result.ADD)); - return true; - } - s.sendMessage(ChatColor.RED + "You must specify an element."); - } - } - - else if (Arrays.asList(avataraliases).contains(args[0])) { - if (!GeneralMethods.hasRPG()) { - s.sendMessage(ChatColor.RED + "This command cannot be used unless you have ProjectKorra (RPG) installed."); - return true; - } - - if (!s.hasPermission("bending.command.avatar")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (args.length != 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending avatar [Player]"); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - if (player == null) { - s.sendMessage(ChatColor.RED + "That player is not online."); - return true; - } - - UUID uuid = player.getUniqueId(); - - if (RPGMethods.hasBeenAvatar(uuid)) { - s.sendMessage(ChatColor.RED + "This player has already been the Avatar."); - return true; - } - - RPGMethods.setAvatar(uuid); - s.sendMessage(ChatColor.DARK_AQUA + player.getName() + ChatColor.GREEN + " is now the Avatar."); - player.sendMessage("You are now the Avatar."); - return true; - } - - else if (Arrays.asList(bindaliases).contains(args[0])) { - if (args.length > 3 || args.length == 1) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending bind [Ability] <#>"); - return true; - } - - if (!s.hasPermission("bending.command.bind")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (args.length == 2) { - // We bind the ability to the slot they have selected.. - // bending bind [Ability] - String abil = args[1]; - if (!GeneralMethods.abilityExists(abil)) { - s.sendMessage(ChatColor.RED + "That is not an ability."); - return true; - } - - String ability = GeneralMethods.getAbility(abil); - - if (!GeneralMethods.canBind(((Player) s).getName(), ability)) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - - } - if (AirMethods.isAirAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Air)) { - s.sendMessage(AirMethods.getAirColor() + "You must be an Airbender to bind this ability."); - return true; - } - if (WaterMethods.isWaterAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Water)) { - s.sendMessage(WaterMethods.getWaterColor() + "You must be a Waterbender to bind this ability."); - return true; - } - if (EarthMethods.isEarthAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Earth)) { - s.sendMessage(EarthMethods.getEarthColor() + "You must be an Earthbender to bind this ability."); - return true; - } - if (FireMethods.isFireAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Fire)) { - s.sendMessage(FireMethods.getFireColor() + "You must be a Firebender to bind this ability."); - return true; - } - if (ChiMethods.isChiAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Chi)) { - s.sendMessage(ChiMethods.getChiColor() + "You must be a ChiBlocker to bind this ability."); - return true; - } - - GeneralMethods.bindAbility((Player) s, ability); - //s.sendMessage("Ability Bound to slot"); - return true; - } - - if (args.length == 3) { - // bending bind ability [Slot] - String abil = args[1]; - if (!GeneralMethods.abilityExists(abil)) { - s.sendMessage(ChatColor.RED + "That ability doesn't exist."); - return true; - } - String ability = GeneralMethods.getAbility(abil); - int slot = 0; - try { - slot = Integer.parseInt(args[2]); - } - catch (NumberFormatException e) { - s.sendMessage(ChatColor.RED + "Slot must be an integer between 1 and 9."); - return true; - } - if (slot < 1 || slot > 9) { - s.sendMessage(ChatColor.RED + "Slot must be an integer between 1 and 9."); - return true; - } - - if (!GeneralMethods.canBind(((Player) s).getName(), ability)) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (AirMethods.isAirAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Air)) { - s.sendMessage(AirMethods.getAirColor() + "You must be an Airbender to bind this ability."); - return true; - } - if (WaterMethods.isWaterAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Water)) { - s.sendMessage(WaterMethods.getWaterColor() + "You must be a Waterbender to bind this ability."); - return true; - } - if (EarthMethods.isEarthAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Earth)) { - s.sendMessage(EarthMethods.getEarthColor() + "You must be an Earthbender to bind this ability."); - return true; - } - if (FireMethods.isFireAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Fire)) { - s.sendMessage(FireMethods.getFireColor() + "You must be a Firebender to bind this ability."); - return true; - } - if (ChiMethods.isChiAbility(ability) && !GeneralMethods.isBender(s.getName(), Element.Chi)) { - s.sendMessage(ChiMethods.getChiColor() + "You must be a ChiBlocker to bind this ability."); - return true; - } - GeneralMethods.bindAbility((Player) s, ability, slot); - //s.sendMessage("Ability Bound"); - return true; - } - } - - else if (Arrays.asList(checkaliases).contains(args[0])) { - if (!s.hasPermission("bending.command.check")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (s instanceof Player) { - if (plugin.updater.updateAvailable()) { - s.sendMessage(ChatColor.GREEN + "There is a new version of " + ChatColor.GOLD + "ProjectKorra" + ChatColor.GREEN + " available!"); - s.sendMessage(ChatColor.YELLOW + "Current version: " + ChatColor.RED + plugin.updater.getCurrentVersion()); - s.sendMessage(ChatColor.YELLOW + "Latest version: " + ChatColor.GOLD + plugin.updater.getCurrentVersion()); - } else { - s.sendMessage(ChatColor.YELLOW + "You have the latest version of " + ChatColor.GOLD + "ProjectKorra"); - } - } else if (s instanceof ConsoleCommandSender) { - plugin.updater.checkUpdate(); - } - } - - else if (Arrays.asList(choosealiases).contains(args[0])) { - // /bending choose [Player] [Element] - if (args.length > 3) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending choose [Player] [Element]"); - s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, and Chi"); - return true; - } - - if (args.length == 2) { - if (!s.hasPermission("bending.command.choose")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) s).getUniqueId(), s.getName()); - bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - } - if (bPlayer.isPermaRemoved()) { - s.sendMessage(ChatColor.RED + "Your bending was permanently removed."); - return true; - } - - if (!bPlayer.getElements().isEmpty()) { - if (!s.hasPermission("bending.command.rechoose")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - } - - if (Arrays.asList(airaliases).contains(args[1].toLowerCase())) { - if (!s.hasPermission("bending.command.choose.air")) { - s.sendMessage(ChatColor.RED + "You don't have permission to choose " + AirMethods.getAirColor() + "Airbending"); - return true; - } - bPlayer.setElement(Element.Air); - s.sendMessage(AirMethods.getAirColor() + "You are now an Airbender."); - GeneralMethods.removeUnusableAbilities(s.getName()); - GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Air, Result.CHOOSE)); - return true; - } - - if (Arrays.asList(wateraliases).contains(args[1])) { - if (!s.hasPermission("bending.command.choose.water")) { - s.sendMessage(ChatColor.RED + "You don't have permission to choose " + WaterMethods.getWaterColor() + "Waterbending"); - return true; - } - bPlayer.setElement(Element.Water); - s.sendMessage(WaterMethods.getWaterColor() + "You are now a Waterbender."); - GeneralMethods.removeUnusableAbilities(s.getName()); - GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Water, Result.CHOOSE)); - return true; - } - - if (Arrays.asList(earthaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.choose.earth")) { - s.sendMessage(ChatColor.RED + "You don't have permission to choose " + EarthMethods.getEarthColor() + "Earthbending"); - return true; - } - bPlayer.setElement(Element.Earth); - s.sendMessage(EarthMethods.getEarthColor() + "You are now an Earthbender."); - GeneralMethods.removeUnusableAbilities(s.getName()); - GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Earth, Result.CHOOSE)); - return true; - } - - if (Arrays.asList(firealiases).contains(args[1])) { - if (!s.hasPermission("bending.command.choose.fire")) { - s.sendMessage(ChatColor.RED + "You don't have permission to choose " + FireMethods.getFireColor() + "Firebending"); - return true; - } - bPlayer.setElement(Element.Fire); - s.sendMessage(FireMethods.getFireColor() + "You are now a Firebender."); - GeneralMethods.removeUnusableAbilities(s.getName()); - GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Fire, Result.CHOOSE)); - return true; - } - - if (Arrays.asList(chialiases).contains(args[1])) { - if (!s.hasPermission("bending.command.choose.chi")) { - s.sendMessage(ChatColor.RED + "You don't have permission to choose " + ChiMethods.getChiColor() + "Chiblocking"); - return true; - } - bPlayer.setElement(Element.Chi); - s.sendMessage(ChiMethods.getChiColor() + "You are now a ChiBlocker."); - GeneralMethods.removeUnusableAbilities(s.getName()); - GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, (Player) s, Element.Chi, Result.CHOOSE)); - return true; - } - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending choose [Element]"); - s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, Chi"); - return true; - } - if (args.length == 3) { - if (!s.hasPermission("bending.admin.choose")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - Player target = Bukkit.getPlayer(args[1]); - if (target == null) { - s.sendMessage(ChatColor.RED + "That player is not online."); - return true; - } - BendingPlayer bTarget = GeneralMethods.getBendingPlayer(target.getName()); - - if (bTarget == null) { - GeneralMethods.createBendingPlayer(target.getUniqueId(), target.getName()); - bTarget = GeneralMethods.getBendingPlayer(target); - } - - // if (bTarget.isPermaRemoved()) { - // s.sendMessage(ChatColor.RED + "That player's bending was permanently removed."); - // return true; - // } - Element e = null; - if (Arrays.asList(airaliases).contains(args[2])) - e = Element.Air; - if (Arrays.asList(wateraliases).contains(args[2])) - e = Element.Water; - if (Arrays.asList(earthaliases).contains(args[2])) - e = Element.Earth; - if (Arrays.asList(firealiases).contains(args[2])) - e = Element.Fire; - if (Arrays.asList(chialiases).contains(args[2])) - e = Element.Chi; - - if (e == null) { - s.sendMessage(ChatColor.RED + "You must specify an element."); - return true; - } else { - bTarget.setElement(e); - GeneralMethods.removeUnusableAbilities(target.getName()); - GeneralMethods.saveElements(bTarget); - s.sendMessage(ChatColor.RED + "You have changed " + ChatColor.DARK_AQUA + target.getName() + "'s " + ChatColor.RED + "element to " + ChatColor.DARK_AQUA + e.toString() + ChatColor.RED + "."); - target.sendMessage(ChatColor.RED + "Your bending has been changed to " + ChatColor.DARK_AQUA + e.toString() + ChatColor.RED + " by " + ChatColor.DARK_AQUA + s.getName()); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, target, e, Result.CHOOSE)); - return true; - } - } - } - - else if (Arrays.asList(clearaliases).contains(args[0])) { - if (args.length > 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending clear <#>"); - return true; - } - if (!s.hasPermission("bending.command.clear")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - - if (MultiAbilityManager.hasMultiAbilityBound((Player) s)) { - s.sendMessage(ChatColor.RED + "You can't edit your binds right now!"); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) s).getUniqueId(), s.getName()); - bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - } - if (args.length == 1) { - bPlayer.getAbilities().clear(); - for (int i = 1; i <= 9; i++) { - GeneralMethods.saveAbility(bPlayer, i, null); - } - s.sendMessage("Your bound abilities have been cleared."); - return true; - } - - if (args.length == 2) { - try { - int slot = Integer.parseInt(args[1]); - if (slot < 1 || slot > 9) { - s.sendMessage(ChatColor.RED + "The slot must be an integer between 0 and 9."); - return true; - } - if (bPlayer.getAbilities().get(slot) != null) { - bPlayer.getAbilities().remove(slot); - GeneralMethods.saveAbility(bPlayer, slot, null); - } - s.sendMessage("You have cleared slot #" + slot); - return true; - } - catch (NumberFormatException e) { - s.sendMessage(ChatColor.RED + "The slot must be an integer between 0 and 9."); - } - } - } - - else if (args[0].equalsIgnoreCase("debug")) { - if (args.length != 1) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending debug"); - return true; - } - - if (!s.hasPermission("bending.admin.debug")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - GeneralMethods.runDebug(); - s.sendMessage(ChatColor.GREEN + "Debug File Created as debug.txt in the ProjectKorra plugin folder."); - s.sendMessage(ChatColor.GREEN + "Put contents on pastie.org and create a bug report on the ProjectKorra forum if you need to."); - return true; - } - - else if (Arrays.asList(displayaliases).contains(args[0])) { - if (args.length > 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending display "); - return true; - } - - if (!s.hasPermission("bending.command.display")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (args.length == 2) { - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - //bending display [Element] - if (Arrays.asList(airaliases).contains(args[1])) { - if (AbilityModuleManager.airbendingabilities.isEmpty()) { - s.sendMessage(AirMethods.getAirColor() + "There are no airbending abilities available."); - return true; - } - for (String st : AbilityModuleManager.airbendingabilities) { - if (GeneralMethods.isSubAbility(st)) - continue; - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(AirMethods.getAirColor() + st); - } - } - if (!AbilityModuleManager.flightabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + "Use /bending display Flight for all Flight subelement abilities."); - } - if (!AbilityModuleManager.spiritualprojectionabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + "Use /bending display SpiritualProjection for all Spiritual Projection subelement abilities."); - } - return true; - } - - if (Arrays.asList(flightaliases).contains(args[1])) { - if (AbilityModuleManager.flightabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + "There are no flight abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.flightabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + st); - } - } - return true; - } - - if (Arrays.asList(spiritualprojectionaliases).contains(args[1])) { - if (AbilityModuleManager.spiritualprojectionabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + "There are no Spiritual Projection abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.spiritualprojectionabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + st); - } - } - return true; - } - - if (Arrays.asList(wateraliases).contains(args[1])) { - if (AbilityModuleManager.waterbendingabilities.isEmpty()) { - s.sendMessage(WaterMethods.getWaterColor() + "There are no waterbending abilities available."); - return true; - } - for (String st : AbilityModuleManager.waterbendingabilities) { - if (GeneralMethods.isSubAbility(st)) - continue; - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(WaterMethods.getWaterColor() + st); - } - } - if (!AbilityModuleManager.bloodabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "Use /bending display Bloodbending for bloodbending sub abilities."); - } - if (!AbilityModuleManager.healingabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "Use /bending display Healing for Healing sub abilities."); - } - if (!AbilityModuleManager.iceabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "Use /bending display Icebending for Ice sub abilities."); - } - if (!AbilityModuleManager.plantabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "Use /bending display Plant for Plantbending sub abilities."); - } - return true; - } - - if (Arrays.asList(bloodaliases).contains(args[1])) { - if (AbilityModuleManager.bloodabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "There are no Bloodbending abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.bloodabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + st); - } - } - return true; - } - - if (Arrays.asList(healingaliases).contains(args[1])) { - if (AbilityModuleManager.healingabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "There are no Healing abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.healingabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + st); - } - } - return true; - } - - if (Arrays.asList(icealiases).contains(args[1])) { - if (AbilityModuleManager.iceabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "There are no Icebending abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.iceabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + st); - } - } - - return true; - } - - if (Arrays.asList(plantaliases).contains(args[1])) { - if (AbilityModuleManager.plantabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + "There are no Plantbending abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.plantabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + st); - } - } - return true; - } - - if (Arrays.asList(earthaliases).contains(args[1])) { - if (AbilityModuleManager.earthbendingabilities.isEmpty()) { - s.sendMessage(EarthMethods.getEarthColor() + "There are no earthbending abilities available."); - return true; - } - for (String st : AbilityModuleManager.earthbendingabilities) { - if (GeneralMethods.isSubAbility(st)) - continue; - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(EarthMethods.getEarthColor() + st); - } - } - if (!AbilityModuleManager.lavaabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "Use /bending display LavaBending for Lava sub abilities."); - } - if (!AbilityModuleManager.metalabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "Use /bending display Metalbending for Metal sub abilities."); - } - - if (!AbilityModuleManager.sandabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "Use /bending display Sand for Sandbending sub abilities."); - } - return true; - } - - if (Arrays.asList(lavabendingaliases).contains(args[1])) { - if (AbilityModuleManager.lavaabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "There are no lavabending abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.lavaabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + st); - } - } - return true; - } - - if (Arrays.asList(metalbendingaliases).contains(args[1])) { - if (AbilityModuleManager.metalabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "There are no metal abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.metalabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + st); - } - } - return true; - } - - if (Arrays.asList(sandbendingaliases).contains(args[1])) { - if (AbilityModuleManager.sandabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + "There are no sandbending abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.sandabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + st); - } - } - return true; - } - - if (Arrays.asList(firealiases).contains(args[1])) { - if (AbilityModuleManager.firebendingabilities.isEmpty()) { - s.sendMessage(FireMethods.getFireColor() + "There are no firebending abilities available."); - return true; - } - for (String st : AbilityModuleManager.firebendingabilities) { - if (GeneralMethods.isSubAbility(st)) - continue; - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(FireMethods.getFireColor() + st); - } - } - if (!AbilityModuleManager.combustionabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + "Use /bending display Combustion for Combustion sub abilities."); - } - if (!AbilityModuleManager.lightningabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + "Use /bending display Lightning for Lightning sub abilities."); - } - return true; - } - - if (Arrays.asList(lightningaliases).contains(args[1])) { - if (AbilityModuleManager.lightningabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + "There are no lightning abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.lightningabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + st); - } - } - return true; - } - - if (Arrays.asList(combustionaliases).contains(args[1])) { - if (AbilityModuleManager.combustionabilities.isEmpty()) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + "There are no combustion abilities installed on this server."); - return true; - } - - for (String st : AbilityModuleManager.combustionabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + st); - } - } - return true; - } - - if (Arrays.asList(chialiases).contains(args[1])) { - if (AbilityModuleManager.chiabilities.isEmpty()) { - s.sendMessage(ChiMethods.getChiColor() + "There are no chiblocking abilities available."); - return true; - } - - for (String st : AbilityModuleManager.chiabilities) { - if (GeneralMethods.canView((Player) s, st)) { - s.sendMessage(ChiMethods.getChiColor() + st); - } - } - return true; - } - - if (Arrays.asList(aircomboaliases).contains(args[1])) - { - ArrayList aircombos = ComboManager.getCombosForElement(Element.Air); - if (aircombos.isEmpty()) { - s.sendMessage(AirMethods.getAirColor() + "There are no airbending combos avaliable."); - return true; - } - for (String combomove : aircombos) { - if (!s.hasPermission("bending.ability." + combomove)) continue; - ChatColor color = GeneralMethods.getComboColor(combomove); - s.sendMessage(color + combomove); - } - return true; - } - - if (Arrays.asList(firecomboaliases).contains(args[1])) - { - ArrayList firecombos = ComboManager.getCombosForElement(Element.Fire); - if (firecombos.isEmpty()) { - s.sendMessage(FireMethods.getFireColor() + "There are no firebending combos avaliable."); - return true; - } - - for (String combomove : firecombos) { - if (!s.hasPermission("bending.ability." + combomove)) continue; - ChatColor color = GeneralMethods.getComboColor(combomove); - s.sendMessage(color + combomove); - } - return true; - } - - if (Arrays.asList(earthcomboaliases).contains(args[1])) - { - ArrayList earthcombos = ComboManager.getCombosForElement(Element.Earth); - if (earthcombos.isEmpty()) { - s.sendMessage(EarthMethods.getEarthColor() + "There are no earthbending combos avaliable."); - return true; - } - - for (String combomove : earthcombos) { - if (!s.hasPermission("bending.ability." + combomove)) continue; - ChatColor color = GeneralMethods.getComboColor(combomove); - s.sendMessage(color + combomove); - } - return true; - } - - if (Arrays.asList(watercomboaliases).contains(args[1])) - { - ArrayList watercombos = ComboManager.getCombosForElement(Element.Water); - if (watercombos.isEmpty()) { - s.sendMessage(WaterMethods.getWaterColor() + "There are no waterbending combos avaliable."); - return true; - } - - for (String combomove : watercombos) { - if (!s.hasPermission("bending.ability." + combomove)) continue; - ChatColor color = GeneralMethods.getComboColor(combomove); - s.sendMessage(color + combomove); - } - return true; - } - - if (Arrays.asList(chicomboaliases).contains(args[1])) - { - ArrayList chicombos = ComboManager.getCombosForElement(Element.Chi); - if (chicombos.isEmpty()) { - s.sendMessage(ChiMethods.getChiColor() + "There are no chiblocking combos avaliable."); - return true; - } - - for (String combomove : chicombos) { - if (!s.hasPermission("bending.ability." + combomove)) continue; - s.sendMessage(ChiMethods.getChiColor() + combomove); - } - return true; - } - - else { - s.sendMessage(ChatColor.RED + "Not a valid Element." + ChatColor.WHITE + " Elements: " + AirMethods.getAirColor() + "Air" + ChatColor.WHITE + " | " + WaterMethods.getWaterColor() + "Water" + ChatColor.WHITE + " | " + EarthMethods.getEarthColor() + "Earth" + ChatColor.WHITE + " | " + FireMethods.getFireColor() + "Fire" + ChatColor.WHITE + " | " + ChiMethods.getChiColor() + "Chi"); - } - } - if (args.length == 1) { - //bending display - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) s).getUniqueId(), s.getName()); - bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - } - HashMap abilities = bPlayer.getAbilities(); - - if (abilities.isEmpty()) { - s.sendMessage(ChatColor.RED + "You don't have any bound abilities."); - s.sendMessage("If you would like to see a list of available abilities, please use the /bending display [Element] command. Use /bending help for more information."); - return true; - } - - for (int i = 1; i <= 9; i++) { - String ability = abilities.get(i); - if (ability != null && !ability.equalsIgnoreCase("null")) - s.sendMessage(i + " - " + GeneralMethods.getAbilityColor(ability) + ability); - } - return true; - } - } - - else if (Arrays.asList(importaliases).contains(args[0])) { - if (!s.hasPermission("bending.command.import")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - if (!GeneralMethods.isImportEnabled()) { - s.sendMessage(ChatColor.RED + "Importing has been disabled in the config"); - return true; - } - - s.sendMessage(ChatColor.GREEN + "Preparing data for import."); - File bendingPlayersFile = new File(".", "converted.yml"); - FileConfiguration bendingPlayers = YamlConfiguration.loadConfiguration(bendingPlayersFile); - - final LinkedList bPlayers = new LinkedList(); - for (String string : bendingPlayers.getConfigurationSection("").getKeys(false)) { - if (string.equalsIgnoreCase("version")) - continue; - String playername = string; - UUID uuid = Bukkit.getOfflinePlayer(playername).getUniqueId(); - ArrayList element = new ArrayList(); - List oe = bendingPlayers.getIntegerList(string + ".BendingTypes"); - HashMap abilities = new HashMap(); - List oa = bendingPlayers.getIntegerList(string + ".SlotAbilities"); - boolean permaremoved = bendingPlayers.getBoolean(string + ".Permaremoved"); - - int slot = 1; - for (int i : oa) { - if (StockAbility.getAbility(i) != null) { - abilities.put(slot, StockAbility.getAbility(i).toString()); - slot++; - } else { - abilities.put(slot, null); - slot++; - } - } - - for (int i : oe) { - if (Element.getType(i) != null) { - element.add(Element.getType(i)); - } - } - - BendingPlayer bPlayer = new BendingPlayer(uuid, playername, element, abilities, permaremoved); - bPlayers.add(bPlayer); - } - - final int total = bPlayers.size(); - final CommandSender sender = s; - s.sendMessage(ChatColor.GREEN + "Import of data started. Do NOT stop / reload your server."); - if (debug) { - s.sendMessage(ChatColor.RED + "Console will print out all of the players that are imported if debug mode is enabled as they import."); - } - importTask = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() { - public void run() { - int i = 0; - if (i >= 10) { - sender.sendMessage(ChatColor.GREEN + "10 / " + total + " players converted thus far!"); - return; - } - - while (i < 10) { - if (bPlayers.isEmpty()) { - sender.sendMessage(ChatColor.GREEN + "All data has been queued up, please allow up to 5 minutes for the data to complete, then reboot your server."); - Bukkit.getServer().getScheduler().cancelTask(importTask.getTaskId()); - plugin.getConfig().set("Properties.ImportEnabled", false); - plugin.saveConfig(); - for (Player player : Bukkit.getOnlinePlayers()) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - } - return; - } - StringBuilder elements = new StringBuilder(); - BendingPlayer bPlayer = bPlayers.pop(); - if (bPlayer.hasElement(Element.Air)) - elements.append("a"); - if (bPlayer.hasElement(Element.Water)) - elements.append("w"); - if (bPlayer.hasElement(Element.Earth)) - elements.append("e"); - if (bPlayer.hasElement(Element.Fire)) - elements.append("f"); - if (bPlayer.hasElement(Element.Chi)) - elements.append("c"); - - HashMap abilities = bPlayer.getAbilities(); - - ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_players WHERE uuid = '" + bPlayer.getUUIDString() + "'"); - - try { - if (rs2.next()) { // SQL Data already exists for player. - DBConnection.sql.modifyQuery("UPDATE pk_players SET player = '" + bPlayer.getName() + "' WHERE uuid = '" + bPlayer.getUUIDString()); - DBConnection.sql.modifyQuery("UPDATE pk_players SET element = '" + elements + "' WHERE uuid = '" + bPlayer.getUUIDString()); - DBConnection.sql.modifyQuery("UPDATE pk_players SET permaremoved = '" + bPlayer.isPermaRemoved() + "' WHERE uuid = '" + bPlayer.getUUIDString()); - for (int slot = 1; slot < 10; slot++) { - DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + slot + " = '" + abilities.get(slot) + "' WHERE player = '" + bPlayer.getName() + "'"); - } - } else { - DBConnection.sql.modifyQuery("INSERT INTO pk_players (uuid, player, element, permaremoved) VALUES ('" + bPlayer.getUUIDString() + "', '" + bPlayer.getName() + "', '" + elements + "', '" + bPlayer.isPermaRemoved() + "')"); - for (int slot = 1; slot < 10; slot++) { - DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + slot + " = '" + abilities.get(slot) + "' WHERE player = '" + bPlayer.getName() + "'"); - } - } - } - catch (SQLException ex) { - ex.printStackTrace(); - } - i++; - if (debug) { - System.out.println("[ProjectKorra] Successfully imported " + bPlayer.getName() + ". " + bPlayers.size() + " players left to import."); - } - } - } - }, 0, 40); - return true; - } - - else if (Arrays.asList(invinciblealiases).contains(args[0].toLowerCase())) { - if (!s.hasPermission("bending.command.invincible")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - - if (args.length != 1) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending invincible"); - return true; - } - - if (!invincible.contains(s.getName())) { - /* - * Player is not invincible. - */ - invincible.add(s.getName()); - s.sendMessage(ChatColor.GREEN + "You are now invincible to all bending damage and effects. Use this command again to disable this."); - return true; - } else { - invincible.remove(s.getName()); - s.sendMessage(ChatColor.RED + "You are no longer invincible to all bending damage and effects."); - } - } - - else if (Arrays.asList(permaremovealiases).contains(args[0])) { - //bending permaremove [Player] - if (args.length != 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending permaremove [Player]"); - return true; - } - - if (!s.hasPermission("bending.admin.permaremove")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - - if (player == null) { - s.sendMessage(ChatColor.RED + "That player is not online."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - bPlayer = GeneralMethods.getBendingPlayer(player); - } - - if (bPlayer.isPermaRemoved()) { - bPlayer.setPermaRemoved(false); - GeneralMethods.savePermaRemoved(bPlayer); - s.sendMessage(ChatColor.RED + "You have restored the bending of: " + ChatColor.DARK_AQUA + player.getName()); - return true; - } - - bPlayer.getElements().clear(); - GeneralMethods.removeUnusableAbilities(player.getName()); - GeneralMethods.saveElements(bPlayer); - bPlayer.setPermaRemoved(true); - GeneralMethods.savePermaRemoved(bPlayer); - player.sendMessage(ChatColor.RED + "Your bending has been permanently removed."); - s.sendMessage(ChatColor.RED + "You have permanently removed the bending of: " + ChatColor.DARK_AQUA + player.getName()); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, null, Result.PERMAREMOVE)); - return true; - } - - else if (Arrays.asList(presetaliases).contains(args[0])) { - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - - if (MultiAbilityManager.hasMultiAbilityBound((Player) s)) { - s.sendMessage(ChatColor.RED + "You can't edit your binds right now!"); - return true; - } - - Player player = (Player) s; - - String[] createaliases = { "create", "c", "save" }; - String[] deletealiases = { "delete", "d", "del" }; - String[] listaliases = { "list", "l" }; - if (args.length == 2 && Arrays.asList(listaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.preset.list")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - List presets = Preset.presets.get(player.getUniqueId()); - List presetNames = new ArrayList(); - - if (presets == null || presets.isEmpty()) { - s.sendMessage(ChatColor.RED + "You don't have any presets."); - return true; - } - - for (Preset preset : presets) { - presetNames.add(preset.getName()); - } - - s.sendMessage(ChatColor.GREEN + "Your Presets: " + ChatColor.DARK_AQUA + presetNames.toString()); - return true; - } else if (args.length != 3) { // bending preset bind|create|delete {name} - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending preset create|bind|list|delete [name]"); - return true; - } - - String name = args[2]; - - if (Arrays.asList(deletealiases).contains(args[1])) { - if (!s.hasPermission("bending.command.preset.delete")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - if (!Preset.presetExists(player, name)) { - s.sendMessage(ChatColor.RED + "You don't have a preset with that name."); - return true; - } - - Preset preset = Preset.getPreset(player, name); - preset.delete(); - s.sendMessage(ChatColor.GREEN + "You have deleted your preset named: " + ChatColor.YELLOW + name); - } - - if (Arrays.asList(bindaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.preset.bind")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!Preset.presetExists(player, name)) { - s.sendMessage(ChatColor.RED + "You don't have a preset with that name."); - return true; - } - - Preset.bindPreset(player, name); - s.sendMessage(ChatColor.GREEN + "Your bound slots have been set to match the " + ChatColor.YELLOW + name + ChatColor.GREEN + " preset."); - return true; - } - - if (Arrays.asList(createaliases).contains(args[1])) { - if (!s.hasPermission("bending.command.preset.create")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - int limit = GeneralMethods.getMaxPresets(player); - - if (Preset.presets.get(player) != null && Preset.presets.get(player).size() >= limit) { - s.sendMessage(ChatColor.RED + "You have reached your max number of Presets."); - return true; - } - - if (Preset.presetExists(player, name)) { - s.sendMessage(ChatColor.RED + "A preset with that name already exists."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer == null) - return true; - HashMap abilities = bPlayer.getAbilities(); - Preset preset = new Preset(player.getUniqueId(), name, abilities); - preset.save(); - s.sendMessage(ChatColor.GREEN + "Created preset with the name: " + ChatColor.YELLOW + name); - return true; - } - - } - - else if (Arrays.asList(reloadaliases).contains(args[0])) { - if (args.length != 1) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending reload"); - return true; - } - - if (!s.hasPermission("bending.command.reload")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - GeneralMethods.reloadPlugin(); - s.sendMessage(ChatColor.AQUA + "Bending config reloaded."); - return true; - } - - else if (Arrays.asList(removealiases).contains(args[0])) { - //bending remove [Player] - if (args.length != 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending remove [Player]"); - return true; - } - - if (!s.hasPermission("bending.admin.remove")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - Player player = Bukkit.getPlayer(args[1]); - - if (player == null) { - s.sendMessage(ChatColor.RED + "That player is not online."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - bPlayer = GeneralMethods.getBendingPlayer(player); - } - GeneralMethods.removeUnusableAbilities(player.getName()); - bPlayer.getElements().clear(); - GeneralMethods.saveElements(bPlayer); - s.sendMessage(ChatColor.GREEN + "You have removed the bending of " + ChatColor.DARK_AQUA + player.getName()); - player.sendMessage(ChatColor.GREEN + "Your bending has been removed by " + ChatColor.DARK_AQUA + s.getName()); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(s, player, null, Result.REMOVE)); - return true; - } - - else if (Arrays.asList(versionaliases).contains(args[0])) { - if (args.length != 1) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending version"); - return true; - } - - if (!s.hasPermission("bending.command.version")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - s.sendMessage(ChatColor.GREEN + "Core Version: " + ChatColor.RED + plugin.getDescription().getVersion()); - if (GeneralMethods.hasRPG()) { - s.sendMessage(ChatColor.GREEN + "RPG Version: " + ChatColor.RED + GeneralMethods.getRPG().getDescription().getVersion()); - } - if (GeneralMethods.hasItems()) { - s.sendMessage(ChatColor.GREEN + "Items Version: " + ChatColor.RED + GeneralMethods.getItems().getDescription().getVersion()); - } - s.sendMessage(ChatColor.GREEN + "Founded by: " + ChatColor.RED + "MistPhizzle"); - s.sendMessage(ChatColor.GREEN + "Learn More: " + ChatColor.RED + "http://projectkorra.com"); - return true; - } - - else if (Arrays.asList(togglealiases).contains(args[0])) { - if (args.length > 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending toggle "); - return true; - } - - if (args.length == 1) { - if (!s.hasPermission("bending.command.toggle")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (!(s instanceof Player)) { - s.sendMessage(ChatColor.RED + "This command is only usable by players."); - return true; - } - - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - if (bPlayer == null) { - GeneralMethods.createBendingPlayer(((Player) s).getUniqueId(), s.getName()); - bPlayer = GeneralMethods.getBendingPlayer(s.getName()); - } - if (bPlayer.isToggled()) { - s.sendMessage(ChatColor.RED + "Your bending has been toggled off. You will not be able to use most abilities until you toggle it back."); - bPlayer.toggleBending(); - return true; - } else { - s.sendMessage(ChatColor.GREEN + "You have turned your Bending back on."); - bPlayer.toggleBending(); - return true; - } - } else if (args.length == 2 && args[1].equalsIgnoreCase("all")) { - if (!s.hasPermission("bending.command.toggle.all")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (isToggledForAll) { // Bending is toggled off for all players. - isToggledForAll = false; - for (Player player : Bukkit.getOnlinePlayers()) { - player.sendMessage(ChatColor.GREEN + "Bending has been toggled back on for all players."); - return true; - } - } else { - isToggledForAll = true; - for (Player player : Bukkit.getOnlinePlayers()) { - player.sendMessage(ChatColor.RED + "Bending has been toggled off for all players."); - return true; - } - } - } else { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending toggle "); - return true; - } - } - - else if (Arrays.asList(whoaliases).contains(args[0])) { - if (args.length > 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending who "); - return true; - } - if (!s.hasPermission("bending.command.who")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (args.length == 2) { - Player p = Bukkit.getPlayer(args[1]); - if (p == null) { - s.sendMessage(ChatColor.GREEN + "You are running a lookup of an offline player, this may take a second."); - - final String player = args[1]; - final CommandSender sender = s; - new BukkitRunnable() { - @Override - public void run() { - ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_players WHERE player = '" + player + "'"); - try { - final List messages = new ArrayList(); - - if (rs2.next()) { - UUID uuid = UUID.fromString(rs2.getString("uuid")); - String element = rs2.getString("element"); - - messages.add(player + " - "); - if (element.contains("a")) - messages.add(AirMethods.getAirColor() + "- Airbender"); - if (element.contains("w")) - messages.add(WaterMethods.getWaterColor() + "- Waterbender"); - if (element.contains("e")) - messages.add(EarthMethods.getEarthColor() + "- Earthbender"); - if (element.contains("f")) - messages.add(FireMethods.getFireColor() + "- Firebender"); - if (element.contains("c")) - messages.add(ChiMethods.getChiColor() + "- Chiblocker"); - - if (GeneralMethods.hasRPG()) { - if (RPGMethods.isCurrentAvatar(uuid)) { - messages.add(GeneralMethods.getAvatarColor() + "Current Avatar"); - } else if (RPGMethods.hasBeenAvatar(uuid)) { - messages.add(GeneralMethods.getAvatarColor() + "Former Avatar"); - } else { - - } - } - } else { - messages.add(ChatColor.RED + "We could not find any player in your database with that username. Are you sure it is typed correctly?"); - } - - new BukkitRunnable() { - @Override - public void run() { - for (String message : messages) { - sender.sendMessage(message); - } - } - }.runTask(ProjectKorra.plugin); - } - catch (SQLException e) { - e.printStackTrace(); - } - } - }.runTaskAsynchronously(ProjectKorra.plugin); - return true; - } - - String un = p.getName(); - s.sendMessage(un + " - "); - if (GeneralMethods.isBender(un, Element.Air)) { - s.sendMessage(AirMethods.getAirColor() + "- Airbender"); - if (AirMethods.canAirFlight(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + " Can Fly"); - } - if (AirMethods.canUseSpiritualProjection(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + " Can use Spiritual Projection"); - } - } - if (GeneralMethods.isBender(un, Element.Water)) { - s.sendMessage(WaterMethods.getWaterColor() + "- Waterbender"); - if (WaterMethods.canPlantbend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Plantbend"); - } - if (WaterMethods.canBloodbend(p)) { - if (WaterMethods.canBloodbendAtAnytime(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Bloodbend anytime, on any day"); - } else { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Bloodbend"); - } - } - if (WaterMethods.canIcebend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Icebend"); - } - if (WaterMethods.canWaterHeal(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Heal"); - } - } - if (GeneralMethods.isBender(un, Element.Earth)) { - s.sendMessage(EarthMethods.getEarthColor() + "- Earthbender"); - if (EarthMethods.canMetalbend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Metalbend"); - } - if (EarthMethods.canLavabend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Lavabend"); - } - if (EarthMethods.canSandbend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Sandbend"); - } - } - if (GeneralMethods.isBender(un, Element.Fire)) { - s.sendMessage(FireMethods.getFireColor() + "- Firebender"); - if (FireMethods.canCombustionbend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + " Can Combustionbend"); - } - if (FireMethods.canLightningbend(p)) { - s.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + " Can Bend Lightning"); - } - } - if (GeneralMethods.isBender(un, Element.Chi)) { - s.sendMessage(ChiMethods.getChiColor() + "- ChiBlocker"); - } - BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(un); - UUID uuid2 = p.getUniqueId(); - if (bPlayer != null) { - s.sendMessage("Abilities: "); - for (int i = 1; i <= 9; i++) { - String ability = bPlayer.getAbilities().get(i); - if (ability == null || ability.equalsIgnoreCase("null")) { - continue; - } else { - s.sendMessage(i + " - " + GeneralMethods.getAbilityColor(ability) + ability); - } - } - } - - if (GeneralMethods.hasRPG()) { - if (RPGMethods.isCurrentAvatar(p.getUniqueId())) { - s.sendMessage(GeneralMethods.getAvatarColor() + "Current Avatar"); - } else if (RPGMethods.hasBeenAvatar(p.getUniqueId())) { - s.sendMessage(GeneralMethods.getAvatarColor() + "Former Avatar"); - } - } - - //Administrators - if (uuid2.toString().equals("8621211e-283b-46f5-87bc-95a66d68880e")) { - s.sendMessage(ChatColor.RED + "ProjectKorra Founder"); // MistPhizzle - } - - //Lead Developer - if (uuid2.toString().equals("a197291a-cd78-43bb-aa38-52b7c82bc68c")) { - s.sendMessage(ChatColor.DARK_PURPLE + "ProjectKorra Lead Developer"); // OmniCypher - } - - //Head Concept Designer - if (uuid2.toString().equals("929b14fc-aaf1-4f0f-84c2-f20c55493f53")) { // Vidcom - s.sendMessage(ChatColor.GREEN + "ProjectKorra Head Concept Designer"); - } - - //Head Community Moderator - if (uuid2.toString().equals("")) { - s.sendMessage(ChatColor.GOLD + "ProjectKorra Head Community Moderator"); - } - - //Digital Director - if (uuid2.toString().equals("15d1a5a7-76ef-49c3-b193-039b27c47e30")) { // Kiam - s.sendMessage(ChatColor.GREEN + "ProjectKorra Digital Director"); - } - - //Developers - if (uuid2.toString().equals("833a7132-a9ec-4f0a-ad9c-c3d6b8a1c7eb") // Jacklin213 - || uuid2.toString().equals("96f40c81-dd5d-46b6-9afe-365114d4a082") // Coolade - || uuid2.toString().equals("4eb6315e-9dd1-49f7-b582-c1170e497ab0") // jedk1 - || uuid2.toString().equals("5031c4e3-8103-49ea-b531-0d6ae71bad69") // Simplicitee - || uuid2.toString().equals("d7757be8-86de-4898-ab4f-2b1b2fbc3dfa")) { // StrangeOne101 - - s.sendMessage(ChatColor.DARK_PURPLE + "ProjectKorra Developer"); - } - - //Concept Designers - if (uuid2.toString().equals("623df34e-9cd4-438d-b07c-1905e1fc46b6") // Loony - || uuid2.toString().equals("80f9072f-e37e-4adc-8675-1ba6af87d63b") // Cross - || uuid2.toString().equals("ce889d32-c2a0-4765-969f-9ca54d0bd34a") // ashe36 - || uuid2.toString().equals("7daead36-d285-4640-848a-2f105334b792") // Fuzzy - || uuid2.toString().equals("f30c871e-cd60-446b-b219-e31e00e16857") // Gangksta - || uuid2.toString().equals("38217173-8a32-4ba7-9fe1-dd4fed031a74")) { // Fly - s.sendMessage(ChatColor.GREEN + "ProjectKorra Concept Designer"); - } - - //Community Moderators - if (uuid2.toString().equals("1553482a-5e86-4270-9262-b57c11151074") // Pickle9775 - || uuid2.toString().equals("3d5bc713-ab8b-4125-b5ba-a1c1c2400b2c")) { // Gold - s.sendMessage(ChatColor.GOLD + "ProjectKorra Community Moderator"); - } - - //Digital Team - if (uuid2.toString().equals("2ab334d1-9691-4994-a624-209c7b4f220b") // Austygen - ) { - s.sendMessage(ChatColor.BLUE + "ProjectKorra Digital Team"); - } - - return true; - } - if (args.length == 1) { - List players = new ArrayList(); - for (Player player : Bukkit.getOnlinePlayers()) { - String un = player.getName(); - - BendingPlayer bp = GeneralMethods.getBendingPlayer(un); - if (bp == null) { - GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); - bp = GeneralMethods.getBendingPlayer(player); - } - if (bp.getElements().size() > 1) { - players.add(GeneralMethods.getAvatarColor() + un); - continue; - } - if (bp.getElements().size() == 0) { - players.add(un); - continue; - } - if (GeneralMethods.isBender(un, Element.Air)) { - players.add(AirMethods.getAirColor() + un); - continue; - } - if (GeneralMethods.isBender(un, Element.Water)) { - players.add(WaterMethods.getWaterColor() + un); - continue; - } - if (GeneralMethods.isBender(un, Element.Earth)) { - players.add(EarthMethods.getEarthColor() + un); - continue; - } - if (GeneralMethods.isBender(un, Element.Chi)) { - players.add(ChiMethods.getChiColor() + un); - continue; - } - if (GeneralMethods.isBender(un, Element.Fire)) { - players.add(FireMethods.getFireColor() + un); - continue; - } - } - for (String st : players) { - s.sendMessage(st); - } - return true; - } - } - - else if (Arrays.asList(helpaliases).contains(args[0])) { - if (!s.hasPermission("bending.command.help")) { - s.sendMessage(ChatColor.RED + "You don't have permission to do that."); - return true; - } - - if (args.length != 2) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending help Command/Ability"); - if (s.hasPermission("bending.command.add")) - s.sendMessage(ChatColor.YELLOW + "/bending add [Element]"); - if (s.hasPermission("bending.command.bind")) - s.sendMessage(ChatColor.YELLOW + "/bending bind [Ability] "); - if (s.hasPermission("bending.command.clear")) - s.sendMessage(ChatColor.YELLOW + "/bending clear "); - if (s.hasPermission("bending.command.choose")) - s.sendMessage(ChatColor.YELLOW + "/bending choose [Element]"); - if (s.hasPermission("bending.command.display")) - s.sendMessage(ChatColor.YELLOW + "/bending display "); - if (s.hasPermission("bending.command.import")) - s.sendMessage(ChatColor.YELLOW + "/bending import"); - if (s.hasPermission("bending.admin.permaremove")) - s.sendMessage(ChatColor.YELLOW + "/bending permaremove "); - if (s.hasPermission("bending.admin.remove")) - s.sendMessage(ChatColor.YELLOW + "/bending remove [Player]"); - if (s.hasPermission("bending.command.toggle")) - s.sendMessage(ChatColor.YELLOW + "/bending toggle"); - if (s.hasPermission("bending.command.version")) - s.sendMessage(ChatColor.YELLOW + "/bending version"); - if (s.hasPermission("bending.command.who")) - s.sendMessage(ChatColor.YELLOW + "/bending who"); - if (s.hasPermission("bending.command.invincible")) - s.sendMessage(ChatColor.YELLOW + "/bending invincible"); - return true; - } - - else if (Arrays.asList(airaliases).contains(args[1])) { - s.sendMessage(AirMethods.getAirColor() + "Air is the element of freedom. Airbenders are natural pacifists and " + "great explorers. There is nothing stopping them from scaling the tallest of mountains and walls easily. They specialize in redirection, " + "from blasting things away with gusts of winds, to forming a shield around them to prevent damage. Easy to get across flat terrains, " + "such as oceans, there is practically no terrain off limits to Airbenders. They lack much raw damage output, but make up for it with " + "with their ridiculous amounts of utility and speed."); - s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/qffg9m3"); - } - - else if (Arrays.asList(wateraliases).contains(args[1])) { - s.sendMessage(WaterMethods.getWaterColor() + "Water is the element of change. Waterbending focuses on using your " + "opponents own force against them. Using redirection and various dodging tactics, you can be made " + "practically untouchable by an opponent. Waterbending provides agility, along with strong offensive " + "skills while in or near water."); - s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/lod3plv"); - } - - else if (Arrays.asList(earthaliases).contains(args[1])) { - s.sendMessage(EarthMethods.getEarthColor() + "Earth is the element of substance. Earthbenders share many of the " + "same fundamental techniques as Waterbenders, but their domain is quite different and more readily " + "accessible. Earthbenders dominate the ground and subterranean, having abilities to pull columns " + "of rock straight up from the earth or drill their way through the mountain. They can also launch " + "themselves through the air using pillars of rock, and will not hurt themselves assuming they land " + "on something they can bend. The more skilled Earthbenders can even bend metal."); - s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/qaudl42"); - } - - else if (Arrays.asList(firealiases).contains(args[1])) { - s.sendMessage(FireMethods.getFireColor() + "Fire is the element of power. Firebenders focus on destruction and " + "incineration. Their abilities are pretty straight forward: set things on fire. They do have a bit " + "of utility however, being able to make themselves un-ignitable, extinguish large areas, cook food " + "in their hands, extinguish large areas, small bursts of flight, and then comes the abilities to shoot " + "fire from your hands."); - s.sendMessage(ChatColor.YELLOW + "Firebenders can chain their abilities into combos, type " + FireMethods.getFireColor() + "/b help FireCombo" + ChatColor.YELLOW + " for more information."); - s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/k4fkjhb"); - } - - else if (Arrays.asList(chialiases).contains(args[1])) { - s.sendMessage(ChiMethods.getChiColor() + "Chiblockers focus on bare handed combat, utilizing their agility and " + "speed to stop any bender right in their path. Although they lack the ability to bend any of the " + "other elements, they are great in combat, and a serious threat to any bender. Chiblocking was " + "first shown to be used by Ty Lee in Avatar: The Last Airbender, then later by members of the " + "Equalists in The Legend of Korra."); - s.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/mkp9n6y"); - } - - else if (Arrays.asList(invinciblealiases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending invincible"); - s.sendMessage(ChatColor.YELLOW + "This command will make you impervious to all Bending damage. Once you " + "use this command, you will stay invincible until you either log off, or use this command again."); - } - - else if (Arrays.asList(importaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending import"); - s.sendMessage(ChatColor.YELLOW + "This command will import your old bendingPlayers.yml from the Bending plugin." + " It will generate a convert.yml file to convert the data to be used with this plugin." + " You can delete the file once the complete message is displayed" + " This command should only be used ONCE."); - } - - else if (Arrays.asList(displayaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending display "); - s.sendMessage(ChatColor.YELLOW + "This command will show you all of the elements you have bound if you do not specify an element." + " If you do specify an element (Air, Water, Earth, Fire, or Chi), it will show you all of the available " + " abilities of that element installed on the server."); - } - - - else if (Arrays.asList(choosealiases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending choose [Element]"); - s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, Chi"); - s.sendMessage(ChatColor.YELLOW + "This command will allow the user to choose a player either for himself or if specified. " + " This command can only be used once per player unless they have permission to rechoose their element."); - return true; - } - - else if (args[1].equalsIgnoreCase("add")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending add [Element]"); - s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, Chi"); - s.sendMessage(ChatColor.YELLOW + "This command will allow the user to add an element to the targeted , or themselves if the target" + " is not specified. This command is typically reserved for server administrators."); - return true; - } - - else if (Arrays.asList(permaremovealiases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending permaremove "); - s.sendMessage(ChatColor.YELLOW + "This command will permanently remove the Bending of the targeted . Once removed, a player" + " may only receive Bending again if this command is run on them again. This command is typically reserved for" + " administrators."); - return true; - } - else if (Arrays.asList(versionaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending version"); - s.sendMessage(ChatColor.YELLOW + "This command will print out the version of ProjectKorra this server is running."); - return true; - } - - else if (Arrays.asList(removealiases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending remove [Player]"); - s.sendMessage(ChatColor.YELLOW + "This command will remove the element of the targeted [Player]. The player will be able to re-pick " + " their element after this command is run on them, assuming their Bending was not permaremoved."); - return true; - } - else if (Arrays.asList(avataraliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending avatar [Player]"); - s.sendMessage(ChatColor.YELLOW + "This command will grant a player the Avatar status if the server has ProjectKorra (RPG) installed. This command is typically reserved for server Administrators."); - return true; - } - else if (Arrays.asList(togglealiases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending toggle "); - s.sendMessage(ChatColor.YELLOW + "This command will toggle a player's own Bending on or off. If toggled off, all abilities should stop" + " working until it is toggled back on. Logging off will automatically toggle your Bending back on. If you run the command /bending toggle all, Bending will be turned off for all players and cannot be turned back on until the command is run again."); - return true; - } - - else if (args[1].equalsIgnoreCase("who")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending who "); - s.sendMessage(ChatColor.YELLOW + "This command will tell you what element all players that are online are (If you don't specify a player)" + " or give you information about the player that you specify."); - return true; - } - - else if (Arrays.asList(clearaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending clear "); - s.sendMessage(ChatColor.YELLOW + "This command will clear the bound ability from the slot you specify (if you specify one." + " If you choose not to specify a slot, all of your abilities will be cleared."); - } - - else if (Arrays.asList(reloadaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending reload"); - s.sendMessage(ChatColor.YELLOW + "This command will reload the Bending config file."); - return true; - } - - else if (Arrays.asList(bindaliases).contains(args[1])) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending bind [Ability] "); - s.sendMessage(ChatColor.YELLOW + "This command will bind an ability to the slot you specify (if you specify one), or the slot currently" + " selected in your hotbar (If you do not specify a Slot #)."); - } - - if (args[1].equalsIgnoreCase("FireCombo")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display FireCombos" + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); - } - if (args[1].equalsIgnoreCase("AirCombo")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display AirCombos" + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); - } - if (args[1].equalsIgnoreCase("WaterCombo")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display WaterCombos" + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); - } - if (args[1].equalsIgnoreCase("EarthCombo")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display EarthCombos" + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); - } - if (args[1].equalsIgnoreCase("ChiCombo")) { - s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display ChiCombos" + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); - } - else if (GeneralMethods.abilityExists(args[1])) { - String ability = GeneralMethods.getAbility(args[1]); - if (AirMethods.isAirAbility(ability)) { - if(AirMethods.isSpiritualProjectionAbility(ability) || AirMethods.isFlightAbility(ability)) { - s.sendMessage(AirMethods.getAirSubColor() + ability + " - "); - s.sendMessage(AirMethods.getAirSubColor() + AbilityModuleManager.descriptions.get(ability)); - } else { - s.sendMessage(AirMethods.getAirColor() + ability + " - "); - s.sendMessage(AirMethods.getAirColor() + AbilityModuleManager.descriptions.get(ability)); - } - } else if (WaterMethods.isWaterAbility(ability)) { - if(WaterMethods.isIcebendingAbility(ability) || WaterMethods.isBloodbendingAbility(ability) || WaterMethods.isHealingAbility(ability) || WaterMethods.isPlantbendingAbility(ability)) { - s.sendMessage(WaterMethods.getWaterSubColor() + ability + " - "); - s.sendMessage(WaterMethods.getWaterSubColor() + AbilityModuleManager.descriptions.get(ability)); - } else { - s.sendMessage(WaterMethods.getWaterColor() + ability + " - "); - s.sendMessage(WaterMethods.getWaterColor() + AbilityModuleManager.descriptions.get(ability)); - } - } else if (EarthMethods.isEarthAbility(ability)) { - if (EarthMethods.isMetalbendingAbility(ability) || EarthMethods.isLavabendingAbility(ability) || EarthMethods.isSandbendingAbility(ability)) { - s.sendMessage(EarthMethods.getEarthSubColor() + ability + " - "); - s.sendMessage(EarthMethods.getEarthSubColor() + AbilityModuleManager.descriptions.get(ability)); - } else { - s.sendMessage(EarthMethods.getEarthColor() + ability + " - "); - s.sendMessage(EarthMethods.getEarthColor() + AbilityModuleManager.descriptions.get(ability)); - } - } else if (FireMethods.isFireAbility(ability)) { - if(FireMethods.isCombustionbendingAbility(ability) || FireMethods.isLightningbendingAbility(ability)) { - s.sendMessage(FireMethods.getFireSubColor() + ability + " - "); - s.sendMessage(FireMethods.getFireSubColor() + AbilityModuleManager.descriptions.get(ability)); - } else { - s.sendMessage(FireMethods.getFireColor() + ability + " - "); - s.sendMessage(FireMethods.getFireColor() + AbilityModuleManager.descriptions.get(ability)); - } - } else if (ChiMethods.isChiAbility(ability)) { - s.sendMessage(ChiMethods.getChiColor() + ability + " - "); - s.sendMessage(ChiMethods.getChiColor() + AbilityModuleManager.descriptions.get(ability)); - } else { - s.sendMessage(GeneralMethods.getAvatarColor() + ability + " - "); - s.sendMessage(GeneralMethods.getAvatarColor() + AbilityModuleManager.descriptions.get(ability)); - } - } - //Combos - for (String combo : ComboManager.descriptions.keySet()) { - if (combo.equalsIgnoreCase(args[1])) { - ChatColor cc = GeneralMethods.getComboColor(combo); - s.sendMessage(cc + combo + " (Combo) - "); - s.sendMessage(cc + ComboManager.descriptions.get(combo)); - s.sendMessage(ChatColor.GOLD + "Usage: " + ComboManager.instructions.get(combo)); - } - } - } - else - s.sendMessage(ChatColor.RED + "That isn't a valid command. Use /bending help for more information."); - //End of commands - return true; - } - }; - projectkorra.setExecutor(exe); - } -} diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index eb366845..2f028684 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -1,34 +1,73 @@ package com.projectkorra.projectkorra; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Random; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; +import fr.neatmonster.nocheatplus.checks.CheckType; +import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager; +import me.ryanhamshire.GriefPrevention.Claim; +import me.ryanhamshire.GriefPrevention.GriefPrevention; +import net.sacredlabyrinth.Phaed.PreciousStones.FieldFlag; +import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones; + +import com.griefcraft.lwc.LWC; +import com.griefcraft.lwc.LWCPlugin; +import com.griefcraft.model.Protection; +import com.massivecraft.factions.engine.EngineMain; +import com.massivecraft.massivecore.ps.PS; +import com.palmergames.bukkit.towny.Towny; +import com.palmergames.bukkit.towny.TownyMessaging; +import com.palmergames.bukkit.towny.TownySettings; +import com.palmergames.bukkit.towny.object.Coord; +import com.palmergames.bukkit.towny.object.PlayerCache; +import com.palmergames.bukkit.towny.object.PlayerCache.TownBlockStatus; +import com.palmergames.bukkit.towny.object.TownyPermission; +import com.palmergames.bukkit.towny.object.TownyUniverse; +import com.palmergames.bukkit.towny.object.TownyWorld; +import com.palmergames.bukkit.towny.object.WorldCoord; +import com.palmergames.bukkit.towny.utils.PlayerCacheUtil; +import com.palmergames.bukkit.towny.war.flagwar.TownyWar; +import com.palmergames.bukkit.towny.war.flagwar.TownyWarConfig; +import com.projectkorra.projectkorra.ability.AbilityModule; +import com.projectkorra.projectkorra.ability.AbilityModuleManager; +import com.projectkorra.projectkorra.ability.StockAbility; +import com.projectkorra.projectkorra.ability.combo.ComboAbilityModule; +import com.projectkorra.projectkorra.ability.combo.ComboManager; +import com.projectkorra.projectkorra.ability.combo.ComboManager.AbilityInformation; +import com.projectkorra.projectkorra.ability.combo.ComboManager.ComboAbility; +import com.projectkorra.projectkorra.ability.combo.ComboModuleManager; +import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; +import com.projectkorra.projectkorra.ability.multiability.MultiAbilityModuleManager; +import com.projectkorra.projectkorra.airbending.AirCombo; +import com.projectkorra.projectkorra.airbending.AirMethods; +import com.projectkorra.projectkorra.airbending.AirShield; +import com.projectkorra.projectkorra.airbending.AirSpout; +import com.projectkorra.projectkorra.airbending.AirSwipe; +import com.projectkorra.projectkorra.chiblocking.ChiMethods; +import com.projectkorra.projectkorra.chiblocking.Paralyze; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.configuration.ConfigManager; +import com.projectkorra.projectkorra.earthbending.EarthBlast; +import com.projectkorra.projectkorra.earthbending.EarthMethods; +import com.projectkorra.projectkorra.earthbending.EarthPassive; +import com.projectkorra.projectkorra.earthbending.MetalClips; +import com.projectkorra.projectkorra.event.BendingReloadEvent; +import com.projectkorra.projectkorra.event.PlayerBendingDeathEvent; +import com.projectkorra.projectkorra.firebending.Combustion; +import com.projectkorra.projectkorra.firebending.FireBlast; +import com.projectkorra.projectkorra.firebending.FireCombo; +import com.projectkorra.projectkorra.firebending.FireMethods; +import com.projectkorra.projectkorra.firebending.FireShield; +import com.projectkorra.projectkorra.object.Preset; +import com.projectkorra.projectkorra.storage.DBConnection; +import com.projectkorra.projectkorra.util.Flight; +import com.projectkorra.projectkorra.util.ParticleEffect; +import com.projectkorra.projectkorra.util.TempBlock; +import com.projectkorra.projectkorra.waterbending.Bloodbending; +import com.projectkorra.projectkorra.waterbending.FreezeMelt; +import com.projectkorra.projectkorra.waterbending.WaterCombo; +import com.projectkorra.projectkorra.waterbending.WaterManipulation; +import com.projectkorra.projectkorra.waterbending.WaterMethods; +import com.projectkorra.projectkorra.waterbending.WaterSpout; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.flags.DefaultFlag; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -57,73 +96,34 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import com.griefcraft.lwc.LWC; -import com.griefcraft.lwc.LWCPlugin; -import com.griefcraft.model.Protection; -import com.massivecraft.factions.engine.EngineMain; -import com.massivecraft.massivecore.ps.PS; -import com.palmergames.bukkit.towny.Towny; -import com.palmergames.bukkit.towny.TownyMessaging; -import com.palmergames.bukkit.towny.TownySettings; -import com.palmergames.bukkit.towny.object.Coord; -import com.palmergames.bukkit.towny.object.PlayerCache; -import com.palmergames.bukkit.towny.object.PlayerCache.TownBlockStatus; -import com.palmergames.bukkit.towny.object.TownyPermission; -import com.palmergames.bukkit.towny.object.TownyUniverse; -import com.palmergames.bukkit.towny.object.TownyWorld; -import com.palmergames.bukkit.towny.object.WorldCoord; -import com.palmergames.bukkit.towny.utils.PlayerCacheUtil; -import com.palmergames.bukkit.towny.war.flagwar.TownyWar; -import com.palmergames.bukkit.towny.war.flagwar.TownyWarConfig; -import com.projectkorra.projectkorra.ability.AbilityModule; -import com.projectkorra.projectkorra.ability.AbilityModuleManager; -import com.projectkorra.projectkorra.ability.StockAbility; -import com.projectkorra.projectkorra.ability.combo.ComboAbilityModule; -import com.projectkorra.projectkorra.ability.combo.ComboManager; -import com.projectkorra.projectkorra.ability.combo.ComboManager.AbilityInformation; -import com.projectkorra.projectkorra.ability.combo.ComboManager.ComboAbility; -import com.projectkorra.projectkorra.ability.combo.ComboModuleManager; -import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; -import com.projectkorra.projectkorra.ability.multiability.MultiAbilityModuleManager; -import com.projectkorra.projectkorra.airbending.AirCombo; -import com.projectkorra.projectkorra.airbending.AirMethods; -import com.projectkorra.projectkorra.airbending.AirShield; -import com.projectkorra.projectkorra.airbending.AirSpout; -import com.projectkorra.projectkorra.airbending.AirSwipe; -import com.projectkorra.projectkorra.chiblocking.ChiMethods; -import com.projectkorra.projectkorra.chiblocking.Paralyze; -import com.projectkorra.projectkorra.configuration.ConfigManager; -import com.projectkorra.projectkorra.earthbending.EarthBlast; -import com.projectkorra.projectkorra.earthbending.EarthMethods; -import com.projectkorra.projectkorra.earthbending.EarthPassive; -import com.projectkorra.projectkorra.earthbending.MetalClips; -import com.projectkorra.projectkorra.event.BendingReloadEvent; -import com.projectkorra.projectkorra.event.PlayerBendingDeathEvent; -import com.projectkorra.projectkorra.firebending.Combustion; -import com.projectkorra.projectkorra.firebending.FireBlast; -import com.projectkorra.projectkorra.firebending.FireCombo; -import com.projectkorra.projectkorra.firebending.FireMethods; -import com.projectkorra.projectkorra.firebending.FireShield; -import com.projectkorra.projectkorra.object.Preset; -import com.projectkorra.projectkorra.storage.DBConnection; -import com.projectkorra.projectkorra.util.Flight; -import com.projectkorra.projectkorra.util.ParticleEffect; -import com.projectkorra.projectkorra.util.TempBlock; -import com.projectkorra.projectkorra.waterbending.Bloodbending; -import com.projectkorra.projectkorra.waterbending.FreezeMelt; -import com.projectkorra.projectkorra.waterbending.WaterCombo; -import com.projectkorra.projectkorra.waterbending.WaterManipulation; -import com.projectkorra.projectkorra.waterbending.WaterMethods; -import com.projectkorra.projectkorra.waterbending.WaterSpout; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.flags.DefaultFlag; - -import fr.neatmonster.nocheatplus.checks.CheckType; -import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager; -import me.ryanhamshire.GriefPrevention.Claim; -import me.ryanhamshire.GriefPrevention.GriefPrevention; -import net.sacredlabyrinth.Phaed.PreciousStones.FieldFlag; -import net.sacredlabyrinth.Phaed.PreciousStones.PreciousStones; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; @SuppressWarnings("deprecation") public class GeneralMethods { @@ -286,7 +286,7 @@ public class GeneralMethods { return false; if (p == null) return false; - if (p.getGameMode() == GameMode.SPECTATOR) + if (p.getGameMode() == GameMode.SPECTATOR) return false; if (cooldowns.containsKey(p.getName())) { if (cooldowns.get(p.getName()) + ProjectKorra.plugin.getConfig().getLong("Properties.GlobalCooldown") >= System.currentTimeMillis()) { @@ -300,7 +300,7 @@ public class GeneralMethods { return false; if (!canBind(player, ability)) return false; - + if (isRegionProtectedFromBuild(p, ability, p.getLocation())) return false; if (Paralyze.isParalyzed(p) || Bloodbending.isBloodbended(p)) @@ -350,28 +350,28 @@ public class GeneralMethods { return false; if (ChiMethods.isChiAbility(ability) && !isBender(player, Element.Chi)) return false; - - if (!EarthMethods.canLavabend(p) && EarthMethods.isLavabendingAbility(ability)) + + if (!EarthMethods.canLavabend(p) && EarthMethods.isLavabendingAbility(ability)) return false; - else if (!EarthMethods.canMetalbend(p) && EarthMethods.isMetalbendingAbility(ability)) + else if (!EarthMethods.canMetalbend(p) && EarthMethods.isMetalbendingAbility(ability)) return false; - else if (!EarthMethods.canSandbend(p) && EarthMethods.isSandbendingAbility(ability)) + else if (!EarthMethods.canSandbend(p) && EarthMethods.isSandbendingAbility(ability)) return false; - else if (!AirMethods.canAirFlight(p) && AirMethods.isFlightAbility(ability)) + else if (!AirMethods.canAirFlight(p) && AirMethods.isFlightAbility(ability)) return false; - else if (!AirMethods.canUseSpiritualProjection(p) && AirMethods.isSpiritualProjectionAbility(ability)) + else if (!AirMethods.canUseSpiritualProjection(p) && AirMethods.isSpiritualProjectionAbility(ability)) return false; - else if (!FireMethods.canCombustionbend(p) && FireMethods.isCombustionbendingAbility(ability)) + else if (!FireMethods.canCombustionbend(p) && FireMethods.isCombustionbendingAbility(ability)) return false; - else if (!FireMethods.canLightningbend(p) && FireMethods.isLightningbendingAbility(ability)) + else if (!FireMethods.canLightningbend(p) && FireMethods.isLightningbendingAbility(ability)) return false; - else if (!WaterMethods.canBloodbend(p) && WaterMethods.isBloodbendingAbility(ability)) + else if (!WaterMethods.canBloodbend(p) && WaterMethods.isBloodbendingAbility(ability)) return false; - else if (!WaterMethods.canIcebend(p) && WaterMethods.isIcebendingAbility(ability)) + else if (!WaterMethods.canIcebend(p) && WaterMethods.isIcebendingAbility(ability)) return false; - else if (!WaterMethods.canWaterHeal(p) && WaterMethods.isHealingAbility(ability)) + else if (!WaterMethods.canWaterHeal(p) && WaterMethods.isHealingAbility(ability)) return false; - else if (!WaterMethods.canPlantbend(p) && WaterMethods.isPlantbendingAbility(ability)) + else if (!WaterMethods.canPlantbend(p) && WaterMethods.isPlantbendingAbility(ability)) return false; return true; } @@ -381,8 +381,11 @@ public class GeneralMethods { } public static boolean comboExists(String string) { - /*Previous method only returned non-stock combos. Reason we use descriptions is because that - * contains all valid combos. Not technical ones like IceBulletLeftClick, etc.*/ + /* + * Previous method only returned non-stock combos. Reason we use + * descriptions is because that contains all valid combos. Not technical + * ones like IceBulletLeftClick, etc. + */ for (String s : ComboManager.descriptions.keySet()) { if (s.equalsIgnoreCase(string)) return true; @@ -518,13 +521,9 @@ public class GeneralMethods { File readFile = new File(".", "bendingPlayers.yml"); File writeFile = new File(".", "converted.yml"); if (readFile.exists()) { - try ( - DataInputStream input = new DataInputStream(new FileInputStream(readFile)); - BufferedReader reader = new BufferedReader(new InputStreamReader(input)); + try (DataInputStream input = new DataInputStream(new FileInputStream(readFile)); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); - DataOutputStream output = new DataOutputStream(new FileOutputStream(writeFile)); - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output)) - ) { + DataOutputStream output = new DataOutputStream(new FileOutputStream(writeFile)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))) { String line; while ((line = reader.readLine()) != null) { @@ -727,26 +726,36 @@ public class GeneralMethods { else return null; } - - + /** * Returns the subelement of the ability if applicable. * * @param ability * @return SubElement - * */ + */ public static SubElement getAbilitySubElement(String ability) { - if (AbilityModuleManager.bloodabilities.contains(ability)) return SubElement.Bloodbending; - if (AbilityModuleManager.iceabilities.contains(ability)) return SubElement.Icebending; - if (AbilityModuleManager.plantabilities.contains(ability)) return SubElement.Plantbending; - if (AbilityModuleManager.healingabilities.contains(ability)) return SubElement.Healing; - if (AbilityModuleManager.sandabilities.contains(ability)) return SubElement.Sandbending; - if (AbilityModuleManager.metalabilities.contains(ability)) return SubElement.Metalbending; - if (AbilityModuleManager.lavaabilities.contains(ability)) return SubElement.Lavabending; - if (AbilityModuleManager.lightningabilities.contains(ability)) return SubElement.Lightning; - if (AbilityModuleManager.combustionabilities.contains(ability)) return SubElement.Combustion; - if (AbilityModuleManager.spiritualprojectionabilities.contains(ability)) return SubElement.SpiritualProjection; - if (AbilityModuleManager.flightabilities.contains(ability)) return SubElement.Flight; + if (AbilityModuleManager.bloodabilities.contains(ability)) + return SubElement.Bloodbending; + if (AbilityModuleManager.iceabilities.contains(ability)) + return SubElement.Icebending; + if (AbilityModuleManager.plantabilities.contains(ability)) + return SubElement.Plantbending; + if (AbilityModuleManager.healingabilities.contains(ability)) + return SubElement.Healing; + if (AbilityModuleManager.sandabilities.contains(ability)) + return SubElement.Sandbending; + if (AbilityModuleManager.metalabilities.contains(ability)) + return SubElement.Metalbending; + if (AbilityModuleManager.lavaabilities.contains(ability)) + return SubElement.Lavabending; + if (AbilityModuleManager.lightningabilities.contains(ability)) + return SubElement.Lightning; + if (AbilityModuleManager.combustionabilities.contains(ability)) + return SubElement.Combustion; + if (AbilityModuleManager.spiritualprojectionabilities.contains(ability)) + return SubElement.SpiritualProjection; + if (AbilityModuleManager.flightabilities.contains(ability)) + return SubElement.Flight; return null; } @@ -937,74 +946,85 @@ public class GeneralMethods { } return circleblocks; } - - /**Returns the ChatColor that should be associated with the combo name. + + /** + * Returns the ChatColor that should be associated with the combo name. + * * @param combo - * @return The ChatColor to be used*/ + * @return The ChatColor to be used + */ public static ChatColor getComboColor(String combo) { for (ComboAbility comboability : ComboManager.comboAbilityList) { if (!comboability.getName().equalsIgnoreCase(combo)) { continue; } - + if (!ComboManager.descriptions.containsKey(comboability.getName())) { return ChatColor.STRIKETHROUGH; //This is so we know it shouldn't be used. Should not come up anyway. } - - if (comboability.getComboType() instanceof ComboAbilityModule){ + + if (comboability.getComboType() instanceof ComboAbilityModule) { ComboAbilityModule module = (ComboAbilityModule) comboability.getComboType(); if (module.getSubElement() != null) { - if (module.getSubElement() == SubElement.Bloodbending || module.getSubElement() == SubElement.Icebending || module.getSubElement() == SubElement.Plantbending || module.getSubElement() == SubElement.Healing) + if (module.getSubElement() == SubElement.Bloodbending || module.getSubElement() == SubElement.Icebending || module.getSubElement() == SubElement.Plantbending || module.getSubElement() == SubElement.Healing) return WaterMethods.getWaterSubColor(); else if (module.getSubElement() == SubElement.Lightning || module.getSubElement() == SubElement.Combustion) return FireMethods.getFireSubColor(); - else if (module.getSubElement() == SubElement.Sandbending || module.getSubElement() == SubElement.Metalbending || module.getSubElement() == SubElement.Lavabending) + else if (module.getSubElement() == SubElement.Sandbending || module.getSubElement() == SubElement.Metalbending || module.getSubElement() == SubElement.Lavabending) return EarthMethods.getEarthSubColor(); - else if (module.getSubElement() == SubElement.Flight || module.getSubElement() == SubElement.SpiritualProjection) + else if (module.getSubElement() == SubElement.Flight || module.getSubElement() == SubElement.SpiritualProjection) return AirMethods.getAirSubColor(); } - if (module.getElement().equalsIgnoreCase(Element.Water.toString())) return WaterMethods.getWaterColor(); - else if (module.getElement().equalsIgnoreCase(Element.Earth.toString())) return EarthMethods.getEarthColor(); - else if (module.getElement().equalsIgnoreCase(Element.Fire.toString())) return FireMethods.getFireColor(); - else if (module.getElement().equalsIgnoreCase(Element.Air.toString())) return AirMethods.getAirColor(); - else if (module.getElement().equalsIgnoreCase(Element.Chi.toString())) return ChiMethods.getChiColor(); - else return getAvatarColor(); - } - else if (combo.equalsIgnoreCase("IceBullet") || combo.equalsIgnoreCase("IceWave")) { + if (module.getElement().equalsIgnoreCase(Element.Water.toString())) + return WaterMethods.getWaterColor(); + else if (module.getElement().equalsIgnoreCase(Element.Earth.toString())) + return EarthMethods.getEarthColor(); + else if (module.getElement().equalsIgnoreCase(Element.Fire.toString())) + return FireMethods.getFireColor(); + else if (module.getElement().equalsIgnoreCase(Element.Air.toString())) + return AirMethods.getAirColor(); + else if (module.getElement().equalsIgnoreCase(Element.Chi.toString())) + return ChiMethods.getChiColor(); + else + return getAvatarColor(); + } else if (combo.equalsIgnoreCase("IceBullet") || combo.equalsIgnoreCase("IceWave")) { return WaterMethods.getWaterSubColor(); - } - else if (comboability.getComboType().equals(WaterCombo.class)){ + } else if (comboability.getComboType().equals(WaterCombo.class)) { return WaterMethods.getWaterColor(); - } - else if (comboability.getComboType().equals(FireCombo.class)){ + } else if (comboability.getComboType().equals(FireCombo.class)) { return FireMethods.getFireColor(); - } - else if (comboability.getComboType().equals(AirCombo.class)){ + } else if (comboability.getComboType().equals(AirCombo.class)) { return AirMethods.getAirColor(); - } - else { + } else { Element element = null; for (AbilityInformation abilityinfo : comboability.getAbilities()) { Element currElement = getAbilityElement(abilityinfo.getAbilityName()); - if (currElement == null) return getAvatarColor(); - else if (element == null) element = currElement; + if (currElement == null) + return getAvatarColor(); + else if (element == null) + element = currElement; if (getAbilitySubElement(abilityinfo.getAbilityName()) != null) { SubElement sub = getAbilitySubElement(abilityinfo.getAbilityName()); - if (sub == SubElement.Bloodbending || sub == SubElement.Icebending || sub == SubElement.Plantbending || sub == SubElement.Healing) + if (sub == SubElement.Bloodbending || sub == SubElement.Icebending || sub == SubElement.Plantbending || sub == SubElement.Healing) return WaterMethods.getWaterSubColor(); else if (sub == SubElement.Lightning || sub == SubElement.Combustion) return FireMethods.getFireSubColor(); - else if (sub == SubElement.Sandbending || sub == SubElement.Metalbending || sub == SubElement.Lavabending) + else if (sub == SubElement.Sandbending || sub == SubElement.Metalbending || sub == SubElement.Lavabending) return EarthMethods.getEarthSubColor(); - else if (sub == SubElement.Flight || sub == SubElement.SpiritualProjection) + else if (sub == SubElement.Flight || sub == SubElement.SpiritualProjection) return AirMethods.getAirSubColor(); } } - if (element == Element.Air) return AirMethods.getAirColor(); - if (element == Element.Earth) return EarthMethods.getEarthColor(); - if (element == Element.Fire) return FireMethods.getFireColor(); - if (element == Element.Water) return WaterMethods.getWaterColor(); - if (element == Element.Chi) return ChiMethods.getChiColor(); + if (element == Element.Air) + return AirMethods.getAirColor(); + if (element == Element.Earth) + return EarthMethods.getEarthColor(); + if (element == Element.Fire) + return FireMethods.getFireColor(); + if (element == Element.Water) + return WaterMethods.getWaterColor(); + if (element == Element.Chi) + return ChiMethods.getChiColor(); return getAvatarColor(); } } @@ -1585,37 +1605,11 @@ public class GeneralMethods { /** Checks if an entity is Undead **/ public static boolean isUndead(Entity entity) { - return entity != null - && (entity.getType() == EntityType.ZOMBIE - || entity.getType() == EntityType.BLAZE - || entity.getType() == EntityType.GIANT - || entity.getType() == EntityType.IRON_GOLEM - || entity.getType() == EntityType.MAGMA_CUBE - || entity.getType() == EntityType.PIG_ZOMBIE - || entity.getType() == EntityType.SKELETON - || entity.getType() == EntityType.SLIME - || entity.getType() == EntityType.SNOWMAN - || entity.getType() == EntityType.ZOMBIE); + return entity != null && (entity.getType() == EntityType.ZOMBIE || entity.getType() == EntityType.BLAZE || entity.getType() == EntityType.GIANT || entity.getType() == EntityType.IRON_GOLEM || entity.getType() == EntityType.MAGMA_CUBE || entity.getType() == EntityType.PIG_ZOMBIE || entity.getType() == EntityType.SKELETON || entity.getType() == EntityType.SLIME || entity.getType() == EntityType.SNOWMAN || entity.getType() == EntityType.ZOMBIE); } public static boolean isWeapon(Material mat) { - return mat != null - && (mat == Material.WOOD_AXE - || mat == Material.WOOD_PICKAXE - || mat == Material.WOOD_SPADE - || mat == Material.WOOD_SWORD - || mat == Material.STONE_AXE - || mat == Material.STONE_PICKAXE - || mat == Material.STONE_SPADE - || mat == Material.STONE_SWORD - || mat == Material.IRON_AXE - || mat == Material.IRON_PICKAXE - || mat == Material.IRON_SWORD - || mat == Material.IRON_SPADE - || mat == Material.DIAMOND_AXE - || mat == Material.DIAMOND_PICKAXE - || mat == Material.DIAMOND_SWORD - || mat == Material.DIAMOND_SPADE); + return mat != null && (mat == Material.WOOD_AXE || mat == Material.WOOD_PICKAXE || mat == Material.WOOD_SPADE || mat == Material.WOOD_SWORD || mat == Material.STONE_AXE || mat == Material.STONE_PICKAXE || mat == Material.STONE_SPADE || mat == Material.STONE_SWORD || mat == Material.IRON_AXE || mat == Material.IRON_PICKAXE || mat == Material.IRON_SWORD || mat == Material.IRON_SPADE || mat == Material.DIAMOND_AXE || mat == Material.DIAMOND_PICKAXE || mat == Material.DIAMOND_SWORD || mat == Material.DIAMOND_SPADE); } public static void playAvatarSound(Location loc) { @@ -1741,13 +1735,13 @@ public class GeneralMethods { } if (!stockAbils.isEmpty()) { Collections.sort(stockAbils); - for(String ability : stockAbils) { + for (String ability : stockAbils) { writeToDebug(ability + " - STOCK"); } } if (!unofficialAbils.isEmpty()) { Collections.sort(unofficialAbils); - for(String ability : unofficialAbils) { + for (String ability : unofficialAbils) { writeToDebug(ability + " - UNOFFICAL"); } } @@ -2004,4 +1998,20 @@ public class GeneralMethods { } } + + public static ChatColor getElementColor(Element element) { + switch (element) { + case Air: + return AirMethods.getAirColor(); + case Fire: + return FireMethods.getFireColor(); + case Earth: + return EarthMethods.getEarthColor(); + case Water: + return WaterMethods.getWaterColor(); + case Chi: + return ChiMethods.getChiColor(); + } + return null; + } } diff --git a/src/com/projectkorra/projectkorra/PKListener.java b/src/com/projectkorra/projectkorra/PKListener.java index e9ef3780..a13d86d0 100644 --- a/src/com/projectkorra/projectkorra/PKListener.java +++ b/src/com/projectkorra/projectkorra/PKListener.java @@ -1,6 +1,7 @@ package com.projectkorra.projectkorra; import com.projectkorra.projectkorra.ability.AvatarState; +import com.projectkorra.projectkorra.ability.api.CoreAbility; import com.projectkorra.projectkorra.ability.combo.ComboManager; import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; import com.projectkorra.projectkorra.airbending.AirBlast; @@ -26,6 +27,7 @@ import com.projectkorra.projectkorra.chiblocking.RapidPunch; import com.projectkorra.projectkorra.chiblocking.Smokescreen; import com.projectkorra.projectkorra.chiblocking.SwiftKick; import com.projectkorra.projectkorra.chiblocking.WarriorStance; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.earthbending.Catapult; import com.projectkorra.projectkorra.earthbending.Collapse; diff --git a/src/com/projectkorra/projectkorra/ProjectKorra.java b/src/com/projectkorra/projectkorra/ProjectKorra.java index 2d6cedd0..febe7f29 100644 --- a/src/com/projectkorra/projectkorra/ProjectKorra.java +++ b/src/com/projectkorra/projectkorra/ProjectKorra.java @@ -7,6 +7,7 @@ import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; import com.projectkorra.projectkorra.ability.multiability.MultiAbilityModuleManager; import com.projectkorra.projectkorra.airbending.AirbendingManager; import com.projectkorra.projectkorra.chiblocking.ChiblockingManager; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.earthbending.EarthbendingManager; import com.projectkorra.projectkorra.firebending.FirebendingManager; @@ -33,7 +34,7 @@ public class ProjectKorra extends JavaPlugin { public static PKLogHandler handler; public static long time_step = 1; public Updater updater; - + public AbilityModuleManager abManager; @Override public void onEnable() { plugin = this; @@ -53,7 +54,7 @@ public class ProjectKorra extends JavaPlugin { new GeneralMethods(this); updater = new Updater(this, "http://projectkorra.com/forum/forums/dev-builds.16/index.rss"); new Commands(this); - new AbilityModuleManager(this); + abManager = new AbilityModuleManager(this); new MultiAbilityModuleManager(); new MultiAbilityManager(); new ComboModuleManager(); diff --git a/src/com/projectkorra/projectkorra/ability/AbilityModuleManager.java b/src/com/projectkorra/projectkorra/ability/AbilityModuleManager.java index 2b192922..ced140ba 100644 --- a/src/com/projectkorra/projectkorra/ability/AbilityModuleManager.java +++ b/src/com/projectkorra/projectkorra/ability/AbilityModuleManager.java @@ -1,17 +1,18 @@ package com.projectkorra.projectkorra.ability; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.command.Commands; +import com.projectkorra.projectkorra.util.AbilityLoader; + import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Set; - -import com.projectkorra.projectkorra.Element; -import com.projectkorra.projectkorra.ProjectKorra; -import com.projectkorra.projectkorra.util.AbilityLoader; public class AbilityModuleManager { @@ -353,12 +354,14 @@ public class AbilityModuleManager { descriptions.put(ab.getName(), ab.getDescription()); authors.put(ab.getName(), ab.getAuthor()); } - catch (AbstractMethodError /* pre 1.6 BETA 8 */| NoSuchMethodError /* + catch (AbstractMethodError /* pre 1.6 BETA 8 */ | NoSuchMethodError /* * pre - * 1.7 + * 1 + * . + * 7 * BETA * 2 - */e) { //If triggered means ability was made before commented versions + */ e) { //If triggered means ability was made before commented versions ProjectKorra.log.warning("The ability " + ab.getName() + " is either broken or outdated. Please remove it!"); e.printStackTrace(); ab.stop(); @@ -374,16 +377,52 @@ public class AbilityModuleManager { } } - for (Field field : this.getClass().getDeclaredFields()) { if (List.class.isAssignableFrom(field.getType())) { try { Collections.sort((List) field.get(this)); - } catch (Exception e) { + } + catch (Exception e) { e.printStackTrace(); } } } } + public List getAbilities(String element) { + element = element.toLowerCase(); + if (Arrays.asList(Commands.wateraliases).contains(element)) + return waterbendingabilities; + else if (Arrays.asList(Commands.icealiases).contains(element)) + return iceabilities; + else if (Arrays.asList(Commands.plantaliases).contains(element)) + return plantabilities; + else if (Arrays.asList(Commands.healingaliases).contains(element)) + return healingabilities; + else if (Arrays.asList(Commands.bloodaliases).contains(element)) + return bloodabilities; + else if (Arrays.asList(Commands.airaliases).contains(element)) + return airbendingabilities; + else if (Arrays.asList(Commands.flightaliases).contains(element)) + return flightabilities; + else if (Arrays.asList(Commands.spiritualprojectionaliases).contains(element)) + return spiritualprojectionabilities; + else if (Arrays.asList(Commands.earthaliases).contains(element)) + return earthbendingabilities; + else if (Arrays.asList(Commands.lavabendingaliases).contains(element)) + return lavaabilities; + else if (Arrays.asList(Commands.metalbendingaliases).contains(element)) + return metalabilities; + else if (Arrays.asList(Commands.sandbendingaliases).contains(element)) + return sandabilities; + else if (Arrays.asList(Commands.firealiases).contains(element)) + return firebendingabilities; + else if (Arrays.asList(Commands.combustionaliases).contains(element)) + return combustionabilities; + else if (Arrays.asList(Commands.lightningaliases).contains(element)) + return lightningabilities; + else if (Arrays.asList(Commands.chialiases).contains(element)) + return chiabilities; + return null; + } } diff --git a/src/com/projectkorra/projectkorra/ability/combo/ComboManager.java b/src/com/projectkorra/projectkorra/ability/combo/ComboManager.java index 3b0fd81f..e51afe60 100644 --- a/src/com/projectkorra/projectkorra/ability/combo/ComboManager.java +++ b/src/com/projectkorra/projectkorra/ability/combo/ComboManager.java @@ -5,6 +5,7 @@ import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.airbending.AirCombo; import com.projectkorra.projectkorra.chiblocking.ChiCombo; +import com.projectkorra.projectkorra.earthbending.EarthCombo; import com.projectkorra.projectkorra.firebending.FireCombo; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.waterbending.WaterCombo; @@ -157,9 +158,16 @@ public class ComboManager { immobilize.add(new AbilityInformation("QuickStrike", ClickType.LEFT_CLICK)); immobilize.add(new AbilityInformation("QuickStrike", ClickType.LEFT_CLICK)); comboAbilityList.add(new ComboAbility("Immobilize", immobilize, ChiCombo.class)); - descriptions.put("Immobilize", "Does stuff to people."); + descriptions.put("Immobilize", "Immobilizes the opponent for several seconds."); instructions.put("Immobilize", "QuickStrike (Left Click) > SwiftKick (Left Click) > QuickStrike (Left Click) > QuickStrike (Left Click)"); + ArrayList earthBurrow = new ArrayList(); + earthBurrow.add(new AbilityInformation("EarthTunnel", ClickType.LEFT_CLICK)); + earthBurrow.add(new AbilityInformation("Collapse", ClickType.SHIFT_DOWN)); + comboAbilityList.add(new ComboAbility("EarthBurrow", earthBurrow, EarthCombo.class)); + descriptions.put("EarthBurrow", "Sink into the ground to avoid attacks and confuse foes."); + instructions.put("EarthBurrow", "EarthTunnel (Left Click) > Collapse (Shift)"); + startCleanupTask(); } @@ -185,6 +193,8 @@ public class ComboManager { new WaterCombo(player, comboAbil.getName()); else if (comboAbil.getComboType().equals(ChiCombo.class)) new ChiCombo(player, comboAbil.getName()); + else if (comboAbil.getComboType().equals(EarthCombo.class)) + new EarthCombo(player, comboAbil.getName()); else { for (ComboAbility ca : comboAbilityList) { if (comboAbil.getName().equals(ca.getName())) { diff --git a/src/com/projectkorra/projectkorra/airbending/AirBlast.java b/src/com/projectkorra/projectkorra/airbending/AirBlast.java index 95eefe0b..3601f442 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirBlast.java +++ b/src/com/projectkorra/projectkorra/airbending/AirBlast.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.airbending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.object.HorizontalVelocityTracker; import com.projectkorra.projectkorra.util.Flight; diff --git a/src/com/projectkorra/projectkorra/airbending/AirCombo.java b/src/com/projectkorra/projectkorra/airbending/AirCombo.java index 068d6644..76525303 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirCombo.java +++ b/src/com/projectkorra/projectkorra/airbending/AirCombo.java @@ -1,11 +1,11 @@ package com.projectkorra.projectkorra.airbending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigLoadable; import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.firebending.FireCombo; diff --git a/src/com/projectkorra/projectkorra/airbending/AirShield.java b/src/com/projectkorra/projectkorra/airbending/AirShield.java index 1b9dbf8e..5f56a631 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirShield.java +++ b/src/com/projectkorra/projectkorra/airbending/AirShield.java @@ -1,10 +1,10 @@ package com.projectkorra.projectkorra.airbending; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthBlast; import com.projectkorra.projectkorra.firebending.Combustion; import com.projectkorra.projectkorra.firebending.FireBlast; diff --git a/src/com/projectkorra/projectkorra/airbending/AirSuction.java b/src/com/projectkorra/projectkorra/airbending/AirSuction.java index db36eb1e..927f0ff2 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSuction.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSuction.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.airbending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.util.Flight; import com.projectkorra.projectkorra.waterbending.WaterSpout; diff --git a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java index e5924de6..72e10359 100644 --- a/src/com/projectkorra/projectkorra/airbending/AirSwipe.java +++ b/src/com/projectkorra/projectkorra/airbending/AirSwipe.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.airbending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthBlast; import com.projectkorra.projectkorra.firebending.Combustion; import com.projectkorra.projectkorra.firebending.FireBlast; diff --git a/src/com/projectkorra/projectkorra/airbending/Tornado.java b/src/com/projectkorra/projectkorra/airbending/Tornado.java index ad19b4bf..1188b540 100644 --- a/src/com/projectkorra/projectkorra/airbending/Tornado.java +++ b/src/com/projectkorra/projectkorra/airbending/Tornado.java @@ -1,9 +1,9 @@ package com.projectkorra.projectkorra.airbending; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.StockAbility; import com.projectkorra.projectkorra.ability.api.CoreAbility; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.util.Flight; import org.bukkit.Location; diff --git a/src/com/projectkorra/projectkorra/chiblocking/Paralyze.java b/src/com/projectkorra/projectkorra/chiblocking/Paralyze.java index 367f4a26..8e421151 100644 --- a/src/com/projectkorra/projectkorra/chiblocking/Paralyze.java +++ b/src/com/projectkorra/projectkorra/chiblocking/Paralyze.java @@ -1,11 +1,11 @@ package com.projectkorra.projectkorra.chiblocking; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.airbending.Suffocate; +import com.projectkorra.projectkorra.command.Commands; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; diff --git a/src/com/projectkorra/projectkorra/chiblocking/Smokescreen.java b/src/com/projectkorra/projectkorra/chiblocking/Smokescreen.java index db22803f..062c68ab 100644 --- a/src/com/projectkorra/projectkorra/chiblocking/Smokescreen.java +++ b/src/com/projectkorra/projectkorra/chiblocking/Smokescreen.java @@ -1,9 +1,9 @@ package com.projectkorra.projectkorra.chiblocking; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.command.Commands; import org.bukkit.Effect; import org.bukkit.Location; diff --git a/src/com/projectkorra/projectkorra/command/AddCommand.java b/src/com/projectkorra/projectkorra/command/AddCommand.java new file mode 100644 index 00000000..7134055a --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/AddCommand.java @@ -0,0 +1,87 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.List; + +/** + * Executor for /bending add. Extends {@link PKCommand}. + */ +public class AddCommand extends PKCommand { + + public AddCommand() { + super("add", "/bending add [Element]", "This command will allow the user to add an element to the targeted , or themselves if the target is not specified. This command is typically reserved for server administrators.", new String[] { "add", "a" }); + } + + public void execute(CommandSender sender, List args) { + if (!correctLength(sender, args.size(), 1, 2)) { + return; + } else if (args.size() == 1) { //bending add element + if (!hasPermission(sender) || !isPlayer(sender)) { + return; + } + add(sender, (Player) sender, args.get(0)); + } else if (args.size() == 2) { //bending add element combo + if (!hasPermission(sender, "others")) { + return; + } + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return; + } + add(sender, player, args.get(1)); + } + } + + /** + * Adds the ability to bend an element to a player. + * + * @param sender The CommandSender who issued the add command + * @param target The player to add the element to + * @param element The element to add + */ + private void add(CommandSender sender, Player target, String element) { + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(target.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(target.getUniqueId(), target.getName()); + bPlayer = GeneralMethods.getBendingPlayer(target); + } + if (bPlayer.isPermaRemoved()) { + sender.sendMessage(ChatColor.RED + "That player's bending was permanently removed."); + return; + } + if (Arrays.asList(Commands.elementaliases).contains(element)) { + element = getElement(element); + Element type = Element.getType(element); + bPlayer.addElement(type); + ChatColor color = GeneralMethods.getElementColor(type); + if (element.charAt(0) == 'w' || element.charAt(0) == 'f' || element.charAt(0) == 'c') { + target.sendMessage(color + "You are also a " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } else if (element.charAt(0) == 'e' || element.charAt(0) == 'a') { + target.sendMessage(color + "You are also an " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } + if (!(sender instanceof Player) || !((Player) sender).equals(target)) { + if (element.charAt(0) == 'w' || element.charAt(0) == 'f' || element.charAt(0) == 'c') { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } else if (element.charAt(0) == 'e' || element.charAt(0) == 'a') { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also an " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } + } + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, type, Result.ADD)); + return; + } else { + sender.sendMessage(ChatColor.RED + "You must specify a valid element."); + } + } +} diff --git a/src/com/projectkorra/projectkorra/command/BindCommand.java b/src/com/projectkorra/projectkorra/command/BindCommand.java new file mode 100644 index 00000000..d78611e4 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/BindCommand.java @@ -0,0 +1,55 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.GeneralMethods; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * Executor for /bending bind. Extends {@link PKCommand}. + */ +public class BindCommand extends PKCommand { + + public BindCommand() { + super("bind", "/bending bind [Ability] <#>", "This command will bind an ability to the slot you specify (if you specify one), or the slot currently selected in your hotbar (If you do not specify a Slot #).", new String[]{ "bind", "b" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 1, 2) || !isPlayer(sender)) { + return; + } + + if (!GeneralMethods.abilityExists(args.get(0))) { + sender.sendMessage(ChatColor.RED + "That ability doesn't exist."); + return; + } + + String ability = GeneralMethods.getAbility(args.get(0)); + // bending bind [Ability] + if (args.size() == 1) { + bind(sender, ability, ((Player) sender).getInventory().getHeldItemSlot()+1); + } + + // bending bind [ability] [#] + if (args.size() == 2) { + bind(sender, ability, Integer.parseInt(args.get(1))); + } + } + + private void bind(CommandSender sender, String ability, int slot) { + if (slot < 1 || slot > 9) { + sender.sendMessage(ChatColor.RED + "Slot must be an integer between 1 and 9."); + return; + } + + if (!GeneralMethods.canBind(((Player) sender).getName(), ability)) { + sender.sendMessage(ChatColor.RED + "You don't have permission to bend this element."); + return; + } + GeneralMethods.bindAbility((Player) sender, GeneralMethods.getAbility(ability), slot); + } +} diff --git a/src/com/projectkorra/projectkorra/command/CheckCommand.java b/src/com/projectkorra/projectkorra/command/CheckCommand.java new file mode 100644 index 00000000..bda5c861 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/CheckCommand.java @@ -0,0 +1,36 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.ProjectKorra; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Executor for /bending check. Extends {@link PKCommand}. + */ +public class CheckCommand extends PKCommand { + + public CheckCommand() { + super("check", "/bending check", "Checks if ProjectKorra is up to date.", new String[] { "check", "chk" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender)) { + return; + } else if (args.size() > 0) { + help(sender, false); + return; + } + if (ProjectKorra.plugin.updater.updateAvailable()) { + sender.sendMessage(ChatColor.GREEN + "There is a new version of " + ChatColor.GOLD + "ProjectKorra" + ChatColor.GREEN + " available!"); + sender.sendMessage(ChatColor.YELLOW + "Current version: " + ChatColor.RED + ProjectKorra.plugin.updater.getCurrentVersion()); + sender.sendMessage(ChatColor.YELLOW + "Latest version: " + ChatColor.GOLD + ProjectKorra.plugin.updater.getCurrentVersion()); + } else { + sender.sendMessage(ChatColor.YELLOW + "You have the latest version of " + ChatColor.GOLD + "ProjectKorra"); + } + } + +} diff --git a/src/com/projectkorra/projectkorra/command/ChooseCommand.java b/src/com/projectkorra/projectkorra/command/ChooseCommand.java new file mode 100644 index 00000000..9783a23d --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/ChooseCommand.java @@ -0,0 +1,110 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.List; + +/** + * Executor for /bending choose. Extends {@link PKCommand}. + */ +public class ChooseCommand extends PKCommand { + + public ChooseCommand() { + super("choose", "/bending choose [Element] ", "This command will allow the user to choose a player either for himself or if specified. This command can only be used once per player unless they have permission to rechoose their element.", new String[] { "choose", "ch" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!correctLength(sender, args.size(), 1, 2)) { + return; + } else if (args.size() == 1) { + if (!hasPermission(sender) || !isPlayer(sender)) { + return; + } + + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); + bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + } + if (bPlayer.isPermaRemoved()) { + sender.sendMessage(ChatColor.RED + "Your bending was permanently removed."); + return; + } + + if (!bPlayer.getElements().isEmpty() && !sender.hasPermission("bending.command.rechoose")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return; + } + String element = args.get(0); + if (Arrays.asList(Commands.elementaliases).contains(element)) { + if (!hasPermission(sender, element)) { + return; + } + add(sender, (Player) sender, element); + return; + } else { + sender.sendMessage(ChatColor.RED + "That is not a valid element."); + return; + } + } else if (args.size() == 2) { + if (!sender.hasPermission("bending.admin.choose")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return; + } + Player target = ProjectKorra.plugin.getServer().getPlayer(args.get(1)); + if (!target.isOnline()) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return; + } + String element = args.get(0); + if (Arrays.asList(Commands.elementaliases).contains(element)) { + add(sender, target, element); + return; + } else { + sender.sendMessage(ChatColor.RED + "That is not a valid element."); + } + } + } + + /** + * Adds the ability to bend the given element to the specified Player. + * + * @param sender The CommandSender who issued the command + * @param target The Player to add the element to + * @param element The element to add to the Player + */ + private void add(CommandSender sender, Player target, String element) { + element = getElement(element); + Element e = Element.getType(element); + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(target); + bPlayer.setElement(e); + ChatColor color = GeneralMethods.getElementColor(e); + if (element.charAt(0) == 'w' || element.charAt(0) == 'f' || element.charAt(0) == 'c') { + target.sendMessage(color + "You are now a " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } else if (element.charAt(0) == 'e' || element.charAt(0) == 'a') { + target.sendMessage(color + "You are now an " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } + if (!(sender instanceof Player) || !((Player) sender).equals(target)) { + if (element.charAt(0) == 'w' || element.charAt(0) == 'f' || element.charAt(0) == 'c') { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } else if (element.charAt(0) == 'e' || element.charAt(0) == 'a') { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now an " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "bender."); + } + } + GeneralMethods.removeUnusableAbilities(sender.getName()); + GeneralMethods.saveElements(bPlayer); + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, e, Result.CHOOSE)); + } +} diff --git a/src/com/projectkorra/projectkorra/command/ClearCommand.java b/src/com/projectkorra/projectkorra/command/ClearCommand.java new file mode 100644 index 00000000..f99c7657 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/ClearCommand.java @@ -0,0 +1,61 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * Executor for /bending clear. Extends {@link PKCommand}. + */ +public class ClearCommand extends PKCommand { + + public ClearCommand() { + super("clear", "/bending clear", "This command will clear the bound ability from the slot you specify (if you specify one). If you choose not to specify a slot, all of your abilities will be cleared.", new String[] { "clear", "cl", "c" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 0) || !isPlayer(sender)) { + return; + } else if (MultiAbilityManager.hasMultiAbilityBound((Player) sender)) { + sender.sendMessage(ChatColor.RED + "You can't edit your binds right now!"); + return; + } + + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); + bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + } + if (args.size() == 0) { + bPlayer.getAbilities().clear(); + for (int i = 1; i <= 9; i++) { + GeneralMethods.saveAbility(bPlayer, i, null); + } + sender.sendMessage("Your bound abilities have been cleared."); + } else if (args.size() == 1) { + try { + int slot = Integer.parseInt(args.get(0)); + if (slot < 1 || slot > 9) { + sender.sendMessage(ChatColor.RED + "The slot must be an integer between 1 and 9."); + } + if (bPlayer.getAbilities().get(slot) != null) { + bPlayer.getAbilities().remove(slot); + GeneralMethods.saveAbility(bPlayer, slot, null); + sender.sendMessage("You have cleared slot #" + slot); + } else { + sender.sendMessage("That slot was already empty."); + } + } catch (NumberFormatException e) { + sender.sendMessage(ChatColor.RED + "The slot must be an integer between 1 and 9."); + } + } + } + +} diff --git a/src/com/projectkorra/projectkorra/command/Commands.java b/src/com/projectkorra/projectkorra/command/Commands.java new file mode 100644 index 00000000..267b013d --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/Commands.java @@ -0,0 +1,127 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.ProjectKorra; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.PluginCommand; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class Commands { + + private ProjectKorra plugin; + + public static Set invincible = new HashSet(); + public static boolean debugEnabled = false; + public static boolean isToggledForAll = false; + + public Commands(ProjectKorra plugin) { + this.plugin = plugin; + debugEnabled = ProjectKorra.plugin.getConfig().getBoolean("debug"); + init(); + } + + /* + * Element Aliases + */ + public static String[] airaliases = { "air", "a", "airbending", "airbender" }; + public static String[] chialiases = { "chi", "c", "chiblocking", "chiblocker" }; + public static String[] earthaliases = { "earth", "e", "earthbending", "earthbender" }; + public static String[] firealiases = { "fire", "f", "firebending", "firebender" }; + public static String[] wateraliases = { "water", "w", "waterbending", "waterbender" }; + public static String[] elementaliases = { "air", "a", "airbending", "airbender", "chi", "c", "chiblocking", "chiblocker", "earth", "e", "earthbending", "earthbender", "fire", "f", "firebending", "firebender", "water", "w", "waterbending", "waterbender" }; + + /* + * Combo Aliases + */ + public static String[] aircomboaliases = { "aircombo", "ac", "aircombos", "airbendingcombos" }; + public static String[] chicomboaliases = { "chicombo", "cc", "chicombos", "chiblockingcombos", "chiblockercombos" }; + public static String[] earthcomboaliases = { "earthcombo", "ec", "earthcombos", "earthbendingcombos" }; + public static String[] firecomboaliases = { "firecombo", "fc", "firecombos", "firebendingcombos" }; + public static String[] watercomboaliases = { "watercombo", "wc", "watercombos", "waterbendingcombos" }; + + public static String[] comboaliases = { "aircombo", "ac", "aircombos", "airbendingcombos", "chicombo", "cc", "chicombos", "chiblockingcombos", "chiblockercombos", "earthcombo", "ec", "earthcombos", "earthbendingcombos", "firecombo", "fc", "firecombos", "firebendingcombos", "watercombo", "wc", "watercombos", "waterbendingcombos" }; + + /* + * Subelement Aliases + */ + + public static String[] subelementaliases = { "flight", "fl", "spiritualprojection", "sp", "spiritual", "bloodbending", "bb", "healing", "heal", "icebending", "ice", "ib", "plantbending", "plant", "metalbending", "mb", "metal", "lavabending", "lb", "lava", "sandbending", "sb", "sand", "combustionbending", "combustion", "cb", "lightningbending", "lightning" }; + //Air + public static String[] flightaliases = { "flight", "fl" }; + public static String[] spiritualprojectionaliases = { "spiritualprojection", "sp", "spiritual" }; + + //Water + public static String[] bloodaliases = { "bloodbending", "bb" }; + public static String[] healingaliases = { "healing", "heal" }; + public static String[] icealiases = { "icebending", "ice", "ib" }; + public static String[] plantaliases = { "plantbending", "plant" }; + + //Earth + public static String[] metalbendingaliases = { "metalbending", "mb", "metal" }; + public static String[] lavabendingaliases = { "lavabending", "lb", "lava" }; + public static String[] sandbendingaliases = { "sandbending", "sb", "sand" }; + + //Firebending + public static String[] combustionaliases = { "combustionbending", "combustion", "cb" }; + public static String[] lightningaliases = { "lightningbending", "lightning" }; + + private void init() { + PluginCommand projectkorra = plugin.getCommand("projectkorra"); + new AddCommand(); + new BindCommand(); + new CheckCommand(); + new ChooseCommand(); + new ClearCommand(); + new DebugCommand(); + new DisplayCommand(); + new HelpCommand(); + new ImportCommand(); + new InvincibleCommand(); + new PermaremoveCommand(); + new PresetCommand(); + new ReloadCommand(); + new RemoveCommand(); + new ToggleCommand(); + new VersionCommand(); + new WhoCommand(); + + /** + * Set of all of the Classes which extend Command + */ + + CommandExecutor exe; + + exe = new CommandExecutor() { + @Override + public boolean onCommand(CommandSender s, Command c, String label, String[] args) { + for (int i = 0; i < args.length; i++) { + args[i] = args[i].toLowerCase(); + } + + if (args.length == 0) { + s.sendMessage(ChatColor.RED + "/bending help [Ability/Command] " + ChatColor.YELLOW + "Display help."); + s.sendMessage(ChatColor.RED + "/bending choose [Element] " + ChatColor.YELLOW + "Choose an element."); + s.sendMessage(ChatColor.RED + "/bending bind [Ability] # " + ChatColor.YELLOW + "Bind an ability."); + return true; + } + + List sendingArgs = Arrays.asList(args).subList(1, args.length); + for (PKCommand command : PKCommand.instances.values()) { + if (Arrays.asList(command.getAliases()).contains(args[0])) { + command.execute(s, sendingArgs); + return true; + } + } + return true; + } + }; + projectkorra.setExecutor(exe); + } +} diff --git a/src/com/projectkorra/projectkorra/command/DebugCommand.java b/src/com/projectkorra/projectkorra/command/DebugCommand.java new file mode 100644 index 00000000..f5197353 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/DebugCommand.java @@ -0,0 +1,47 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.GeneralMethods; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Executor for /bending debug. Extends {@link PKCommand}. + */ +public class DebugCommand extends PKCommand { + + public DebugCommand() { + super("debug", "/bending debug", "Outputs information on the current ProjectKorra installation to /plugins/ProjectKorra/debug.txt", new String[] { "debug", "de" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender)) { + return; + } else if (args.size() != 0) { + help(sender, false); + return; + } + + GeneralMethods.runDebug(); + sender.sendMessage(ChatColor.GREEN + "Debug File Created as debug.txt in the ProjectKorra plugin folder."); + sender.sendMessage(ChatColor.GREEN + "Put contents on pastie.org and create a bug report on the ProjectKorra forum if you need to."); + } + + /** + * Checks if the CommandSender has the permission 'bending.admin.debug'. If + * not, it tells them they don't have permission. + * + * @return True if they have permission, false otherwise. + */ + @Override + public boolean hasPermission(CommandSender sender) { + if (sender.hasPermission("bending.admin." + getName())) { + sender.sendMessage(ChatColor.RED + "You don't have permission to use this command."); + return true; + } + return false; + } +} diff --git a/src/com/projectkorra/projectkorra/command/DisplayCommand.java b/src/com/projectkorra/projectkorra/command/DisplayCommand.java new file mode 100644 index 00000000..087d4510 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/DisplayCommand.java @@ -0,0 +1,147 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.combo.ComboManager; +import com.projectkorra.projectkorra.airbending.AirMethods; +import com.projectkorra.projectkorra.chiblocking.ChiMethods; +import com.projectkorra.projectkorra.earthbending.EarthMethods; +import com.projectkorra.projectkorra.firebending.FireMethods; +import com.projectkorra.projectkorra.waterbending.WaterMethods; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +/** + * Executor for /bending display. Extends {@link PKCommand}. + */ +public class DisplayCommand extends PKCommand { + + public DisplayCommand() { + super("display", "/bending display ", "This command will show you all of the elements you have bound if you do not specify an element. If you do specify an element (Air, Water, Earth, Fire, or Chi), it will show you all of the available abilities of that element installed on the server.", new String[] { "display", "dis", "d" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 1)) { + return; + } + + //bending display [Element] + if (args.size() == 1) { + String element = args.get(0); + //combos + if (Arrays.asList(Commands.comboaliases).contains(element)) { + element = getElement(element); + Element e = Element.getType(element); + ArrayList combos = ComboManager.getCombosForElement(e); + if (combos.isEmpty()) { + sender.sendMessage(GeneralMethods.getElementColor(e) + "There are no " + element + " combos avaliable."); + return; + } + for (String combomove : combos) { + if (!sender.hasPermission("bending.ability." + combomove)) + continue; + ChatColor color = GeneralMethods.getComboColor(combomove); + sender.sendMessage(color + combomove); + } + return; + } + + //normal elements + else if (Arrays.asList(Commands.elementaliases).contains(element)) { + element = getElement(element); + displayElement(sender, element); + } + + //subelements + else if (Arrays.asList(Commands.subelementaliases).contains(element)) { + displaySubElement(sender, element); + } + + else { + sender.sendMessage(ChatColor.RED + "Not a valid Element." + ChatColor.WHITE + " Elements: " + AirMethods.getAirColor() + "Air" + ChatColor.WHITE + " | " + WaterMethods.getWaterColor() + "Water" + ChatColor.WHITE + " | " + EarthMethods.getEarthColor() + "Earth" + ChatColor.WHITE + " | " + FireMethods.getFireColor() + "Fire" + ChatColor.WHITE + " | " + ChiMethods.getChiColor() + "Chi"); + } + } + if (args.size() == 0) { + //bending display + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "This command is only usable by players."); + return; + } + displayBinds(sender); + } + } + + /** + * Displays the enabled moves for the given element to the CommandSender. + * + * @param sender The CommandSender to show the moves to + * @param element The element to show the moves for + */ + private void displayElement(CommandSender sender, String element) { + List abilities = ProjectKorra.plugin.abManager.getAbilities(element); + if (abilities == null) { + sender.sendMessage(ChatColor.RED + "You must select a valid element."); + return; + } else if (abilities.isEmpty()) { + sender.sendMessage(ChatColor.RED + "There are no " + element + " abilities enabled on the server."); + } + for (String ability : abilities) { + if (GeneralMethods.isSubAbility(ability)) + continue; + if (!(sender instanceof Player) || GeneralMethods.canView((Player) sender, ability)) { + sender.sendMessage(GeneralMethods.getElementColor(Element.getType(element)) + ability); + } + } + } + + /** + * Displays the enabled moves for the given subelement to the CommandSender. + * + * @param sender The CommandSender to show the moves to + * @param element The subelement to show the moves for + */ + private void displaySubElement(CommandSender sender, String element) { + List abilities = ProjectKorra.plugin.abManager.getAbilities(element); + for (String ability : abilities) { + if (!(sender instanceof Player) || GeneralMethods.canView((Player) sender, ability)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.getType(getElement(getElement(element)))) + ability); + } + } + } + + /** + * Displays a Player's bound abilities. + * + * @param sender The CommandSender to output the bound abilities to + */ + private void displayBinds(CommandSender sender) { + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); + bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + } + HashMap abilities = bPlayer.getAbilities(); + + if (abilities.isEmpty()) { + sender.sendMessage(ChatColor.RED + "You don't have any bound abilities."); + sender.sendMessage("If you would like to see a list of available abilities, please use the /bending display [Element] command. Use /bending help for more information."); + return; + } + + for (int i = 1; i <= 9; i++) { + String ability = abilities.get(i); + if (ability != null && !ability.equalsIgnoreCase("null")) + sender.sendMessage(i + " - " + GeneralMethods.getAbilityColor(ability) + ability); + } + } +} diff --git a/src/com/projectkorra/projectkorra/command/HelpCommand.java b/src/com/projectkorra/projectkorra/command/HelpCommand.java new file mode 100644 index 00000000..0b9f8f25 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/HelpCommand.java @@ -0,0 +1,77 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.AbilityModuleManager; +import com.projectkorra.projectkorra.ability.combo.ComboManager; +import com.projectkorra.projectkorra.airbending.AirMethods; +import com.projectkorra.projectkorra.chiblocking.ChiMethods; +import com.projectkorra.projectkorra.earthbending.EarthMethods; +import com.projectkorra.projectkorra.firebending.FireMethods; +import com.projectkorra.projectkorra.waterbending.WaterMethods; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.Arrays; +import java.util.List; + +/** + * Executor for /bending help. Extends {@link PKCommand}. + */ +public class HelpCommand extends PKCommand { + public HelpCommand() { + super("help", "/bending help", "This command provides information on how to use other commands in ProjectKorra.", new String[] { "help", "h" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 1)) + return; + else if (args.size() == 0) { + for (PKCommand command : instances.values()) { + sender.sendMessage(ChatColor.YELLOW + command.getProperUse()); + } + return; + } + + String arg = args.get(0); + + if (instances.keySet().contains(arg)) {//bending help command + instances.get(arg).help(sender, true); + } else if (Arrays.asList(Commands.comboaliases).contains(arg)) { //bending help elementcombo + sender.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.RED + "/bending display " + arg + ChatColor.GOLD + " or " + ChatColor.RED + "/bending help "); + } else if (GeneralMethods.abilityExists(arg)) { //bending help ability + ChatColor color = GeneralMethods.getAbilityColor(arg); + sender.sendMessage(color + arg + " - "); + sender.sendMessage(AbilityModuleManager.descriptions.get(GeneralMethods.getAbility(arg))); + } else if (Arrays.asList(Commands.airaliases).contains(args.get(0))) { + sender.sendMessage(AirMethods.getAirColor() + "Air is the element of freedom. Airbenders are natural pacifists and " + "great explorers. There is nothing stopping them from scaling the tallest of mountains and walls easily. They specialize in redirection, " + "from blasting things away with gusts of winds, to forming a shield around them to prevent damage. Easy to get across flat terrains, " + "such as oceans, there is practically no terrain off limits to Airbenders. They lack much raw damage output, but make up for it with " + "with their ridiculous amounts of utility and speed."); + sender.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/qffg9m3"); + } else if (Arrays.asList(Commands.wateraliases).contains(args.get(0))) { + sender.sendMessage(WaterMethods.getWaterColor() + "Water is the element of change. Waterbending focuses on using your " + "opponents own force against them. Using redirection and various dodging tactics, you can be made " + "practically untouchable by an opponent. Waterbending provides agility, along with strong offensive " + "skills while in or near water."); + sender.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/lod3plv"); + } else if (Arrays.asList(Commands.earthaliases).contains(args.get(0))) { + sender.sendMessage(EarthMethods.getEarthColor() + "Earth is the element of substance. Earthbenders share many of the " + "same fundamental techniques as Waterbenders, but their domain is quite different and more readily " + "accessible. Earthbenders dominate the ground and subterranean, having abilities to pull columns " + "of rock straight up from the earth or drill their way through the mountain. They can also launch " + "themselves through the air using pillars of rock, and will not hurt themselves assuming they land " + "on something they can bend. The more skilled Earthbenders can even bend metal."); + sender.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/qaudl42"); + } else if (Arrays.asList(Commands.firealiases).contains(args.get(0))) { + sender.sendMessage(FireMethods.getFireColor() + "Fire is the element of power. Firebenders focus on destruction and " + "incineration. Their abilities are pretty straight forward: set things on fire. They do have a bit " + "of utility however, being able to make themselves un-ignitable, extinguish large areas, cook food " + "in their hands, extinguish large areas, small bursts of flight, and then comes the abilities to shoot " + "fire from your hands."); + sender.sendMessage(ChatColor.YELLOW + "Firebenders can chain their abilities into combos, type " + FireMethods.getFireColor() + "/b help FireCombo" + ChatColor.YELLOW + " for more information."); + sender.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/k4fkjhb"); + } else if (Arrays.asList(Commands.chialiases).contains(args.get(0))) { + sender.sendMessage(ChiMethods.getChiColor() + "Chiblockers focus on bare handed combat, utilizing their agility and " + "speed to stop any bender right in their path. Although they lack the ability to bend any of the " + "other elements, they are great in combat, and a serious threat to any bender. Chiblocking was " + "first shown to be used by Ty Lee in Avatar: The Last Airbender, then later by members of the " + "Equalists in The Legend of Korra."); + sender.sendMessage(ChatColor.YELLOW + "Learn More: " + ChatColor.DARK_AQUA + "http://tinyurl.com/mkp9n6y"); + } else { + //combos - handled differently because they're stored in CamelCase in ComboManager + for (String combo : ComboManager.descriptions.keySet()) { + if (combo.equalsIgnoreCase(arg)) { + ChatColor color = GeneralMethods.getComboColor(combo); + sender.sendMessage(color + combo + " (Combo) - "); + sender.sendMessage(color + ComboManager.descriptions.get(combo)); + sender.sendMessage(ChatColor.GOLD + "Usage: " + ComboManager.instructions.get(combo)); + return; + } + } + sender.sendMessage(ChatColor.RED + "That isn't a valid help topic. Use /bending help for more information."); + } + } +} diff --git a/src/com/projectkorra/projectkorra/command/ImportCommand.java b/src/com/projectkorra/projectkorra/command/ImportCommand.java new file mode 100644 index 00000000..9d3f63be --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/ImportCommand.java @@ -0,0 +1,152 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.ability.StockAbility; +import com.projectkorra.projectkorra.storage.DBConnection; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; + +import java.io.File; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +/** + * Executor for /bending import. Extends {@link PKCommand}. + */ +public class ImportCommand extends PKCommand { + + boolean debugEnabled = ProjectKorra.plugin.getConfig().getBoolean("debug"); + BukkitTask importTask; + + public ImportCommand() { + super("import", "/bending import", "This command will import your old bendingPlayers.yml from the Bending plugin. It will generate a convert.yml file to convert the data to be used with this plugin. You can delete the file once the complete message is displayed. This command should only be used ONCE.", new String[] { "import", "i" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 0)) { + return; + } else if (!GeneralMethods.isImportEnabled()) { + sender.sendMessage(ChatColor.RED + "Importing has been disabled in the config"); + return; + } + + sender.sendMessage(ChatColor.GREEN + "Preparing data for import."); + File bendingPlayersFile = new File(".", "converted.yml"); + FileConfiguration bendingPlayers = YamlConfiguration.loadConfiguration(bendingPlayersFile); + + final LinkedList bPlayers = new LinkedList(); + for (String string : bendingPlayers.getConfigurationSection("").getKeys(false)) { + if (string.equalsIgnoreCase("version")) + continue; + String playername = string; + UUID uuid = ProjectKorra.plugin.getServer().getOfflinePlayer(playername).getUniqueId(); + ArrayList element = new ArrayList(); + List oe = bendingPlayers.getIntegerList(string + ".BendingTypes"); + HashMap abilities = new HashMap(); + List oa = bendingPlayers.getIntegerList(string + ".SlotAbilities"); + boolean permaremoved = bendingPlayers.getBoolean(string + ".Permaremoved"); + + int slot = 1; + for (int i : oa) { + if (StockAbility.getAbility(i) != null) { + abilities.put(slot, StockAbility.getAbility(i).toString()); + slot++; + } else { + abilities.put(slot, null); + slot++; + } + } + + for (int i : oe) { + if (Element.getType(i) != null) { + element.add(Element.getType(i)); + } + } + + BendingPlayer bPlayer = new BendingPlayer(uuid, playername, element, abilities, permaremoved); + bPlayers.add(bPlayer); + } + + final int total = bPlayers.size(); + sender.sendMessage(ChatColor.GREEN + "Import of data started. Do NOT stop / reload your server."); + if (debugEnabled) { + sender.sendMessage(ChatColor.RED + "Console will print out all of the players that are imported if debug mode is enabled as they import."); + } + importTask = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(ProjectKorra.plugin, new Runnable() { + public void run() { + int i = 0; + if (i >= 10) { + sender.sendMessage(ChatColor.GREEN + "10 / " + total + " players converted thus far!"); + return; + } + + while (i < 10) { + if (bPlayers.isEmpty()) { + sender.sendMessage(ChatColor.GREEN + "All data has been queued up, please allow up to 5 minutes for the data to complete, then reboot your server."); + Bukkit.getServer().getScheduler().cancelTask(importTask.getTaskId()); + ProjectKorra.plugin.getConfig().set("Properties.ImportEnabled", false); + ProjectKorra.plugin.saveConfig(); + for (Player player : Bukkit.getOnlinePlayers()) { + GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); + } + return; + } + StringBuilder elements = new StringBuilder(); + BendingPlayer bPlayer = bPlayers.pop(); + if (bPlayer.hasElement(Element.Air)) + elements.append("a"); + if (bPlayer.hasElement(Element.Water)) + elements.append("w"); + if (bPlayer.hasElement(Element.Earth)) + elements.append("e"); + if (bPlayer.hasElement(Element.Fire)) + elements.append("f"); + if (bPlayer.hasElement(Element.Chi)) + elements.append("c"); + + HashMap abilities = bPlayer.getAbilities(); + + ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_players WHERE uuid = '" + bPlayer.getUUIDString() + "'"); + + try { + if (rs2.next()) { // SQL Data already exists for player. + DBConnection.sql.modifyQuery("UPDATE pk_players SET player = '" + bPlayer.getName() + "' WHERE uuid = '" + bPlayer.getUUIDString()); + DBConnection.sql.modifyQuery("UPDATE pk_players SET element = '" + elements + "' WHERE uuid = '" + bPlayer.getUUIDString()); + DBConnection.sql.modifyQuery("UPDATE pk_players SET permaremoved = '" + bPlayer.isPermaRemoved() + "' WHERE uuid = '" + bPlayer.getUUIDString()); + for (int slot = 1; slot < 10; slot++) { + DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + slot + " = '" + abilities.get(slot) + "' WHERE player = '" + bPlayer.getName() + "'"); + } + } else { + DBConnection.sql.modifyQuery("INSERT INTO pk_players (uuid, player, element, permaremoved) VALUES ('" + bPlayer.getUUIDString() + "', '" + bPlayer.getName() + "', '" + elements + "', '" + bPlayer.isPermaRemoved() + "')"); + for (int slot = 1; slot < 10; slot++) { + DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + slot + " = '" + abilities.get(slot) + "' WHERE player = '" + bPlayer.getName() + "'"); + } + } + } + catch (SQLException ex) { + ex.printStackTrace(); + } + i++; + if (debugEnabled) { + System.out.println("[ProjectKorra] Successfully imported " + bPlayer.getName() + ". " + bPlayers.size() + " players left to import."); + } + } + } + }, 0, 40); + } +} diff --git a/src/com/projectkorra/projectkorra/command/InvincibleCommand.java b/src/com/projectkorra/projectkorra/command/InvincibleCommand.java new file mode 100644 index 00000000..8404ec8f --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/InvincibleCommand.java @@ -0,0 +1,33 @@ +package com.projectkorra.projectkorra.command; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Executor for /bending invincible. Extends {@link PKCommand}. + */ +public class InvincibleCommand extends PKCommand { + + public InvincibleCommand() { + super("invincible", "/bending invincible", "This command will make you impervious to all Bending damage. Once you use this command, you will stay invincible until you log off or use this command again.", new String[] { "invincible", "inv" }); + + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !isPlayer(sender) || !correctLength(sender, args.size(), 0, 0)) { + return; + } + + if (!Commands.invincible.contains(sender.getName())) { + Commands.invincible.add(sender.getName()); + sender.sendMessage(ChatColor.GREEN + "You are now invincible to all bending damage and effects. Use this command again to disable this."); + } else { + Commands.invincible.remove(sender.getName()); + sender.sendMessage(ChatColor.RED + "You are no longer invincible to all bending damage and effects."); + } + } + +} diff --git a/src/com/projectkorra/projectkorra/command/PKCommand.java b/src/com/projectkorra/projectkorra/command/PKCommand.java new file mode 100644 index 00000000..39322e9a --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/PKCommand.java @@ -0,0 +1,164 @@ +package com.projectkorra.projectkorra.command; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Abstract representation of a command executor. Implements + * {@link PKCommandInterface}. + * + * @author kingbirdy + * + */ +public abstract class PKCommand implements PKCommandInterface { + /** + * The full name of the command. + */ + private final String name; + /** + * The proper use of the command, in the form '/b {@link PKCommand#name + * name} arg1 arg2 ... ' + */ + private final String properUse; + /** + * A description of what the command does. + */ + private final String description; + /** + * String[] of all possible aliases of the command. + */ + private final String[] aliases; + /** + * List of all command executors which extends PKCommand + */ + public static Map instances = new HashMap(); + + public PKCommand(String name, String properUse, String description, String[] aliases) { + this.name = name; + this.properUse = properUse; + this.description = description; + this.aliases = aliases; + instances.put(name, this); + } + + public String getName() { + return name; + } + + public String getProperUse() { + return properUse; + } + + public String getDescription() { + return description; + } + + public String[] getAliases() { + return aliases; + } + + public void help(CommandSender sender, boolean description) { + sender.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + properUse); + if (description) + sender.sendMessage(ChatColor.YELLOW + this.description); + } + + /** + * Checks if the {@link CommandSender} has permission to execute the + * command. The permission is in the format 'bending.command. + * {@link PKCommand#name name}'. If not, they are told so. + * + * @param sender The CommandSender to check + * @return True if they have permission, false otherwise + */ + protected boolean hasPermission(CommandSender sender) { + if (sender.hasPermission("bending.command." + name)) + return true; + else { + sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return false; + } + } + + /** + * Checks if the {@link CommandSender} has permission to execute the + * command. The permission is in the format 'bending.command. + * {@link PKCommand#name name}.extra'. If not, they are told so. + * + * @param sender The CommandSender to check + * @param extra The additional node to check + * @return True if they have permission, false otherwise + */ + protected boolean hasPermission(CommandSender sender, String extra) { + if (sender.hasPermission("bending.command." + name + "." + extra)) + return true; + else { + sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); + return false; + } + } + + /** + * Checks if the argument length is within certain parameters, and if not, + * informs the CommandSender of how to correctly use the command. + * + * @param sender The CommandSender who issued the command + * @param size The length of the arguments list + * @param min The minimum acceptable number of arguments + * @param max The maximum acceptable number of arguments + * @return True if min < size < max, false otherwise + */ + protected boolean correctLength(CommandSender sender, int size, int min, int max) { + if (size < min || size > max) { + help(sender, false); + return false; + } else + return true; + } + + /** + * Checks if the CommandSender is an instance of a Player. If not, it tells + * them they must be a Player to use the command. + * + * @param sender The CommandSender to check + * @return True if sender instanceof Player, false otherwise + */ + protected boolean isPlayer(CommandSender sender) { + if (sender instanceof Player) + return true; + else { + sender.sendMessage(ChatColor.RED + "You must be a player to use that command."); + return false; + } + } + + /** + * Returns a string representation of one of the five base elements, + * converted from any possible alias of that element, its combos, or its + * subelements. + * + * @param element The string to try and determine an element for + * @return The element associated with the input string, if found, or null + * otherwise + */ + public String getElement(String element) { + if (Arrays.asList(Commands.firealiases).contains(element) || Arrays.asList(Commands.firecomboaliases).contains(element) || Arrays.asList(Commands.combustionaliases).contains(element) || Arrays.asList(Commands.lightningaliases).contains(element)) + return "fire"; + else if (Arrays.asList(Commands.earthaliases).contains(element) || Arrays.asList(Commands.earthcomboaliases).contains(element) || Arrays.asList(Commands.metalbendingaliases).contains(element) || Arrays.asList(Commands.sandbendingaliases).contains(element) || Arrays.asList(Commands.lavabendingaliases).contains(element)) + return "earth"; + else if (Arrays.asList(Commands.airaliases).contains(element) || Arrays.asList(Commands.aircomboaliases).contains(element) || Arrays.asList(Commands.spiritualprojectionaliases).contains(element) || Arrays.asList(Commands.flightaliases).contains(element)) + return "air"; + else if (Arrays.asList(Commands.wateraliases).contains(element) || Arrays.asList(Commands.watercomboaliases).contains(element) || Arrays.asList(Commands.healingaliases).contains(element) || Arrays.asList(Commands.bloodaliases).contains(element) || Arrays.asList(Commands.icealiases).contains(element) || Arrays.asList(Commands.plantaliases).contains(element)) + return "water"; + else if (Arrays.asList(Commands.chialiases).contains(element) || Arrays.asList(Commands.chicomboaliases).contains(element)) + return "chi"; + return null; + } + +} diff --git a/src/com/projectkorra/projectkorra/command/PKCommandInterface.java b/src/com/projectkorra/projectkorra/command/PKCommandInterface.java new file mode 100644 index 00000000..87154ec0 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/PKCommandInterface.java @@ -0,0 +1,57 @@ +package com.projectkorra.projectkorra.command; + +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Interface representation of a command executor. + */ +public interface PKCommandInterface { + /** + * Gets the name of the command. + * + * @return The command's name + */ + public String getName(); + + /** + * Gets the aliases for the command. + * + * @return All aliases for the command + */ + public String[] getAliases(); + + /** + * Gets the proper use of the command, in the format '/b + * {@link PKCommand#name name} arg1 arg2 ... ' + * + * @return the proper use of the command + */ + public String getProperUse(); + + /** + * Gets the description of the command. + * + * @return the description + */ + public String getDescription(); + + /** + * Outputs the correct usage, and optionally the description, of a command + * to the given {@link CommandSender}. + * + * @param sender The CommandSender to output the help to + * @param description Whether or not to output the description of the + * command + */ + public void help(CommandSender sender, boolean description); + + /** + * Executes the command. + * + * @param sender The CommandSender who issued the command + * @param args the command's arguments + */ + public void execute(CommandSender sender, List args); +} diff --git a/src/com/projectkorra/projectkorra/command/PermaremoveCommand.java b/src/com/projectkorra/projectkorra/command/PermaremoveCommand.java new file mode 100644 index 00000000..b8519720 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/PermaremoveCommand.java @@ -0,0 +1,88 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * Executor for /bending permaremove. Extends {@link PKCommand}. + */ +public class PermaremoveCommand extends PKCommand { + + public PermaremoveCommand() { + super("permaremove", "/bending permaremove [Player]", "This command will permanently remove the Bending of the targeted . Once removed, a player may only receive Bending again if this command is run on them again. This command is typically reserved for administrators.", new String[] { "permaremove", "premove", "permremove", "pr" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 1)) { + return; + } + if (args.size() == 1) { + permaremove(sender, args.get(0)); + } else if (args.size() == 0 && isPlayer(sender)) + permaremove(sender, sender.getName()); + } + + /** + * Permanently removes a player's bending, or restores it if it had already + * been permaremoved. + * + * @param sender The CommandSender who issued the permaremove command + * @param target The Player who's bending should be permaremoved + */ + private void permaremove(CommandSender sender, String target) { + Player player = Bukkit.getPlayer(target); + if (player == null) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return; + } + + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); + bPlayer = GeneralMethods.getBendingPlayer(player); + } + + if (bPlayer.isPermaRemoved()) { + bPlayer.setPermaRemoved(false); + GeneralMethods.savePermaRemoved(bPlayer); + player.sendMessage(ChatColor.GREEN + "Your bending has been restored."); + if (!(sender instanceof Player) || sender.getName().equals(target)) + sender.sendMessage(ChatColor.GREEN + "You have restored the bending of: " + ChatColor.DARK_AQUA + player.getName()); + } else { + bPlayer.getElements().clear(); + GeneralMethods.removeUnusableAbilities(player.getName()); + GeneralMethods.saveElements(bPlayer); + bPlayer.setPermaRemoved(true); + GeneralMethods.savePermaRemoved(bPlayer); + player.sendMessage(ChatColor.RED + "Your bending has been permanently removed."); + if (!(sender instanceof Player) || sender.getName().equals(target)) + sender.sendMessage(ChatColor.RED + "You have permenantly removed the bending of: " + ChatColor.DARK_AQUA + player.getName()); + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, player, null, Result.PERMAREMOVE)); + } + } + + /** + * Checks if the sender has the permission 'bending.admin.permremove'. If + * not, it tells them they don't have permission to use the command. + * + * @return True if they have the permission, false otherwise + */ + @Override + public boolean hasPermission(CommandSender sender) { + if (sender.hasPermission("bending.admin.permremove")) { + sender.sendMessage(ChatColor.RED + "You don't have permission to use this command."); + return true; + } + return false; + } +} diff --git a/src/com/projectkorra/projectkorra/command/PresetCommand.java b/src/com/projectkorra/projectkorra/command/PresetCommand.java new file mode 100644 index 00000000..10b9c22e --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/PresetCommand.java @@ -0,0 +1,108 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; +import com.projectkorra.projectkorra.object.Preset; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +/** + * Executor for /bending preset. Extends {@link PKCommand}. + */ +public class PresetCommand extends PKCommand { + + private static final String[] createaliases = { "create", "c", "save" }; + private static final String[] deletealiases = { "delete", "d", "del" }; + private static final String[] listaliases = { "list", "l" }; + private static final String[] bindaliases = { "bind", "b" }; + + public PresetCommand() { + super("preset", "/bending preset create|bind|list|delete [name]", "This command manages Presets, which are saved bindings. Use /bending preset list to view your existing presets, use /bending [create|delete] [name] to manage your presets, and use /bending bind [name] to bind an existing preset.", new String[] { "preset", "presets", "pre", "set", "p" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!isPlayer(sender) || !correctLength(sender, args.size(), 1, 2)) { + return; + } else if (MultiAbilityManager.hasMultiAbilityBound((Player) sender)) { + sender.sendMessage(ChatColor.RED + "You can't edit your binds right now!"); + return; + } + + Player player = (Player) sender; + + //bending preset list + if (args.size() == 1) { + if (Arrays.asList(listaliases).contains(args.get(0)) && hasPermission(sender, "list")) { + List presets = Preset.presets.get(player.getUniqueId()); + List presetNames = new ArrayList(); + + if (presets == null || presets.isEmpty()) { + sender.sendMessage(ChatColor.RED + "You don't have any presets."); + return; + } + + for (Preset preset : presets) { + presetNames.add(preset.getName()); + } + + sender.sendMessage(ChatColor.GREEN + "Your Presets: " + ChatColor.DARK_AQUA + presetNames.toString()); + return; + } else { + help(sender, false); + return; + } + } + + String name = args.get(1); + if (Arrays.asList(deletealiases).contains(args.get(0)) && hasPermission(sender, "delete")) { //bending preset delete name + if (!Preset.presetExists(player, name)) { + sender.sendMessage(ChatColor.RED + "You don't have a preset with that name."); + return; + } + + Preset preset = Preset.getPreset(player, name); + preset.delete(); + sender.sendMessage(ChatColor.GREEN + "You have deleted your preset named: " + ChatColor.YELLOW + name); + return; + } else if (Arrays.asList(bindaliases).contains(args.get(0)) && hasPermission(sender, "bind")) { //bending preset bind name + if (!Preset.presetExists(player, name)) { + sender.sendMessage(ChatColor.RED + "You don't have a preset with that name."); + return; + } + + Preset.bindPreset(player, name); + sender.sendMessage(ChatColor.GREEN + "Your bound slots have been set to match the " + ChatColor.YELLOW + name + ChatColor.GREEN + " preset."); + return; + } else if (Arrays.asList(createaliases).contains(args.get(0)) && hasPermission(sender, "create")) { //bending preset create name + int limit = GeneralMethods.getMaxPresets(player); + + if (Preset.presets.get(player) != null && Preset.presets.get(player).size() >= limit) { + sender.sendMessage(ChatColor.RED + "You have reached your max number of Presets."); + return; + } else if (Preset.presetExists(player, name)) { + sender.sendMessage(ChatColor.RED + "A preset with that name already exists."); + return; + } + + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); + if (bPlayer == null) + return; + HashMap abilities = bPlayer.getAbilities(); + Preset preset = new Preset(player.getUniqueId(), name, abilities); + preset.save(); + sender.sendMessage(ChatColor.GREEN + "Created preset with the name: " + ChatColor.YELLOW + name); + } else { + help(sender, false); + } + } + +} diff --git a/src/com/projectkorra/projectkorra/command/ReloadCommand.java b/src/com/projectkorra/projectkorra/command/ReloadCommand.java new file mode 100644 index 00000000..656402cf --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/ReloadCommand.java @@ -0,0 +1,28 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.GeneralMethods; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Executor for /bending reload. Extends {@link PKCommand}. + */ +public class ReloadCommand extends PKCommand { + + public ReloadCommand() { + super("reload", "/bending reload", "This command will reload the Bending config file.", new String[] { "reload", "r" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 0)) { + return; + } + GeneralMethods.reloadPlugin(); + sender.sendMessage(ChatColor.AQUA + "Bending config reloaded."); + } + +} diff --git a/src/com/projectkorra/projectkorra/command/RemoveCommand.java b/src/com/projectkorra/projectkorra/command/RemoveCommand.java new file mode 100644 index 00000000..b53d1075 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/RemoveCommand.java @@ -0,0 +1,63 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent; +import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * Executor for /bending remove. Extends {@link PKCommand}. + */ +public class RemoveCommand extends PKCommand { + + public RemoveCommand() { + super("remove", "/bending remove [Player]", "This command will remove the element of the targeted [Player]. The player will be able to re-pick their element after this command is run on them, assuming their Bending was not permaremoved.", new String[] { "remove", "rm" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 1, 1)) { + return; + } + + Player player = Bukkit.getPlayer(args.get(0)); + if (player == null) { + sender.sendMessage(ChatColor.RED + "That player is not online."); + return; + } + + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(player.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); + bPlayer = GeneralMethods.getBendingPlayer(player); + } + GeneralMethods.removeUnusableAbilities(player.getName()); + bPlayer.getElements().clear(); + GeneralMethods.saveElements(bPlayer); + sender.sendMessage(ChatColor.GREEN + "You have removed the bending of " + ChatColor.DARK_AQUA + player.getName()); + player.sendMessage(ChatColor.GREEN + "Your bending has been removed by " + ChatColor.DARK_AQUA + sender.getName()); + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, player, null, Result.REMOVE)); + } + + /** + * Checks if the CommandSender has the permission 'bending.admin.remove'. If + * not, it tells them they don't have permission to use the command. + * + * @return True if they have the permission, false otherwise + */ + @Override + public boolean hasPermission(CommandSender sender) { + if (sender.hasPermission("bending.admin." + getName())) { + sender.sendMessage(ChatColor.RED + "You don't have permission to use this command."); + return true; + } + return false; + } +} diff --git a/src/com/projectkorra/projectkorra/command/ToggleCommand.java b/src/com/projectkorra/projectkorra/command/ToggleCommand.java new file mode 100644 index 00000000..aa6b9150 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/ToggleCommand.java @@ -0,0 +1,67 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.GeneralMethods; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +/** + * Executor for /bending toggle. Extends {@link PKCommand}. + */ +public class ToggleCommand extends PKCommand { + + public ToggleCommand() { + super("toggle", "/bending toggle ", "This command will toggle a player's own Bending on or off. If toggled off, all abilities should stop working until it is toggled back on. Logging off will automatically toggle your Bending back on. If you run the command /bending toggle all, Bending will be turned off for all players and cannot be turned back on until the command is run again.", new String[] { "toggle", "t" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!correctLength(sender, args.size(), 0, 1)) { + return; + } else if (args.size() == 0) { //bending toggle + if (!hasPermission(sender) || !isPlayer(sender)) { + return; + } + if (Commands.isToggledForAll) { + sender.sendMessage(ChatColor.RED + "Bending is currently toggled off for all players."); + return; + } + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + if (bPlayer == null) { + GeneralMethods.createBendingPlayer(((Player) sender).getUniqueId(), sender.getName()); + bPlayer = GeneralMethods.getBendingPlayer(sender.getName()); + } + if (bPlayer.isToggled()) { + sender.sendMessage(ChatColor.RED + "Your bending has been toggled off. You will not be able to use most abilities until you toggle it back."); + bPlayer.toggleBending(); + } else { + sender.sendMessage(ChatColor.GREEN + "You have turned your Bending back on."); + bPlayer.toggleBending(); + } + } else if (args.size() == 1 && args.get(0).equalsIgnoreCase("all") && hasPermission(sender, "all")) { //bending toggle all + if (Commands.isToggledForAll) { // Bending is toggled off for all players. + Commands.isToggledForAll = false; + for (Player player : Bukkit.getOnlinePlayers()) { + player.sendMessage(ChatColor.GREEN + "Bending has been toggled back on for all players."); + } + if (!(sender instanceof Player)) + sender.sendMessage(ChatColor.GREEN + "Bending has been toggled back on for all players."); + } else { + Commands.isToggledForAll = true; + for (Player player : Bukkit.getOnlinePlayers()) { + player.sendMessage(ChatColor.RED + "Bending has been toggled off for all players."); + } + if (!(sender instanceof Player)) + sender.sendMessage(ChatColor.RED + "Bending has been toggled off for all players."); + } + } else { + help(sender, false); + } + } + +} diff --git a/src/com/projectkorra/projectkorra/command/VersionCommand.java b/src/com/projectkorra/projectkorra/command/VersionCommand.java new file mode 100644 index 00000000..5ae1b950 --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/VersionCommand.java @@ -0,0 +1,37 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.List; + +/** + * Executor for /bending version. Extends {@link PKCommand}. + */ +public class VersionCommand extends PKCommand { + + public VersionCommand() { + super("version", "/bending version", "Displays the installed version of ProjectKorra.", new String[] { "version", "v" }); + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 0)) { + return; + } + + sender.sendMessage(ChatColor.GREEN + "Core Version: " + ChatColor.RED + ProjectKorra.plugin.getDescription().getVersion()); + if (GeneralMethods.hasRPG()) { + sender.sendMessage(ChatColor.GREEN + "RPG Version: " + ChatColor.RED + GeneralMethods.getRPG().getDescription().getVersion()); + } + if (GeneralMethods.hasItems()) { + sender.sendMessage(ChatColor.GREEN + "Items Version: " + ChatColor.RED + GeneralMethods.getItems().getDescription().getVersion()); + } + sender.sendMessage(ChatColor.GREEN + "Founded by: " + ChatColor.RED + "MistPhizzle"); + sender.sendMessage(ChatColor.GREEN + "Learn More: " + ChatColor.RED + "http://projectkorra.com"); + } + +} diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java new file mode 100644 index 00000000..67d6aece --- /dev/null +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -0,0 +1,262 @@ +package com.projectkorra.projectkorra.command; + +import com.projectkorra.projectkorra.BendingPlayer; +import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.GeneralMethods; +import com.projectkorra.projectkorra.ProjectKorra; +import com.projectkorra.projectkorra.airbending.AirMethods; +import com.projectkorra.projectkorra.chiblocking.ChiMethods; +import com.projectkorra.projectkorra.earthbending.EarthMethods; +import com.projectkorra.projectkorra.firebending.FireMethods; +import com.projectkorra.projectkorra.storage.DBConnection; +import com.projectkorra.projectkorra.waterbending.WaterMethods; +import com.projectkorra.rpg.RPGMethods; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** + * Executor for /bending who. Extends {@link PKCommand}. + */ +public class WhoCommand extends PKCommand { + /** + * Map storage of all ProjectKorra staffs' UUIDs and titles + */ + Map staff = new HashMap(); + + public WhoCommand() { + super("who", "/bending who ", "This command will tell you what element all players that are online are (If you don't specify a player) or give you information about the player that you specify.", new String[] { "who", "w" }); + + staff.put("8621211e-283b-46f5-87bc-95a66d68880e", ChatColor.RED + "ProjectKorra Founder"); // MistPhizzle + + staff.put("a197291a-cd78-43bb-aa38-52b7c82bc68c", ChatColor.DARK_PURPLE + "ProjectKorra Lead Developer"); // OmniCypher + + staff.put("929b14fc-aaf1-4f0f-84c2-f20c55493f53", ChatColor.GREEN + "ProjectKorra Head Concept Designer"); // Vidcom + + staff.put("15d1a5a7-76ef-49c3-b193-039b27c47e30", ChatColor.GREEN + "ProjectKorra Digital Director"); // Kiam + + staff.put("96f40c81-dd5d-46b6-9afe-365114d4a082", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // Coolade + staff.put("833a7132-a9ec-4f0a-ad9c-c3d6b8a1c7eb", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // Jacklin213 + staff.put("4eb6315e-9dd1-49f7-b582-c1170e497ab0", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // jedk1 + staff.put("5031c4e3-8103-49ea-b531-0d6ae71bad69", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // Simplicitee + staff.put("d7757be8-86de-4898-ab4f-2b1b2fbc3dfa", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // StrangeOne101 + staff.put("a9673c93-9186-367a-96c4-e111a3bbd1b1", ChatColor.DARK_PURPLE + "ProjectKorra Developer"); // kingbirdy + + staff.put("623df34e-9cd4-438d-b07c-1905e1fc46b6", ChatColor.GREEN + "ProjectKorra Concept Designer"); // Loony + staff.put("80f9072f-e37e-4adc-8675-1ba6af87d63b", ChatColor.GREEN + "ProjectKorra Concept Designer"); // Cross + staff.put("ce889d32-c2a0-4765-969f-9ca54d0bd34a", ChatColor.GREEN + "ProjectKorra Concept Designer"); // ashe36 + staff.put("7daead36-d285-4640-848a-2f105334b792", ChatColor.GREEN + "ProjectKorra Concept Designer"); // Fuzzy + staff.put("f30c871e-cd60-446b-b219-e31e00e16857", ChatColor.GREEN + "ProjectKorra Concept Designer"); // Gangksta + staff.put("38217173-8a32-4ba7-9fe1-dd4fed031a74", ChatColor.GREEN + "ProjectKorra Concept Designer"); // Fly + + staff.put("1553482a-5e86-4270-9262-b57c11151074", ChatColor.GOLD + "ProjectKorra Community Moderator"); // Pickle9775 + staff.put("3d5bc713-ab8b-4125-b5ba-a1c1c2400b2c", ChatColor.GOLD + "ProjectKorra Community Moderator"); // Gold + + staff.put("2ab334d1-9691-4994-a624-209c7b4f220b", ChatColor.BLUE + "ProjectKorra Digital Team"); // Austygen + } + + @Override + public void execute(CommandSender sender, List args) { + if (!hasPermission(sender) || !correctLength(sender, args.size(), 0, 1)) { + return; + } else if (args.size() == 1) { + whoPlayer(sender, args.get(0)); + } else if (args.size() == 0) { + List players = new ArrayList(); + for (Player player : Bukkit.getOnlinePlayers()) { + String playerName = player.getName(); + + BendingPlayer bp = GeneralMethods.getBendingPlayer(playerName); + if (bp == null) { + GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); + bp = GeneralMethods.getBendingPlayer(player); + } + if (bp.getElements().size() > 1) { + players.add(GeneralMethods.getAvatarColor() + playerName); + continue; + } else if (bp.getElements().size() == 0) { + players.add(playerName); + continue; + } else if (GeneralMethods.isBender(playerName, Element.Air)) { + players.add(AirMethods.getAirColor() + playerName); + continue; + } else if (GeneralMethods.isBender(playerName, Element.Water)) { + players.add(WaterMethods.getWaterColor() + playerName); + continue; + } else if (GeneralMethods.isBender(playerName, Element.Earth)) { + players.add(EarthMethods.getEarthColor() + playerName); + continue; + } else if (GeneralMethods.isBender(playerName, Element.Chi)) { + players.add(ChiMethods.getChiColor() + playerName); + continue; + } else if (GeneralMethods.isBender(playerName, Element.Fire)) { + players.add(FireMethods.getFireColor() + playerName); + continue; + } + } + if (players.isEmpty()) { + sender.sendMessage(ChatColor.RED + "There is no one online."); + } else { + for (String st : players) { + sender.sendMessage(st); + } + } + } + } + + /** + * Sends information on the given player to the CommandSender. + * + * @param sender The CommandSender to display the information to + * @param playerName The Player to look up + */ + private void whoPlayer(CommandSender sender, String playerName) { + Player player = Bukkit.getPlayer(playerName); + if (player != null) { + sender.sendMessage(playerName + " - "); + if (GeneralMethods.isBender(playerName, Element.Air)) { + sender.sendMessage(AirMethods.getAirColor() + "- Airbender"); + if (AirMethods.canAirFlight(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + " Can Fly"); + } + if (AirMethods.canUseSpiritualProjection(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Air) + " Can use Spiritual Projection"); + } + } + if (GeneralMethods.isBender(playerName, Element.Water)) { + sender.sendMessage(WaterMethods.getWaterColor() + "- Waterbender"); + if (WaterMethods.canPlantbend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Plantbend"); + } + if (WaterMethods.canBloodbend(player)) { + if (WaterMethods.canBloodbendAtAnytime(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Bloodbend anytime, on any day"); + } else { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Bloodbend"); + } + } + if (WaterMethods.canIcebend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Icebend"); + } + if (WaterMethods.canWaterHeal(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Water) + " Can Heal"); + } + } + if (GeneralMethods.isBender(playerName, Element.Earth)) { + sender.sendMessage(EarthMethods.getEarthColor() + "- Earthbender"); + if (EarthMethods.canMetalbend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Metalbend"); + } + if (EarthMethods.canLavabend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Lavabend"); + } + if (EarthMethods.canSandbend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Earth) + " Can Sandbend"); + } + } + if (GeneralMethods.isBender(playerName, Element.Fire)) { + sender.sendMessage(FireMethods.getFireColor() + "- Firebender"); + if (FireMethods.canCombustionbend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + " Can Combustionbend"); + } + if (FireMethods.canLightningbend(player)) { + sender.sendMessage(GeneralMethods.getSubBendingColor(Element.Fire) + " Can Lightningbend"); + } + } + if (GeneralMethods.isBender(playerName, Element.Chi)) { + sender.sendMessage(ChiMethods.getChiColor() + "- ChiBlocker"); + } + BendingPlayer bPlayer = GeneralMethods.getBendingPlayer(playerName); + UUID uuid = player.getUniqueId(); + if (bPlayer != null) { + sender.sendMessage("Abilities: "); + for (int i = 1; i <= 9; i++) { + String ability = bPlayer.getAbilities().get(i); + if (ability == null || ability.equalsIgnoreCase("null")) { + continue; + } else { + sender.sendMessage(i + " - " + GeneralMethods.getAbilityColor(ability) + ability); + } + } + } + + if (GeneralMethods.hasRPG()) { + if (RPGMethods.isCurrentAvatar(player.getUniqueId())) { + sender.sendMessage(GeneralMethods.getAvatarColor() + "Current Avatar"); + } else if (RPGMethods.hasBeenAvatar(player.getUniqueId())) { + sender.sendMessage(GeneralMethods.getAvatarColor() + "Former Avatar"); + } + } + + if (staff.containsKey(uuid)) { + sender.sendMessage(staff.get(uuid)); + } + } else { + sender.sendMessage(ChatColor.GREEN + "You are running a lookup of an offline player, this may take a second."); + + new BukkitRunnable() { + @Override + public void run() { + ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_players WHERE player = '" + playerName + "'"); + try { + final List messages = new ArrayList(); + + if (rs2.next()) { + UUID uuid = UUID.fromString(rs2.getString("uuid")); + String element = rs2.getString("element"); + + messages.add(playerName + " - "); + if (element.contains("a")) + messages.add(AirMethods.getAirColor() + "- Airbender"); + if (element.contains("w")) + messages.add(WaterMethods.getWaterColor() + "- Waterbender"); + if (element.contains("e")) + messages.add(EarthMethods.getEarthColor() + "- Earthbender"); + if (element.contains("f")) + messages.add(FireMethods.getFireColor() + "- Firebender"); + if (element.contains("c")) + messages.add(ChiMethods.getChiColor() + "- Chiblocker"); + + if (GeneralMethods.hasRPG()) { + if (RPGMethods.isCurrentAvatar(uuid)) { + messages.add(GeneralMethods.getAvatarColor() + "Current Avatar"); + } else if (RPGMethods.hasBeenAvatar(uuid)) { + messages.add(GeneralMethods.getAvatarColor() + "Former Avatar"); + } + } + + if (staff.containsKey(uuid)) { + messages.add(staff.get(uuid)); + } + } else { + messages.add(ChatColor.RED + "We could not find any player in your database with that username. Are you sure it is typed correctly?"); + } + + new BukkitRunnable() { + @Override + public void run() { + for (String message : messages) { + sender.sendMessage(message); + } + } + }.runTask(ProjectKorra.plugin); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + }.runTaskAsynchronously(ProjectKorra.plugin); + } + } +} diff --git a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java index feccf383..edc58655 100644 --- a/src/com/projectkorra/projectkorra/configuration/ConfigManager.java +++ b/src/com/projectkorra/projectkorra/configuration/ConfigManager.java @@ -602,6 +602,8 @@ public class ConfigManager { config.addDefault("Abilities.Earth.Tremorsense.LightThreshold", 7); config.addDefault("Abilities.Earth.Tremorsense.Cooldown", 1000); + config.addDefault("Abilities.Earth.EarthCombo.Enabled", true); + config.addDefault("Abilities.Fire.Blaze.Enabled", true); config.addDefault("Abilities.Fire.Blaze.Description", "To use, simply left-click in any direction. An arc of fire will flow from your location, igniting anything in its path. Additionally, tap sneak to engulf the area around you in roaring flames."); config.addDefault("Abilities.Fire.Blaze.ArcOfFire.Arc", 16); diff --git a/src/com/projectkorra/projectkorra/firebending/FireCombo.java b/src/com/projectkorra/projectkorra/firebending/FireCombo.java index 0d25e1f2..5e1ca8ee 100644 --- a/src/com/projectkorra/projectkorra/firebending/FireCombo.java +++ b/src/com/projectkorra/projectkorra/firebending/FireCombo.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.firebending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; import com.projectkorra.projectkorra.airbending.AirMethods; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.configuration.ConfigLoadable; import com.projectkorra.projectkorra.util.ClickType; import com.projectkorra.projectkorra.util.ParticleEffect; diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterArmsWhip.java b/src/com/projectkorra/projectkorra/waterbending/WaterArmsWhip.java index e0381baf..a6abc927 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterArmsWhip.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterArmsWhip.java @@ -2,10 +2,10 @@ package com.projectkorra.projectkorra.waterbending; import com.projectkorra.projectkorra.BendingManager; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.util.TempBlock; import com.projectkorra.projectkorra.waterbending.WaterArms.Arm; diff --git a/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java b/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java index d2b54c1c..8fef58c3 100644 --- a/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java +++ b/src/com/projectkorra/projectkorra/waterbending/WaterCombo.java @@ -1,11 +1,11 @@ package com.projectkorra.projectkorra.waterbending; import com.projectkorra.projectkorra.BendingPlayer; -import com.projectkorra.projectkorra.Commands; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.AvatarState; +import com.projectkorra.projectkorra.command.Commands; import com.projectkorra.projectkorra.earthbending.EarthMethods; import com.projectkorra.projectkorra.firebending.FireCombo; import com.projectkorra.projectkorra.firebending.FireCombo.FireComboStream;