mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
- Minor typo correction in a couple method names.
This commit is contained in:
@@ -1702,7 +1702,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
|
||||
// A blink effect implemented using ChangeZone API
|
||||
return false;
|
||||
} else if (subApi == ApiType.DelayedTrigger) {
|
||||
SpellAbility exec = causeSub.getAdditonalAbility("Execute");
|
||||
SpellAbility exec = causeSub.getAdditionalAbility("Execute");
|
||||
if (exec != null && exec.getApi() == ApiType.ChangeZone) {
|
||||
if ("Exile".equals(exec.getParam("Origin")) && "Battlefield".equals(exec.getParam("Destination"))) {
|
||||
// A blink effect implemented using a delayed trigger
|
||||
|
||||
@@ -56,7 +56,7 @@ public class RepeatAi extends SpellAbilityAi {
|
||||
}
|
||||
|
||||
// setup subability to repeat
|
||||
final SpellAbility repeat = sa.getAdditonalAbility("RepeatSubAbility");
|
||||
final SpellAbility repeat = sa.getAdditionalAbility("RepeatSubAbility");
|
||||
|
||||
if (repeat == null) {
|
||||
return mandatory;
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package forge.ai.ability;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.ai.ComputerUtilCard;
|
||||
import forge.ai.SpellAbilityAi;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -17,6 +14,8 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class RepeatEachAi extends SpellAbilityAi {
|
||||
|
||||
@@ -82,7 +81,7 @@ public class RepeatEachAi extends SpellAbilityAi {
|
||||
return false;
|
||||
} else if ("AllPlayerLoseLife".equals(logic)) {
|
||||
final Card source = sa.getHostCard();
|
||||
AbilitySub repeat = sa.getAdditonalAbility("RepeatSubAbility");
|
||||
AbilitySub repeat = sa.getAdditionalAbility("RepeatSubAbility");
|
||||
|
||||
String svar = repeat.getSVar(repeat.getParam("LifeAmount"));
|
||||
// replace RememberedPlayerCtrl with YouCtrl
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
*/
|
||||
package forge.game.ability;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import forge.card.CardStateName;
|
||||
import forge.game.ability.effects.CharmEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -28,10 +31,6 @@ import forge.util.FileSection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AbilityFactory class.
|
||||
@@ -221,7 +220,7 @@ public final class AbilityFactory {
|
||||
SpellAbility p = parent;
|
||||
AbilitySub sub = null;
|
||||
while (p != null) {
|
||||
sub = p.getAdditonalAbility(name);
|
||||
sub = p.getAdditionalAbility(name);
|
||||
if (sub != null) {
|
||||
break;
|
||||
}
|
||||
@@ -235,7 +234,7 @@ public final class AbilityFactory {
|
||||
}
|
||||
|
||||
for (final String key : additionalAbilityKeys) {
|
||||
if (mapParams.containsKey(key) && spellAbility.getAdditonalAbility(key) == null) {
|
||||
if (mapParams.containsKey(key) && spellAbility.getAdditionalAbility(key) == null) {
|
||||
spellAbility.setAdditionalAbility(key, getSubAbility(hostCard, mapParams.get(key), spellAbility));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ public class BranchEffect extends SpellAbilityEffect {
|
||||
|
||||
AbilitySub sub = null;
|
||||
if (Expressions.compare(svarValue, operator, operandValue)) {
|
||||
sub = sa.getAdditonalAbility("TrueSubAbility");
|
||||
sub = sa.getAdditionalAbility("TrueSubAbility");
|
||||
} else {
|
||||
sub = sa.getAdditonalAbility("FalseSubAbility");
|
||||
sub = sa.getAdditionalAbility("FalseSubAbility");
|
||||
}
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -11,8 +12,6 @@ import forge.util.MyRandom;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class ChooseGenericEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
@@ -32,7 +31,7 @@ public class ChooseGenericEffect extends SpellAbilityEffect {
|
||||
final Card host = sa.getHostCard();
|
||||
|
||||
final List<SpellAbility> abilities = Lists.<SpellAbility>newArrayList(sa.getAdditionalAbilityList("Choices"));
|
||||
final SpellAbility fallback = sa.getAdditonalAbility("FallbackAbility");
|
||||
final SpellAbility fallback = sa.getAdditionalAbility("FallbackAbility");
|
||||
|
||||
final List<Player> tgtPlayers = getDefinedPlayersOrTargeted(sa);
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -11,10 +13,6 @@ import forge.game.spellability.TargetRestrictions;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
@@ -107,7 +105,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
}
|
||||
card.getGame().getAction().nofityOfValue(sa, card, sb.toString(), null);
|
||||
if (sa.hasParam("ChooseNumberSubAbility")) {
|
||||
AbilitySub sub = sa.getAdditonalAbility("ChooseNumberSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("ChooseNumberSubAbility");
|
||||
|
||||
for (Player p : chooseMap.keySet()) {
|
||||
card.addRemembered(p);
|
||||
@@ -118,7 +116,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (sa.hasParam("Lowest")) {
|
||||
AbilitySub sub = sa.getAdditonalAbility("Lowest");
|
||||
AbilitySub sub = sa.getAdditionalAbility("Lowest");
|
||||
|
||||
for (Player p : lowestNum) {
|
||||
card.addRemembered(p);
|
||||
@@ -128,7 +126,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("Highest")) {
|
||||
AbilitySub sub = sa.getAdditonalAbility("Highest");
|
||||
AbilitySub sub = sa.getAdditionalAbility("Highest");
|
||||
|
||||
for (Player p : highestNum) {
|
||||
card.addRemembered(p);
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ChoosePlayerEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
// SubAbility that only fires if a player is chosen
|
||||
AbilitySub chosenSA = sa.getAdditonalAbility("ChooseSubAbility");
|
||||
AbilitySub chosenSA = sa.getAdditionalAbility("ChooseSubAbility");
|
||||
if (chosenSA != null) {
|
||||
if (!chosenSA.getHostCard().equals(sa.getHostCard())) {
|
||||
System.out.println("Warning: ChooseSubAbility had the wrong host set (potentially after cloning the root SA), attempting to correct...");
|
||||
@@ -72,7 +72,7 @@ public class ChoosePlayerEffect extends SpellAbilityEffect {
|
||||
}
|
||||
} else {
|
||||
// SubAbility that only fires if a player is not chosen
|
||||
AbilitySub notChosenSA = sa.getAdditonalAbility("CantChooseSubAbility");
|
||||
AbilitySub notChosenSA = sa.getAdditionalAbility("CantChooseSubAbility");
|
||||
if (notChosenSA != null) {
|
||||
if (!notChosenSA.getHostCard().equals(sa.getHostCard())) {
|
||||
System.out.println("Warning: CantChooseSubAbility had the wrong host set (potentially after cloning the root SA), attempting to correct...");
|
||||
|
||||
@@ -36,14 +36,14 @@ public class ClashEffect extends SpellAbilityEffect {
|
||||
|
||||
if (victory) {
|
||||
|
||||
AbilitySub sub = sa.getAdditonalAbility("WinSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("WinSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
|
||||
runParams.put("Won", "True");
|
||||
} else {
|
||||
AbilitySub sub = sa.getAdditonalAbility("OtherwiseSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("OtherwiseSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -10,9 +12,6 @@ import forge.game.trigger.TriggerHandler;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class DelayedTriggerEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -71,8 +70,8 @@ public class DelayedTriggerEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
|
||||
if (mapParams.containsKey("Execute") || sa.hasAdditonalAbility("Execute")) {
|
||||
SpellAbility overridingSA = sa.getAdditonalAbility("Execute");
|
||||
if (mapParams.containsKey("Execute") || sa.hasAdditionalAbility("Execute")) {
|
||||
SpellAbility overridingSA = sa.getAdditionalAbility("Execute");
|
||||
overridingSA.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
overridingSA.setDeltrigActivatingPlayer(sa.getActivatingPlayer()); // ensure that the original activator can be restored later
|
||||
// Set Transform timestamp when the delayed trigger is created
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -17,8 +18,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
|
||||
public static boolean[] BOTH_CHOICES = new boolean[] {false, true};
|
||||
@@ -78,12 +77,12 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (resultIsHeads) {
|
||||
AbilitySub sub = sa.getAdditonalAbility("HeadsSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("HeadsSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
} else {
|
||||
AbilitySub sub = sa.getAdditonalAbility("TailsSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("TailsSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
@@ -93,7 +92,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
if (sa.getParam("RememberWinner") != null) {
|
||||
host.addRemembered(host);
|
||||
}
|
||||
AbilitySub sub = sa.getAdditonalAbility("WinSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("WinSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
@@ -103,7 +102,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
host.addRemembered(host);
|
||||
}
|
||||
|
||||
AbilitySub sub = sa.getAdditonalAbility("LoseSubAbility");
|
||||
AbilitySub sub = sa.getAdditionalAbility("LoseSubAbility");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
@@ -143,7 +142,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
} while (sa.hasParam("FlipUntilYouLose") && result != false);
|
||||
|
||||
if (sa.hasParam("FlipUntilYouLose")) {
|
||||
sa.getAdditonalAbility("LoseSubAbility").setSVar(sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X", "Number$" + numSuccesses);
|
||||
sa.getAdditionalAbility("LoseSubAbility").setSVar(sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X", "Number$" + numSuccesses);
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -188,7 +187,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
} while (sa.hasParam("FlipUntilYouLose") && wonFlip);
|
||||
|
||||
if (sa.hasParam("FlipUntilYouLose")) {
|
||||
sa.getAdditonalAbility("LoseSubAbility").setSVar(sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X", "Number$" + numSuccesses);
|
||||
sa.getAdditionalAbility("LoseSubAbility").setSVar(sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X", "Number$" + numSuccesses);
|
||||
}
|
||||
|
||||
return wonFlip;
|
||||
|
||||
@@ -3,7 +3,6 @@ package forge.game.ability.effects;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -104,7 +103,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
|
||||
AbilitySub sub = sa.getAdditonalAbility("ChosenPile");
|
||||
AbilitySub sub = sa.getAdditionalAbility("ChosenPile");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.card.*;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -22,6 +13,10 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class RepeatEachEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -31,7 +26,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
Card source = sa.getHostCard();
|
||||
|
||||
AbilitySub repeat = sa.getAdditonalAbility("RepeatSubAbility");
|
||||
AbilitySub repeat = sa.getAdditionalAbility("RepeatSubAbility");
|
||||
|
||||
if (repeat != null && !repeat.getHostCard().equals(source)) {
|
||||
// TODO: for some reason, the host card of the original additional SA is set to the cloned card when
|
||||
|
||||
@@ -25,7 +25,7 @@ public class RepeatEffect extends SpellAbilityEffect {
|
||||
Card source = sa.getHostCard();
|
||||
|
||||
// setup subability to repeat
|
||||
AbilitySub repeat = sa.getAdditonalAbility("RepeatSubAbility");
|
||||
AbilitySub repeat = sa.getAdditionalAbility("RepeatSubAbility");
|
||||
|
||||
if (repeat != null && !repeat.getHostCard().equals(source)) {
|
||||
// TODO: for some reason, the host card of the original additional SA is set to the cloned card when
|
||||
|
||||
@@ -123,7 +123,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
||||
card.addRemembered(z);
|
||||
}
|
||||
|
||||
AbilitySub sub = sa.getAdditonalAbility("ChosenPile");
|
||||
AbilitySub sub = sa.getAdditionalAbility("ChosenPile");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
@@ -136,7 +136,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
||||
card.addRemembered(z);
|
||||
}
|
||||
|
||||
AbilitySub sub = sa.getAdditonalAbility("UnchosenPile");
|
||||
AbilitySub sub = sa.getAdditionalAbility("UnchosenPile");
|
||||
if (sub != null) {
|
||||
AbilityUtils.resolve(sub);
|
||||
}
|
||||
|
||||
@@ -17,24 +17,15 @@
|
||||
*/
|
||||
package forge.game.card;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.ImageKeys;
|
||||
import forge.StaticData;
|
||||
import forge.card.CardRules;
|
||||
import forge.card.CardSplitType;
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.CardType;
|
||||
import forge.card.*;
|
||||
import forge.card.CardType.CoreType;
|
||||
import forge.card.ICardFace;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
@@ -53,6 +44,10 @@ import forge.game.zone.ZoneType;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AbstractCardFactory class.
|
||||
@@ -667,7 +662,7 @@ public class CardFactory {
|
||||
if (from.getSubAbility() != null) {
|
||||
to.setSubAbility(from.getSubAbility().getCopy());
|
||||
}
|
||||
for (Map.Entry<String, AbilitySub> e : from.getAdditonalAbilities().entrySet()) {
|
||||
for (Map.Entry<String, AbilitySub> e : from.getAdditionalAbilities().entrySet()) {
|
||||
to.setAdditionalAbility(e.getKey(), e.getValue().getCopy());
|
||||
}
|
||||
for (Map.Entry<String, List<AbilitySub>> e : from.getAdditionalAbilityLists().entrySet()) {
|
||||
|
||||
@@ -21,15 +21,8 @@ import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.CardTraitBase;
|
||||
import forge.game.ForgeScript;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameActionUtil;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.IIdentifiable;
|
||||
import forge.game.*;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
@@ -48,7 +41,6 @@ import forge.game.trigger.TriggerType;
|
||||
import forge.game.trigger.WrappedAbility;
|
||||
import forge.util.Expressions;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
@@ -708,17 +700,17 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
view.updateDescription(this); //description changes when sub-abilities change
|
||||
}
|
||||
|
||||
public Map<String, AbilitySub> getAdditonalAbilities() {
|
||||
public Map<String, AbilitySub> getAdditionalAbilities() {
|
||||
return additionalAbilities;
|
||||
}
|
||||
public AbilitySub getAdditonalAbility(final String name) {
|
||||
if (hasAdditonalAbility(name)) {
|
||||
public AbilitySub getAdditionalAbility(final String name) {
|
||||
if (hasAdditionalAbility(name)) {
|
||||
return additionalAbilities.get(name);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasAdditonalAbility(final String name) {
|
||||
public boolean hasAdditionalAbility(final String name) {
|
||||
return additionalAbilities.containsKey(name);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user