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