Fix replaced tokens not gaining additional traits

This commit is contained in:
tool4EvEr
2022-01-20 23:33:35 +01:00
committed by TRT
parent 052c82545f
commit 4fd4fa37b3
2 changed files with 12 additions and 4 deletions

View File

@@ -13,6 +13,7 @@ import forge.game.ability.AbilityKey;
import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card;
import forge.game.card.CardFactory;
import forge.game.card.TokenCreateTable;
import forge.game.card.token.TokenInfo;
import forge.game.player.Player;
@@ -81,7 +82,7 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
long timestamp = game.getNextTimestamp();
Map<Player, Integer> toInsertMap = Maps.newHashMap();
Map<Player, Iterable<Object>> toRememberMap = Maps.newHashMap();
Map<Player, Card> oldTokenMap = Maps.newHashMap();
Set<Card> toRemoveSet = Sets.newHashSet();
for (Map.Entry<Card, Integer> e : table.row(affected).entrySet()) {
if (!sa.matchesValidParam("ValidCard", e.getKey())) {
@@ -90,7 +91,7 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
Player controller = e.getKey().getController();
int old = ObjectUtils.defaultIfNull(toInsertMap.get(controller), 0);
toInsertMap.put(controller, old + e.getValue());
toRememberMap.put(controller, e.getKey().getRemembered());
oldTokenMap.put(controller, e.getKey());
toRemoveSet.add(e.getKey());
}
// remove replaced tokens
@@ -109,9 +110,15 @@ public class ReplaceTokenEffect extends SpellAbilityEffect {
}
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
token.addRemembered(toRememberMap.get(pe.getKey()));
table.put(affected, token, pe.getValue());
newToken.addRemembered(oldTokenMap.get(pe.getKey()).getRemembered());
table.put(affected, newToken, pe.getValue());
}
}
} else if ("ReplaceController".equals(sa.getParam("Type"))) {

View File

@@ -84,6 +84,7 @@ public abstract class TokenEffectBase extends SpellAbilityEffect {
for (Player p : tokenTable.rowKeySet()) {
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(p);
repParams.put(AbilityKey.Token, tokenTable);
repParams.put(AbilityKey.SourceSA, sa);
repParams.put(AbilityKey.EffectOnly, true); // currently only effects can create tokens?
switch (game.getReplacementHandler().run(ReplacementType.CreateToken, repParams)) {