mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
Fix so card text shows up properly in details pane
This commit is contained in:
@@ -164,7 +164,7 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (defined.equals("Remembered")) {
|
else if (defined.equals("Remembered")) {
|
||||||
if (hostCard.getRemembered().isEmpty()) {
|
if (!hostCard.hasRemembered()) {
|
||||||
final Card newCard = game.getCardState(hostCard);
|
final Card newCard = game.getCardState(hostCard);
|
||||||
for (final Object o : newCard.getRemembered()) {
|
for (final Object o : newCard.getRemembered()) {
|
||||||
if (o instanceof Card) {
|
if (o instanceof Card) {
|
||||||
@@ -180,7 +180,7 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (defined.equals("DirectRemembered")) {
|
else if (defined.equals("DirectRemembered")) {
|
||||||
if (hostCard.getRemembered().isEmpty()) {
|
if (!hostCard.hasRemembered()) {
|
||||||
final Card newCard = game.getCardState(hostCard);
|
final Card newCard = game.getCardState(hostCard);
|
||||||
for (final Object o : newCard.getRemembered()) {
|
for (final Object o : newCard.getRemembered()) {
|
||||||
if (o instanceof Card) {
|
if (o instanceof Card) {
|
||||||
@@ -456,7 +456,7 @@ public class AbilityUtils {
|
|||||||
// Add whole Remembered list to handlePaid
|
// Add whole Remembered list to handlePaid
|
||||||
final List<Card> list = new ArrayList<Card>();
|
final List<Card> list = new ArrayList<Card>();
|
||||||
Card newCard = card;
|
Card newCard = card;
|
||||||
if (card.getRemembered().isEmpty()) {
|
if (!card.hasRemembered()) {
|
||||||
newCard = game.getCardState(card);
|
newCard = game.getCardState(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1287,11 +1287,12 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (unlessCost.equals("RememberedCostMinus2")) {
|
else if (unlessCost.equals("RememberedCostMinus2")) {
|
||||||
if (source.getRemembered().isEmpty() || !(source.getRemembered().get(0) instanceof Card)) {
|
Card rememberedCard = (Card) source.getFirstRemembered();
|
||||||
|
if (rememberedCard == null) {
|
||||||
sa.resolve();
|
sa.resolve();
|
||||||
resolveSubAbilities(sa, game);
|
resolveSubAbilities(sa, game);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
Card rememberedCard = (Card) source.getRemembered().get(0);
|
|
||||||
ManaCostBeingPaid newCost = new ManaCostBeingPaid(rememberedCard.getManaCost());
|
ManaCostBeingPaid newCost = new ManaCostBeingPaid(rememberedCard.getManaCost());
|
||||||
newCost.decreaseColorlessMana(2);
|
newCost.decreaseColorlessMana(2);
|
||||||
cost = new Cost(newCost.toManaCost(), true);
|
cost = new Cost(newCost.toManaCost(), true);
|
||||||
@@ -1355,7 +1356,7 @@ public class AbilityUtils {
|
|||||||
|
|
||||||
if (sa.hasParam("RememberCostMana")) {
|
if (sa.hasParam("RememberCostMana")) {
|
||||||
host.clearRemembered();
|
host.clearRemembered();
|
||||||
host.getRemembered().addAll(sa.getPayingMana());
|
host.addRemembered(sa.getPayingMana());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberCostCards") && !sa.getPaidHash().isEmpty()) {
|
if (sa.hasParam("RememberCostCards") && !sa.getPaidHash().isEmpty()) {
|
||||||
|
|||||||
@@ -133,14 +133,14 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (remember != null) {
|
if (remember != null) {
|
||||||
game.getCardState(source).addRemembered(movedCard);
|
game.getCardState(source).addRemembered(movedCard);
|
||||||
if (!source.getRemembered().contains(movedCard)) {
|
if (!source.isRemembered(movedCard)) {
|
||||||
source.addRemembered(movedCard);
|
source.addRemembered(movedCard);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (remLKI && movedCard != null) {
|
if (remLKI && movedCard != null) {
|
||||||
final Card lki = CardUtil.getLKICopy(c);
|
final Card lki = CardUtil.getLKICopy(c);
|
||||||
game.getCardState(source).addRemembered(lki);
|
game.getCardState(source).addRemembered(lki);
|
||||||
if (!source.getRemembered().contains(lki)) {
|
if (!source.isRemembered(lki)) {
|
||||||
source.addRemembered(lki);
|
source.addRemembered(lki);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -544,7 +544,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
hostCard.addRemembered(movedCard);
|
hostCard.addRemembered(movedCard);
|
||||||
}
|
}
|
||||||
if (forget != null && !movedCard.getZone().equals(originZone)) {
|
if (forget != null && !movedCard.getZone().equals(originZone)) {
|
||||||
hostCard.getRemembered().remove(movedCard);
|
hostCard.removeRemembered(movedCard);
|
||||||
}
|
}
|
||||||
if (imprint != null && !movedCard.getZone().equals(originZone)) {
|
if (imprint != null && !movedCard.getZone().equals(originZone)) {
|
||||||
hostCard.addImprintedCard(movedCard);
|
hostCard.addImprintedCard(movedCard);
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
|||||||
card.clearRemembered();
|
card.clearRemembered();
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RememberHighest")) {
|
if (sa.hasParam("RememberHighest")) {
|
||||||
card.getRemembered().addAll(highestNum);
|
card.addRemembered(highestNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class CleanUpEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
if (sa.hasParam("ForgetDefined")) {
|
if (sa.hasParam("ForgetDefined")) {
|
||||||
for (final Card card : AbilityUtils.getDefinedCards(source, sa.getParam("ForgetDefined"), sa)) {
|
for (final Card card : AbilityUtils.getDefinedCards(source, sa.getParam("ForgetDefined"), sa)) {
|
||||||
source.getRemembered().remove(card);
|
source.removeRemembered(card);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ClearImprinted")) {
|
if (sa.hasParam("ClearImprinted")) {
|
||||||
|
|||||||
@@ -174,31 +174,30 @@ public class CloneEffect extends SpellAbilityEffect {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (cloneCard.isCloned()) {
|
if (cloneCard.isCloned()) {
|
||||||
cloneCard.switchStates(CardCharacteristicName.Cloner, CardCharacteristicName.Original);
|
cloneCard.switchStates(CardCharacteristicName.Cloner, CardCharacteristicName.Original);
|
||||||
cloneCard.setState(CardCharacteristicName.Original);
|
cloneCard.setState(CardCharacteristicName.Original);
|
||||||
cloneCard.clearStates(CardCharacteristicName.Cloner);
|
cloneCard.clearStates(CardCharacteristicName.Cloner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
String duration = sa.getParam("Duration");
|
String duration = sa.getParam("Duration");
|
||||||
if (duration.equals("UntilEndOfTurn")) {
|
if (duration.equals("UntilEndOfTurn")) {
|
||||||
game.getEndOfTurn().addUntil(unclone);
|
game.getEndOfTurn().addUntil(unclone);
|
||||||
} else if (duration.equals("UntilYourNextTurn")) {
|
}
|
||||||
|
else if (duration.equals("UntilYourNextTurn")) {
|
||||||
game.getCleanup().addUntil(host.getController(), unclone);
|
game.getCleanup().addUntil(host.getController(), unclone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
game.fireEvent(new GameEventCardStatsChanged(tgtCard));
|
game.fireEvent(new GameEventCardStatsChanged(tgtCard));
|
||||||
} // cloneResolve
|
} // cloneResolve
|
||||||
|
|
||||||
private void addExtraCharacteristics(final Card tgtCard, final SpellAbility sa, final Map<String, String> origSVars) {
|
private void addExtraCharacteristics(final Card tgtCard, final SpellAbility sa, final Map<String, String> origSVars) {
|
||||||
// additional types to clone
|
// additional types to clone
|
||||||
if (sa.hasParam("AddTypes")) {
|
if (sa.hasParam("AddTypes")) {
|
||||||
for (final String type : Arrays.asList(sa.getParam("AddTypes").split(","))) {
|
for (final String type : Arrays.asList(sa.getParam("AddTypes").split(","))) {
|
||||||
tgtCard.addType(type);
|
tgtCard.addType(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// triggers to add to clone
|
// triggers to add to clone
|
||||||
|
|||||||
@@ -129,11 +129,11 @@ public class ControlGainEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remember && !sa.getHostCard().getRemembered().contains(tgtC)) {
|
if (remember && !sa.getHostCard().isRemembered(tgtC)) {
|
||||||
sa.getHostCard().addRemembered(tgtC);
|
sa.getHostCard().addRemembered(tgtC);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forget && sa.getHostCard().getRemembered().contains(tgtC)) {
|
if (forget && sa.getHostCard().isRemembered(tgtC)) {
|
||||||
sa.getHostCard().removeRemembered(tgtC);
|
sa.getHostCard().removeRemembered(tgtC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public class CounterEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (sa.hasParam("RememberSplicedOntoCounteredSpell")) {
|
if (sa.hasParam("RememberSplicedOntoCounteredSpell")) {
|
||||||
if (tgtSA.getSplicedCards() != null) {
|
if (tgtSA.getSplicedCards() != null) {
|
||||||
sa.getHostCard().getRemembered().addAll(tgtSA.getSplicedCards());
|
sa.getHostCard().addRemembered(tgtSA.getSplicedCards());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
public class DestroyEffect extends SpellAbilityEffect {
|
public class DestroyEffect extends SpellAbilityEffect {
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected String getStackDescription(SpellAbility sa) {
|
protected String getStackDescription(SpellAbility sa) {
|
||||||
final boolean noRegen = sa.hasParam("NoRegen");
|
final boolean noRegen = sa.hasParam("NoRegen");
|
||||||
@@ -99,9 +94,9 @@ public class DestroyEffect extends SpellAbilityEffect {
|
|||||||
boolean destroyed = false;
|
boolean destroyed = false;
|
||||||
final Card lki = CardUtil.getLKICopy(tgtC);
|
final Card lki = CardUtil.getLKICopy(tgtC);
|
||||||
if (remAttached) {
|
if (remAttached) {
|
||||||
Iterables.addAll(card.getRemembered(), tgtC.getEnchantedBy(false));
|
card.addRemembered(tgtC.getEnchantedBy(false));
|
||||||
Iterables.addAll(card.getRemembered(), tgtC.getEquippedBy(false));
|
card.addRemembered(tgtC.getEquippedBy(false));
|
||||||
Iterables.addAll(card.getRemembered(), tgtC.getFortifiedBy(false));
|
card.addRemembered(tgtC.getFortifiedBy(false));
|
||||||
}
|
}
|
||||||
if (sac) {
|
if (sac) {
|
||||||
destroyed = game.getAction().sacrifice(tgtC, sa) != null;
|
destroyed = game.getAction().sacrifice(tgtC, sa) != null;
|
||||||
|
|||||||
@@ -250,8 +250,9 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
final String targets = Lang.joinHomogenous(tgtCards);
|
final String targets = Lang.joinHomogenous(tgtCards);
|
||||||
final String message = sa.hasParam("OptionQuestion") ? sa.getParam("OptionQuestion").replace("TARGETS", targets) : "Apply pump to " + targets + "?";
|
final String message = sa.hasParam("OptionQuestion") ? sa.getParam("OptionQuestion").replace("TARGETS", targets) : "Apply pump to " + targets + "?";
|
||||||
|
|
||||||
if ( !sa.getActivatingPlayer().getController().confirmAction(sa, null, message) )
|
if (!sa.getActivatingPlayer().getController().confirmAction(sa, null, message)) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("RememberObjects")) {
|
if (sa.hasParam("RememberObjects")) {
|
||||||
@@ -260,9 +261,7 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (pumpRemembered != null) {
|
if (pumpRemembered != null) {
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, pumpRemembered, sa)) {
|
for (final Object o : AbilityUtils.getDefinedObjects(host, pumpRemembered, sa)) {
|
||||||
if (!host.getRemembered().contains(o)) {
|
host.addRemembered(o);
|
||||||
host.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,9 +271,7 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (pumpForget != null) {
|
if (pumpForget != null) {
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, pumpForget, sa)) {
|
for (final Object o : AbilityUtils.getDefinedObjects(host, pumpForget, sa)) {
|
||||||
if (host.getRemembered().contains(o)) {
|
host.removeRemembered(o);
|
||||||
host.removeRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintCards")) {
|
if (sa.hasParam("ImprintCards")) {
|
||||||
@@ -283,17 +280,13 @@ public class PumpEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (pumpImprint != null) {
|
if (pumpImprint != null) {
|
||||||
for (final Card c : AbilityUtils.getDefinedCards(host, pumpImprint, sa)) {
|
for (final Card c : AbilityUtils.getDefinedCards(host, pumpImprint, sa)) {
|
||||||
if (!host.getImprintedCards().contains(c)) {
|
host.addImprintedCard(c);
|
||||||
host.addImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("ForgetImprinted")) {
|
if (sa.hasParam("ForgetImprinted")) {
|
||||||
for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("ForgetImprinted"), sa)) {
|
for (final Card c : AbilityUtils.getDefinedCards(host, sa.getParam("ForgetImprinted"), sa)) {
|
||||||
if (host.getImprintedCards().contains(c)) {
|
host.removeImprintedCard(c);
|
||||||
host.removeImprintedCard(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -334,9 +334,7 @@ public class TokenEffect extends SpellAbilityEffect {
|
|||||||
final Card token = game.getCardState(c);
|
final Card token = game.getCardState(c);
|
||||||
final String remembered = sa.getParam("TokenRemembered");
|
final String remembered = sa.getParam("TokenRemembered");
|
||||||
for (final Object o : AbilityUtils.getDefinedObjects(host, remembered, sa)) {
|
for (final Object o : AbilityUtils.getDefinedObjects(host, remembered, sa)) {
|
||||||
if (!token.getRemembered().contains(o)) {
|
token.addRemembered(o);
|
||||||
token.addRemembered(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
/** Original values of SVars changed by text changes. */
|
/** Original values of SVars changed by text changes. */
|
||||||
private Map<String, String> originalSVars = Maps.newHashMap();
|
private Map<String, String> originalSVars = Maps.newHashMap();
|
||||||
|
|
||||||
private final ArrayList<Object> rememberedObjects = new ArrayList<Object>();
|
private final Set<Object> rememberedObjects = new LinkedHashSet<Object>();
|
||||||
private final MapOfLists<GameEntity, Object> rememberMap = new HashMapOfLists<GameEntity, Object>(CollectionSuppliers.<Object>arrayLists());
|
private final MapOfLists<GameEntity, Object> rememberMap = new HashMapOfLists<GameEntity, Object>(CollectionSuppliers.<Object>arrayLists());
|
||||||
private Map<Player, String> flipResult;
|
private Map<Player, String> flipResult;
|
||||||
|
|
||||||
@@ -463,17 +463,46 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
rememberMap.addAll(e, o);
|
rememberMap.addAll(e, o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final ArrayList<Object> getRemembered() {
|
public final Iterable<Object> getRemembered() {
|
||||||
return rememberedObjects;
|
return rememberedObjects;
|
||||||
}
|
}
|
||||||
public final void addRemembered(final Object o) {
|
public final boolean hasRemembered() {
|
||||||
rememberedObjects.add(o);
|
return !rememberedObjects.isEmpty();
|
||||||
}
|
}
|
||||||
public final void removeRemembered(final Object o) {
|
public final int getRememberedCount() {
|
||||||
rememberedObjects.remove(o);
|
return rememberedObjects.size();
|
||||||
|
}
|
||||||
|
public final Object getFirstRemembered() {
|
||||||
|
return Iterables.getFirst(rememberedObjects, null);
|
||||||
|
}
|
||||||
|
public final <T> boolean isRemembered(T o) {
|
||||||
|
return rememberedObjects.contains(o);
|
||||||
|
}
|
||||||
|
public final <T> void addRemembered(final T o) {
|
||||||
|
if (rememberedObjects.add(o)) {
|
||||||
|
view.updateRemembered(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public final <T> void addRemembered(final Iterable<T> objects) {
|
||||||
|
boolean changed = false;
|
||||||
|
for (T o : objects) {
|
||||||
|
if (rememberedObjects.add(o)) {
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (changed) {
|
||||||
|
view.updateRemembered(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public final <T> void removeRemembered(final T o) {
|
||||||
|
if (rememberedObjects.remove(o)) {
|
||||||
|
view.updateRemembered(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public final void clearRemembered() {
|
public final void clearRemembered() {
|
||||||
|
if (rememberedObjects.isEmpty()) { return; }
|
||||||
rememberedObjects.clear();
|
rememberedObjects.clear();
|
||||||
|
view.updateRemembered(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final CardCollectionView getImprintedCards() {
|
public final CardCollectionView getImprintedCards() {
|
||||||
@@ -1062,7 +1091,9 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
return chosenDirection;
|
return chosenDirection;
|
||||||
}
|
}
|
||||||
public void setChosenDirection(Direction chosenDirection0) {
|
public void setChosenDirection(Direction chosenDirection0) {
|
||||||
|
if (chosenDirection == chosenDirection0) { return; }
|
||||||
chosenDirection = chosenDirection0;
|
chosenDirection = chosenDirection0;
|
||||||
|
view.updateChosenDirection(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for cards like Meddling Mage...
|
// used for cards like Meddling Mage...
|
||||||
@@ -1106,98 +1137,6 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
text = originalText;
|
text = originalText;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the text that should be displayed
|
|
||||||
public String getText() {
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
|
||||||
|
|
||||||
// Vanguard Modifiers
|
|
||||||
if (isType("Vanguard")) {
|
|
||||||
sb.append("Hand Modifier: ").append(getRules().getHand());
|
|
||||||
sb.append("\r\nLife Modifier: ").append(getRules().getLife());
|
|
||||||
sb.append("\r\n\r\n");
|
|
||||||
}
|
|
||||||
if (isCommander) {
|
|
||||||
sb.append(getOwner()).append("'s Commander\r\n");
|
|
||||||
sb.append(CardFactoryUtil.getCommanderInfo(getOwner())).append("\r\n");
|
|
||||||
}
|
|
||||||
sb.append(getAbilityText());
|
|
||||||
|
|
||||||
String nonAbilityText = getNonAbilityText();
|
|
||||||
if (getAmountOfKeyword("CARDNAME can block an additional creature.") > 1) {
|
|
||||||
final StringBuilder ab = new StringBuilder();
|
|
||||||
ab.append("CARDNAME can block an additional ");
|
|
||||||
ab.append(getAmountOfKeyword("CARDNAME can block an additional creature."));
|
|
||||||
ab.append(" creatures.");
|
|
||||||
nonAbilityText = nonAbilityText.replaceFirst("CARDNAME can block an additional creature.", ab.toString());
|
|
||||||
nonAbilityText = nonAbilityText.replaceAll("CARDNAME can block an additional creature.", "");
|
|
||||||
nonAbilityText = nonAbilityText.replaceAll("\r\n\r\n\r\n", "");
|
|
||||||
}
|
|
||||||
if (nonAbilityText.length() > 0) {
|
|
||||||
sb.append("\r\n \r\nNon ability features: \r\n");
|
|
||||||
sb.append(nonAbilityText.replaceAll("CARDNAME", getName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remembered cards
|
|
||||||
if (rememberedObjects.size() > 0) {
|
|
||||||
sb.append("\r\nRemembered: \r\n");
|
|
||||||
for (final Object o : rememberedObjects) {
|
|
||||||
if (o instanceof Card) {
|
|
||||||
final Card c = (Card) o;
|
|
||||||
if (c.isFaceDown()) {
|
|
||||||
sb.append("Face Down");
|
|
||||||
// face-down cards don't show unique number to avoid cheating
|
|
||||||
} else {
|
|
||||||
sb.append(c.getName());
|
|
||||||
sb.append(" (");
|
|
||||||
sb.append(c.getId());
|
|
||||||
sb.append(")");
|
|
||||||
}
|
|
||||||
} else if (o != null) {
|
|
||||||
sb.append(o.toString());
|
|
||||||
}
|
|
||||||
sb.append("\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chosenPlayer != null) {
|
|
||||||
sb.append("\r\n[Chosen player: ");
|
|
||||||
sb.append(getChosenPlayer());
|
|
||||||
sb.append("]\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chosenDirection != null) {
|
|
||||||
sb.append("\r\n[Chosen direction: ");
|
|
||||||
sb.append(getChosenDirection());
|
|
||||||
sb.append("]\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isHaunted()) {
|
|
||||||
sb.append("Haunted by: ");
|
|
||||||
for (final Card c : hauntedBy) {
|
|
||||||
sb.append(c).append(",");
|
|
||||||
}
|
|
||||||
sb.deleteCharAt(sb.length() - 1);
|
|
||||||
sb.append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (haunting != null) {
|
|
||||||
sb.append("Haunting: ").append(haunting);
|
|
||||||
sb.append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pairedWith != null) {
|
|
||||||
sb.append("\r\n \r\nPaired With: ").append(pairedWith);
|
|
||||||
sb.append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (characteristicsMap.get(CardCharacteristicName.Cloner) != null) {
|
|
||||||
sb.append("\r\nCloned by: ").append(characteristicsMap.get(CardCharacteristicName.Cloner).getName()).append(" (")
|
|
||||||
.append(id).append(")");
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the text that does not belong to a cards abilities (and is not really
|
// get the text that does not belong to a cards abilities (and is not really
|
||||||
// there rules-wise)
|
// there rules-wise)
|
||||||
public final String getNonAbilityText() {
|
public final String getNonAbilityText() {
|
||||||
@@ -3433,9 +3372,7 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
// Takes one argument like Permanent.Blue+withFlying
|
// Takes one argument like Permanent.Blue+withFlying
|
||||||
@Override
|
@Override
|
||||||
public final boolean isValid(final String restriction, final Player sourceController, final Card source) {
|
public final boolean isValid(final String restriction, final Player sourceController, final Card source) {
|
||||||
|
if (isImmutable() && !source.isRemembered(this)) { // special case exclusion
|
||||||
if (isImmutable()
|
|
||||||
&& !source.getRemembered().contains(this)) { // special case exclusion
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3494,7 +3431,7 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("NamedByRememberedPlayer")) {
|
} else if (property.equals("NamedByRememberedPlayer")) {
|
||||||
if (source.getRemembered().isEmpty()) {
|
if (!source.hasRemembered()) {
|
||||||
final Card newCard = game.getCardState(source);
|
final Card newCard = game.getCardState(source);
|
||||||
for (final Object o : newCard.getRemembered()) {
|
for (final Object o : newCard.getRemembered()) {
|
||||||
if (o instanceof Player) {
|
if (o instanceof Player) {
|
||||||
@@ -3587,11 +3524,10 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (property.endsWith("ForRemembered")) {
|
if (property.endsWith("ForRemembered")) {
|
||||||
if (source.getRemembered().isEmpty()) {
|
if (!source.hasRemembered()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getGame().getCombat().getDefendingPlayerRelatedTo((Card) source.getRemembered().get(0))
|
if (getGame().getCombat().getDefendingPlayerRelatedTo((Card) source.getFirstRemembered()) != getController()) {
|
||||||
!= getController()) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -3626,7 +3562,7 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
}
|
}
|
||||||
} else if (property.startsWith("RememberedPlayer")) {
|
} else if (property.startsWith("RememberedPlayer")) {
|
||||||
Player p = property.endsWith("Ctrl") ? getController() : getOwner();
|
Player p = property.endsWith("Ctrl") ? getController() : getOwner();
|
||||||
if (source.getRemembered().isEmpty()) {
|
if (!source.hasRemembered()) {
|
||||||
final Card newCard = game.getCardState(source);
|
final Card newCard = game.getCardState(source);
|
||||||
for (final Object o : newCard.getRemembered()) {
|
for (final Object o : newCard.getRemembered()) {
|
||||||
if (o instanceof Player) {
|
if (o instanceof Player) {
|
||||||
@@ -3645,14 +3581,14 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("nonRememberedPlayerCtrl")) {
|
} else if (property.startsWith("nonRememberedPlayerCtrl")) {
|
||||||
if (source.getRemembered().isEmpty()) {
|
if (!source.hasRemembered()) {
|
||||||
final Card newCard = game.getCardState(source);
|
final Card newCard = game.getCardState(source);
|
||||||
if (newCard.getRemembered().contains(getController())) {
|
if (newCard.isRemembered(getController())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.getRemembered().contains(getController())) {
|
if (source.isRemembered(getController())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("TargetedPlayerCtrl")) {
|
} else if (property.equals("TargetedPlayerCtrl")) {
|
||||||
@@ -4935,11 +4871,11 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
} else if (property.equals("IsRemembered")) {
|
} else if (property.equals("IsRemembered")) {
|
||||||
if (!source.getRemembered().contains(this)) {
|
if (!source.isRemembered(this)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("IsNotRemembered")) {
|
} else if (property.equals("IsNotRemembered")) {
|
||||||
if (source.getRemembered().contains(this)) {
|
if (source.isRemembered(this)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("IsImprinted")) {
|
} else if (property.equals("IsImprinted")) {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ public class CardCharacteristics {
|
|||||||
}
|
}
|
||||||
public void setOracleText(final String oracleText0) {
|
public void setOracleText(final String oracleText0) {
|
||||||
oracleText = oracleText0;
|
oracleText = oracleText0;
|
||||||
view.updateText(this);
|
view.updateOracleText(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getBaseAttack() {
|
public final int getBaseAttack() {
|
||||||
|
|||||||
@@ -951,7 +951,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (l[0].startsWith("RememberedSize")) {
|
if (l[0].startsWith("RememberedSize")) {
|
||||||
return doXMath(c.getRemembered().size(), m, c);
|
return doXMath(c.getRememberedCount(), m, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l[0].startsWith("RememberedNumber")) {
|
if (l[0].startsWith("RememberedNumber")) {
|
||||||
@@ -1253,7 +1253,7 @@ public class CardFactoryUtil {
|
|||||||
ce = c.getEquipping();
|
ce = c.getEquipping();
|
||||||
}
|
}
|
||||||
else if (sq[0].contains("Remembered")) {
|
else if (sq[0].contains("Remembered")) {
|
||||||
ce = (Card) c.getRemembered().get(0);
|
ce = (Card) c.getFirstRemembered();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ce = c;
|
ce = c;
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ public class CardLists {
|
|||||||
public static final Comparator<Card> TextLenComparator = new Comparator<Card>() {
|
public static final Comparator<Card> TextLenComparator = new Comparator<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(final Card a, final Card b) {
|
public int compare(final Card a, final Card b) {
|
||||||
final int aLen = a.getText().length();
|
final int aLen = a.getView().getText().length();
|
||||||
final int bLen = b.getText().length();
|
final int bLen = b.getView().getText().length();
|
||||||
return aLen - bLen;
|
return aLen - bLen;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge.game.card;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
@@ -15,7 +16,9 @@ import forge.card.CardRarity;
|
|||||||
import forge.card.CardType;
|
import forge.card.CardType;
|
||||||
import forge.card.ColorSet;
|
import forge.card.ColorSet;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
|
import forge.game.Direction;
|
||||||
import forge.game.GameEntityView;
|
import forge.game.GameEntityView;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerView;
|
import forge.game.player.PlayerView;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
@@ -240,6 +243,45 @@ public class CardView extends GameEntityView {
|
|||||||
set(TrackableProperty.ChosenPlayer, c.getChosenPlayer());
|
set(TrackableProperty.ChosenPlayer, c.getChosenPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Direction getChosenDirection() {
|
||||||
|
return get(TrackableProperty.ChosenDirection);
|
||||||
|
}
|
||||||
|
void updateChosenDirection(Card c) {
|
||||||
|
set(TrackableProperty.ChosenDirection, c.getChosenDirection());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getRemembered() {
|
||||||
|
return get(TrackableProperty.Remembered);
|
||||||
|
}
|
||||||
|
void updateRemembered(Card c) {
|
||||||
|
if (c.getRemembered() == null) {
|
||||||
|
set(TrackableProperty.Remembered, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("\r\nRemembered: \r\n");
|
||||||
|
for (final Object o : c.getRemembered()) {
|
||||||
|
if (o instanceof Card) {
|
||||||
|
final Card card = (Card) o;
|
||||||
|
if (card.isFaceDown()) {
|
||||||
|
sb.append("Face Down");
|
||||||
|
// face-down cards don't show unique number to avoid cheating
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sb.append(card.getName());
|
||||||
|
sb.append(" (");
|
||||||
|
sb.append(card.getId());
|
||||||
|
sb.append(")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (o != null) {
|
||||||
|
sb.append(o.toString());
|
||||||
|
}
|
||||||
|
sb.append("\r\n");
|
||||||
|
}
|
||||||
|
set(TrackableProperty.Remembered, sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
public String getNamedCard() {
|
public String getNamedCard() {
|
||||||
return get(TrackableProperty.NamedCard);
|
return get(TrackableProperty.NamedCard);
|
||||||
}
|
}
|
||||||
@@ -335,6 +377,93 @@ public class CardView extends GameEntityView {
|
|||||||
set(TrackableProperty.ChangedTypes, c.getChangedTextTypeWords());
|
set(TrackableProperty.ChangedTypes, c.getChangedTextTypeWords());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
final Card card = Card.get(this); //TODO: Avoid needing this
|
||||||
|
final CardStateView state = getOriginal();
|
||||||
|
if (card == null) {
|
||||||
|
return state.getOracleText().trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
// Vanguard Modifiers
|
||||||
|
if (card.isType("Vanguard")) {
|
||||||
|
sb.append("Hand Modifier: ").append(card.getRules().getHand());
|
||||||
|
sb.append("\r\nLife Modifier: ").append(card.getRules().getLife());
|
||||||
|
sb.append("\r\n\r\n");
|
||||||
|
}
|
||||||
|
if (card.isCommander()) {
|
||||||
|
sb.append(getOwner()).append("'s Commander\r\n");
|
||||||
|
sb.append(CardFactoryUtil.getCommanderInfo(Player.get(getOwner()))).append("\r\n");
|
||||||
|
}
|
||||||
|
sb.append(card.getAbilityText());
|
||||||
|
|
||||||
|
String nonAbilityText = card.getNonAbilityText();
|
||||||
|
if (card.getAmountOfKeyword("CARDNAME can block an additional creature.") > 1) {
|
||||||
|
final StringBuilder ab = new StringBuilder();
|
||||||
|
ab.append("CARDNAME can block an additional ");
|
||||||
|
ab.append(card.getAmountOfKeyword("CARDNAME can block an additional creature."));
|
||||||
|
ab.append(" creatures.");
|
||||||
|
nonAbilityText = nonAbilityText.replaceFirst("CARDNAME can block an additional creature.", ab.toString());
|
||||||
|
nonAbilityText = nonAbilityText.replaceAll("CARDNAME can block an additional creature.", "");
|
||||||
|
nonAbilityText = nonAbilityText.replaceAll("\r\n\r\n\r\n", "");
|
||||||
|
}
|
||||||
|
if (nonAbilityText.length() > 0) {
|
||||||
|
sb.append("\r\n \r\nNon ability features: \r\n");
|
||||||
|
sb.append(nonAbilityText.replaceAll("CARDNAME", getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append(getRemembered());
|
||||||
|
|
||||||
|
PlayerView chosenPlayer = getChosenPlayer();
|
||||||
|
if (chosenPlayer != null) {
|
||||||
|
sb.append("\r\n[Chosen player: ");
|
||||||
|
sb.append(chosenPlayer);
|
||||||
|
sb.append("]\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Direction chosenDirection = getChosenDirection();
|
||||||
|
if (chosenDirection != null) {
|
||||||
|
sb.append("\r\n[Chosen direction: ");
|
||||||
|
sb.append(chosenDirection);
|
||||||
|
sb.append("]\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterable<CardView> hauntedBy = getHauntedBy();
|
||||||
|
if (hauntedBy != null) {
|
||||||
|
sb.append("Haunted by: ");
|
||||||
|
boolean needDelim = false;
|
||||||
|
for (final CardView c : hauntedBy) {
|
||||||
|
if (needDelim) {
|
||||||
|
sb.append(",");
|
||||||
|
}
|
||||||
|
else { needDelim = false; }
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
sb.append("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CardView haunting = getHaunting();
|
||||||
|
if (haunting != null) {
|
||||||
|
sb.append("Haunting: ").append(haunting);
|
||||||
|
sb.append("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CardView pairedWith = getPairedWith();
|
||||||
|
if (pairedWith != null) {
|
||||||
|
sb.append("\r\n \r\nPaired With: ").append(pairedWith);
|
||||||
|
sb.append("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CardCharacteristics cloner = card.getState(CardCharacteristicName.Cloner);
|
||||||
|
if (cloner != null) {
|
||||||
|
sb.append("\r\nCloned by: ").append(cloner.getView().getName());
|
||||||
|
sb.append(" (").append(cloner.getView().getId()).append(")");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString().trim();
|
||||||
|
}
|
||||||
|
|
||||||
public CardStateView getOriginal() {
|
public CardStateView getOriginal() {
|
||||||
return get(TrackableProperty.Original);
|
return get(TrackableProperty.Original);
|
||||||
}
|
}
|
||||||
@@ -409,9 +538,9 @@ public class CardView extends GameEntityView {
|
|||||||
return getOriginal().getName();
|
return getOriginal().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (!mayBeShown) {
|
if (!mayBeShown) {
|
||||||
return "(Unknown card)";
|
return "(Unknown card)";
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if (StringUtils.isEmpty(getOriginal().getName())) {
|
if (StringUtils.isEmpty(getOriginal().getName())) {
|
||||||
CardStateView alternate = getAlternate();
|
CardStateView alternate = getAlternate();
|
||||||
@@ -501,13 +630,14 @@ public class CardView extends GameEntityView {
|
|||||||
set(TrackableProperty.Power, c.getNetAttack());
|
set(TrackableProperty.Power, c.getNetAttack());
|
||||||
}
|
}
|
||||||
void updatePower(CardCharacteristics c) {
|
void updatePower(CardCharacteristics c) {
|
||||||
Card card = Card.get(CardView.this);
|
if (CardView.this.getOriginal() == this) {
|
||||||
if (card != null) {
|
Card card = Card.get(CardView.this);
|
||||||
updatePower(card); //TODO: find a better way to do this
|
if (card != null) {
|
||||||
}
|
updatePower(card); //TODO: find a better way to do this
|
||||||
else {
|
return;
|
||||||
set(TrackableProperty.Power, c.getBaseAttack());
|
}
|
||||||
}
|
}
|
||||||
|
set(TrackableProperty.Power, c.getBaseAttack());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getToughness() {
|
public int getToughness() {
|
||||||
@@ -517,13 +647,14 @@ public class CardView extends GameEntityView {
|
|||||||
set(TrackableProperty.Toughness, c.getNetDefense());
|
set(TrackableProperty.Toughness, c.getNetDefense());
|
||||||
}
|
}
|
||||||
void updateToughness(CardCharacteristics c) {
|
void updateToughness(CardCharacteristics c) {
|
||||||
Card card = Card.get(CardView.this);
|
if (CardView.this.getOriginal() == this) {
|
||||||
if (card != null) {
|
Card card = Card.get(CardView.this);
|
||||||
updateToughness(card); //TODO: find a better way to do this
|
if (card != null) {
|
||||||
}
|
updateToughness(card); //TODO: find a better way to do this
|
||||||
else {
|
return;
|
||||||
set(TrackableProperty.Toughness, c.getBaseDefense());
|
}
|
||||||
}
|
}
|
||||||
|
set(TrackableProperty.Toughness, c.getBaseDefense());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLoyalty() {
|
public int getLoyalty() {
|
||||||
@@ -533,29 +664,21 @@ public class CardView extends GameEntityView {
|
|||||||
set(TrackableProperty.Loyalty, c.getCurrentLoyalty());
|
set(TrackableProperty.Loyalty, c.getCurrentLoyalty());
|
||||||
}
|
}
|
||||||
void updateLoyalty(CardCharacteristics c) {
|
void updateLoyalty(CardCharacteristics c) {
|
||||||
Card card = Card.get(CardView.this);
|
if (CardView.this.getOriginal() == this) {
|
||||||
if (card != null) {
|
Card card = Card.get(CardView.this);
|
||||||
updateLoyalty(card); //TODO: find a better way to do this
|
if (card != null) {
|
||||||
}
|
updateLoyalty(card); //TODO: find a better way to do this
|
||||||
else {
|
return;
|
||||||
set(TrackableProperty.Loyalty, 0);
|
}
|
||||||
}
|
}
|
||||||
|
set(TrackableProperty.Loyalty, 0); //alternates don't need loyalty
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getText() {
|
public String getOracleText() {
|
||||||
return get(TrackableProperty.Text);
|
return get(TrackableProperty.OracleText);
|
||||||
}
|
}
|
||||||
void updateText(Card c) {
|
void updateOracleText(CardCharacteristics c) {
|
||||||
set(TrackableProperty.Text, c.getText());
|
set(TrackableProperty.OracleText, c.getOracleText());
|
||||||
}
|
|
||||||
void updateText(CardCharacteristics c) {
|
|
||||||
Card card = Card.get(CardView.this);
|
|
||||||
if (card != null) {
|
|
||||||
updateText(card); //TODO: find a better way to do this
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
set(TrackableProperty.Text, c.getOracleText());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int foilIndexOverride = -1;
|
private int foilIndexOverride = -1;
|
||||||
|
|||||||
@@ -1790,11 +1790,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("IsRemembered")) {
|
} else if (property.equals("IsRemembered")) {
|
||||||
if (!source.getRemembered().contains(this)) {
|
if (!source.isRemembered(this)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("IsNotRemembered")) {
|
} else if (property.equals("IsNotRemembered")) {
|
||||||
if (source.getRemembered().contains(this)) {
|
if (source.isRemembered(this)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("EnchantedBy")) {
|
} else if (property.startsWith("EnchantedBy")) {
|
||||||
|
|||||||
@@ -456,15 +456,16 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getStackDescription() {
|
public String getStackDescription() {
|
||||||
if (stackDescription.equals(getHostCard().getText().trim())) {
|
String text = getHostCard().getView().getText();
|
||||||
return getHostCard().getName() + " - " + getHostCard().getText();
|
if (stackDescription.equals(text)) {
|
||||||
|
return getHostCard().getName() + " - " + text;
|
||||||
}
|
}
|
||||||
return stackDescription.replaceAll("CARDNAME", getHostCard().getName());
|
return stackDescription.replaceAll("CARDNAME", getHostCard().getName());
|
||||||
}
|
}
|
||||||
public void setStackDescription(final String s) {
|
public void setStackDescription(final String s) {
|
||||||
originalStackDescription = s;
|
originalStackDescription = s;
|
||||||
stackDescription = originalStackDescription;
|
stackDescription = originalStackDescription;
|
||||||
if (StringUtils.isEmpty(description) && StringUtils.isEmpty(hostCard.getText())) {
|
if (StringUtils.isEmpty(description) && StringUtils.isEmpty(hostCard.getView().getText())) {
|
||||||
setDescription(s);
|
setDescription(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package forge.trackable;
|
package forge.trackable;
|
||||||
|
|
||||||
import forge.card.CardRarity;
|
import forge.card.CardRarity;
|
||||||
|
import forge.game.Direction;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -38,6 +39,8 @@ public enum TrackableProperty {
|
|||||||
ChosenType(TrackableTypes.StringType),
|
ChosenType(TrackableTypes.StringType),
|
||||||
ChosenColors(TrackableTypes.CardViewCollectionType),
|
ChosenColors(TrackableTypes.CardViewCollectionType),
|
||||||
ChosenPlayer(TrackableTypes.PlayerViewType),
|
ChosenPlayer(TrackableTypes.PlayerViewType),
|
||||||
|
ChosenDirection(TrackableTypes.EnumType(Direction.class)),
|
||||||
|
Remembered(TrackableTypes.StringType),
|
||||||
NamedCard(TrackableTypes.StringType),
|
NamedCard(TrackableTypes.StringType),
|
||||||
Equipping(TrackableTypes.CardViewType),
|
Equipping(TrackableTypes.CardViewType),
|
||||||
EquippedBy(TrackableTypes.CardViewCollectionType),
|
EquippedBy(TrackableTypes.CardViewCollectionType),
|
||||||
@@ -60,6 +63,7 @@ public enum TrackableProperty {
|
|||||||
ImageKey(TrackableTypes.StringType),
|
ImageKey(TrackableTypes.StringType),
|
||||||
Type(TrackableTypes.StringSetType),
|
Type(TrackableTypes.StringSetType),
|
||||||
ManaCost(TrackableTypes.ManaCostType),
|
ManaCost(TrackableTypes.ManaCostType),
|
||||||
|
OracleText(TrackableTypes.StringType),
|
||||||
Power(TrackableTypes.IntegerType),
|
Power(TrackableTypes.IntegerType),
|
||||||
Toughness(TrackableTypes.IntegerType),
|
Toughness(TrackableTypes.IntegerType),
|
||||||
Loyalty(TrackableTypes.IntegerType),
|
Loyalty(TrackableTypes.IntegerType),
|
||||||
|
|||||||
@@ -176,15 +176,12 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String text = state.getText();
|
|
||||||
final String firstText = firstState.getText();
|
|
||||||
|
|
||||||
if (!panel.getAttachedPanels().isEmpty()
|
if (!panel.getAttachedPanels().isEmpty()
|
||||||
|| !card.hasSameCounters(firstPanel.getCard())
|
|| !card.hasSameCounters(firstPanel.getCard())
|
||||||
|| (card.isSick() != firstCard.isSick())
|
|| (card.isSick() != firstCard.isSick())
|
||||||
|| (state.getPower() != firstState.getPower())
|
|| (state.getPower() != firstState.getPower())
|
||||||
|| (state.getToughness() != firstState.getToughness())
|
|| (state.getToughness() != firstState.getToughness())
|
||||||
|| !(text.equals(firstText))
|
|| !(card.getText().equals(firstCard.getText()))
|
||||||
|| (stack.size() == tokenStackMax)) {
|
|| (stack.size() == tokenStackMax)) {
|
||||||
// If this token has attachments or the stack is full,
|
// If this token has attachments or the stack is full,
|
||||||
// put it to the right.
|
// put it to the right.
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ public class CardImageRenderer {
|
|||||||
g.drawImage(image, x + (w - iconSize) / 2, y + (h - iconSize) / 2, iconSize, iconSize);
|
g.drawImage(image, x + (w - iconSize) / 2, y + (h - iconSize) / 2, iconSize, iconSize);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
final String text = card.getOriginal().getText();
|
final String text = card.getText();
|
||||||
if (StringUtils.isEmpty(text)) { return; }
|
if (StringUtils.isEmpty(text)) { return; }
|
||||||
|
|
||||||
float padding = TEXT_FONT.getCapHeight() * 0.75f;
|
float padding = TEXT_FONT.getCapHeight() * 0.75f;
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ public class CardDetailUtil {
|
|||||||
if (area.length() != 0) {
|
if (area.length() != 0) {
|
||||||
area.append("\n");
|
area.append("\n");
|
||||||
}
|
}
|
||||||
String text = state.getText();
|
String text = card.getText();
|
||||||
// LEVEL [0-9]+-[0-9]+
|
// LEVEL [0-9]+-[0-9]+
|
||||||
// LEVEL [0-9]+\+
|
// LEVEL [0-9]+\+
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user