mirror of
https://github.com/TotalFreedomMC/TF-ProjectKorra.git
synced 2025-02-11 03:30:10 +00:00
Fixed many errors with Ability, ComboAbility, MultiAbility, and PassiveAbility Managers
This commit is contained in:
parent
736998dd4a
commit
d44077f99b
23 changed files with 221 additions and 227 deletions
|
@ -2,6 +2,7 @@ package com.projectkorra.projectkorra.ability;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.BendingPlayer;
|
import com.projectkorra.projectkorra.BendingPlayer;
|
||||||
import com.projectkorra.projectkorra.Manager;
|
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.Collision;
|
||||||
import com.projectkorra.projectkorra.ability.util.CollisionManager;
|
import com.projectkorra.projectkorra.ability.util.CollisionManager;
|
||||||
import com.projectkorra.projectkorra.attribute.Attribute;
|
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.attribute.AttributePriority;
|
||||||
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
||||||
import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig;
|
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.AbilityEndEvent;
|
||||||
import com.projectkorra.projectkorra.event.AbilityStartEvent;
|
import com.projectkorra.projectkorra.event.AbilityStartEvent;
|
||||||
import com.projectkorra.projectkorra.module.ModuleManager;
|
import com.projectkorra.projectkorra.module.ModuleManager;
|
||||||
|
@ -44,7 +44,7 @@ import java.util.jar.JarFile;
|
||||||
* @see #registerAddonAbilities(String)
|
* @see #registerAddonAbilities(String)
|
||||||
* @see #registerPluginAbilities(JavaPlugin, String)
|
* @see #registerPluginAbilities(JavaPlugin, String)
|
||||||
*/
|
*/
|
||||||
public abstract class Ability<Config extends AbilityConfig> {
|
public abstract class Ability<Info extends AbilityInfo, Config extends AbilityConfig> {
|
||||||
|
|
||||||
private static final double DEFAULT_COLLISION_RADIUS = 0.3;
|
private static final double DEFAULT_COLLISION_RADIUS = 0.3;
|
||||||
private static final Map<Class<? extends Ability>, Map<String, Field>> ATTRIBUTE_FIELDS = new HashMap<>();
|
private static final Map<Class<? extends Ability>, Map<String, Field>> ATTRIBUTE_FIELDS = new HashMap<>();
|
||||||
|
@ -487,8 +487,6 @@ public abstract class Ability<Config extends AbilityConfig> {
|
||||||
|
|
||||||
public abstract String getName();
|
public abstract String getName();
|
||||||
|
|
||||||
public abstract Element getElement();
|
|
||||||
|
|
||||||
public abstract Location getLocation();
|
public abstract Location getLocation();
|
||||||
|
|
||||||
public static double getDefaultCollisionRadius() {
|
public static double getDefaultCollisionRadius() {
|
||||||
|
|
|
@ -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<? extends Ability> abilityClass;
|
|
||||||
private final AbilityData abilityData;
|
|
||||||
private final AbilityLoader abilityLoader;
|
|
||||||
private final AbilityConfig abilityConfig;
|
|
||||||
|
|
||||||
public AbilityInfo(Class<? extends Ability> 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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,9 +3,9 @@ package com.projectkorra.projectkorra.ability;
|
||||||
import co.aikar.timings.lib.MCTiming;
|
import co.aikar.timings.lib.MCTiming;
|
||||||
import com.projectkorra.projectkorra.ProjectKorra;
|
import com.projectkorra.projectkorra.ProjectKorra;
|
||||||
import com.projectkorra.projectkorra.ability.api.PassiveAbility;
|
import com.projectkorra.projectkorra.ability.api.PassiveAbility;
|
||||||
import com.projectkorra.projectkorra.ability.loader.*;
|
import com.projectkorra.projectkorra.ability.info.*;
|
||||||
import com.projectkorra.projectkorra.ability.util.AbilityRegistery;
|
import com.projectkorra.projectkorra.ability.util.AbilityRegistry;
|
||||||
import com.projectkorra.projectkorra.ability.util.AddonAbilityRegistery;
|
import com.projectkorra.projectkorra.ability.util.AddonAbilityRegistry;
|
||||||
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
||||||
import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig;
|
import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig;
|
||||||
import com.projectkorra.projectkorra.element.Element;
|
import com.projectkorra.projectkorra.element.Element;
|
||||||
|
@ -123,17 +123,16 @@ public class AbilityManager extends Module {
|
||||||
* @see #getAbility(String)
|
* @see #getAbility(String)
|
||||||
*/
|
*/
|
||||||
public void registerPluginAbilities(String packageBase) {
|
public void registerPluginAbilities(String packageBase) {
|
||||||
AbilityRegistery<Ability> abilityRegistery = new AbilityRegistery<>(getPlugin(), packageBase);
|
AbilityRegistry<Ability> abilityRegistry = new AbilityRegistry<>(getPlugin(), packageBase);
|
||||||
List<Class<Ability>> loadedAbilities = abilityRegistery.load(Ability.class, Ability.class);
|
List<Class<Ability>> loadedAbilities = abilityRegistry.load(Ability.class, Ability.class);
|
||||||
|
|
||||||
String entry = getPlugin().getName() + "::" + packageBase;
|
String entry = getPlugin().getName() + "::" + packageBase;
|
||||||
this.addonPlugins.add(entry);
|
this.addonPlugins.add(entry);
|
||||||
|
|
||||||
for (Class<Ability> abilityClass : loadedAbilities) {
|
for (Class<Ability> abilityClass : loadedAbilities) {
|
||||||
AbilityData abilityData = getAbilityData(abilityClass);
|
AbilityInfo abilityInfo = getAbilityInfo(abilityClass);
|
||||||
AbilityLoader abilityLoader = getAbilityLoader(abilityData);
|
|
||||||
|
|
||||||
registerAbility(abilityClass, abilityData, abilityLoader);
|
registerAbility(abilityClass, abilityInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,25 +152,24 @@ public class AbilityManager extends Module {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddonAbilityRegistery<Ability> abilityRegistery = new AddonAbilityRegistery<>(getPlugin(), file);
|
AddonAbilityRegistry<Ability> abilityRegistery = new AddonAbilityRegistry<>(getPlugin(), file);
|
||||||
List<Class<Ability>> loadedAbilities = abilityRegistery.load(Ability.class, Ability.class);
|
List<Class<Ability>> loadedAbilities = abilityRegistery.load(Ability.class, Ability.class);
|
||||||
|
|
||||||
for (Class<Ability> abilityClass : loadedAbilities) {
|
for (Class<Ability> abilityClass : loadedAbilities) {
|
||||||
AbilityData abilityData = getAbilityData(abilityClass);
|
AbilityInfo abilityInfo = getAbilityInfo(abilityClass);
|
||||||
AbilityLoader abilityLoader = getAbilityLoader(abilityData);
|
|
||||||
|
|
||||||
if (!(abilityLoader instanceof AddonAbilityLoader)) {
|
if (!(abilityInfo instanceof AddonAbilityInfo)) {
|
||||||
throw new AbilityException(abilityClass.getName() + " must have an AddonAbilityLoader");
|
throw new AbilityException(abilityClass.getName() + " must have an AddonAbilityInfo");
|
||||||
}
|
}
|
||||||
|
|
||||||
registerAbility(abilityClass, abilityData, abilityLoader);
|
registerAbility(abilityClass, abilityInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T extends Ability> void registerAbility(Class<T> abilityClass, AbilityData abilityData, AbilityLoader abilityLoader) throws AbilityException {
|
private <T extends Ability> void registerAbility(Class<T> abilityClass, AbilityInfo abilityInfo) throws AbilityException {
|
||||||
AbilityConfig abilityConfig = getAbilityConfig(abilityClass);
|
AbilityConfig abilityConfig = getAbilityConfig(abilityClass);
|
||||||
|
|
||||||
String abilityName = abilityData.name();
|
String abilityName = abilityInfo.getName();
|
||||||
|
|
||||||
if (abilityName == null) {
|
if (abilityName == null) {
|
||||||
throw new AbilityException("Ability " + abilityClass.getName() + " has no name");
|
throw new AbilityException("Ability " + abilityClass.getName() + " has no name");
|
||||||
|
@ -182,62 +180,51 @@ public class AbilityManager extends Module {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abilityLoader instanceof AddonAbilityLoader) {
|
if (abilityInfo instanceof AddonAbilityInfo) {
|
||||||
((AddonAbilityLoader) abilityLoader).load();
|
((AddonAbilityInfo) abilityInfo).load();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abilityLoader instanceof ComboAbilityLoader) {
|
if (abilityInfo instanceof ComboAbilityInfo) {
|
||||||
ComboAbilityLoader comboAbilityLoader = (ComboAbilityLoader) abilityLoader;
|
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");
|
getPlugin().getLogger().info(abilityName + " has no combination");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.comboAbilityManager.registerAbility(abilityClass, abilityData, comboAbilityLoader);
|
this.comboAbilityManager.registerAbility(abilityClass, comboAbilityInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abilityLoader instanceof MultiAbilityLoader) {
|
if (abilityInfo instanceof MultiAbilityInfo) {
|
||||||
MultiAbilityLoader multiAbilityLoader = (MultiAbilityLoader) abilityLoader;
|
MultiAbilityInfo multiAbilityInfo = (MultiAbilityInfo) abilityInfo;
|
||||||
|
|
||||||
this.multiAbilityManager.registerAbility(abilityClass, abilityData, multiAbilityLoader);
|
this.multiAbilityManager.registerAbility(abilityClass, multiAbilityInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abilityLoader instanceof PassiveAbilityLoader) {
|
if (abilityInfo instanceof PassiveAbilityInfo) {
|
||||||
PassiveAbilityLoader passiveAbilityLoader = (PassiveAbilityLoader) abilityLoader;
|
PassiveAbilityInfo passiveAbilityInfo = (PassiveAbilityInfo) abilityInfo;
|
||||||
|
|
||||||
// TODO Set Hidden Ability
|
// TODO Set Hidden Ability
|
||||||
this.passiveAbilityManager.registerAbility(abilityClass, passiveAbilityLoader);
|
this.passiveAbilityManager.registerAbility(abilityClass, passiveAbilityInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AbilityInfo abilityInfo = new AbilityInfo(abilityClass, abilityData, abilityLoader, abilityConfig);
|
this.abilities.put(abilityInfo.getName(), abilityInfo);
|
||||||
this.abilities.put(abilityData.name(), abilityInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbilityData getAbilityData(Class<? extends Ability> abilityClass) throws AbilityException {
|
protected AbilityInfo getAbilityInfo(Class<? extends Ability> 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 {
|
|
||||||
try {
|
try {
|
||||||
return abilityData.abilityLoader().newInstance();
|
return ((Class<? extends AbilityInfo>) ((ParameterizedType) abilityClass.getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
|
||||||
} catch (InstantiationException | IllegalAccessException e) {
|
} catch (Exception e) {
|
||||||
throw new AbilityException(e);
|
throw new AbilityException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbilityConfig getAbilityConfig(Class<? extends Ability> abilityClass) throws AbilityException {
|
private AbilityConfig getAbilityConfig(Class<? extends Ability> abilityClass) throws AbilityException {
|
||||||
try {
|
try {
|
||||||
return ConfigManager.getConfig(((Class<? extends AbilityConfig>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
|
return ConfigManager.getConfig(((Class<? extends AbilityConfig>) ((ParameterizedType) abilityClass.getGenericSuperclass()).getActualTypeArguments()[1]));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new AbilityException(e);
|
throw new AbilityException(e);
|
||||||
}
|
}
|
||||||
|
@ -339,8 +326,8 @@ public class AbilityManager extends Module {
|
||||||
return new ArrayList<>(this.abilities.values());
|
return new ArrayList<>(this.abilities.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Ability> getAbilities(Element element) {
|
public List<AbilityInfo> getAbilities(Element element) {
|
||||||
return this.playerAbilitySet.stream()
|
return this.abilities.values().stream()
|
||||||
.filter(ability ->
|
.filter(ability ->
|
||||||
{
|
{
|
||||||
if (ability.getElement().equals(element)) {
|
if (ability.getElement().equals(element)) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.projectkorra.projectkorra.ability;
|
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.Module;
|
||||||
import com.projectkorra.projectkorra.module.ModuleManager;
|
import com.projectkorra.projectkorra.module.ModuleManager;
|
||||||
import com.projectkorra.projectkorra.player.BendingPlayer;
|
import com.projectkorra.projectkorra.player.BendingPlayer;
|
||||||
|
@ -27,7 +27,7 @@ public class ComboAbilityManager extends Module {
|
||||||
private final AbilityManager abilityManager;
|
private final AbilityManager abilityManager;
|
||||||
|
|
||||||
private final Map<UUID, LinkedList<Combination>> recentlyUsed = new HashMap<>();
|
private final Map<UUID, LinkedList<Combination>> recentlyUsed = new HashMap<>();
|
||||||
private final List<ComboAbilityInfo> abilities = new ArrayList<>();
|
private final List<ComboAbility> abilities = new ArrayList<>();
|
||||||
|
|
||||||
private final long combinationMax = 8;
|
private final long combinationMax = 8;
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@ public class ComboAbilityManager extends Module {
|
||||||
this.abilities.clear();
|
this.abilities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAbility(Class<? extends Ability> abilityClass, AbilityData abilityData, ComboAbilityLoader comboAbilityLoader) {
|
public void registerAbility(Class<? extends Ability> abilityClass, ComboAbilityInfo comboAbilityInfo) {
|
||||||
ComboAbilityInfo comboAbilityInfo = new ComboAbilityInfo(abilityClass, abilityData.name(), comboAbilityLoader.getCombination());
|
ComboAbility comboAbility = new ComboAbility(abilityClass, comboAbilityInfo.getName(), comboAbilityInfo.getCombination());
|
||||||
|
|
||||||
this.abilities.add(comboAbilityInfo);
|
this.abilities.add(comboAbility);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processComboAbility(Player player, ClickType clickType) {
|
private void processComboAbility(Player player, ClickType clickType) {
|
||||||
|
@ -59,31 +59,29 @@ public class ComboAbilityManager extends Module {
|
||||||
recentlyUsed.removeLast();
|
recentlyUsed.removeLast();
|
||||||
}
|
}
|
||||||
|
|
||||||
ComboAbilityInfo comboAbilityInfo = getComboAbiblity(recentlyUsed);
|
ComboAbility comboAbility = getComboAbility(recentlyUsed);
|
||||||
|
|
||||||
if (comboAbilityInfo == null) {
|
if (comboAbility == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player.hasPermission("bending.ability." + comboAbilityInfo.abilityName)) {
|
if (!player.hasPermission("bending.ability." + comboAbility.abilityName)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.abilityManager.createAbility(player, comboAbilityInfo.abilityClass);
|
this.abilityManager.createAbility(player, comboAbility.abilityClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ComboAbilityInfo getComboAbiblity(LinkedList<Combination> recentlyUsed) {
|
private ComboAbility getComboAbility(LinkedList<Combination> recentlyUsed) {
|
||||||
for (ComboAbilityInfo comboAbilityInfo : this.abilities) {
|
for (ComboAbility comboAbility : this.abilities) {
|
||||||
LinkedList<Combination> abilityCombinations = comboAbilityInfo.combinations;
|
int comboSize = comboAbility.combinations.size();
|
||||||
|
|
||||||
int comboSize = abilityCombinations.size();
|
|
||||||
|
|
||||||
if (recentlyUsed.size() < comboSize) {
|
if (recentlyUsed.size() < comboSize) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recentlyUsed.subList(0, comboSize).equals(abilityCombinations)) {
|
if (recentlyUsed.subList(0, comboSize).equals(comboAbility.combinations)) {
|
||||||
return comboAbilityInfo;
|
return comboAbility;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,16 +197,15 @@ public class ComboAbilityManager extends Module {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ComboAbilityInfo {
|
private class ComboAbility {
|
||||||
private final Class<? extends Ability> abilityClass;
|
private final Class<? extends Ability> abilityClass;
|
||||||
private final String abilityName;
|
private final String abilityName;
|
||||||
private final LinkedList<Combination> combinations;
|
private final List<Combination> combinations;
|
||||||
|
|
||||||
ComboAbilityInfo(Class<? extends Ability> abilityClass, String abilityName, LinkedList<Combination> combinations) {
|
ComboAbility(Class<? extends Ability> abilityClass, String abilityName, List<Combination> combinations) {
|
||||||
this.abilityClass = abilityClass;
|
this.abilityClass = abilityClass;
|
||||||
this.abilityName = abilityName;
|
this.abilityName = abilityName;
|
||||||
this.combinations = combinations;
|
this.combinations = combinations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
package com.projectkorra.projectkorra.ability;
|
package com.projectkorra.projectkorra.ability;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.ability.api.PlayerBindAbilityEvent;
|
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.AbilityEndEvent;
|
||||||
import com.projectkorra.projectkorra.event.PlayerSwingEvent;
|
import com.projectkorra.projectkorra.event.PlayerSwingEvent;
|
||||||
import com.projectkorra.projectkorra.module.Module;
|
import com.projectkorra.projectkorra.module.Module;
|
||||||
|
@ -13,11 +14,7 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class MultiAbilityManager extends Module {
|
public class MultiAbilityManager extends Module {
|
||||||
|
|
||||||
|
@ -25,6 +22,7 @@ public class MultiAbilityManager extends Module {
|
||||||
private final AbilityManager abilityManager;
|
private final AbilityManager abilityManager;
|
||||||
|
|
||||||
private final Map<String, MultiAbility> abilities = new HashMap<>();
|
private final Map<String, MultiAbility> abilities = new HashMap<>();
|
||||||
|
private final Map<String, Class<? extends Ability>> multiAbilities = new HashMap<>();
|
||||||
|
|
||||||
private final Map<UUID, Class<? extends Ability>> playerMultiAbility = new HashMap<>();
|
private final Map<UUID, Class<? extends Ability>> playerMultiAbility = new HashMap<>();
|
||||||
private final Map<UUID, List<String>> playerAbilities = new HashMap<>();
|
private final Map<UUID, List<String>> playerAbilities = new HashMap<>();
|
||||||
|
@ -36,17 +34,21 @@ public class MultiAbilityManager extends Module {
|
||||||
this.abilityManager = ModuleManager.getModule(AbilityManager.class);
|
this.abilityManager = ModuleManager.getModule(AbilityManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAbility(Class<? extends Ability> abilityClass, AbilityData abilityData, MultiAbilityLoader multiAbilityLoader) {
|
public void registerAbility(Class<? extends Ability> abilityClass, MultiAbilityInfo multiAbilityInfo) {
|
||||||
List<String> abilities = multiAbilityLoader.getAbilities().stream()
|
List<Class<? extends Ability>> abilities = multiAbilityInfo.getAbilities();
|
||||||
.map(ability -> ability.getDeclaredAnnotation(AbilityData.class))
|
|
||||||
.map(AbilityData::name)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// TODO Exception handling for multi abilities with missing AbilityData annotations
|
Map<String, Class<? extends Ability>> abilitiesByName = new HashMap<>();
|
||||||
|
|
||||||
MultiAbility multiAbility = new MultiAbility(abilityClass, abilityData.name(), abilities);
|
for (Class<? extends Ability> 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
|
@EventHandler
|
||||||
|
@ -74,6 +76,20 @@ public class MultiAbilityManager extends Module {
|
||||||
player.getInventory().setHeldItemSlot(0);
|
player.getInventory().setHeldItemSlot(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onMultiAbilitySwing(PlayerSwingEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
|
String abilityName = event.getAbilityName();
|
||||||
|
Class<? extends Ability> abilityClass = this.multiAbilities.get(abilityName);
|
||||||
|
|
||||||
|
if (abilityClass == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ability ability = this.abilityManager.createAbility(player, abilityClass);
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onAbilityEnd(AbilityEndEvent event) {
|
public void onAbilityEnd(AbilityEndEvent event) {
|
||||||
Ability ability = event.getAbility();
|
Ability ability = event.getAbility();
|
||||||
|
@ -124,9 +140,9 @@ public class MultiAbilityManager extends Module {
|
||||||
public class MultiAbility {
|
public class MultiAbility {
|
||||||
private final Class<? extends Ability> abilityClass;
|
private final Class<? extends Ability> abilityClass;
|
||||||
private final String abilityName;
|
private final String abilityName;
|
||||||
private final List<String> abilities;
|
private final Set<String> abilities;
|
||||||
|
|
||||||
MultiAbility(Class<? extends Ability> abilityClass, String abilityName, List<String> abilities) {
|
MultiAbility(Class<? extends Ability> abilityClass, String abilityName, Set<String> abilities) {
|
||||||
this.abilityClass = abilityClass;
|
this.abilityClass = abilityClass;
|
||||||
this.abilityName = abilityName;
|
this.abilityName = abilityName;
|
||||||
this.abilities = abilities;
|
this.abilities = abilities;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.projectkorra.projectkorra.ability;
|
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.Element;
|
||||||
import com.projectkorra.projectkorra.element.SubElement;
|
import com.projectkorra.projectkorra.element.SubElement;
|
||||||
import com.projectkorra.projectkorra.module.Module;
|
import com.projectkorra.projectkorra.module.Module;
|
||||||
|
@ -19,7 +19,7 @@ public class PassiveAbilityManager extends Module {
|
||||||
private final BendingPlayerManager bendingPlayerManager;
|
private final BendingPlayerManager bendingPlayerManager;
|
||||||
private final AbilityManager abilityManager;
|
private final AbilityManager abilityManager;
|
||||||
|
|
||||||
private final Map<Class<? extends Ability>, PassiveAbilityLoader> abilities = new HashMap<>();
|
private final Map<Class<? extends Ability>, PassiveAbilityInfo> abilities = new HashMap<>();
|
||||||
|
|
||||||
private PassiveAbilityManager() {
|
private PassiveAbilityManager() {
|
||||||
super("Passive Ability");
|
super("Passive Ability");
|
||||||
|
@ -28,12 +28,12 @@ public class PassiveAbilityManager extends Module {
|
||||||
this.abilityManager = ModuleManager.getModule(AbilityManager.class);
|
this.abilityManager = ModuleManager.getModule(AbilityManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAbility(Class<? extends Ability> abilityClass, PassiveAbilityLoader passiveAbilityLoader) {
|
public void registerAbility(Class<? extends Ability> abilityClass, PassiveAbilityInfo passiveAbilityInfo) {
|
||||||
this.abilities.put(abilityClass, passiveAbilityLoader);
|
this.abilities.put(abilityClass, passiveAbilityInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerPassives(Player player) {
|
public void registerPassives(Player player) {
|
||||||
this.abilities.forEach((abilityClass, passiveAbilityLoader) -> {
|
this.abilities.forEach((abilityClass, passiveAbilityInfo) -> {
|
||||||
if (!canUsePassive(player, abilityClass)) {
|
if (!canUsePassive(player, abilityClass)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ public class PassiveAbilityManager extends Module {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!passiveAbilityLoader.isInstantiable()) {
|
if (!passiveAbilityInfo.isInstantiable()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,13 +53,13 @@ public class PassiveAbilityManager extends Module {
|
||||||
|
|
||||||
public boolean canUsePassive(Player player, Class<? extends Ability> abilityClass) {
|
public boolean canUsePassive(Player player, Class<? extends Ability> abilityClass) {
|
||||||
BendingPlayer bendingPlayer = this.bendingPlayerManager.getBendingPlayer(player);
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Element element = passiveAbilityLoader.getElement();
|
Element element = passiveAbilityInfo.getElement();
|
||||||
|
|
||||||
if (element instanceof SubElement) {
|
if (element instanceof SubElement) {
|
||||||
element = ((SubElement) element).getParent();
|
element = ((SubElement) element).getParent();
|
||||||
|
@ -80,7 +80,7 @@ public class PassiveAbilityManager extends Module {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PassiveAbilityLoader getPassiveAbility(Class<? extends Ability> abilityClass) {
|
public PassiveAbilityInfo getPassiveAbility(Class<? extends Ability> abilityClass) {
|
||||||
return this.abilities.get(abilityClass);
|
return this.abilities.get(abilityClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,12 @@ package com.projectkorra.projectkorra.ability.api;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.projectkorra.projectkorra.ability.info.AbilityInfo;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.Element;
|
|
||||||
import com.projectkorra.projectkorra.GeneralMethods;
|
import com.projectkorra.projectkorra.GeneralMethods;
|
||||||
import com.projectkorra.projectkorra.ability.util.Collision;
|
import com.projectkorra.projectkorra.ability.util.Collision;
|
||||||
import com.projectkorra.projectkorra.airbending.AirSpout;
|
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.configuration.configs.properties.AirPropertiesConfig;
|
||||||
import com.projectkorra.projectkorra.util.ParticleEffect;
|
import com.projectkorra.projectkorra.util.ParticleEffect;
|
||||||
|
|
||||||
public abstract class AirAbility<C extends AbilityConfig> extends ElementalAbility<C> {
|
public abstract class AirAbility<Info extends AbilityInfo, C extends AbilityConfig> extends ElementalAbility<Info, C> {
|
||||||
|
|
||||||
public AirAbility(final C config, final Player player) {
|
public AirAbility(final C config, final Player player) {
|
||||||
super(config, player);
|
super(config, player);
|
||||||
|
@ -34,11 +34,6 @@ public abstract class AirAbility<C extends AbilityConfig> extends ElementalAbili
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Element getElement() {
|
|
||||||
return Element.AIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleCollision(final Collision collision) {
|
public void handleCollision(final Collision collision) {
|
||||||
super.handleCollision(collision);
|
super.handleCollision(collision);
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package com.projectkorra.projectkorra.ability.api;
|
package com.projectkorra.projectkorra.ability.api;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import com.projectkorra.projectkorra.GeneralMethods;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.ability.Ability;
|
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.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.World.Environment;
|
import org.bukkit.World.Environment;
|
||||||
|
@ -16,18 +16,18 @@ import org.bukkit.block.data.Waterlogged;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.GeneralMethods;
|
import java.util.Arrays;
|
||||||
import com.projectkorra.projectkorra.configuration.ConfigManager;
|
import java.util.HashSet;
|
||||||
import com.projectkorra.projectkorra.configuration.configs.abilities.AbilityConfig;
|
import java.util.List;
|
||||||
import com.projectkorra.projectkorra.configuration.configs.properties.EarthPropertiesConfig;
|
import java.util.Set;
|
||||||
import com.projectkorra.projectkorra.configuration.configs.properties.WaterPropertiesConfig;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ElementalAbility is used to hold methods that should be accessible by every
|
* 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
|
* Air, Water, Earth, Fire, Chi, or AvatarAbility. This class is mainly used to
|
||||||
* keep CoreAbility from becoming too cluttered.
|
* keep CoreAbility from becoming too cluttered.
|
||||||
*/
|
*/
|
||||||
public abstract class ElementalAbility<C extends AbilityConfig> extends Ability<C> {
|
public abstract class ElementalAbility<Info extends AbilityInfo, C extends AbilityConfig> extends Ability<Info, C> {
|
||||||
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[] 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[] 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 };
|
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 };
|
||||||
|
|
|
@ -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.element.Element;
|
||||||
import com.projectkorra.projectkorra.player.BendingPlayer;
|
import com.projectkorra.projectkorra.player.BendingPlayer;
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
public interface AbilityInfo {
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target(ElementType.TYPE)
|
|
||||||
public @interface AbilityData {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the ability is used for commands such as <b>/bending
|
* The name of the ability is used for commands such as <b>/bending
|
||||||
|
@ -25,25 +18,28 @@ public @interface AbilityData {
|
||||||
*
|
*
|
||||||
* @return Returns the name of the ability
|
* @return Returns the name of the ability
|
||||||
*/
|
*/
|
||||||
String name();
|
String getName();
|
||||||
|
|
||||||
/**
|
Element getElement();
|
||||||
* @return The class used to register this ability.
|
|
||||||
*/
|
|
||||||
Class<? extends AbilityLoader> abilityLoader();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if this is a hidden ability.
|
* @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
|
* @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.
|
* @return The version of the ability as a String.
|
||||||
*/
|
*/
|
||||||
String version() default "1.0";
|
default String getVersion() {
|
||||||
|
return "1.0";
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package com.projectkorra.projectkorra.ability.loader;
|
package com.projectkorra.projectkorra.ability.info;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.ability.AbilityManager;
|
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
|
* Called when the ability is loaded by PK. This is where the developer
|
||||||
* registers Listeners and Permissions.
|
* registers Listeners and Permissions.
|
||||||
*/
|
*/
|
||||||
public abstract void load();
|
void load();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called whenever ProjectKorra stops and the ability is unloaded. This
|
* 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
|
* Any CoreAbility instances do not need to be cleaned up by stop method, as
|
||||||
* they will be cleaned up by {@link AbilityManager#removeAll()}.
|
* they will be cleaned up by {@link AbilityManager#removeAll()}.
|
||||||
*/
|
*/
|
||||||
public abstract void stop();
|
void stop();
|
||||||
}
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.projectkorra.projectkorra.ability.info;
|
||||||
|
|
||||||
|
public interface AvatarAbilityInfo extends AbilityInfo {
|
||||||
|
|
||||||
|
boolean requireAvatar();
|
||||||
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
package com.projectkorra.projectkorra.ability.loader;
|
package com.projectkorra.projectkorra.ability.info;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.ability.ComboAbilityManager;
|
import com.projectkorra.projectkorra.ability.ComboAbilityManager;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
public abstract class ComboAbilityLoader extends AbilityLoader {
|
public interface ComboAbilityInfo extends AbilityInfo {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of abilities which constitute the combo.
|
* Returns the list of abilities which constitute the combo.
|
||||||
*
|
*
|
||||||
* @return A {@link LinkedList} containing the combo's steps.
|
* @return A {@link LinkedList} containing the combo's steps.
|
||||||
*/
|
*/
|
||||||
public abstract LinkedList<ComboAbilityManager.Combination> getCombination();
|
LinkedList<ComboAbilityManager.Combination> getCombination();
|
||||||
}
|
}
|
|
@ -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:
|
||||||
|
* <p>
|
||||||
|
* {@code new
|
||||||
|
* MultiAbilitySub("SubAbility", Element.LIGHTNING);}
|
||||||
|
*
|
||||||
|
* @return a list of sub MultiAbilities
|
||||||
|
*/
|
||||||
|
List<Class<? extends Ability>> getAbilities();
|
||||||
|
}
|
|
@ -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,
|
* 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
|
* @return false if this passive should always be on
|
||||||
*/
|
*/
|
||||||
public abstract boolean isInstantiable();
|
boolean isInstantiable();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is used if the passive should progress
|
* This is used if the passive should progress
|
||||||
*
|
*
|
||||||
* @return false if progress() shouldn't be called;
|
* @return false if progress() shouldn't be called;
|
||||||
*/
|
*/
|
||||||
public abstract boolean isProgressable();
|
boolean isProgressable();
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,8 +0,0 @@
|
||||||
package com.projectkorra.projectkorra.ability.loader;
|
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.element.Element;
|
|
||||||
|
|
||||||
public abstract class AbilityLoader {
|
|
||||||
|
|
||||||
public abstract Element getElement();
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
package com.projectkorra.projectkorra.ability.loader;
|
|
||||||
|
|
||||||
public abstract class AvatarAbilityLoader extends AbilityLoader {
|
|
||||||
|
|
||||||
public abstract boolean requireAvatar();
|
|
||||||
}
|
|
|
@ -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:
|
|
||||||
* <p>
|
|
||||||
* {@code new
|
|
||||||
* MultiAbilitySub("SubAbility", Element.LIGHTNING);}
|
|
||||||
*
|
|
||||||
* @return a list of sub MultiAbilities
|
|
||||||
*/
|
|
||||||
public abstract List<Class<? extends Ability>> getAbilities();
|
|
||||||
}
|
|
|
@ -16,14 +16,14 @@ import java.util.List;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
public class AbilityRegistery<T> {
|
public class AbilityRegistry<T> {
|
||||||
|
|
||||||
private final Plugin plugin;
|
private final Plugin plugin;
|
||||||
private ClassLoader loader;
|
private ClassLoader loader;
|
||||||
private JarFile jar;
|
private JarFile jar;
|
||||||
private String path;
|
private String path;
|
||||||
|
|
||||||
public AbilityRegistery(final JavaPlugin plugin, final String packageBase) {
|
public AbilityRegistry(final JavaPlugin plugin, final String packageBase) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.loader = plugin.getClass().getClassLoader();
|
this.loader = plugin.getClass().getClassLoader();
|
||||||
this.path = packageBase.replace('.', '/');
|
this.path = packageBase.replace('.', '/');
|
|
@ -17,14 +17,14 @@ import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class AddonAbilityRegistery<T> {
|
public class AddonAbilityRegistry<T> {
|
||||||
|
|
||||||
private final Plugin plugin;
|
private final Plugin plugin;
|
||||||
private final File directory;
|
private final File directory;
|
||||||
private final ArrayList<File> files;
|
private final ArrayList<File> files;
|
||||||
private ClassLoader loader;
|
private ClassLoader loader;
|
||||||
|
|
||||||
public AddonAbilityRegistery(final Plugin plugin, final File directory) {
|
public AddonAbilityRegistry(final Plugin plugin, final File directory) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.directory = directory;
|
this.directory = directory;
|
||||||
this.files = new ArrayList<File>();
|
this.files = new ArrayList<File>();
|
|
@ -1,14 +1,13 @@
|
||||||
package com.projectkorra.projectkorra.airbending.passive;
|
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.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.projectkorra.projectkorra.ability.api.AirAbility;
|
public class AirSaturation extends AirAbility<AirSaturationInfo, AirSaturationConfig> {
|
||||||
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<AirSaturationConfig> implements PassiveAbility {
|
|
||||||
public AirSaturation(final AirSaturationConfig config, final Player player) {
|
public AirSaturation(final AirSaturationConfig config, final Player player) {
|
||||||
super(config, player);
|
super(config, player);
|
||||||
}
|
}
|
||||||
|
@ -45,6 +44,19 @@ public class AirSaturation extends AirAbility<AirSaturationConfig> implements Pa
|
||||||
return this.player.getLocation();
|
return this.player.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<AirSaturationConfig> getConfigType() {
|
||||||
|
return AirSaturationConfig.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AirSaturationInfo extends AirPassiveAbilityInfo {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "AirSaturation";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInstantiable() {
|
public boolean isInstantiable() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -54,9 +66,4 @@ public class AirSaturation extends AirAbility<AirSaturationConfig> implements Pa
|
||||||
public boolean isProgressable() {
|
public boolean isProgressable() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<AirSaturationConfig> getConfigType() {
|
|
||||||
return AirSaturationConfig.class;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue