Fixed some permission bugs with SubElements.

Made addons respect sub element permission nodes.
Force addon devs to add a new method to their sub bending abilities.
This commit is contained in:
Brendan Wilson 2015-01-16 15:34:14 -05:00
parent 784e84e8aa
commit 66537956ab
3 changed files with 154 additions and 25 deletions

View file

@ -1,5 +1,6 @@
package com.projectkorra.ProjectKorra.Ability;
import com.projectkorra.ProjectKorra.SubElement;
import com.projectkorra.ProjectKorra.Utilities.AbilityLoadable;
public abstract class AbilityModule extends AbilityLoadable implements Cloneable
@ -99,11 +100,10 @@ public abstract class AbilityModule extends AbilityLoadable implements Cloneable
{
}
/**
* Accessor Method to get whether this ability belongs to a sub element.
* EarthBlast is a normal earthbending ability. For EarthBlast, this returns false.
* LavaFlow is an earth sub-bending ability. For LavaFlow, this returns true.
* Accessor Method to get which SubElement the ability belongs to.
* If isSubAbility() returns true, the developer absolutely must implement this as well.
*
* List of sub-elements:
*
@ -126,10 +126,10 @@ public abstract class AbilityModule extends AbilityLoadable implements Cloneable
* Flight.
* SpiritualProjection.
*
* @return Whether or not this ability belongs to its element's sub bending.
* @return The SubElement the ability belongs to.
*/
public boolean isSubAbility()
public SubElement getSubElement()
{
return false;
return null;
}
}

View file

