mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Attempt to fix a bug so triggered abilities check the timestamps of cards before resolving
This commit is contained in:
@@ -12,6 +12,9 @@ import forge.game.spellability.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
// Wrapper ability that checks the requirements again just before
|
||||
// resolving, for intervening if clauses.
|
||||
@@ -373,6 +376,29 @@ public class WrappedAbility extends Ability implements ISpellAbility {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check timestamps of triggered objects
|
||||
final List<Object> original = Lists.newArrayList(sa.getTriggerRemembered());
|
||||
for (Object o : original) {
|
||||
if (o instanceof Card) {
|
||||
Card card = (Card) o;
|
||||
Card current = game.getCardState(card);
|
||||
if (current.getTimestamp() != card.getTimestamp()) {
|
||||
sa.getTriggerRemembered().remove(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
final Map<String, Object> triggerMap = new HashMap<String, Object>(sa.getTriggeringObjects());
|
||||
for (Entry<String, Object> ev : triggerMap.entrySet()) {
|
||||
if (ev.getValue() instanceof Card) {
|
||||
Card card = (Card) ev.getValue();
|
||||
Card current = game.getCardState(card);
|
||||
if (current.getTimestamp() != card.getTimestamp()) {
|
||||
sa.getTriggeringObjects().remove(ev.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: List<Card>
|
||||
|
||||
getActivatingPlayer().getController().playSpellAbilityNoStack(sa, false);
|
||||
|
||||
// Add eventual delayed trigger.
|
||||
|
||||
Reference in New Issue
Block a user