mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
CardFactory: remove everything about unparsedAbilities its not needed anymore
This commit is contained in:
@@ -6,6 +6,7 @@ import java.util.List;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.ai.ComputerUtil;
|
||||
import forge.ai.ComputerUtilCard;
|
||||
import forge.ai.ComputerUtilMana;
|
||||
@@ -456,8 +457,6 @@ public class TokenAi extends SpellAbilityAi {
|
||||
final String actualAbility = host.getSVar(s);
|
||||
final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
|
||||
c.addSpellAbility(grantedAbility);
|
||||
// added ability to intrinsic list so copies and clones work
|
||||
c.getCurrentState().addUnparsedAbility(actualAbility);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ package forge.game;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
@@ -369,7 +370,8 @@ public final class GameActionUtil {
|
||||
if (spliceKwCost == null)
|
||||
continue;
|
||||
|
||||
Map<String, String> params = AbilityFactory.getMapParams(c.getCurrentState().getFirstUnparsedAbility());
|
||||
SpellAbility firstSpell = c.getCurrentState().getFirstAbility();
|
||||
Map<String, String> params = Maps.newHashMap(firstSpell.getMapParams());
|
||||
AbilityRecordType rc = AbilityRecordType.getRecordType(params);
|
||||
ApiType api = rc.getApiTypeOf(params);
|
||||
AbilitySub subAbility = (AbilitySub) AbilityFactory.getAbility(AbilityRecordType.SubAbility, api, params, null, c, null);
|
||||
|
||||
@@ -30,6 +30,7 @@ import java.util.Map;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -440,16 +441,17 @@ public final class AbilityFactory {
|
||||
if(!card.isSplitCard())
|
||||
throw new IllegalStateException("Fuse ability may be built only on split cards");
|
||||
|
||||
final String strLeftAbility = card.getState(CardStateName.LeftSplit).getFirstUnparsedAbility();
|
||||
Map<String, String> leftMap = getMapParams(strLeftAbility);
|
||||
SpellAbility leftAbility = card.getState(CardStateName.LeftSplit).getFirstAbility();
|
||||
Map<String, String> leftMap = Maps.newHashMap(leftAbility.getMapParams());
|
||||
AbilityRecordType leftType = AbilityRecordType.getRecordType(leftMap);
|
||||
ApiType leftApi = leftType.getApiTypeOf(leftMap);
|
||||
leftMap.put("StackDecription", leftMap.get("SpellDescription"));
|
||||
leftMap.put("SpellDescription", "Fuse (you may cast both halves of this card from your hand).");
|
||||
leftMap.put("ActivationZone", "Hand");
|
||||
|
||||
final String strRightAbility = card.getState(CardStateName.RightSplit).getFirstUnparsedAbility();
|
||||
Map<String, String> rightMap = getMapParams(strRightAbility);
|
||||
|
||||
SpellAbility rightAbility = card.getState(CardStateName.RightSplit).getFirstAbility();
|
||||
Map<String, String> rightMap = Maps.newHashMap(rightAbility.getMapParams());
|
||||
|
||||
AbilityRecordType rightType = AbilityRecordType.getRecordType(leftMap);
|
||||
ApiType rightApi = leftType.getApiTypeOf(rightMap);
|
||||
rightMap.put("StackDecription", rightMap.get("SpellDescription"));
|
||||
|
||||
@@ -255,7 +255,6 @@ public class CloneEffect extends SpellAbilityEffect {
|
||||
final String actualAbility = origSVars.get(s);
|
||||
final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, tgtCard);
|
||||
tgtCard.addSpellAbility(grantedAbility);
|
||||
tgtCard.getCurrentState().addUnparsedAbility(actualAbility);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -292,8 +292,6 @@ public class TokenEffect extends SpellAbilityEffect {
|
||||
for (final Card c : tokens) {
|
||||
final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
|
||||
c.addSpellAbility(grantedAbility);
|
||||
// added ability to intrinsic list so copies and clones work
|
||||
c.getCurrentState().addUnparsedAbility(actualAbility);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2043,9 +2043,11 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
public final FCollectionView<SpellAbility> getNonManaAbilities() {
|
||||
return currentState.getNonManaAbilities();
|
||||
}
|
||||
public final Iterable<String> getUnparsedAbilities() {
|
||||
return currentState.getUnparsedAbilities();
|
||||
|
||||
public final FCollectionView<SpellAbility> getIntrinsicSpellAbilities() {
|
||||
return currentState.getIntrinsicSpellAbilities();
|
||||
}
|
||||
|
||||
public final FCollectionView<SpellAbility> getAllSpellAbilities() {
|
||||
final FCollection<SpellAbility> res = new FCollection<>();
|
||||
for (final CardStateName key : states.keySet()) {
|
||||
@@ -3276,20 +3278,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
originalSVars.clear();
|
||||
}
|
||||
|
||||
public final void setIntrinsicAbilities(final List<String> a) {
|
||||
currentState.setUnparsedAbilities(new ArrayList<>(a));
|
||||
}
|
||||
|
||||
public final void addIntrinsicKeyword(final String s) {
|
||||
if (currentState.addIntrinsicKeyword(s)) {
|
||||
currentState.getView().updateKeywords(this, currentState);
|
||||
}
|
||||
}
|
||||
|
||||
public final void addIntrinsicAbility(final String s) {
|
||||
currentState.addIntrinsicAbility(s);
|
||||
}
|
||||
|
||||
public final void removeIntrinsicKeyword(final String s) {
|
||||
if (currentState.removeIntrinsicKeyword(s)) {
|
||||
currentState.getView().updateKeywords(this, currentState);
|
||||
@@ -3300,7 +3294,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
return extrinsicKeyword;
|
||||
}
|
||||
public final void setExtrinsicKeyword(final List<String> a) {
|
||||
extrinsicKeyword = new ArrayList<>(a);
|
||||
extrinsicKeyword = Lists.newArrayList(a);
|
||||
}
|
||||
|
||||
public void addExtrinsicKeyword(final String s) {
|
||||
|
||||
@@ -91,7 +91,11 @@ public class CardFactory {
|
||||
out = CardFactory.copyStats(in, in.getController());
|
||||
out.setToken(true);
|
||||
|
||||
CardFactoryUtil.addAbilityFactoryAbilities(out);
|
||||
// add abilities
|
||||
for (SpellAbility sa : in.getIntrinsicSpellAbilities()) {
|
||||
out.addSpellAbility(sa);
|
||||
}
|
||||
|
||||
for (String s : out.getStaticAbilityStrings()) {
|
||||
out.addStaticAbility(s);
|
||||
}
|
||||
@@ -313,7 +317,7 @@ public class CardFactory {
|
||||
continue; // Ignore FaceDown for DFC since they have none.
|
||||
}
|
||||
card.setState(state, false);
|
||||
CardFactoryUtil.addAbilityFactoryAbilities(card);
|
||||
|
||||
for (String stAb : card.getStaticAbilityStrings()) {
|
||||
final StaticAbility s = card.addStaticAbility(stAb);
|
||||
s.setIntrinsic(true);
|
||||
@@ -441,13 +445,15 @@ public class CardFactory {
|
||||
}
|
||||
|
||||
private static void readCardFace(Card c, ICardFace face) {
|
||||
for (String a : face.getAbilities()) c.addIntrinsicAbility(a);
|
||||
|
||||
for (String k : face.getKeywords()) c.addIntrinsicKeyword(k);
|
||||
for (String r : face.getReplacements()) c.addReplacementEffect(ReplacementHandler.parseReplacement(r, c, true));
|
||||
for (String s : face.getStaticAbilities()) c.addStaticAbilityString(s);
|
||||
for (String t : face.getTriggers()) c.addTrigger(TriggerHandler.parseTrigger(t, c, true));
|
||||
for (Entry<String, String> v : face.getVariables()) c.setSVar(v.getKey(), v.getValue());
|
||||
|
||||
CardFactoryUtil.addAbilityFactoryAbilities(c, face.getAbilities());
|
||||
|
||||
c.setName(face.getName());
|
||||
c.setManaCost(face.getManaCost());
|
||||
c.setText(face.getNonAbilityText());
|
||||
@@ -636,7 +642,10 @@ public class CardFactory {
|
||||
to.setTriggers(fromCharacteristics.getTriggers(), true);
|
||||
to.setReplacementEffects(fromCharacteristics.getReplacementEffects());
|
||||
// add abilities
|
||||
CardFactoryUtil.addAbilityFactoryAbilities(to);
|
||||
for (SpellAbility sa : fromCharacteristics.getIntrinsicSpellAbilities()) {
|
||||
to.addSpellAbility(sa);
|
||||
}
|
||||
|
||||
for (String staticAbility : to.getStaticAbilityStrings()) {
|
||||
to.addStaticAbility(staticAbility);
|
||||
}
|
||||
|
||||
@@ -2010,10 +2010,10 @@ public class CardFactoryUtil {
|
||||
* @param card
|
||||
* the card
|
||||
*/
|
||||
public static final void addAbilityFactoryAbilities(final Card card) {
|
||||
public static final void addAbilityFactoryAbilities(final Card card, final Iterable<String> abilities) {
|
||||
// **************************************************
|
||||
// AbilityFactory cards
|
||||
for (String rawAbility : card.getUnparsedAbilities()) {
|
||||
for (String rawAbility : abilities) {
|
||||
final SpellAbility intrinsicAbility = AbilityFactory.getAbility(rawAbility, card);
|
||||
card.addSpellAbility(intrinsicAbility);
|
||||
intrinsicAbility.setIntrinsic(true);
|
||||
@@ -2102,8 +2102,6 @@ public class CardFactoryUtil {
|
||||
" could cast a sorcery.)";
|
||||
|
||||
card.addSpellAbility(AbilityFactory.getAbility(effect, card));
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(effect);
|
||||
}
|
||||
else if (keyword.startsWith("Cycling")) {
|
||||
addSpellAbility(keyword, card, null);
|
||||
@@ -2431,8 +2429,6 @@ public class CardFactoryUtil {
|
||||
// instantiate attach ability
|
||||
final SpellAbility sa = AbilityFactory.getAbility(abilityStr.toString(), card);
|
||||
card.addSpellAbility(sa);
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(abilityStr.toString());
|
||||
}
|
||||
else if (keyword.startsWith("Outlast")) {
|
||||
addSpellAbility(keyword, card, null);
|
||||
@@ -2467,8 +2463,6 @@ public class CardFactoryUtil {
|
||||
// instantiate attach ability
|
||||
final SpellAbility sa = AbilityFactory.getAbility(abilityStr.toString(), card);
|
||||
card.addSpellAbility(sa);
|
||||
// add ability to intrinsic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(abilityStr.toString());
|
||||
}
|
||||
else if (keyword.startsWith("Bestow")) {
|
||||
addSpellAbility(keyword, card, null);
|
||||
@@ -3462,10 +3456,10 @@ public class CardFactoryUtil {
|
||||
newSA.getMapParams().put("Secondary", "True");
|
||||
newSA.setPayCosts(cost);
|
||||
newSA.setDescription(sa.getDescription() + " (by paying " + cost.toSimpleString() + " instead of its mana cost)");
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
@@ -3491,7 +3485,13 @@ public class CardFactoryUtil {
|
||||
awakenSpell.setDescription(desc);
|
||||
awakenSpell.setBasicSpell(false);
|
||||
awakenSpell.setPayCosts(awakenCost);
|
||||
awakenSpell.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
awakenSpell.setTemporary(true);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(awakenSpell);
|
||||
}
|
||||
card.addSpellAbility(awakenSpell);
|
||||
} else if (keyword.startsWith("Bestow")) {
|
||||
final String[] params = keyword.split(":");
|
||||
@@ -3508,14 +3508,12 @@ public class CardFactoryUtil {
|
||||
" (" + Keyword.getInstance(keyword).getReminderText() + ")");
|
||||
sa.setStackDescription("Bestow - " + card.getName());
|
||||
sa.setBasicSpell(false);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(sbAttach.toString());
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("Dash")) {
|
||||
@@ -3537,10 +3535,10 @@ public class CardFactoryUtil {
|
||||
newSA.setDescription(desc);
|
||||
newSA.setBasicSpell(false);
|
||||
newSA.setDash(true);
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
@@ -3558,9 +3556,10 @@ public class CardFactoryUtil {
|
||||
newSA.setIsEmerge(true);
|
||||
newSA.setPayCosts(new Cost(costStr, false));
|
||||
newSA.setDescription(sa.getDescription() + " (Emerge)");
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
@@ -3576,9 +3575,10 @@ public class CardFactoryUtil {
|
||||
newSA.addOptionalCost(OptionalCost.Entwine);
|
||||
newSA.setDescription(sa.getDescription() + " (Entwine)");
|
||||
newSA.setStackDescription(""); // Empty StackDescription to rebuild it.
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
@@ -3619,10 +3619,10 @@ public class CardFactoryUtil {
|
||||
newSA.setBasicSpell(false);
|
||||
newSA.setPayCosts(evokedCost);
|
||||
newSA.setEvoke(true);
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
|
||||
@@ -3638,6 +3638,7 @@ public class CardFactoryUtil {
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(abString, card);
|
||||
sa.setPayCosts(new Cost(card.getManaCost(), false));
|
||||
sa.setIntrinsic(intrinsic);
|
||||
card.addSpellAbility(sa);
|
||||
}
|
||||
} else if (keyword.startsWith("Monstrosity")) {
|
||||
@@ -3657,9 +3658,10 @@ public class CardFactoryUtil {
|
||||
}
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
// sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
}
|
||||
@@ -3676,14 +3678,12 @@ public class CardFactoryUtil {
|
||||
" SpellDescription$ (" + Keyword.getInstance(keyword).getReminderText() + ")";
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(effect);
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("Outlast")) {
|
||||
@@ -3705,14 +3705,12 @@ public class CardFactoryUtil {
|
||||
abilityStr.append("| SpellDescription$ (" + Keyword.getInstance(keyword).getReminderText() + ")");
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(abilityStr.toString(), card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(abilityStr.toString());
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("Scavenge")) {
|
||||
@@ -3728,14 +3726,12 @@ public class CardFactoryUtil {
|
||||
card.setSVar("ScavengeX", "Count$CardPower");
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(effect);
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("Surge")) {
|
||||
@@ -3751,9 +3747,11 @@ public class CardFactoryUtil {
|
||||
String desc = "Surge " + surgeCost.toSimpleString() + " (" + Keyword.getInstance(keyword).getReminderText()
|
||||
+ ")";
|
||||
newSA.setDescription(desc);
|
||||
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
// sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
@@ -3769,9 +3767,10 @@ public class CardFactoryUtil {
|
||||
+ Keyword.getInstance(keyword).getReminderText() + ")";
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
}
|
||||
@@ -3789,14 +3788,12 @@ public class CardFactoryUtil {
|
||||
" (" + Keyword.getInstance(keyword).getReminderText() + ")";
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(effect);
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.endsWith(" offering")) {
|
||||
@@ -3814,9 +3811,10 @@ public class CardFactoryUtil {
|
||||
newSA.setIsOffering(true);
|
||||
newSA.setPayCosts(sa.getPayCosts());
|
||||
newSA.setDescription(sa.getDescription() + " (" + offeringType + " offering)");
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
@@ -3832,14 +3830,12 @@ public class CardFactoryUtil {
|
||||
"KeepSubtypes$ True | SpellDescription$ CARDNAME becomes an artifact creature until end of turn.)";
|
||||
|
||||
final SpellAbility sa = AbilityFactory.getAbility(effect, card);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(effect);
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("Cycling")) {
|
||||
@@ -3854,15 +3850,12 @@ public class CardFactoryUtil {
|
||||
|
||||
SpellAbility sa = AbilityFactory.getAbility(sb.toString(), card);
|
||||
sa.setIsCycling(true);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(sb.toString());
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.startsWith("TypeCycling")) {
|
||||
@@ -3886,15 +3879,12 @@ public class CardFactoryUtil {
|
||||
|
||||
SpellAbility sa = AbilityFactory.getAbility(sb.toString(), card);
|
||||
sa.setIsCycling(true);
|
||||
sa.setIntrinsic(intrinsic);
|
||||
|
||||
if (!intrinsic) {
|
||||
sa.setTemporary(true);
|
||||
sa.setIntrinsic(false);
|
||||
//sa.setOriginalHost(hostCard);
|
||||
kws.addSpellAbility(sa);
|
||||
} else {
|
||||
// add ability to instrinic strings so copies/clones create the ability also
|
||||
card.getCurrentState().addUnparsedAbility(sb.toString());
|
||||
}
|
||||
card.addSpellAbility(sa);
|
||||
} else if (keyword.equals("Retrace")) {
|
||||
@@ -3908,10 +3898,11 @@ public class CardFactoryUtil {
|
||||
|
||||
final Cost cost = new Cost("Discard<1/Land>", false).add(sa.getPayCosts());
|
||||
newSA.setPayCosts(cost);
|
||||
newSA.setIntrinsic(intrinsic);
|
||||
|
||||
//newSA.setDescription(sa.getDescription() + " (Retrace)");
|
||||
if (!intrinsic) {
|
||||
newSA.setTemporary(true);
|
||||
newSA.setIntrinsic(false);
|
||||
kws.addSpellAbility(newSA);
|
||||
}
|
||||
card.addSpellAbility(newSA);
|
||||
|
||||
@@ -17,14 +17,15 @@
|
||||
*/
|
||||
package forge.game.card;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.CardEdition;
|
||||
import forge.card.CardRarity;
|
||||
@@ -48,16 +49,15 @@ public class CardState {
|
||||
private byte color = MagicColor.COLORLESS;
|
||||
private int basePower = 0;
|
||||
private int baseToughness = 0;
|
||||
private List<String> intrinsicKeywords = new ArrayList<String>();
|
||||
private List<String> intrinsicKeywords = Lists.newArrayList();
|
||||
private final FCollection<SpellAbility> nonManaAbilities = new FCollection<SpellAbility>();
|
||||
private final FCollection<SpellAbility> manaAbilities = new FCollection<SpellAbility>();
|
||||
private List<String> unparsedAbilities = new ArrayList<String>();
|
||||
private FCollection<Trigger> triggers = new FCollection<Trigger>();
|
||||
private FCollection<ReplacementEffect> replacementEffects = new FCollection<ReplacementEffect>();
|
||||
private FCollection<StaticAbility> staticAbilities = new FCollection<StaticAbility>();
|
||||
private List<String> staticAbilityStrings = new ArrayList<String>();
|
||||
private List<String> staticAbilityStrings = Lists.newArrayList();
|
||||
private String imageKey = "";
|
||||
private Map<String, String> sVars = new TreeMap<String, String>();
|
||||
private Map<String, String> sVars = Maps.newTreeMap();
|
||||
|
||||
private CardRarity rarity = CardRarity.Unknown;
|
||||
private String setCode = CardEdition.UNKNOWN.getCode();
|
||||
@@ -170,10 +170,6 @@ public class CardState {
|
||||
return changed;
|
||||
}
|
||||
|
||||
public final boolean addIntrinsicAbility(final String s) {
|
||||
return s.trim().length() != 0 && unparsedAbilities.add(s);
|
||||
}
|
||||
|
||||
public final boolean removeIntrinsicKeyword(final String s) {
|
||||
return intrinsicKeywords.remove(s);
|
||||
}
|
||||
@@ -195,6 +191,16 @@ public class CardState {
|
||||
public final FCollectionView<SpellAbility> getNonManaAbilities() {
|
||||
return nonManaAbilities;
|
||||
}
|
||||
|
||||
public final FCollectionView<SpellAbility> getIntrinsicSpellAbilities() {
|
||||
return new FCollection<SpellAbility>(Iterables.filter(getSpellAbilities(), new Predicate<SpellAbility>() {
|
||||
@Override
|
||||
public boolean apply(SpellAbility input) {
|
||||
return input.isIntrinsic();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public final void setNonManaAbilities(SpellAbility sa) {
|
||||
nonManaAbilities.clear();
|
||||
if (sa != null) {
|
||||
@@ -243,17 +249,8 @@ public class CardState {
|
||||
}
|
||||
}
|
||||
|
||||
public final Iterable<String> getUnparsedAbilities() {
|
||||
return unparsedAbilities;
|
||||
}
|
||||
public final String getFirstUnparsedAbility() {
|
||||
return Iterables.getFirst(unparsedAbilities, null);
|
||||
}
|
||||
public final boolean addUnparsedAbility(String a) {
|
||||
return unparsedAbilities.add(a);
|
||||
}
|
||||
public final void setUnparsedAbilities(final List<String> list) {
|
||||
unparsedAbilities = list;
|
||||
public final SpellAbility getFirstAbility() {
|
||||
return Iterables.getFirst(getIntrinsicSpellAbilities(), null);
|
||||
}
|
||||
|
||||
public final FCollectionView<Trigger> getTriggers() {
|
||||
@@ -335,7 +332,8 @@ public class CardState {
|
||||
view.updateFoilIndex(this);
|
||||
}
|
||||
public final void setSVars(final Map<String, String> newSVars) {
|
||||
sVars = newSVars;
|
||||
sVars = Maps.newTreeMap();
|
||||
sVars.putAll(newSVars);
|
||||
view.updateFoilIndex(this);
|
||||
}
|
||||
|
||||
@@ -355,13 +353,12 @@ public class CardState {
|
||||
setColor(source.getColor());
|
||||
setBasePower(source.getBasePower());
|
||||
setBaseToughness(source.getBaseToughness());
|
||||
intrinsicKeywords = new ArrayList<String>(source.intrinsicKeywords);
|
||||
unparsedAbilities = new ArrayList<String>(source.unparsedAbilities);
|
||||
staticAbilityStrings = new ArrayList<String>(source.staticAbilityStrings);
|
||||
intrinsicKeywords = Lists.newArrayList(source.intrinsicKeywords);
|
||||
staticAbilityStrings = Lists.newArrayList(source.staticAbilityStrings);
|
||||
setImageKey(source.getImageKey());
|
||||
setRarity(source.rarity);
|
||||
setSetCode(source.setCode);
|
||||
setSVars(new TreeMap<String, String>(source.getSVars()));
|
||||
setSVars(source.getSVars());
|
||||
replacementEffects = new FCollection<ReplacementEffect>();
|
||||
for (ReplacementEffect RE : source.getReplacementEffects()) {
|
||||
replacementEffects.add(RE.getCopy());
|
||||
|
||||
Reference in New Issue
Block a user