From d44077f99b149469893d1d9103f7a3a286e58b6f Mon Sep 17 00:00:00 2001 From: jayoevans Date: Mon, 28 Oct 2019 20:54:33 +1000 Subject: [PATCH] Fixed many errors with Ability, ComboAbility, MultiAbility, and PassiveAbility Managers --- .../projectkorra/ability/Ability.java | 6 +- .../projectkorra/ability/AbilityInfo.java | 32 -------- .../projectkorra/ability/AbilityManager.java | 79 ++++++++----------- .../ability/ComboAbilityManager.java | 37 ++++----- .../ability/MultiAbilityManager.java | 48 +++++++---- .../ability/PassiveAbilityManager.java | 20 ++--- .../projectkorra/ability/api/AirAbility.java | 9 +-- .../ability/api/ElementalAbility.java | 24 +++--- .../AbilityInfo.java} | 32 ++++---- .../AddonAbilityInfo.java} | 8 +- .../ability/info/AvatarAbilityInfo.java | 6 ++ .../ComboAbilityInfo.java} | 6 +- .../ability/info/MultiAbilityInfo.java | 18 +++++ .../PassiveAbilityInfo.java} | 9 +-- .../ability/loader/AbilityLoader.java | 8 -- .../ability/loader/AvatarAbilityLoader.java | 6 -- .../ability/loader/MultiAbilityLoader.java | 21 ----- ...ityRegistery.java => AbilityRegistry.java} | 4 +- ...gistery.java => AddonAbilityRegistry.java} | 4 +- .../airbending/passive/AirSaturation.java | 29 ++++--- .../airbending/util/AirAbilityInfo.java | 14 ++++ .../airbending/util/AirAddonAbilityInfo.java | 14 ++++ .../util/AirPassiveAbilityInfo.java | 14 ++++ 23 files changed, 221 insertions(+), 227 deletions(-) delete mode 100644 src/com/projectkorra/projectkorra/ability/AbilityInfo.java rename src/com/projectkorra/projectkorra/ability/{AbilityData.java => info/AbilityInfo.java} (58%) rename src/com/projectkorra/projectkorra/ability/{loader/AddonAbilityLoader.java => info/AddonAbilityInfo.java} (73%) create mode 100644 src/com/projectkorra/projectkorra/ability/info/AvatarAbilityInfo.java rename src/com/projectkorra/projectkorra/ability/{loader/ComboAbilityLoader.java => info/ComboAbilityInfo.java} (54%) create mode 100644 src/com/projectkorra/projectkorra/ability/info/MultiAbilityInfo.java rename src/com/projectkorra/projectkorra/ability/{loader/PassiveAbilityLoader.java => info/PassiveAbilityInfo.java} (63%) delete mode 100644 src/com/projectkorra/projectkorra/ability/loader/AbilityLoader.java delete mode 100644 src/com/projectkorra/projectkorra/ability/loader/AvatarAbilityLoader.java delete mode 100644 src/com/projectkorra/projectkorra/ability/loader/MultiAbilityLoader.java rename src/com/projectkorra/projectkorra/ability/util/{AbilityRegistery.java => AbilityRegistry.java} (96%) rename src/com/projectkorra/projectkorra/ability/util/{AddonAbilityRegistery.java => AddonAbilityRegistry.java} (96%) create mode 100644 src/com/projectkorra/projectkorra/airbending/util/AirAbilityInfo.java create mode 100644 src/com/projectkorra/projectkorra/airbending/util/AirAddonAbilityInfo.java create mode 100644 src/com/projectkorra/projectkorra/airbending/util/AirPassiveAbilityInfo.java diff --git a/src/com/projectkorra/projectkorra/ability/Ability.java b/src/com/projectkorra/projectkorra/ability/Ability.java index cd56a5db..c15b8a36 100644 --- a/src/com/projectkorra/projectkorra/ability/Ability.java +++ b/src/com/projectkorra/projectkorra/ability/Ability.java @@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.ability; import com.projectkorra.projectkorra.BendingPlayer; import com.projectkorra.projectkorra.Manager; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; import com.projectkorra.projectkorra.ability.util.Collision; import com.projectkorra.projectkorra.ability.util.CollisionManager; import com.projectkorra.projectkorra.attribute.Attribute; @@ -9,7 +10,6 @@ import com.projectkorra.projectkorra.attribute.AttributeModifier; import com.projectkorra.projectkorra.attribute.AttributePriority; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig; -import com.projectkorra.projectkorra.element.Element; import com.projectkorra.projectkorra.event.AbilityEndEvent; import com.projectkorra.projectkorra.event.AbilityStartEvent; import com.projectkorra.projectkorra.module.ModuleManager; @@ -44,7 +44,7 @@ import java.util.jar.JarFile; * @see #registerAddonAbilities(String) * @see #registerPluginAbilities(JavaPlugin, String) */ -public abstract class Ability { +public abstract class Ability { private static final double DEFAULT_COLLISION_RADIUS = 0.3; private static final Map, Map> ATTRIBUTE_FIELDS = new HashMap<>(); @@ -487,8 +487,6 @@ public abstract class Ability { public abstract String getName(); - public abstract Element getElement(); - public abstract Location getLocation(); public static double getDefaultCollisionRadius() { diff --git a/src/com/projectkorra/projectkorra/ability/AbilityInfo.java b/src/com/projectkorra/projectkorra/ability/AbilityInfo.java deleted file mode 100644 index 6a52b2eb..00000000 --- a/src/com/projectkorra/projectkorra/ability/AbilityInfo.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.projectkorra.projectkorra.ability; - -import com.projectkorra.projectkorra.ability.loader.AbilityLoader; -import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig; -import com.projectkorra.projectkorra.element.Element; - -public class AbilityInfo { - - private final Class abilityClass; - private final AbilityData abilityData; - private final AbilityLoader abilityLoader; - private final AbilityConfig abilityConfig; - - public AbilityInfo(Class abilityClass, AbilityData abilityData, AbilityLoader abilityLoader, AbilityConfig abilityConfig) { - this.abilityClass = abilityClass; - this.abilityData = abilityData; - this.abilityLoader = abilityLoader; - this.abilityConfig = abilityConfig; - } - - public String getName() { - return this.abilityData.name(); - } - - public Element getElement() { - return this.abilityLoader.getElement(); - } - - public AbilityLoader getLoader() { - return this.abilityLoader; - } -} diff --git a/src/com/projectkorra/projectkorra/ability/AbilityManager.java b/src/com/projectkorra/projectkorra/ability/AbilityManager.java index a80d5f84..c5c4286f 100644 --- a/src/com/projectkorra/projectkorra/ability/AbilityManager.java +++ b/src/com/projectkorra/projectkorra/ability/AbilityManager.java @@ -3,9 +3,9 @@ package com.projectkorra.projectkorra.ability; import co.aikar.timings.lib.MCTiming; import com.projectkorra.projectkorra.ProjectKorra; import com.projectkorra.projectkorra.ability.api.PassiveAbility; -import com.projectkorra.projectkorra.ability.loader.*; -import com.projectkorra.projectkorra.ability.util.AbilityRegistery; -import com.projectkorra.projectkorra.ability.util.AddonAbilityRegistery; +import com.projectkorra.projectkorra.ability.info.*; +import com.projectkorra.projectkorra.ability.util.AbilityRegistry; +import com.projectkorra.projectkorra.ability.util.AddonAbilityRegistry; import com.projectkorra.projectkorra.configuration.ConfigManager; import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig; import com.projectkorra.projectkorra.element.Element; @@ -123,17 +123,16 @@ public class AbilityManager extends Module { * @see #getAbility(String) */ public void registerPluginAbilities(String packageBase) { - AbilityRegistery abilityRegistery = new AbilityRegistery<>(getPlugin(), packageBase); - List> loadedAbilities = abilityRegistery.load(Ability.class, Ability.class); + AbilityRegistry abilityRegistry = new AbilityRegistry<>(getPlugin(), packageBase); + List> loadedAbilities = abilityRegistry.load(Ability.class, Ability.class); String entry = getPlugin().getName() + "::" + packageBase; this.addonPlugins.add(entry); for (Class abilityClass : loadedAbilities) { - AbilityData abilityData = getAbilityData(abilityClass); - AbilityLoader abilityLoader = getAbilityLoader(abilityData); + AbilityInfo abilityInfo = getAbilityInfo(abilityClass); - registerAbility(abilityClass, abilityData, abilityLoader); + registerAbility(abilityClass, abilityInfo); } } @@ -153,25 +152,24 @@ public class AbilityManager extends Module { return; } - AddonAbilityRegistery abilityRegistery = new AddonAbilityRegistery<>(getPlugin(), file); + AddonAbilityRegistry abilityRegistery = new AddonAbilityRegistry<>(getPlugin(), file); List> loadedAbilities = abilityRegistery.load(Ability.class, Ability.class); for (Class abilityClass : loadedAbilities) { - AbilityData abilityData = getAbilityData(abilityClass); - AbilityLoader abilityLoader = getAbilityLoader(abilityData); + AbilityInfo abilityInfo = getAbilityInfo(abilityClass); - if (!(abilityLoader instanceof AddonAbilityLoader)) { - throw new AbilityException(abilityClass.getName() + " must have an AddonAbilityLoader"); + if (!(abilityInfo instanceof AddonAbilityInfo)) { + throw new AbilityException(abilityClass.getName() + " must have an AddonAbilityInfo"); } - registerAbility(abilityClass, abilityData, abilityLoader); + registerAbility(abilityClass, abilityInfo); } } - private void registerAbility(Class abilityClass, AbilityData abilityData, AbilityLoader abilityLoader) throws AbilityException { + private void registerAbility(Class abilityClass, AbilityInfo abilityInfo) throws AbilityException { AbilityConfig abilityConfig = getAbilityConfig(abilityClass); - String abilityName = abilityData.name(); + String abilityName = abilityInfo.getName(); if (abilityName == null) { throw new AbilityException("Ability " + abilityClass.getName() + " has no name"); @@ -182,62 +180,51 @@ public class AbilityManager extends Module { return; } - if (abilityLoader instanceof AddonAbilityLoader) { - ((AddonAbilityLoader) abilityLoader).load(); + if (abilityInfo instanceof AddonAbilityInfo) { + ((AddonAbilityInfo) abilityInfo).load(); } - if (abilityLoader instanceof ComboAbilityLoader) { - ComboAbilityLoader comboAbilityLoader = (ComboAbilityLoader) abilityLoader; + if (abilityInfo instanceof ComboAbilityInfo) { + ComboAbilityInfo comboAbilityInfo = (ComboAbilityInfo) abilityInfo; - if (comboAbilityLoader.getCombination() == null || comboAbilityLoader.getCombination().size() < 2) { + if (comboAbilityInfo.getCombination() == null || comboAbilityInfo.getCombination().size() < 2) { getPlugin().getLogger().info(abilityName + " has no combination"); return; } - this.comboAbilityManager.registerAbility(abilityClass, abilityData, comboAbilityLoader); + this.comboAbilityManager.registerAbility(abilityClass, comboAbilityInfo); return; } - if (abilityLoader instanceof MultiAbilityLoader) { - MultiAbilityLoader multiAbilityLoader = (MultiAbilityLoader) abilityLoader; + if (abilityInfo instanceof MultiAbilityInfo) { + MultiAbilityInfo multiAbilityInfo = (MultiAbilityInfo) abilityInfo; - this.multiAbilityManager.registerAbility(abilityClass, abilityData, multiAbilityLoader); + this.multiAbilityManager.registerAbility(abilityClass, multiAbilityInfo); return; } - if (abilityLoader instanceof PassiveAbilityLoader) { - PassiveAbilityLoader passiveAbilityLoader = (PassiveAbilityLoader) abilityLoader; + if (abilityInfo instanceof PassiveAbilityInfo) { + PassiveAbilityInfo passiveAbilityInfo = (PassiveAbilityInfo) abilityInfo; // TODO Set Hidden Ability - this.passiveAbilityManager.registerAbility(abilityClass, passiveAbilityLoader); + this.passiveAbilityManager.registerAbility(abilityClass, passiveAbilityInfo); return; } - AbilityInfo abilityInfo = new AbilityInfo(abilityClass, abilityData, abilityLoader, abilityConfig); - this.abilities.put(abilityData.name(), abilityInfo); + this.abilities.put(abilityInfo.getName(), abilityInfo); } - private AbilityData getAbilityData(Class abilityClass) throws AbilityException { - AbilityData abilityData = abilityClass.getDeclaredAnnotation(AbilityData.class); - - if (abilityData == null) { - throw new AbilityException("Ability " + abilityClass.getName() + " has missing AbilityData annotation"); - } - - return abilityData; - } - - private AbilityLoader getAbilityLoader(AbilityData abilityData) throws AbilityException { + protected AbilityInfo getAbilityInfo(Class abilityClass) throws AbilityException { try { - return abilityData.abilityLoader().newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + return ((Class) ((ParameterizedType) abilityClass.getGenericSuperclass()).getActualTypeArguments()[0]).newInstance(); + } catch (Exception e) { throw new AbilityException(e); } } private AbilityConfig getAbilityConfig(Class abilityClass) throws AbilityException { try { - return ConfigManager.getConfig(((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0])); + return ConfigManager.getConfig(((Class) ((ParameterizedType) abilityClass.getGenericSuperclass()).getActualTypeArguments()[1])); } catch (Exception e) { throw new AbilityException(e); } @@ -339,8 +326,8 @@ public class AbilityManager extends Module { return new ArrayList<>(this.abilities.values()); } - public List getAbilities(Element element) { - return this.playerAbilitySet.stream() + public List getAbilities(Element element) { + return this.abilities.values().stream() .filter(ability -> { if (ability.getElement().equals(element)) { diff --git a/src/com/projectkorra/projectkorra/ability/ComboAbilityManager.java b/src/com/projectkorra/projectkorra/ability/ComboAbilityManager.java index 338d46da..07ee34c3 100644 --- a/src/com/projectkorra/projectkorra/ability/ComboAbilityManager.java +++ b/src/com/projectkorra/projectkorra/ability/ComboAbilityManager.java @@ -1,6 +1,6 @@ package com.projectkorra.projectkorra.ability; -import com.projectkorra.projectkorra.ability.loader.ComboAbilityLoader; +import com.projectkorra.projectkorra.ability.info.ComboAbilityInfo; import com.projectkorra.projectkorra.module.Module; import com.projectkorra.projectkorra.module.ModuleManager; import com.projectkorra.projectkorra.player.BendingPlayer; @@ -27,7 +27,7 @@ public class ComboAbilityManager extends Module { private final AbilityManager abilityManager; private final Map> recentlyUsed = new HashMap<>(); - private final List abilities = new ArrayList<>(); + private final List abilities = new ArrayList<>(); private final long combinationMax = 8; @@ -40,10 +40,10 @@ public class ComboAbilityManager extends Module { this.abilities.clear(); } - public void registerAbility(Class abilityClass, AbilityData abilityData, ComboAbilityLoader comboAbilityLoader) { - ComboAbilityInfo comboAbilityInfo = new ComboAbilityInfo(abilityClass, abilityData.name(), comboAbilityLoader.getCombination()); + public void registerAbility(Class abilityClass, ComboAbilityInfo comboAbilityInfo) { + ComboAbility comboAbility = new ComboAbility(abilityClass, comboAbilityInfo.getName(), comboAbilityInfo.getCombination()); - this.abilities.add(comboAbilityInfo); + this.abilities.add(comboAbility); } private void processComboAbility(Player player, ClickType clickType) { @@ -59,31 +59,29 @@ public class ComboAbilityManager extends Module { recentlyUsed.removeLast(); } - ComboAbilityInfo comboAbilityInfo = getComboAbiblity(recentlyUsed); + ComboAbility comboAbility = getComboAbility(recentlyUsed); - if (comboAbilityInfo == null) { + if (comboAbility == null) { return; } - if (!player.hasPermission("bending.ability." + comboAbilityInfo.abilityName)) { + if (!player.hasPermission("bending.ability." + comboAbility.abilityName)) { return; } - this.abilityManager.createAbility(player, comboAbilityInfo.abilityClass); + this.abilityManager.createAbility(player, comboAbility.abilityClass); } - private ComboAbilityInfo getComboAbiblity(LinkedList recentlyUsed) { - for (ComboAbilityInfo comboAbilityInfo : this.abilities) { - LinkedList abilityCombinations = comboAbilityInfo.combinations; - - int comboSize = abilityCombinations.size(); + private ComboAbility getComboAbility(LinkedList recentlyUsed) { + for (ComboAbility comboAbility : this.abilities) { + int comboSize = comboAbility.combinations.size(); if (recentlyUsed.size() < comboSize) { continue; } - if (recentlyUsed.subList(0, comboSize).equals(abilityCombinations)) { - return comboAbilityInfo; + if (recentlyUsed.subList(0, comboSize).equals(comboAbility.combinations)) { + return comboAbility; } } @@ -199,16 +197,15 @@ public class ComboAbilityManager extends Module { } } - private class ComboAbilityInfo { + private class ComboAbility { private final Class abilityClass; private final String abilityName; - private final LinkedList combinations; + private final List combinations; - ComboAbilityInfo(Class abilityClass, String abilityName, LinkedList combinations) { + ComboAbility(Class abilityClass, String abilityName, List combinations) { this.abilityClass = abilityClass; this.abilityName = abilityName; this.combinations = combinations; } } - } diff --git a/src/com/projectkorra/projectkorra/ability/MultiAbilityManager.java b/src/com/projectkorra/projectkorra/ability/MultiAbilityManager.java index e7d5d5a5..22c52519 100644 --- a/src/com/projectkorra/projectkorra/ability/MultiAbilityManager.java +++ b/src/com/projectkorra/projectkorra/ability/MultiAbilityManager.java @@ -1,7 +1,8 @@ package com.projectkorra.projectkorra.ability; import com.projectkorra.projectkorra.ability.api.PlayerBindAbilityEvent; -import com.projectkorra.projectkorra.ability.loader.MultiAbilityLoader; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; +import com.projectkorra.projectkorra.ability.info.MultiAbilityInfo; import com.projectkorra.projectkorra.event.AbilityEndEvent; import com.projectkorra.projectkorra.event.PlayerSwingEvent; import com.projectkorra.projectkorra.module.Module; @@ -13,11 +14,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerItemHeldEvent; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; +import java.util.*; public class MultiAbilityManager extends Module { @@ -25,6 +22,7 @@ public class MultiAbilityManager extends Module { private final AbilityManager abilityManager; private final Map abilities = new HashMap<>(); + private final Map> multiAbilities = new HashMap<>(); private final Map> playerMultiAbility = new HashMap<>(); private final Map> playerAbilities = new HashMap<>(); @@ -36,17 +34,21 @@ public class MultiAbilityManager extends Module { this.abilityManager = ModuleManager.getModule(AbilityManager.class); } - public void registerAbility(Class abilityClass, AbilityData abilityData, MultiAbilityLoader multiAbilityLoader) { - List abilities = multiAbilityLoader.getAbilities().stream() - .map(ability -> ability.getDeclaredAnnotation(AbilityData.class)) - .map(AbilityData::name) - .collect(Collectors.toList()); + public void registerAbility(Class abilityClass, MultiAbilityInfo multiAbilityInfo) { + List> abilities = multiAbilityInfo.getAbilities(); - // TODO Exception handling for multi abilities with missing AbilityData annotations + Map> abilitiesByName = new HashMap<>(); - MultiAbility multiAbility = new MultiAbility(abilityClass, abilityData.name(), abilities); + for (Class ability : abilities) { + AbilityInfo info = this.abilityManager.getAbilityInfo(ability); - this.abilities.put(abilityData.name(), multiAbility); + abilitiesByName.put(info.getName(), ability); + } + + MultiAbility multiAbility = new MultiAbility(abilityClass, multiAbilityInfo.getName(), abilitiesByName.keySet()); + + this.abilities.put(multiAbilityInfo.getName(), multiAbility); + this.multiAbilities.putAll(abilitiesByName); } @EventHandler @@ -74,6 +76,20 @@ public class MultiAbilityManager extends Module { player.getInventory().setHeldItemSlot(0); } + @EventHandler + public void onMultiAbilitySwing(PlayerSwingEvent event) { + Player player = event.getPlayer(); + + String abilityName = event.getAbilityName(); + Class abilityClass = this.multiAbilities.get(abilityName); + + if (abilityClass == null) { + return; + } + + Ability ability = this.abilityManager.createAbility(player, abilityClass); + } + @EventHandler public void onAbilityEnd(AbilityEndEvent event) { Ability ability = event.getAbility(); @@ -124,9 +140,9 @@ public class MultiAbilityManager extends Module { public class MultiAbility { private final Class abilityClass; private final String abilityName; - private final List abilities; + private final Set abilities; - MultiAbility(Class abilityClass, String abilityName, List abilities) { + MultiAbility(Class abilityClass, String abilityName, Set abilities) { this.abilityClass = abilityClass; this.abilityName = abilityName; this.abilities = abilities; diff --git a/src/com/projectkorra/projectkorra/ability/PassiveAbilityManager.java b/src/com/projectkorra/projectkorra/ability/PassiveAbilityManager.java index b378ae38..4619d140 100644 --- a/src/com/projectkorra/projectkorra/ability/PassiveAbilityManager.java +++ b/src/com/projectkorra/projectkorra/ability/PassiveAbilityManager.java @@ -1,6 +1,6 @@ package com.projectkorra.projectkorra.ability; -import com.projectkorra.projectkorra.ability.loader.PassiveAbilityLoader; +import com.projectkorra.projectkorra.ability.info.PassiveAbilityInfo; import com.projectkorra.projectkorra.element.Element; import com.projectkorra.projectkorra.element.SubElement; import com.projectkorra.projectkorra.module.Module; @@ -19,7 +19,7 @@ public class PassiveAbilityManager extends Module { private final BendingPlayerManager bendingPlayerManager; private final AbilityManager abilityManager; - private final Map, PassiveAbilityLoader> abilities = new HashMap<>(); + private final Map, PassiveAbilityInfo> abilities = new HashMap<>(); private PassiveAbilityManager() { super("Passive Ability"); @@ -28,12 +28,12 @@ public class PassiveAbilityManager extends Module { this.abilityManager = ModuleManager.getModule(AbilityManager.class); } - public void registerAbility(Class abilityClass, PassiveAbilityLoader passiveAbilityLoader) { - this.abilities.put(abilityClass, passiveAbilityLoader); + public void registerAbility(Class abilityClass, PassiveAbilityInfo passiveAbilityInfo) { + this.abilities.put(abilityClass, passiveAbilityInfo); } public void registerPassives(Player player) { - this.abilities.forEach((abilityClass, passiveAbilityLoader) -> { + this.abilities.forEach((abilityClass, passiveAbilityInfo) -> { if (!canUsePassive(player, abilityClass)) { return; } @@ -42,7 +42,7 @@ public class PassiveAbilityManager extends Module { return; } - if (!passiveAbilityLoader.isInstantiable()) { + if (!passiveAbilityInfo.isInstantiable()) { return; } @@ -53,13 +53,13 @@ public class PassiveAbilityManager extends Module { public boolean canUsePassive(Player player, Class abilityClass) { BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player); - PassiveAbilityLoader passiveAbilityLoader = this.abilities.get(abilityClass); + PassiveAbilityInfo passiveAbilityInfo = this.abilities.get(abilityClass); - if (passiveAbilityLoader == null) { + if (passiveAbilityInfo == null) { return false; } - Element element = passiveAbilityLoader.getElement(); + Element element = passiveAbilityInfo.getElement(); if (element instanceof SubElement) { element = ((SubElement) element).getParent(); @@ -80,7 +80,7 @@ public class PassiveAbilityManager extends Module { return true; } - public PassiveAbilityLoader getPassiveAbility(Class abilityClass) { + public PassiveAbilityInfo getPassiveAbility(Class abilityClass) { return this.abilities.get(abilityClass); } diff --git a/src/com/projectkorra/projectkorra/ability/api/AirAbility.java b/src/com/projectkorra/projectkorra/ability/api/AirAbility.java index b765d563..94a8c253 100644 --- a/src/com/projectkorra/projectkorra/ability/api/AirAbility.java +++ b/src/com/projectkorra/projectkorra/ability/api/AirAbility.java @@ -3,12 +3,12 @@ package com.projectkorra.projectkorra.ability.api; import java.util.ArrayList; import java.util.List; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.Element; import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.util.Collision; import com.projectkorra.projectkorra.airbending.AirSpout; @@ -18,7 +18,7 @@ import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConf import com.projectkorra.projectkorra.configuration.configs.properties.AirPropertiesConfig; import com.projectkorra.projectkorra.util.ParticleEffect; -public abstract class AirAbility extends ElementalAbility { +public abstract class AirAbility extends ElementalAbility { public AirAbility(final C config, final Player player) { super(config, player); @@ -34,11 +34,6 @@ public abstract class AirAbility extends ElementalAbili return false; } - @Override - public Element getElement() { - return Element.AIR; - } - @Override public void handleCollision(final Collision collision) { super.handleCollision(collision); diff --git a/src/com/projectkorra/projectkorra/ability/api/ElementalAbility.java b/src/com/projectkorra/projectkorra/ability/api/ElementalAbility.java index f9b4b508..6013e5ca 100644 --- a/src/com/projectkorra/projectkorra/ability/api/ElementalAbility.java +++ b/src/com/projectkorra/projectkorra/ability/api/ElementalAbility.java @@ -1,12 +1,12 @@ package com.projectkorra.projectkorra.ability.api; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Stream; - +import com.projectkorra.projectkorra.GeneralMethods; import com.projectkorra.projectkorra.ability.Ability; +import com.projectkorra.projectkorra.ability.info.AbilityInfo; +import com.projectkorra.projectkorra.configuration.ConfigManager; +import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig; +import com.projectkorra.projectkorra.configuration.configs.properties.EarthPropertiesConfig; +import com.projectkorra.projectkorra.configuration.configs.properties.WaterPropertiesConfig; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.World.Environment; @@ -16,18 +16,18 @@ import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; -import com.projectkorra.projectkorra.GeneralMethods; -import com.projectkorra.projectkorra.configuration.ConfigManager; -import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig; -import com.projectkorra.projectkorra.configuration.configs.properties.EarthPropertiesConfig; -import com.projectkorra.projectkorra.configuration.configs.properties.WaterPropertiesConfig; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Stream; /** * ElementalAbility is used to hold methods that should be accessible by every * Air, Water, Earth, Fire, Chi, or AvatarAbility. This class is mainly used to * keep CoreAbility from becoming too cluttered. */ -public abstract class ElementalAbility extends Ability { +public abstract class ElementalAbility extends Ability { private static final PotionEffectType[] POSITIVE_EFFECTS = { PotionEffectType.ABSORPTION, PotionEffectType.DAMAGE_RESISTANCE, PotionEffectType.FAST_DIGGING, PotionEffectType.FIRE_RESISTANCE, PotionEffectType.HEAL, PotionEffectType.HEALTH_BOOST, PotionEffectType.INCREASE_DAMAGE, PotionEffectType.JUMP, PotionEffectType.NIGHT_VISION, PotionEffectType.REGENERATION, PotionEffectType.SATURATION, PotionEffectType.SPEED, PotionEffectType.WATER_BREATHING }; private static final PotionEffectType[] NEUTRAL_EFFECTS = { PotionEffectType.INVISIBILITY }; private static final PotionEffectType[] NEGATIVE_EFFECTS = { PotionEffectType.POISON, PotionEffectType.BLINDNESS, PotionEffectType.CONFUSION, PotionEffectType.HARM, PotionEffectType.HUNGER, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WEAKNESS, PotionEffectType.WITHER }; diff --git a/src/com/projectkorra/projectkorra/ability/AbilityData.java b/src/com/projectkorra/projectkorra/ability/info/AbilityInfo.java similarity index 58% rename from src/com/projectkorra/projectkorra/ability/AbilityData.java rename to src/com/projectkorra/projectkorra/ability/info/AbilityInfo.java index d038906a..1bf6acda 100644 --- a/src/com/projectkorra/projectkorra/ability/AbilityData.java +++ b/src/com/projectkorra/projectkorra/ability/info/AbilityInfo.java @@ -1,17 +1,10 @@ -package com.projectkorra.projectkorra.ability; +package com.projectkorra.projectkorra.ability.info; -import com.projectkorra.projectkorra.ability.loader.AbilityLoader; +import com.projectkorra.projectkorra.ability.Ability; import com.projectkorra.projectkorra.element.Element; import com.projectkorra.projectkorra.player.BendingPlayer; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface AbilityData { +public interface AbilityInfo { /** * The name of the ability is used for commands such as /bending @@ -25,25 +18,28 @@ public @interface AbilityData { * * @return Returns the name of the ability */ - String name(); + String getName(); - /** - * @return The class used to register this ability. - */ - Class abilityLoader(); + Element getElement(); /** * @return true if this is a hidden ability. */ - boolean hidden() default false; + default boolean isHidden() { + return false; + } /** * @return the name of the author of this AddonAbility */ - String author() default "ProjectKorra"; + default String getAuthor() { + return "ProjectKorra"; + } /** * @return The version of the ability as a String. */ - String version() default "1.0"; + default String getVersion() { + return "1.0"; + } } diff --git a/src/com/projectkorra/projectkorra/ability/loader/AddonAbilityLoader.java b/src/com/projectkorra/projectkorra/ability/info/AddonAbilityInfo.java similarity index 73% rename from src/com/projectkorra/projectkorra/ability/loader/AddonAbilityLoader.java rename to src/com/projectkorra/projectkorra/ability/info/AddonAbilityInfo.java index d3811b85..1b2b7617 100644 --- a/src/com/projectkorra/projectkorra/ability/loader/AddonAbilityLoader.java +++ b/src/com/projectkorra/projectkorra/ability/info/AddonAbilityInfo.java @@ -1,14 +1,14 @@ -package com.projectkorra.projectkorra.ability.loader; +package com.projectkorra.projectkorra.ability.info; import com.projectkorra.projectkorra.ability.AbilityManager; -public abstract class AddonAbilityLoader extends AbilityLoader { +public interface AddonAbilityInfo extends AbilityInfo { /** * Called when the ability is loaded by PK. This is where the developer * registers Listeners and Permissions. */ - public abstract void load(); + void load(); /** * Called whenever ProjectKorra stops and the ability is unloaded. This @@ -16,5 +16,5 @@ public abstract class AddonAbilityLoader extends AbilityLoader { * Any CoreAbility instances do not need to be cleaned up by stop method, as * they will be cleaned up by {@link AbilityManager#removeAll()}. */ - public abstract void stop(); + void stop(); } diff --git a/src/com/projectkorra/projectkorra/ability/info/AvatarAbilityInfo.java b/src/com/projectkorra/projectkorra/ability/info/AvatarAbilityInfo.java new file mode 100644 index 00000000..34f6a289 --- /dev/null +++ b/src/com/projectkorra/projectkorra/ability/info/AvatarAbilityInfo.java @@ -0,0 +1,6 @@ +package com.projectkorra.projectkorra.ability.info; + +public interface AvatarAbilityInfo extends AbilityInfo { + + boolean requireAvatar(); +} diff --git a/src/com/projectkorra/projectkorra/ability/loader/ComboAbilityLoader.java b/src/com/projectkorra/projectkorra/ability/info/ComboAbilityInfo.java similarity index 54% rename from src/com/projectkorra/projectkorra/ability/loader/ComboAbilityLoader.java rename to src/com/projectkorra/projectkorra/ability/info/ComboAbilityInfo.java index beccd938..d2915eec 100644 --- a/src/com/projectkorra/projectkorra/ability/loader/ComboAbilityLoader.java +++ b/src/com/projectkorra/projectkorra/ability/info/ComboAbilityInfo.java @@ -1,15 +1,15 @@ -package com.projectkorra.projectkorra.ability.loader; +package com.projectkorra.projectkorra.ability.info; import com.projectkorra.projectkorra.ability.ComboAbilityManager; import java.util.LinkedList; -public abstract class ComboAbilityLoader extends AbilityLoader { +public interface ComboAbilityInfo extends AbilityInfo { /** * Returns the list of abilities which constitute the combo. * * @return A {@link LinkedList} containing the combo's steps. */ - public abstract LinkedList getCombination(); + LinkedList getCombination(); } diff --git a/src/com/projectkorra/projectkorra/ability/info/MultiAbilityInfo.java b/src/com/projectkorra/projectkorra/ability/info/MultiAbilityInfo.java new file mode 100644 index 00000000..a3c02019 --- /dev/null +++ b/src/com/projectkorra/projectkorra/ability/info/MultiAbilityInfo.java @@ -0,0 +1,18 @@ +package com.projectkorra.projectkorra.ability.info; + +import com.projectkorra.projectkorra.ability.Ability; + +import java.util.List; + +public interface MultiAbilityInfo extends AbilityInfo { + + /** + * Returns the sub abilities of a MultiAbility. For example: + *

