mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Fix replaced tokens not gaining additional traits
This commit is contained in:
@@ -13,6 +13,7 @@ import forge.game.ability.AbilityKey;
|
|||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
|
import forge.game.card.CardFactory;
|
||||||
import forge.game.card.TokenCreateTable;
|
import forge.game.card.TokenCreateTable;
|
||||||
import forge.game.card.token.TokenInfo;
|
import forge.game.card.token.TokenInfo;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
@@ -81,7 +82,7 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
|
|||||||
long timestamp = game.getNextTimestamp();
|
long timestamp = game.getNextTimestamp();
|
||||||
|
|
||||||
Map<Player, Integer> toInsertMap = Maps.newHashMap();
|
Map<Player, Integer> toInsertMap = Maps.newHashMap();
|
||||||
Map<Player, Iterable<Object>> toRememberMap = Maps.newHashMap();
|
Map<Player, Card> oldTokenMap = Maps.newHashMap();
|
||||||
Set<Card> toRemoveSet = Sets.newHashSet();
|
Set<Card> toRemoveSet = Sets.newHashSet();
|
||||||
for (Map.Entry<Card, Integer> e : table.row(affected).entrySet()) {
|
for (Map.Entry<Card, Integer> e : table.row(affected).entrySet()) {
|
||||||
if (!sa.matchesValidParam("ValidCard", e.getKey())) {
|
if (!sa.matchesValidParam("ValidCard", e.getKey())) {
|
||||||
@@ -90,7 +91,7 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
|
|||||||
Player controller = e.getKey().getController();
|
Player controller = e.getKey().getController();
|
||||||
int old = ObjectUtils.defaultIfNull(toInsertMap.get(controller), 0);
|
int old = ObjectUtils.defaultIfNull(toInsertMap.get(controller), 0);
|
||||||
toInsertMap.put(controller, old + e.getValue());
|
toInsertMap.put(controller, old + e.getValue());
|
||||||
toRememberMap.put(controller, e.getKey().getRemembered());
|
oldTokenMap.put(controller, e.getKey());
|
||||||
toRemoveSet.add(e.getKey());
|
toRemoveSet.add(e.getKey());
|
||||||
}
|
}
|
||||||
// remove replaced tokens
|
// remove replaced tokens
|
||||||
@@ -109,9 +110,15 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
token.setController(pe.getKey(), timestamp);
|
token.setController(pe.getKey(), timestamp);
|
||||||
|
|
||||||
|
// reapply state to new token
|
||||||
|
final Card newToken = CardFactory.copyCard(token, true);
|
||||||
|
newToken.setStates(CardFactory.getCloneStates(token, newToken, (SpellAbility) originalParams.get(AbilityKey.SourceSA)));
|
||||||
|
// force update the now set State
|
||||||
|
newToken.setState(newToken.getCurrentStateName(), true, true);
|
||||||
// if token is created from ForEach keep that
|
// if token is created from ForEach keep that
|
||||||
token.addRemembered(toRememberMap.get(pe.getKey()));
|
newToken.addRemembered(oldTokenMap.get(pe.getKey()).getRemembered());
|
||||||
table.put(affected, token, pe.getValue());
|
table.put(affected, newToken, pe.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ("ReplaceController".equals(sa.getParam("Type"))) {
|
} else if ("ReplaceController".equals(sa.getParam("Type"))) {
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public abstract class TokenEffectBase extends SpellAbilityEffect {
|
|||||||
for (Player p : tokenTable.rowKeySet()) {
|
for (Player p : tokenTable.rowKeySet()) {
|
||||||
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(p);
|
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(p);
|
||||||
repParams.put(AbilityKey.Token, tokenTable);
|
repParams.put(AbilityKey.Token, tokenTable);
|
||||||
|
repParams.put(AbilityKey.SourceSA, sa);
|
||||||
repParams.put(AbilityKey.EffectOnly, true); // currently only effects can create tokens?
|
repParams.put(AbilityKey.EffectOnly, true); // currently only effects can create tokens?
|
||||||
|
|
||||||
switch (game.getReplacementHandler().run(ReplacementType.CreateToken, repParams)) {
|
switch (game.getReplacementHandler().run(ReplacementType.CreateToken, repParams)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user