From 18368880703c7241574fb8300879d4c0beed9faf Mon Sep 17 00:00:00 2001 From: jedk1 Date: Tue, 23 Feb 2016 22:12:24 +0000 Subject: [PATCH 1/6] Add remove call to QuickStrike --- .../projectkorra/projectkorra/chiblocking/QuickStrike.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/projectkorra/projectkorra/chiblocking/QuickStrike.java b/src/com/projectkorra/projectkorra/chiblocking/QuickStrike.java index b6029f47..e577d4f5 100644 --- a/src/com/projectkorra/projectkorra/chiblocking/QuickStrike.java +++ b/src/com/projectkorra/projectkorra/chiblocking/QuickStrike.java @@ -21,6 +21,9 @@ public class QuickStrike extends ChiAbility { this.damage = getConfig().getInt("Abilities.Chi.QuickStrike.Damage"); this.blockChance = getConfig().getInt("Abilities.Chi.QuickStrike.ChiBlockChance"); target = GeneralMethods.getTargetedEntity(player, 2); + if (target == null) { + return; + } start(); } @@ -28,6 +31,7 @@ public class QuickStrike extends ChiAbility { @Override public void progress() { if (target == null) { + remove(); return; } From f599b5ca1e5dff86df0c9f2f6cf3db77b1311d1b Mon Sep 17 00:00:00 2001 From: jedk1 Date: Wed, 24 Feb 2016 00:46:30 +0000 Subject: [PATCH 2/6] Change Element and SubElement to public --- src/com/projectkorra/projectkorra/Element.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/com/projectkorra/projectkorra/Element.java b/src/com/projectkorra/projectkorra/Element.java index c7c92fc5..db3e9157 100644 --- a/src/com/projectkorra/projectkorra/Element.java +++ b/src/com/projectkorra/projectkorra/Element.java @@ -32,7 +32,12 @@ public class Element { private String name; - protected Element(String name) { + /** + * To be used when creating a new Element. + * Do not use for comparing Elements. + * @param name Name of the new Element. + */ + public Element(String name) { this.name = name; ALL_ELEMENTS.put(name.toLowerCase(), this); } @@ -73,7 +78,12 @@ public class Element { private Element parentElement; - private SubElement(String name, Element parentElement) { + /** + * To be used when creating a new SubElement. + * Do not use for comparing SubElements. + * @param name Name of the new SubElement. + */ + public SubElement(String name, Element parentElement) { super(name); this.parentElement = parentElement; } From 042866ec621354ae67f08e9687ca0ca4c1a7b288 Mon Sep 17 00:00:00 2001 From: jedk1 Date: Wed, 24 Feb 2016 23:23:03 +0000 Subject: [PATCH 3/6] Add support for custom elements --- .../projectkorra/BendingPlayer.java | 12 +- .../projectkorra/projectkorra/Element.java | 177 +++++++++++++++++- .../projectkorra/GeneralMethods.java | 31 ++- .../projectkorra/command/AddCommand.java | 47 +++-- .../projectkorra/command/ChooseCommand.java | 45 ++--- .../projectkorra/command/DisplayCommand.java | 165 ++++++---------- .../projectkorra/command/RemoveCommand.java | 45 +++-- .../projectkorra/command/ToggleCommand.java | 83 ++++---- .../projectkorra/command/WhoCommand.java | 23 +++ 9 files changed, 391 insertions(+), 237 deletions(-) diff --git a/src/com/projectkorra/projectkorra/BendingPlayer.java b/src/com/projectkorra/projectkorra/BendingPlayer.java index 2aa6730c..3155e56c 100644 --- a/src/com/projectkorra/projectkorra/BendingPlayer.java +++ b/src/com/projectkorra/projectkorra/BendingPlayer.java @@ -75,11 +75,11 @@ public class BendingPlayer { this.chiBlocked = false; cooldowns = new ConcurrentHashMap(); toggledElements = new ConcurrentHashMap(); - toggledElements.put(Element.AIR, true); - toggledElements.put(Element.EARTH, true); - toggledElements.put(Element.FIRE, true); - toggledElements.put(Element.WATER, true); - toggledElements.put(Element.CHI, true); + for (Element e : Element.getAllElements()) { + if (!e.equals(Element.AVATAR)) { + toggledElements.put(e, true); + } + } PLAYERS.put(uuid, this); PKListener.login(this); @@ -483,7 +483,7 @@ public class BendingPlayer { public boolean isElementToggled(Element element) { if (element != null && toggledElements.containsKey(element)) { - return toggledElements.containsKey(element); + return toggledElements.get(element); } return true; } diff --git a/src/com/projectkorra/projectkorra/Element.java b/src/com/projectkorra/projectkorra/Element.java index db3e9157..d1461ade 100644 --- a/src/com/projectkorra/projectkorra/Element.java +++ b/src/com/projectkorra/projectkorra/Element.java @@ -1,23 +1,54 @@ package com.projectkorra.projectkorra; import org.bukkit.ChatColor; +import org.bukkit.plugin.Plugin; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; public class Element { + public enum ElementType { + BENDING("bending", "bender", "bend"), + BLOCKING("blocking", "blocker", "block"); + + private String bending; + private String bender; + private String bend; + + ElementType(String bending, String bender, String bend) { + this.bending = bending; + this.bender = bender; + this.bend = bend; + } + + public String getBending() { + return bending; + } + + public String getBender() { + return bender; + } + + public String getBend() { + return bend; + } + } + private static final HashMap ALL_ELEMENTS = new HashMap<>(); // Must be initialized first public static final Element AIR = new Element("Air"); public static final Element WATER = new Element("Water"); public static final Element EARTH = new Element("Earth"); public static final Element FIRE = new Element("Fire"); - public static final Element CHI = new Element("Chi"); - public static final Element AVATAR = new Element("Avatar"); + public static final Element CHI = new Element("Chi", ElementType.BLOCKING); + public static final Element AVATAR = new Element("Avatar", null); public static final SubElement FLIGHT = new SubElement("Flight", AIR); public static final SubElement SPIRITUAL = new SubElement("Spiritual", AIR); public static final SubElement BLOOD = new SubElement("Blood", WATER); - public static final SubElement HEALING = new SubElement("Healing", WATER); + public static final SubElement HEALING = new SubElement("Healing", WATER, null); public static final SubElement ICE = new SubElement("Ice", WATER); public static final SubElement PLANT = new SubElement("Plant", WATER); public static final SubElement LAVA = new SubElement("Lava", EARTH); @@ -31,6 +62,8 @@ public class Element { private static final SubElement[] SUB_ELEMENTS = {FLIGHT, SPIRITUAL, BLOOD, HEALING, ICE, PLANT, LAVA, METAL, SAND, LIGHTNING, COMBUSTION}; private String name; + private ElementType type; + private Plugin plugin; /** * To be used when creating a new Element. @@ -38,18 +71,55 @@ public class Element { * @param name Name of the new Element. */ public Element(String name) { + this(name, ElementType.BENDING, ProjectKorra.plugin); + } + + /** + * To be used when creating a new Element. + * Do not use for comparing Elements. + * @param name Name of the new Element. + * @param type ElementType specifies if its a regular element or chi style element. + */ + public Element(String name, ElementType type) { + this(name, type, ProjectKorra.plugin); + } + + /** + * To be used when creating a new Element. + * Do not use for comparing Elements. + * @param name Name of the new Element. + * @param type ElementType specifies if its a regular element or chi style element. + * @param plugin The plugin that is adding the element. + */ + public Element(String name, ElementType type, Plugin plugin) { this.name = name; + this.type = type; + this.plugin = plugin; ALL_ELEMENTS.put(name.toLowerCase(), this); } public ChatColor getColor() { - return ChatColor.valueOf(ProjectKorra.plugin.getConfig().getString("Properties.Chat.Colors." + name)); + String color = getPlugin().getConfig().getString("Properties.Chat.Colors." + name); + return color != null ? ChatColor.valueOf(color) : ChatColor.WHITE; + } + + public ChatColor getSubColor() { + String color = getPlugin().getConfig().getString("Properties.Chat.Colors." + name + "Sub"); + return color != null ? ChatColor.valueOf(color) : ChatColor.WHITE; } public String getName() { return name; } + public Plugin getPlugin() { + return plugin; + } + + public ElementType getType() { + return type; + } + @Override public String toString() { return getColor() + getName(); @@ -62,6 +132,17 @@ public class Element { return ALL_ELEMENTS.get(name.toLowerCase()); } + public static Element[] getAllElements() { + List ae = new ArrayList(); + ae.addAll(Arrays.asList(getMainElements())); + for (Element e : ALL_ELEMENTS.values()) { + if (!ae.contains(e) && !(e instanceof SubElement)) { + ae.add(e); + } + } + return ae.toArray(new Element[ae.size()]); + } + public static Element[] getElements() { return ELEMENTS; } @@ -70,10 +151,69 @@ public class Element { return MAIN_ELEMENTS; } + public static Element[] getAddonElements() { + List ae = new ArrayList(); + for (Element e : getAllElements()) { + if (!Arrays.asList(getMainElements()).contains(e)) { + ae.add(e); + } + } + ae.remove(Element.AVATAR); + return ae.toArray(new Element[ae.size()]); + } + + public static SubElement[] getAllSubElements() { + List se = new ArrayList(); + se.addAll(Arrays.asList(getSubElements())); + for (Element e : ALL_ELEMENTS.values()) { + if (!se.contains(e) && e instanceof SubElement) { + se.add((SubElement) e); + } + } + return se.toArray(new SubElement[se.size()]); + } + public static SubElement[] getSubElements() { return SUB_ELEMENTS; } + public static SubElement[] getSubElements(Element element) { + List se = new ArrayList(); + for (SubElement sub : getAllSubElements()) { + if (sub.getParentElement().equals(element)) { + se.add(sub); + } + } + return se.toArray(new SubElement[se.size()]); + } + + public static SubElement[] getAddonSubElements() { + List ae = new ArrayList(); + for (SubElement e : getAllSubElements()) { + if (!Arrays.asList(getSubElements()).contains(e)) { + ae.add(e); + } + } + return ae.toArray(new SubElement[ae.size()]); + } + + public static Element fromString(String element) { + if (getElement(element) != null) { + return getElement(element); + } + for (String s : ALL_ELEMENTS.keySet()) { + if (element.length() <= 1 && getElement(s) instanceof SubElement) { + continue; + } + if (s.length() >= element.length()) { + if (s.substring(0, element.length()).equalsIgnoreCase(element)) { + return getElement(s); + } + } + } + return null; + } + public static class SubElement extends Element { private Element parentElement; @@ -82,15 +222,40 @@ public class Element { * To be used when creating a new SubElement. * Do not use for comparing SubElements. * @param name Name of the new SubElement. + * @param parentElement ParentElement of the SubElement. */ public SubElement(String name, Element parentElement) { - super(name); + this(name, parentElement, ElementType.BENDING, ProjectKorra.plugin); + } + + /** + * To be used when creating a new SubElement. + * Do not use for comparing SubElements. + * @param name Name of the new SubElement. + * @param parentElement ParentElement of the SubElement. + * @param type ElementType specifies if its a regular element or chi style element. + */ + public SubElement(String name, Element parentElement, ElementType type) { + this(name, parentElement, type, ProjectKorra.plugin); + } + + /** + * To be used when creating a new SubElement. + * Do not use for comparing SubElements. + * @param name Name of the new SubElement. + * @param parentElement ParentElement of the SubElement. + * @param type ElementType specifies if its a regular element or chi style element. + * @param plugin The plugin that is adding the element. + */ + public SubElement(String name, Element parentElement, ElementType type, Plugin plugin) { + super(name, type, plugin); this.parentElement = parentElement; } @Override public ChatColor getColor() { - return ChatColor.valueOf(ProjectKorra.plugin.getConfig().getString("Properties.Chat.Colors." + parentElement.name + "Sub")); + String color = getPlugin().getConfig().getString("Properties.Chat.Colors." + parentElement.name + "Sub"); + return color != null ? ChatColor.valueOf(color) : ChatColor.WHITE; } public Element getParentElement() { diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index 39ec1908..dae8743a 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -302,23 +302,32 @@ public class GeneralMethods { String permaremoved = rs2.getString("permaremoved"); boolean p = false; final ArrayList elements = new ArrayList(); - if (element != null) { // Player has an element. - if (element.contains("a")) { + boolean hasAddon = element.contains(";"); + String[] split = element.split(";"); + if (split[0] != null) { // Player has an element. + if (split[0].contains("a")) { elements.add(Element.AIR); } - if (element.contains("w")) { + if (split[0].contains("w")) { elements.add(Element.WATER); } - if (element.contains("e")) { + if (split[0].contains("e")) { elements.add(Element.EARTH); } - if (element.contains("f")) { + if (split[0].contains("f")) { elements.add(Element.FIRE); } - if (element.contains("c")) { + if (split[0].contains("c")) { elements.add(Element.CHI); } } + if (hasAddon) { + for (String addon : split[split.length - 1].split(",")) { + if (Element.getElement(addon) != null) { + elements.add(Element.getElement(addon)); + } + } + } final HashMap abilities = new HashMap(); for (int i = 1; i <= 9; i++) { @@ -1489,6 +1498,16 @@ public class GeneralMethods { if (bPlayer.hasElement(Element.CHI)) { elements.append("c"); } + boolean hasAddon = false; + for (Element element : bPlayer.getElements()) { + if (Arrays.asList(Element.getAddonElements()).contains(element)) { + if (!hasAddon) { + hasAddon = true; + elements.append(";"); + } + elements.append(element.getName() + ","); + } + } DBConnection.sql.modifyQuery("UPDATE pk_players SET element = '" + elements + "' WHERE uuid = '" + uuid + "'"); } diff --git a/src/com/projectkorra/projectkorra/command/AddCommand.java b/src/com/projectkorra/projectkorra/command/AddCommand.java index 73a9f5b3..52a7dea2 100644 --- a/src/com/projectkorra/projectkorra/command/AddCommand.java +++ b/src/com/projectkorra/projectkorra/command/AddCommand.java @@ -30,7 +30,7 @@ public class AddCommand extends PKCommand { if (!hasPermission(sender) || !isPlayer(sender)) { return; } - add(sender, (Player) sender, args.get(0).toLowerCase()); + add(sender, (Player) sender, Element.fromString(args.get(0).toLowerCase())); } else if (args.size() == 2) { //bending add element combo if (!hasPermission(sender, "others")) { return; @@ -40,7 +40,7 @@ public class AddCommand extends PKCommand { sender.sendMessage(ChatColor.RED + "That player is not online."); return; } - add(sender, player, args.get(0).toLowerCase()); + add(sender, player, Element.fromString(args.get(0).toLowerCase())); } } @@ -51,7 +51,7 @@ public class AddCommand extends PKCommand { * @param target The player to add the element to * @param element The element to add */ - private void add(CommandSender sender, Player target, String element) { + private void add(CommandSender sender, Player target, Element element) { BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(target); if (bPlayer == null) { GeneralMethods.createBendingPlayer(target.getUniqueId(), target.getName()); @@ -61,33 +61,32 @@ public class AddCommand extends PKCommand { sender.sendMessage(ChatColor.RED + "That player's bending was permanently removed."); return; } - if (Arrays.asList(Commands.elementaliases).contains(element.toLowerCase())) { - element = getElement(element.toLowerCase()); - Element type = Element.getElement(element); - bPlayer.addElement(type); - ChatColor color = type.getColor(); - - if (element.charAt(0) == 'w' || element.charAt(0) == 'f') { - 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."); - } else if (element.charAt(0) == 'c' || element.equalsIgnoreCase("chi")) { - target.sendMessage(color + "You are now a Chiblocker."); - } - if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - if (element.charAt(0) == 'w' || element.charAt(0) == 'f') { - 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."); - } else if (element.charAt(0) == 'c' || element.equalsIgnoreCase("chi")) { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a " + Character.toString(element.charAt(0)).toUpperCase() + element.substring(1) + "blocker."); + if (Arrays.asList(Element.getAllElements()).contains(element)) { + if (bPlayer.hasElement(element)) { + if (!(sender instanceof Player) || !((Player) sender).equals(target)) { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + ChatColor.RED + " already has that element!"); + } else { + sender.sendMessage(ChatColor.RED + "You already have that element!"); } + return; + } + bPlayer.addElement(element); + ChatColor color = element.getColor(); + + if (!(sender instanceof Player) || !((Player) sender).equals(target)) { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); + } else { + target.sendMessage(color + "You are also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); } GeneralMethods.saveElements(bPlayer); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, type, Result.ADD)); + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.ADD)); return; } else { sender.sendMessage(ChatColor.RED + "You must specify a valid element."); } } + + public static boolean isVowel(char c) { + return "AEIOUaeiou".indexOf(c) != -1; + } } diff --git a/src/com/projectkorra/projectkorra/command/ChooseCommand.java b/src/com/projectkorra/projectkorra/command/ChooseCommand.java index 3f8fe240..a37be45c 100644 --- a/src/com/projectkorra/projectkorra/command/ChooseCommand.java +++ b/src/com/projectkorra/projectkorra/command/ChooseCommand.java @@ -48,11 +48,12 @@ public class ChooseCommand extends PKCommand { return; } String element = args.get(0).toLowerCase(); - if (Arrays.asList(Commands.elementaliases).contains(element)) { + Element target = Element.getElement(element); + if (Arrays.asList(Element.getAllElements()).contains(target)) { if (!hasPermission(sender, element)) { return; } - add(sender, (Player) sender, element); + add(sender, (Player) sender, target); return; } else { sender.sendMessage(ChatColor.RED + "That is not a valid element."); @@ -69,8 +70,9 @@ public class ChooseCommand extends PKCommand { return; } String element = args.get(0).toLowerCase(); - if (Arrays.asList(Commands.elementaliases).contains(element)) { - add(sender, target, element); + Element targetElement = Element.getElement(element); + if (Arrays.asList(Element.getAllElements()).contains(target)) { + add(sender, target, targetElement); return; } else { sender.sendMessage(ChatColor.RED + "That is not a valid element."); @@ -83,11 +85,9 @@ public class ChooseCommand extends PKCommand { * * @param sender The CommandSender who issued the command * @param target The Player to add the element to - * @param elementName The element to add to the Player + * @param element The element to add to the Player */ - private void add(CommandSender sender, Player target, String elementName) { - elementName = getElement(elementName); - Element element = Element.getElement(elementName); + private void add(CommandSender sender, Player target, Element element) { BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(target); if (bPlayer == null) { @@ -96,25 +96,28 @@ public class ChooseCommand extends PKCommand { bPlayer.setElement(element); ChatColor color = element != null ? element.getColor() : null; - - if (elementName.charAt(0) == 'w' || elementName.charAt(0) == 'f') { - target.sendMessage(color + "You are now a " + Character.toString(elementName.charAt(0)).toUpperCase() + elementName.substring(1) + "bender."); - } else if (elementName.charAt(0) == 'e' || elementName.charAt(0) == 'a') { - target.sendMessage(color + "You are now an " + Character.toString(elementName.charAt(0)).toUpperCase() + elementName.substring(1) + "bender."); - } else if (elementName.equalsIgnoreCase("chi")) { - target.sendMessage(color + "You are now a Chiblocker."); - } if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - if (elementName.charAt(0) == 'w' || elementName.charAt(0) == 'f') { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a " + Character.toString(elementName.charAt(0)).toUpperCase() + elementName.substring(1) + "bender."); - } else if (elementName.charAt(0) == 'e' || elementName.charAt(0) == 'a') { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now an " + Character.toString(elementName.charAt(0)).toUpperCase() + elementName.substring(1) + "bender."); - } else if (elementName.equalsIgnoreCase("chi")) { + if (element != Element.CHI) { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + "bender."); + } else { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a Chiblocker."); + } + } else { + if (element != Element.CHI) { + target.sendMessage(color + "You are now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + "bender."); + } else { target.sendMessage(color + "You are now a Chiblocker."); } } + + + GeneralMethods.removeUnusableAbilities(target.getName()); GeneralMethods.saveElements(bPlayer); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.CHOOSE)); } + + public static boolean isVowel(char c) { + return "AEIOUaeiou".indexOf(c) != -1; + } } diff --git a/src/com/projectkorra/projectkorra/command/DisplayCommand.java b/src/com/projectkorra/projectkorra/command/DisplayCommand.java index b0727220..187c51c9 100644 --- a/src/com/projectkorra/projectkorra/command/DisplayCommand.java +++ b/src/com/projectkorra/projectkorra/command/DisplayCommand.java @@ -1,14 +1,5 @@ package com.projectkorra.projectkorra.command; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.Element.SubElement; @@ -17,6 +8,14 @@ import com.projectkorra.projectkorra.ability.CoreAbility; import com.projectkorra.projectkorra.ability.SubAbility; import com.projectkorra.projectkorra.ability.util.ComboManager; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + /** * Executor for /bending display. Extends {@link PKCommand}. */ @@ -34,16 +33,15 @@ public class DisplayCommand extends PKCommand { //bending display [Element] if (args.size() == 1) { - String elementName = args.get(0).toLowerCase(); + String elementName = args.get(0).toLowerCase().replace("bending", ""); + Element element = Element.fromString(elementName.replace("combos", "").replace("combo", "")); //combos - if (Arrays.asList(Commands.comboaliases).contains(elementName)) { - elementName = this.getElement(elementName); - Element element = Element.getElement(elementName); + if (element != null && elementName.contains("combo")) { ChatColor color = element != null ? element.getColor() : null; ArrayList combos = ComboManager.getCombosForElement(element); - + if (combos.isEmpty()) { - sender.sendMessage(color + "There are no " + elementName + " combos avaliable."); + sender.sendMessage(color + "There are no " + element.getName() + " combos available."); return; } for (String comboMove : combos) { @@ -51,7 +49,7 @@ public class DisplayCommand extends PKCommand { if (!sender.hasPermission("bending.ability." + comboMove)) { continue; } - + CoreAbility coreAbil = CoreAbility.getAbility(comboMove); if (coreAbil != null) { comboColor = coreAbil.getElement().getColor(); @@ -60,42 +58,32 @@ public class DisplayCommand extends PKCommand { } return; } - - //normal elements - else if (Arrays.asList(Commands.elementaliases).contains(elementName)) { - elementName = getElement(elementName); - displayElement(sender, elementName); - } - - //subelements - else if (Arrays.asList(Commands.subelementaliases).contains(elementName)) { - displaySubElement(sender, elementName); - } - - //avatar - else if (Arrays.asList(Commands.avataraliases).contains(elementName)) { - displayAvatar(sender); + else if (element != null) { + if (!element.equals(Element.AVATAR)) { + if (!(element instanceof SubElement)) { + displayElement(sender, element); + } else { + displaySubElement(sender, element); + } + } else { + displayAvatar(sender); + } } else { - ChatColor w = ChatColor.WHITE; - sender.sendMessage(ChatColor.RED + "Not a valid argument." + ChatColor.WHITE + "\nElements: " - + Element.AIR.getColor() + "Air" + ChatColor.WHITE + " | " - + Element.WATER.getColor() + "Water" + ChatColor.WHITE + " | " - + Element.EARTH.getColor() + "Earth" + ChatColor.WHITE + " | " - + Element.FIRE.getColor() + "Fire" + ChatColor.WHITE + " | " - + Element.CHI.getColor() + "Chi"); - sender.sendMessage(w + "SubElements: " - + w + "\n-" + Element.AIR.getColor() + " Flight" - + w + "\n-" + Element.EARTH.getColor() + " Lavabending" - + w + "\n-" + Element.EARTH.getColor() + " Metalbending" - + w + "\n-" + Element.EARTH.getColor() + " Sandbending" - + w + "\n-" + Element.FIRE.getColor() + " Combustion" - + w + "\n-" + Element.FIRE.getColor() + " Lightning" - + w + "\n-" + Element.WATER.getColor() + " Bloodbending" - + w + "\n-" + Element.WATER.getColor() + " Healing" - + w + "\n-" + Element.WATER.getColor() + " Icebending" - + w + "\n-" + Element.WATER.getColor() + " Plantbending"); + StringBuilder elements = new StringBuilder(ChatColor.RED + "Not a valid argument."); + elements.append(ChatColor.WHITE + "\nElements: "); + for (Element e : Element.getAllElements()) { + if (!(e instanceof SubElement)) { + elements.append(e.getColor() + e.getName() + ChatColor.WHITE + " | "); + } + } + sender.sendMessage(elements.toString()); + StringBuilder subelements = new StringBuilder(ChatColor.WHITE + "SubElements: "); + for (SubElement e : Element.getAllSubElements()) { + subelements.append(ChatColor.WHITE + "\n- " + e.getColor() + e.getName()); + } + sender.sendMessage(subelements.toString()); } } if (args.size() == 0) { @@ -107,7 +95,7 @@ public class DisplayCommand extends PKCommand { displayBinds(sender); } } - + private void displayAvatar(CommandSender sender) { List abilities = CoreAbility.getAbilitiesByElement(Element.AVATAR); if (abilities.isEmpty()) { @@ -134,17 +122,16 @@ public class DisplayCommand extends PKCommand { * @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) { - element = this.getElement(element); - List abilities = CoreAbility.getAbilitiesByElement(Element.getElement(element)); - + private void displayElement(CommandSender sender, Element element) { + List abilities = CoreAbility.getAbilitiesByElement(element); + if (abilities.isEmpty()) { sender.sendMessage(ChatColor.RED + "You must select a valid element."); return; } else if (abilities.isEmpty()) { sender.sendMessage(ChatColor.YELLOW + "There are no " + element + " abilities enabled on the server."); } - + for (CoreAbility ability : abilities) { if (ability instanceof SubAbility || ability.isHiddenAbility()) { continue; @@ -153,46 +140,16 @@ public class DisplayCommand extends PKCommand { sender.sendMessage(ability.getElement().getColor() + ability.getName()); } } - - if (element.equalsIgnoreCase("earth")) { - if (sender.hasPermission("bending.earth.lavabending")) { - sender.sendMessage(ChatColor.DARK_GREEN + "Lavabending abilities: " + ChatColor.GREEN + "/bending display Lavabending"); - } - if (sender.hasPermission("bending.earth.metalbending")) { - sender.sendMessage(ChatColor.DARK_GREEN + "Metalbending abilities: " + ChatColor.GREEN + "/bending display Metalbending"); - } - if (sender.hasPermission("bending.earth.sandbending")) { - sender.sendMessage(ChatColor.DARK_GREEN + "Sandbending abilities: " + ChatColor.GREEN + "/bending display Sandbending"); - } - } else if (element.equalsIgnoreCase("air")) { - sender.sendMessage(ChatColor.DARK_GRAY + "Combos: " + ChatColor.GRAY + "/bending display AirCombos"); - if (sender.hasPermission("bending.air.flight")) { - sender.sendMessage(ChatColor.DARK_GRAY + "Flight abilities: " + ChatColor.GRAY + "/bending display Flight"); - } - } else if (element.equalsIgnoreCase("fire")) { - sender.sendMessage(ChatColor.DARK_RED + "Combos: " + ChatColor.RED + "/bending display FireCombos"); - if (sender.hasPermission("bending.fire.lightningbending")) { - sender.sendMessage(ChatColor.DARK_RED + "Lightning abilities: " + ChatColor.RED + "/bending display Lightning"); - } - if (sender.hasPermission("bending.fire.combustionbending")) { - sender.sendMessage(ChatColor.DARK_RED + "Combustion abilities: " + ChatColor.RED + "/bending display Combustion"); - } - } else if (element.equalsIgnoreCase("water")) { - sender.sendMessage(ChatColor.DARK_AQUA + "Combos: " + ChatColor.AQUA + "/bending display WaterCombos"); - if (sender.hasPermission("bending.water.bloodbending")) { - sender.sendMessage(ChatColor.DARK_AQUA + "Bloodbending abilities: " + ChatColor.AQUA + "/bending display Bloodbending"); - } - if (sender.hasPermission("bending.water.healing")) { - sender.sendMessage(ChatColor.DARK_AQUA + "Healing abilities: " + ChatColor.AQUA + "/bending display Healing"); - } - if (sender.hasPermission("bending.water.icebending")) { - sender.sendMessage(ChatColor.DARK_AQUA + "Icebending abilities: " + ChatColor.AQUA + "/bending display Icebending"); - } - if (sender.hasPermission("bending.water.plantbending")) { - sender.sendMessage(ChatColor.DARK_AQUA + "Plantbending abilities: " + ChatColor.AQUA + "/bending display Plantbending"); - } - } else if (element.equalsIgnoreCase("chi")) { + + if (element.equals(Element.CHI)) { sender.sendMessage(ChatColor.GOLD + "Combos: " + ChatColor.YELLOW + "/bending display ChiCombos"); + } else { + sender.sendMessage(element.getSubColor() + "Combos: " + element.getColor() + "/bending display " + element.getName() + "Combos"); + for (SubElement sub : Element.getSubElements(element)) { + if (sender.hasPermission("bending." + element.getName().toLowerCase() + "." + sub.getName().toLowerCase())) { + sender.sendMessage(sub.getColor() + sub.getName() + " abilities: " + element.getColor() + "/bending display " + sub.getName()); + } + } } } @@ -202,26 +159,18 @@ public class DisplayCommand extends PKCommand { * @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) { - element = this.getElement(element); - Element mainElement = Element.getElement(element); - List abilities = CoreAbility.getAbilitiesByElement(mainElement); - - - if (mainElement instanceof SubElement) { - mainElement = ((SubElement) mainElement).getParentElement(); - } - ChatColor color = mainElement != null ? mainElement.getColor() : null; - - if (abilities.isEmpty() && mainElement != null) { - sender.sendMessage(ChatColor.YELLOW + "There are no " + color + element + ChatColor.YELLOW + " abilities installed!"); + private void displaySubElement(CommandSender sender, Element element) { + List abilities = CoreAbility.getAbilitiesByElement(element); + + if (abilities.isEmpty() && element != null) { + sender.sendMessage(ChatColor.YELLOW + "There are no " + element.getColor() + element + ChatColor.YELLOW + " abilities installed!"); return; } for (CoreAbility ability : abilities) { if (ability.isHiddenAbility()) { continue; } else if (!(sender instanceof Player) || GeneralMethods.canView((Player) sender, ability.getName())) { - sender.sendMessage(color + ability.getName()); + sender.sendMessage(element.getColor() + ability.getName()); } } } diff --git a/src/com/projectkorra/projectkorra/command/RemoveCommand.java b/src/com/projectkorra/projectkorra/command/RemoveCommand.java index 0fcfa0e0..a41e72dd 100644 --- a/src/com/projectkorra/projectkorra/command/RemoveCommand.java +++ b/src/com/projectkorra/projectkorra/command/RemoveCommand.java @@ -31,24 +31,29 @@ public class RemoveCommand extends PKCommand { Player player = Bukkit.getPlayer(args.get(0)); if (player == null) { - Element e = Element.getElement(getElement(args.get(0))); + Element e = Element.fromString(args.get(0)); BendingPlayer senderBPlayer = BendingPlayer.getBendingPlayer(sender.getName()); - - if (senderBPlayer != null && e != null && sender instanceof Player) { - if (senderBPlayer.hasElement(e)) { - senderBPlayer.getElements().remove(e); - GeneralMethods.saveElements(senderBPlayer); - GeneralMethods.removeUnusableAbilities(sender.getName()); - - if (e == Element.CHI) { - sender.sendMessage(Element.CHI.getColor() + "You have removed your chiblocking."); + + if (senderBPlayer != null && sender instanceof Player) { + if (e != null) { + if (senderBPlayer.hasElement(e)) { + senderBPlayer.getElements().remove(e); + GeneralMethods.saveElements(senderBPlayer); + GeneralMethods.removeUnusableAbilities(sender.getName()); + + if (e == Element.CHI) { + sender.sendMessage(Element.CHI.getColor() + "You have removed your Chiblocking."); + return; + } + sender.sendMessage(e.getColor() + "You have removed your " + e.getName() + "bending."); + Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, (Player) sender, e, Result.REMOVE)); + return; + } else { + sender.sendMessage(ChatColor.RED + "You do not have that element!"); return; } - sender.sendMessage(e.getColor() + "You have removed your " + e.toString().toLowerCase() + "bending."); - Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, (Player) sender, e, Result.REMOVE)); - return; } else { - sender.sendMessage(ChatColor.RED + "You do not have that element!"); + sender.sendMessage(ChatColor.RED + "That is not a valid element!"); return; } } @@ -62,7 +67,7 @@ public class RemoveCommand extends PKCommand { bPlayer = BendingPlayer.getBendingPlayer(player); } if (args.size() == 2) { - Element e = Element.getElement(getElement(args.get(1))); + Element e = Element.fromString(args.get(1)); if (e != null) { if (!bPlayer.hasElement(e)) { sender.sendMessage(ChatColor.DARK_RED + "Targeted player does not have that element"); @@ -72,11 +77,11 @@ public class RemoveCommand extends PKCommand { GeneralMethods.saveElements(bPlayer); GeneralMethods.removeUnusableAbilities(player.getName()); if (e == Element.CHI) { - sender.sendMessage(Element.CHI.getColor() + "You have removed the chiblocking of " + ChatColor.DARK_AQUA + player.getName()); - player.sendMessage(Element.CHI.getColor() + "Your chiblocking has been removed by " + ChatColor.DARK_AQUA + sender.getName()); + sender.sendMessage(Element.CHI.getColor() + "You have removed the Chiblocking of " + ChatColor.DARK_AQUA + player.getName()); + player.sendMessage(Element.CHI.getColor() + "Your Chiblocking has been removed by " + ChatColor.DARK_AQUA + sender.getName()); } else { - sender.sendMessage(e.getColor() + "You have removed the " + getElement(args.get(1)).toLowerCase() + "bending of " + ChatColor.DARK_AQUA + player.getName()); - player.sendMessage(e.getColor() + "Your " + getElement(args.get(1)).toLowerCase() + "bending has been removed by " + ChatColor.DARK_AQUA + sender.getName()); + sender.sendMessage(e.getColor() + "You have removed the " + e.getName() + "bending of " + ChatColor.DARK_AQUA + player.getName()); + player.sendMessage(e.getColor() + "Your " + e.getName() + "bending has been removed by " + ChatColor.DARK_AQUA + sender.getName()); } Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, player, e, Result.REMOVE)); return; @@ -105,7 +110,7 @@ public class RemoveCommand extends PKCommand { sender.sendMessage(ChatColor.RED + "You don't have permission to use this command."); return false; } - + public String getElement(String string) { if (Arrays.asList(Commands.airaliases).contains(string)) return "air"; if (Arrays.asList(Commands.chialiases).contains(string)) return "chi"; diff --git a/src/com/projectkorra/projectkorra/command/ToggleCommand.java b/src/com/projectkorra/projectkorra/command/ToggleCommand.java index e1fb0ffe..00b34681 100644 --- a/src/com/projectkorra/projectkorra/command/ToggleCommand.java +++ b/src/com/projectkorra/projectkorra/command/ToggleCommand.java @@ -9,7 +9,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; import java.util.List; /** @@ -45,55 +44,56 @@ public class ToggleCommand extends PKCommand { 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 if (sender instanceof Player && args.size() == 1 - && Element.getElement(getElement(args.get(0))) != null - && BendingPlayer.getBendingPlayer(sender.getName()).hasElement(Element.getElement(getElement(args.get(0))))) { - Element e = Element.getElement(getElement(args.get(0))); - ChatColor color = e != null ? e.getColor() : null; - BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(sender.getName()); - bPlayer.toggleElement(e); - - if (bPlayer.isElementToggled(e) == false) { - if (e == Element.CHI) { - sender.sendMessage(color + "You have toggled off your chiblocking"); + } else if (args.size() == 1 ) { + 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 { - sender.sendMessage(color + "You have toggled off your " + getElement(args.get(0)).toLowerCase() + "bending"); + 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 { - if (e == Element.CHI) { - sender.sendMessage(color + "You have toggled on your chiblocking"); + } else if (sender instanceof Player && args.size() == 1 + && Element.fromString(args.get(0)) != null) { + if (!BendingPlayer.getBendingPlayer(sender.getName()).hasElement(Element.fromString(args.get(0)))) { + sender.sendMessage(ChatColor.RED + "You do not have that element."); + return; + } + Element e = Element.fromString(args.get(0)); + ChatColor color = e != null ? e.getColor() : null; + BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(sender.getName()); + bPlayer.toggleElement(e); + + if (bPlayer.isElementToggled(e)) { + sender.sendMessage(color + "You have toggled on your " + e.getName() + (e.getType() != null ? e.getType().getBending() : "") + "."); } else { - sender.sendMessage(color + "You have toggled on your " + getElement(args.get(0)).toLowerCase() + "bending"); + sender.sendMessage(color + "You have toggled off your " + e.getName() + (e.getType() != null ? e.getType().getBending() : "") + "."); } } } else if (sender instanceof Player && args.size() == 2 - && Element.getElement(getElement(args.get(0))) != null - && BendingPlayer.getBendingPlayer(sender.getName()).hasElement(Element.getElement(getElement(args.get(0))))) { + && Element.fromString(args.get(0)) != null) { Player target = Bukkit.getPlayer(args.get(1)); if (!hasAdminPermission(sender)) return; if (target == null) { sender.sendMessage(ChatColor.RED + "Target is not found."); + return; } - Element e = Element.getElement(getElement(args.get(0))); + if (!BendingPlayer.getBendingPlayer(target.getName()).hasElement(Element.fromString(args.get(0)))) { + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + ChatColor.RED + " doesn't have that element."); + return; + } + Element e = Element.fromString(args.get(0)); BendingPlayer bPlayer = BendingPlayer.getBendingPlayer(target.getName()); ChatColor color = e != null ? e.getColor() : null; - + if (bPlayer.isElementToggled(e) == true) { if (e == Element.CHI) { sender.sendMessage(color + "You have toggled off " + ChatColor.DARK_AQUA + target.getName() + "'s chiblocking"); @@ -117,15 +117,6 @@ public class ToggleCommand extends PKCommand { } } - public String getElement(String string) { - if (Arrays.asList(Commands.airaliases).contains(string)) return "air"; - if (Arrays.asList(Commands.chialiases).contains(string)) return "chi"; - if (Arrays.asList(Commands.earthaliases).contains(string)) return "earth"; - if (Arrays.asList(Commands.firealiases).contains(string)) return "fire"; - if (Arrays.asList(Commands.wateraliases).contains(string)) return "water"; - return null; - } - public boolean hasAdminPermission(CommandSender sender) { if (!sender.hasPermission("bending.admin.toggle")) { sender.sendMessage(ChatColor.RED + "You don't have permission to do that."); diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java index 52afe3b2..04b0c816 100644 --- a/src/com/projectkorra/projectkorra/command/WhoCommand.java +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.command; import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.Element.SubElement; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.CoreAbility; @@ -84,6 +85,7 @@ public class WhoCommand extends PKCommand { GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); bp = BendingPlayer.getBendingPlayer(player.getName()); } + /* if (bp.hasElement(Element.AIR)) { result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.AIR) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&7&mA") : Element.AIR.getColor() + "A"); } @@ -115,6 +117,14 @@ public class WhoCommand extends PKCommand { result = result + ChatColor.WHITE + " | " + ((!bp.isElementToggled(Element.CHI) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&6&mC") : Element.CHI.getColor() + "C"); } } + */ + for (Element element : bp.getElements()) { + if (result == "") { + result = ChatColor.WHITE + playerName + " - " + (((!bp.isElementToggled(element) || !bp.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); + } else { + result = result + ChatColor.WHITE + " | " + (((!bp.isElementToggled(element) || !bp.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); + } + } if (staff.containsKey(player.getUniqueId().toString())) { if (result == "") { result = ChatColor.WHITE + playerName + " | " + staff.get(player.getUniqueId().toString()); @@ -268,6 +278,19 @@ public class WhoCommand extends PKCommand { sender.sendMessage(Element.CHI.getColor() + "" + ChatColor.STRIKETHROUGH + "- Chiblocker"); } } + for (Element element : Element.getAddonElements()) { + if (bPlayer.hasElement(element)) { + sender.sendMessage(element.getColor() + "" + (bPlayer.isElementToggled(element) ? "" : ChatColor.STRIKETHROUGH) + "- " + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); + if (player_ != null) { + for (SubElement subelement : Element.getAddonSubElements()) { + if (player_.hasPermission("bending." + element.getName().toLowerCase() + "." + subelement.getName().toLowerCase())) { + String type = (subelement.getType() != null ? subelement.getType().getBend() : null); + sender.sendMessage(subelement.getColor() + " Can " + (type != null ? "" : "use ") + subelement.getName() + (type != null ? type : "")); + } + } + } + } + } UUID uuid = player.getUniqueId(); if (bPlayer != null) { From 78a341e6364d975d168745540f5f2c06fdf7f049 Mon Sep 17 00:00:00 2001 From: jedk1 Date: Thu, 25 Feb 2016 00:15:52 +0000 Subject: [PATCH 4/6] Fix NPE with Custom Elements --- .../projectkorra/GeneralMethods.java | 48 ++++++++++--------- .../projectkorra/command/AddCommand.java | 4 +- .../projectkorra/command/ChooseCommand.java | 12 +---- 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/com/projectkorra/projectkorra/GeneralMethods.java b/src/com/projectkorra/projectkorra/GeneralMethods.java index dae8743a..4ee26671 100644 --- a/src/com/projectkorra/projectkorra/GeneralMethods.java +++ b/src/com/projectkorra/projectkorra/GeneralMethods.java @@ -302,29 +302,31 @@ public class GeneralMethods { String permaremoved = rs2.getString("permaremoved"); boolean p = false; final ArrayList elements = new ArrayList(); - boolean hasAddon = element.contains(";"); - String[] split = element.split(";"); - if (split[0] != null) { // Player has an element. - if (split[0].contains("a")) { - elements.add(Element.AIR); - } - if (split[0].contains("w")) { - elements.add(Element.WATER); - } - if (split[0].contains("e")) { - elements.add(Element.EARTH); - } - if (split[0].contains("f")) { - elements.add(Element.FIRE); - } - if (split[0].contains("c")) { - elements.add(Element.CHI); - } - } - if (hasAddon) { - for (String addon : split[split.length - 1].split(",")) { - if (Element.getElement(addon) != null) { - elements.add(Element.getElement(addon)); + if (element != null) { + boolean hasAddon = element.contains(";"); + String[] split = element.split(";"); + if (split[0] != null) { // Player has an element. + if (split[0].contains("a")) { + elements.add(Element.AIR); + } + if (split[0].contains("w")) { + elements.add(Element.WATER); + } + if (split[0].contains("e")) { + elements.add(Element.EARTH); + } + if (split[0].contains("f")) { + elements.add(Element.FIRE); + } + if (split[0].contains("c")) { + elements.add(Element.CHI); + } + if (hasAddon) { + for (String addon : split[split.length - 1].split(",")) { + if (Element.getElement(addon) != null) { + elements.add(Element.getElement(addon)); + } + } } } } diff --git a/src/com/projectkorra/projectkorra/command/AddCommand.java b/src/com/projectkorra/projectkorra/command/AddCommand.java index 52a7dea2..af157044 100644 --- a/src/com/projectkorra/projectkorra/command/AddCommand.java +++ b/src/com/projectkorra/projectkorra/command/AddCommand.java @@ -74,9 +74,9 @@ public class AddCommand extends PKCommand { ChatColor color = element.getColor(); if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); } else { - target.sendMessage(color + "You are also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); + target.sendMessage(color + "You are also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); } GeneralMethods.saveElements(bPlayer); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.ADD)); diff --git a/src/com/projectkorra/projectkorra/command/ChooseCommand.java b/src/com/projectkorra/projectkorra/command/ChooseCommand.java index a37be45c..fa77d043 100644 --- a/src/com/projectkorra/projectkorra/command/ChooseCommand.java +++ b/src/com/projectkorra/projectkorra/command/ChooseCommand.java @@ -97,17 +97,9 @@ public class ChooseCommand extends PKCommand { bPlayer.setElement(element); ChatColor color = element != null ? element.getColor() : null; if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - if (element != Element.CHI) { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + "bender."); - } else { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a Chiblocker."); - } + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); } else { - if (element != Element.CHI) { - target.sendMessage(color + "You are now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + "bender."); - } else { - target.sendMessage(color + "You are now a Chiblocker."); - } + target.sendMessage(color + "You are now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); } From 1da3c3b1d052f927ff9884f96ecfa411c6972a46 Mon Sep 17 00:00:00 2001 From: jedk1 Date: Thu, 25 Feb 2016 00:38:08 +0000 Subject: [PATCH 5/6] Update TabComplete to support Custom Elements --- .../projectkorra/command/BendingTabComplete.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/projectkorra/projectkorra/command/BendingTabComplete.java b/src/com/projectkorra/projectkorra/command/BendingTabComplete.java index 6b4c416a..996fc760 100644 --- a/src/com/projectkorra/projectkorra/command/BendingTabComplete.java +++ b/src/com/projectkorra/projectkorra/command/BendingTabComplete.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.command; import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.Element.SubElement; import com.projectkorra.projectkorra.ability.CoreAbility; import com.projectkorra.projectkorra.object.Preset; @@ -77,6 +78,12 @@ public class BendingTabComplete implements TabCompleter { list.add("WaterCombos"); list.add("ChiCombos"); list.add("Avatar"); + for (Element e : Element.getAddonElements()) { + list.add(e.getName()); + } + for (SubElement se : Element.getAddonSubElements()) { + list.add(se.getName()); + } return getPossibleCompletionsForGivenArgs(args, list); } else if (args[0].equalsIgnoreCase("add") || args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("choose") || args[0].equalsIgnoreCase("ch")) { if (args.length > 3 || !sender.hasPermission("bending.command.add")) @@ -89,6 +96,9 @@ public class BendingTabComplete implements TabCompleter { l.add("Fire"); l.add("Water"); l.add("Chi"); + for (Element e : Element.getAddonElements()) { + l.add(e.getName()); + } } else { @@ -183,6 +193,9 @@ public class BendingTabComplete implements TabCompleter { l.add("Fire"); l.add("Water"); l.add("Chi"); + for (Element e : Element.getAddonElements()) { + l.add(e.getName()); + } } return getPossibleCompletionsForGivenArgs(args, l); } else if (args[0].equalsIgnoreCase("who") || args[0].equalsIgnoreCase("w")) { From c1c2b26b55af4c26da4671f1e437a662dc416cda Mon Sep 17 00:00:00 2001 From: jedk1 Date: Thu, 25 Feb 2016 15:25:40 +0000 Subject: [PATCH 6/6] Change null in ElementType to NO_SUFFIX --- .../projectkorra/projectkorra/Element.java | 10 +++-- .../projectkorra/command/AddCommand.java | 4 +- .../projectkorra/command/ChooseCommand.java | 4 +- .../projectkorra/command/RemoveCommand.java | 25 ++---------- .../projectkorra/command/WhoCommand.java | 39 ++----------------- 5 files changed, 16 insertions(+), 66 deletions(-) diff --git a/src/com/projectkorra/projectkorra/Element.java b/src/com/projectkorra/projectkorra/Element.java index d1461ade..c973d8e2 100644 --- a/src/com/projectkorra/projectkorra/Element.java +++ b/src/com/projectkorra/projectkorra/Element.java @@ -12,7 +12,8 @@ public class Element { public enum ElementType { BENDING("bending", "bender", "bend"), - BLOCKING("blocking", "blocker", "block"); + BLOCKING("blocking", "blocker", "block"), + NO_SUFFIX("", "", ""); private String bending; private String bender; @@ -45,10 +46,10 @@ public class Element { public static final Element FIRE = new Element("Fire"); public static final Element CHI = new Element("Chi", ElementType.BLOCKING); public static final Element AVATAR = new Element("Avatar", null); - public static final SubElement FLIGHT = new SubElement("Flight", AIR); - public static final SubElement SPIRITUAL = new SubElement("Spiritual", AIR); + public static final SubElement FLIGHT = new SubElement("Flight", AIR, ElementType.NO_SUFFIX); + public static final SubElement SPIRITUAL = new SubElement("Spiritual", AIR, ElementType.NO_SUFFIX); public static final SubElement BLOOD = new SubElement("Blood", WATER); - public static final SubElement HEALING = new SubElement("Healing", WATER, null); + public static final SubElement HEALING = new SubElement("Healing", WATER, ElementType.NO_SUFFIX); public static final SubElement ICE = new SubElement("Ice", WATER); public static final SubElement PLANT = new SubElement("Plant", WATER); public static final SubElement LAVA = new SubElement("Lava", EARTH); @@ -117,6 +118,7 @@ public class Element { } public ElementType getType() { + if (type == null) return ElementType.NO_SUFFIX; return type; } diff --git a/src/com/projectkorra/projectkorra/command/AddCommand.java b/src/com/projectkorra/projectkorra/command/AddCommand.java index af157044..cc7e74ea 100644 --- a/src/com/projectkorra/projectkorra/command/AddCommand.java +++ b/src/com/projectkorra/projectkorra/command/AddCommand.java @@ -74,9 +74,9 @@ public class AddCommand extends PKCommand { ChatColor color = element.getColor(); if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + element.getType().getBender() + "."); } else { - target.sendMessage(color + "You are also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); + target.sendMessage(color + "You are also a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + element.getType().getBender() + "."); } GeneralMethods.saveElements(bPlayer); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, target, element, Result.ADD)); diff --git a/src/com/projectkorra/projectkorra/command/ChooseCommand.java b/src/com/projectkorra/projectkorra/command/ChooseCommand.java index fa77d043..ac2a638d 100644 --- a/src/com/projectkorra/projectkorra/command/ChooseCommand.java +++ b/src/com/projectkorra/projectkorra/command/ChooseCommand.java @@ -97,9 +97,9 @@ public class ChooseCommand extends PKCommand { bPlayer.setElement(element); ChatColor color = element != null ? element.getColor() : null; if (!(sender instanceof Player) || !((Player) sender).equals(target)) { - sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); + sender.sendMessage(ChatColor.DARK_AQUA + target.getName() + color + " is now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + element.getType().getBender() + "."); } else { - target.sendMessage(color + "You are now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + (element.getType() != null ? element.getType().getBender() : "") + "."); + target.sendMessage(color + "You are now a" + (isVowel(element.getName().charAt(0)) ? "n " : " ") + element.getName() + element.getType().getBender() + "."); } diff --git a/src/com/projectkorra/projectkorra/command/RemoveCommand.java b/src/com/projectkorra/projectkorra/command/RemoveCommand.java index a41e72dd..ce3929c3 100644 --- a/src/com/projectkorra/projectkorra/command/RemoveCommand.java +++ b/src/com/projectkorra/projectkorra/command/RemoveCommand.java @@ -11,7 +11,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; import java.util.List; /** @@ -41,11 +40,7 @@ public class RemoveCommand extends PKCommand { GeneralMethods.saveElements(senderBPlayer); GeneralMethods.removeUnusableAbilities(sender.getName()); - if (e == Element.CHI) { - sender.sendMessage(Element.CHI.getColor() + "You have removed your Chiblocking."); - return; - } - sender.sendMessage(e.getColor() + "You have removed your " + e.getName() + "bending."); + sender.sendMessage(e.getColor() + "You have removed your " + e.getName() + e.getType().getBending() + "."); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, (Player) sender, e, Result.REMOVE)); return; } else { @@ -76,13 +71,8 @@ public class RemoveCommand extends PKCommand { bPlayer.getElements().remove(e); GeneralMethods.saveElements(bPlayer); GeneralMethods.removeUnusableAbilities(player.getName()); - if (e == Element.CHI) { - sender.sendMessage(Element.CHI.getColor() + "You have removed the Chiblocking of " + ChatColor.DARK_AQUA + player.getName()); - player.sendMessage(Element.CHI.getColor() + "Your Chiblocking has been removed by " + ChatColor.DARK_AQUA + sender.getName()); - } else { - sender.sendMessage(e.getColor() + "You have removed the " + e.getName() + "bending of " + ChatColor.DARK_AQUA + player.getName()); - player.sendMessage(e.getColor() + "Your " + e.getName() + "bending has been removed by " + ChatColor.DARK_AQUA + sender.getName()); - } + sender.sendMessage(e.getColor() + "You have removed the " + e.getName() + e.getType().getBending() + " of " + ChatColor.DARK_AQUA + player.getName()); + sender.sendMessage(e.getColor() + "Your " + e.getName() + e.getType().getBending() + " has been removed by " + ChatColor.DARK_AQUA + player.getName()); Bukkit.getServer().getPluginManager().callEvent(new PlayerChangeElementEvent(sender, player, e, Result.REMOVE)); return; } @@ -110,13 +100,4 @@ public class RemoveCommand extends PKCommand { sender.sendMessage(ChatColor.RED + "You don't have permission to use this command."); return false; } - - public String getElement(String string) { - if (Arrays.asList(Commands.airaliases).contains(string)) return "air"; - if (Arrays.asList(Commands.chialiases).contains(string)) return "chi"; - if (Arrays.asList(Commands.earthaliases).contains(string)) return "earth"; - if (Arrays.asList(Commands.firealiases).contains(string)) return "fire"; - if (Arrays.asList(Commands.wateraliases).contains(string)) return "water"; - return null; - } } diff --git a/src/com/projectkorra/projectkorra/command/WhoCommand.java b/src/com/projectkorra/projectkorra/command/WhoCommand.java index 04b0c816..2e5e0278 100644 --- a/src/com/projectkorra/projectkorra/command/WhoCommand.java +++ b/src/com/projectkorra/projectkorra/command/WhoCommand.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.command; import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Element; +import com.projectkorra.projectkorra.Element.ElementType; import com.projectkorra.projectkorra.Element.SubElement; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ProjectKorra; @@ -85,39 +86,6 @@ public class WhoCommand extends PKCommand { GeneralMethods.createBendingPlayer(player.getUniqueId(), player.getName()); bp = BendingPlayer.getBendingPlayer(player.getName()); } - /* - if (bp.hasElement(Element.AIR)) { - result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.AIR) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&7&mA") : Element.AIR.getColor() + "A"); - } - if (bp.hasElement(Element.EARTH)) { - if (result == "") { - result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.EARTH) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&a&mE") : Element.EARTH.getColor() + "E"); - } else { - result = result + ChatColor.WHITE + " | " + ((!bp.isElementToggled(Element.EARTH) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&a&mE") : Element.EARTH.getColor() + "E"); - } - } - if (bp.hasElement(Element.FIRE)) { - if (result == "") { - result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.FIRE) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&c&mF") : Element.FIRE.getColor() + "F"); - } else { - result = result + ChatColor.WHITE + " | " + ((!bp.isElementToggled(Element.FIRE) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&c&mF") : Element.FIRE.getColor() + "F"); - } - } - if (bp.hasElement(Element.WATER)) { - if (result == "") { - result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.WATER) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&b&mW") : Element.WATER.getColor() + "W"); - } else { - result = result + ChatColor.WHITE + " | " + ((!bp.isElementToggled(Element.WATER) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&b&mW") : Element.WATER.getColor() + "W"); - } - } - if (bp.hasElement(Element.CHI)) { - if (result == "") { - result = ChatColor.WHITE + playerName + " - " + ((!bp.isElementToggled(Element.CHI) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&6&mC") : Element.CHI.getColor() + "C"); - } else { - result = result + ChatColor.WHITE + " | " + ((!bp.isElementToggled(Element.CHI) || !bp.isToggled()) ? ChatColor.translateAlternateColorCodes('&', "&6&mC") : Element.CHI.getColor() + "C"); - } - } - */ for (Element element : bp.getElements()) { if (result == "") { result = ChatColor.WHITE + playerName + " - " + (((!bp.isElementToggled(element) || !bp.isToggled()) ? element.getColor() + "" + ChatColor.STRIKETHROUGH : element.getColor()) + element.getName().substring(0, 1)); @@ -282,10 +250,9 @@ public class WhoCommand extends PKCommand { if (bPlayer.hasElement(element)) { sender.sendMessage(element.getColor() + "" + (bPlayer.isElementToggled(element) ? "" : ChatColor.STRIKETHROUGH) + "- " + element.getName() + (element.getType() != null ? element.getType().getBender() : "")); if (player_ != null) { - for (SubElement subelement : Element.getAddonSubElements()) { + for (SubElement subelement : Element.getSubElements(element)) { if (player_.hasPermission("bending." + element.getName().toLowerCase() + "." + subelement.getName().toLowerCase())) { - String type = (subelement.getType() != null ? subelement.getType().getBend() : null); - sender.sendMessage(subelement.getColor() + " Can " + (type != null ? "" : "use ") + subelement.getName() + (type != null ? type : "")); + sender.sendMessage(subelement.getColor() + " Can " + (!subelement.getType().equals(ElementType.NO_SUFFIX) ? "" : "use ") + subelement.getName() + subelement.getType().getBend()); } } }