+ * {@code new + * MultiAbilitySub("SubAbility", Element.LIGHTNING);} + * + * @return a list of sub MultiAbilities + */ + List> getAbilities(); +} diff --git a/src/com/projectkorra/projectkorra/ability/loader/PassiveAbilityLoader.java b/src/com/projectkorra/projectkorra/ability/info/PassiveAbilityInfo.java similarity index 63% rename from src/com/projectkorra/projectkorra/ability/loader/PassiveAbilityLoader.java rename to src/com/projectkorra/projectkorra/ability/info/PassiveAbilityInfo.java index a2007248..963617dd 100644 --- a/src/com/projectkorra/projectkorra/ability/loader/PassiveAbilityLoader.java +++ b/src/com/projectkorra/projectkorra/ability/info/PassiveAbilityInfo.java @@ -1,6 +1,6 @@ -package com.projectkorra.projectkorra.ability.loader; +package com.projectkorra.projectkorra.ability.info; -public abstract class PassiveAbilityLoader extends AbilityLoader { +public interface PassiveAbilityInfo extends AbilityInfo { /** * This is a check to see if the passive requires some form of activation, @@ -9,13 +9,12 @@ public abstract class PassiveAbilityLoader extends AbilityLoader { * * @return false if this passive should always be on */ - public abstract boolean isInstantiable(); + boolean isInstantiable(); /** * This is used if the passive should progress * * @return false if progress() shouldn't be called; */ - public abstract boolean isProgressable(); - + boolean isProgressable(); } diff --git a/src/com/projectkorra/projectkorra/ability/loader/AbilityLoader.java b/src/com/projectkorra/projectkorra/ability/loader/AbilityLoader.java deleted file mode 100644 index d297c10d..00000000 --- a/src/com/projectkorra/projectkorra/ability/loader/AbilityLoader.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.projectkorra.projectkorra.ability.loader; - -import com.projectkorra.projectkorra.element.Element; - -public abstract class AbilityLoader { - - public abstract Element getElement(); -} diff --git a/src/com/projectkorra/projectkorra/ability/loader/AvatarAbilityLoader.java b/src/com/projectkorra/projectkorra/ability/loader/AvatarAbilityLoader.java deleted file mode 100644 index 7bf98a1e..00000000 --- a/src/com/projectkorra/projectkorra/ability/loader/AvatarAbilityLoader.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.projectkorra.projectkorra.ability.loader; - -public abstract class AvatarAbilityLoader extends AbilityLoader { - - public abstract boolean requireAvatar(); -} diff --git a/src/com/projectkorra/projectkorra/ability/loader/MultiAbilityLoader.java b/src/com/projectkorra/projectkorra/ability/loader/MultiAbilityLoader.java deleted file mode 100644 index efcf3e66..00000000 --- a/src/com/projectkorra/projectkorra/ability/loader/MultiAbilityLoader.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.projectkorra.projectkorra.ability.loader; - -import com.projectkorra.projectkorra.ability.Ability; -import com.projectkorra.projectkorra.ability.MultiAbilityManager; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -public abstract class MultiAbilityLoader extends AbilityLoader { - - /** - * Returns the sub abilities of a MultiAbility. For example: - *

- * {@code new - * MultiAbilitySub("SubAbility", Element.LIGHTNING);} - * - * @return a list of sub MultiAbilities - */ - public abstract List> getAbilities(); -} diff --git a/src/com/projectkorra/projectkorra/ability/util/AbilityRegistery.java b/src/com/projectkorra/projectkorra/ability/util/AbilityRegistry.java similarity index 96% rename from src/com/projectkorra/projectkorra/ability/util/AbilityRegistery.java rename to src/com/projectkorra/projectkorra/ability/util/AbilityRegistry.java index 8cc1974e..cd444bc0 100644 --- a/src/com/projectkorra/projectkorra/ability/util/AbilityRegistery.java +++ b/src/com/projectkorra/projectkorra/ability/util/AbilityRegistry.java @@ -16,14 +16,14 @@ import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; -public class AbilityRegistery { +public class AbilityRegistry { private final Plugin plugin; private ClassLoader loader; private JarFile jar; private String path; - public AbilityRegistery(final JavaPlugin plugin, final String packageBase) { + public AbilityRegistry(final JavaPlugin plugin, final String packageBase) { this.plugin = plugin; this.loader = plugin.getClass().getClassLoader(); this.path = packageBase.replace('.', '/'); diff --git a/src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistery.java b/src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistry.java similarity index 96% rename from src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistery.java rename to src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistry.java index 6bcb0151..7e168a50 100644 --- a/src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistery.java +++ b/src/com/projectkorra/projectkorra/ability/util/AddonAbilityRegistry.java @@ -17,14 +17,14 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; -public class AddonAbilityRegistery { +public class AddonAbilityRegistry { private final Plugin plugin; private final File directory; private final ArrayList files; private ClassLoader loader; - public AddonAbilityRegistery(final Plugin plugin, final File directory) { + public AddonAbilityRegistry(final Plugin plugin, final File directory) { this.plugin = plugin; this.directory = directory; this.files = new ArrayList(); diff --git a/src/com/projectkorra/projectkorra/airbending/passive/AirSaturation.java b/src/com/projectkorra/projectkorra/airbending/passive/AirSaturation.java index dfc1ebf4..8d87359c 100644 --- a/src/com/projectkorra/projectkorra/airbending/passive/AirSaturation.java +++ b/src/com/projectkorra/projectkorra/airbending/passive/AirSaturation.java @@ -1,14 +1,13 @@ package com.projectkorra.projectkorra.airbending.passive; +import com.projectkorra.projectkorra.ability.api.AirAbility; +import com.projectkorra.projectkorra.airbending.util.AirPassiveAbilityInfo; +import com.projectkorra.projectkorra.configuration.ConfigManager; +import com.projectkorra.projectkorra.configuration.configs.abilities.air.AirSaturationConfig; import org.bukkit.Location; import org.bukkit.entity.Player; -import com.projectkorra.projectkorra.ability.api.AirAbility; -import com.projectkorra.projectkorra.ability.api.PassiveAbility; -import com.projectkorra.projectkorra.configuration.ConfigManager; -import com.projectkorra.projectkorra.configuration.configs.abilities.air.AirSaturationConfig; - -public class AirSaturation extends AirAbility implements PassiveAbility { +public class AirSaturation extends AirAbility { public AirSaturation(final AirSaturationConfig config, final Player player) { super(config, player); } @@ -45,6 +44,19 @@ public class AirSaturation extends AirAbility implements Pa return this.player.getLocation(); } + @Override + public Class getConfigType() { + return AirSaturationConfig.class; + } +} + +class AirSaturationInfo extends AirPassiveAbilityInfo { + + @Override + public String getName() { + return "AirSaturation"; + } + @Override public boolean isInstantiable() { return false; @@ -54,9 +66,4 @@ public class AirSaturation extends AirAbility implements Pa public boolean isProgressable() { return false; } - - @Override - public Class getConfigType() { - return AirSaturationConfig.class; - } } diff --git a/src/com/projectkorra/projectkorra/airbending/util/AirAbilityInfo.java b/src/com/projectkorra/projectkorra/airbending/util/AirAbilityInfo.java new file mode 100644 index 00000000..8a2acde7 --- /dev/null +++ b/src/com/projectkorra/projectkorra/airbending/util/AirAbilityInfo.java @@ -0,0 +1,14 @@ +package com.projectkorra.projectkorra.airbending.util; + +import com.projectkorra.projectkorra.ability.info.AbilityInfo; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.element.ElementManager; +import com.projectkorra.projectkorra.module.ModuleManager; + +public abstract class AirAbilityInfo extends AbilityInfo { + + @Override + public Element getElement() { + return ModuleManager.getModule(ElementManager.class).getAir(); + } +} diff --git a/src/com/projectkorra/projectkorra/airbending/util/AirAddonAbilityInfo.java b/src/com/projectkorra/projectkorra/airbending/util/AirAddonAbilityInfo.java new file mode 100644 index 00000000..4541d567 --- /dev/null +++ b/src/com/projectkorra/projectkorra/airbending/util/AirAddonAbilityInfo.java @@ -0,0 +1,14 @@ +package com.projectkorra.projectkorra.airbending.util; + +import com.projectkorra.projectkorra.ability.info.AddonAbilityInfo; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.element.ElementManager; +import com.projectkorra.projectkorra.module.ModuleManager; + +public abstract class AirAddonAbilityInfo implements AddonAbilityInfo { + + @Override + public Element getElement() { + return ModuleManager.getModule(ElementManager.class).getAir(); + } +} diff --git a/src/com/projectkorra/projectkorra/airbending/util/AirPassiveAbilityInfo.java b/src/com/projectkorra/projectkorra/airbending/util/AirPassiveAbilityInfo.java new file mode 100644 index 00000000..d18ef646 --- /dev/null +++ b/src/com/projectkorra/projectkorra/airbending/util/AirPassiveAbilityInfo.java @@ -0,0 +1,14 @@ +package com.projectkorra.projectkorra.airbending.util; + +import com.projectkorra.projectkorra.ability.info.PassiveAbilityInfo; +import com.projectkorra.projectkorra.element.Element; +import com.projectkorra.projectkorra.element.ElementManager; +import com.projectkorra.projectkorra.module.ModuleManager; + +public abstract class AirPassiveAbilityInfo implements PassiveAbilityInfo { + + @Override + public Element getElement() { + return ModuleManager.getModule(ElementManager.class).getAir(); + } +}