@ -33,6 +33,17 @@ public class AbilityModuleManager {
public static HashSet<String> metalbendingabilities;
public static HashSet<String> earthsubabilities;
public static HashSet<String> subabilities;
public static HashSet<String> lightningabilities;
public static HashSet<String> combustionabilities;
public static HashSet<String> lavaabilities;
public static HashSet<String> sandabilities;
public static HashSet<String> metalabilities;
public static HashSet<String> flightabilities;
public static HashSet<String> spiritualprojectionabilities;
public static HashSet<String> iceabilities;
public static HashSet<String> healingabilities;
public static HashSet<String> plantabilities;
public static HashSet<String> bloodabilities;
public static HashMap<String, String> descriptions;
@ -60,6 +71,17 @@ public class AbilityModuleManager {
subabilities = new HashSet<String>();
ability = loader.load(AbilityModule.class);
disabledStockAbilities = new HashSet<String>();
lightningabilities = new HashSet<String>();
combustionabilities = new HashSet<String>();
flightabilities = new HashSet<String>();
spiritualprojectionabilities = new HashSet<String>();
metalabilities = new HashSet<String>();
sandabilities = new HashSet<String>();
lavaabilities = new HashSet<String>();
healingabilities = new HashSet<String>();
plantabilities = new HashSet<String>();
iceabilities = new HashSet<String>();
bloodabilities = new HashSet<String>();
fill();
}
@ -83,6 +105,7 @@ public class AbilityModuleManager {
// Air Sub Abilities
if (a == StockAbilities.Flight) subabilities.add(a.name());
if (a == StockAbilities.Flight) flightabilities.add(a.name());
}
}
else if (StockAbilities.isWaterbending(a)) {
@ -108,6 +131,12 @@ public class AbilityModuleManager {
if (a == StockAbilities.PhaseChange) subabilities.add(a.name());
if (a == StockAbilities.IceSpike) subabilities.add(a.name());
if (a == StockAbilities.IceBlast) subabilities.add(a.name());
if (a == StockAbilities.HealingWaters) healingabilities.add(a.name());
if (a == StockAbilities.Bloodbending) bloodabilities.add(a.name());
if (a == StockAbilities.PhaseChange) iceabilities.add(a.name());
if (a == StockAbilities.IceSpike) iceabilities.add(a.name());
if (a == StockAbilities.IceBlast) iceabilities.add(a.name());
}
}
else if (StockAbilities.isEarthbending(a)) {
@ -130,6 +159,10 @@ public class AbilityModuleManager {
if (a == StockAbilities.MetalClips) subabilities.add(a.name());
if (a == StockAbilities.Extraction) subabilities.add(a.name());
if (a == StockAbilities.LavaFlow) subabilities.add(a.name());
if (a == StockAbilities.MetalClips) metalabilities.add(a.name());
if (a == StockAbilities.Extraction) metalabilities.add(a.name());
if (a == StockAbilities.LavaFlow) lavaabilities.add(a.name());
// if (a == StockAbilities.LavaSurge) earthsubabilities.add(a.name());
}
@ -153,6 +186,9 @@ public class AbilityModuleManager {
// Fire Sub Abilities
if (a == StockAbilities.Lightning) subabilities.add(a.name());
if (a == StockAbilities.Combustion) subabilities.add(a.name());
if (a == StockAbilities.Lightning) lightningabilities.add(a.name());
if (a == StockAbilities.Combustion) combustionabilities.add(a.name());
}
}
else if (StockAbilities.isChiBlocking(a)) {
@ -194,7 +230,48 @@ public class AbilityModuleManager {
if (ab.getElement() == Element.Chi.toString()) chiabilities.add(ab.getName());
if (ab.isShiftAbility()) shiftabilities.add(ab.getName());
if (ab.isHarmlessAbility()) harmlessabilities.add(ab.getName());
if (ab.isSubAbility()) subabilities.add(ab.getName());
if (ab.getSubElement() != null)
{
subabilities.add(ab.getName());
switch(ab.getSubElement())
{
case Bloodbending:
bloodabilities.add(ab.getName());
break;
case Combustion:
combustionabilities.add(ab.getName());
break;
case Flight:
flightabilities.add(ab.getName());
break;
case Healing:
healingabilities.add(ab.getName());
break;
case Icebending:
iceabilities.add(ab.getName());
break;
case Lavabending:
lavaabilities.add(ab.getName());
break;
case Lightning:
lightningabilities.add(ab.getName());
break;
case Metalbending:
metalabilities.add(ab.getName());
break;
case Plantbending:
plantabilities.add(ab.getName());
break;
case Sandbending:
sandabilities.add(ab.getName());
break;
case SpiritualProjection:
spiritualprojectionabilities.add(ab.getName());
break;
}
}
// if (ab.isMetalbendingAbility()) metalbendingabilities.add(ab.getName());
descriptions.put(ab.getName(), ab.getDescription());
authors.put(ab.getName(), ab.getAuthor());

View file

@ -297,17 +297,19 @@ public class Methods {
if (isFireAbility(ability) && !isBender(player, Element.Fire)) return false;
if (isChiAbility(ability) && !isBender(player, Element.Chi)) return false;
if (StockAbilities.isFlightAbility(ability) && !canAirFlight(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isSpiritualProjectionAbility(ability) && !canUseSpiritualProjection(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isCombustionbendingAbility(ability) && !canCombustionbend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isLightningbendingAbility(ability) && !canLightningbend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isSandbendingAbility(ability) && !canSandbend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isMetalbendingAbility(ability) && !canMetalbend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isLavabendingAbility(ability) && !canLavabend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isIcebendingAbility(ability) && !canIcebend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isHealingAbility(ability) && !canWaterHeal(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isPlantbendingAbility(ability) && !canPlantbend(plugin.getServer().getPlayer(player))) return false;
if (StockAbilities.isBloodbendingAbility(ability) && !canBloodbend(plugin.getServer().getPlayer(player))) return false;
if (isFlightAbility(ability) && !canAirFlight(plugin.getServer().getPlayer(player))) return false;
if (isSpiritualProjectionAbility(ability) && !canUseSpiritualProjection(plugin.getServer().getPlayer(player))) return false;
if (isCombustionbendingAbility(ability) && !canCombustionbend(plugin.getServer().getPlayer(player))) return false;
if (isLightningbendingAbility(ability) && !canLightningbend(plugin.getServer().getPlayer(player))) return false;
if (isSandbendingAbility(ability) && !canSandbend(plugin.getServer().getPlayer(player))) return false;
if (isMetalbendingAbility(ability) && !canMetalbend(plugin.getServer().getPlayer(player))) return false;
if (isLavabendingAbility(ability) && !canLavabend(plugin.getServer().getPlayer(player))) return false;
if (isIcebendingAbility(ability) && !canIcebend(plugin.getServer().getPlayer(player))) return false;
if (isHealingAbility(ability) && !canWaterHeal(plugin.getServer().getPlayer(player))) return false;
if (isPlantbendingAbility(ability) && !canPlantbend(plugin.getServer().getPlayer(player))) return false;
if (isBloodbendingAbility(ability) && !canBloodbend(plugin.getServer().getPlayer(player))) return false;
if (isRegionProtectedFromBuild(p, ability, p.getLocation())) return false;
if (Paralyze.isParalyzed(p) || Bloodbending.isBloodbended(p)) return false;
@ -1229,6 +1231,61 @@ public class Methods {
if (bPlayer.hasElement(element)) return true;
return false;
}
public static boolean isCombustionbendingAbility(String ability)
{
return AbilityModuleManager.combustionabilities.contains(ability);
}
public static boolean isLightningbendingAbility(String ability)
{
return AbilityModuleManager.lightningabilities.contains(ability);
}
public static boolean isHealingAbility(String ability)
{
return AbilityModuleManager.healingabilities.contains(ability);
}
public static boolean isIcebendingAbility(String ability)
{
return AbilityModuleManager.iceabilities.contains(ability);
}
public static boolean isPlantbendingAbility(String ability)
{
return AbilityModuleManager.plantabilities.contains(ability);
}
public static boolean isBloodbendingAbility(String ability)
{
return AbilityModuleManager.bloodabilities.contains(ability);
}
public static boolean isFlightAbility(String ability)
{
return AbilityModuleManager.flightabilities.contains(ability);
}
public static boolean isSpiritualProjectionAbility(String ability)
{
return AbilityModuleManager.spiritualprojectionabilities.contains(ability);
}
public static boolean isLavabendingAbility(String ability)
{
return AbilityModuleManager.lavaabilities.contains(ability);
}
public static boolean isMetalbendingAbility(String ability)
{
return AbilityModuleManager.metalabilities.contains(ability);
}
public static boolean isSandbendingAbility(String ability)
{
return AbilityModuleManager.sandabilities.contains(ability);
}
public static boolean isChiAbility(String ability) {
return AbilityModuleManager.chiabilities.contains(ability);
@ -1316,12 +1373,7 @@ public class Methods {
}
return false;
}
public static boolean isMetalbendingAbility(String ability) {
if (AbilityModuleManager.metalbendingabilities.contains(ability)) return true;
return false;
}
public static boolean isMetalBlock(Block block) {
if (block.getType() == Material.GOLD_BLOCK
|| block.getType() == Material.IRON_BLOCK