mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Refresh active triggers after statics from ETB (#5580)
* Refresh active triggers after statics from ETB * Style change --------- Co-authored-by: TRT <>
This commit is contained in:
@@ -613,10 +613,6 @@ public class GameAction {
|
||||
}
|
||||
|
||||
game.getTriggerHandler().clearActiveTriggers(copied, null);
|
||||
// register all LTB trigger from last state battlefield
|
||||
for (Card lki : lastBattlefield) {
|
||||
game.getTriggerHandler().registerActiveLTBTrigger(lki);
|
||||
}
|
||||
game.getTriggerHandler().registerActiveTrigger(copied, false);
|
||||
|
||||
// play the change zone sound
|
||||
@@ -1438,6 +1434,8 @@ public class GameAction {
|
||||
}
|
||||
setHoldCheckingStaticAbilities(false);
|
||||
|
||||
table.triggerChangesZoneAll(game, null);
|
||||
|
||||
// important to collect first otherwise if a static fires it will mess up registered ones from LKI
|
||||
game.getTriggerHandler().collectTriggerForWaiting();
|
||||
if (game.getTriggerHandler().runWaitingTriggers()) {
|
||||
@@ -1448,8 +1446,6 @@ public class GameAction {
|
||||
game.getCombat().removeAbsentCombatants();
|
||||
}
|
||||
|
||||
table.triggerChangesZoneAll(game, null);
|
||||
|
||||
for (final Card c : cardsToUpdateLKI) {
|
||||
game.updateLastStateForCard(c);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
public class PermanentEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -26,12 +25,8 @@ public class PermanentEffect extends SpellAbilityEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card host = sa.getHostCard();
|
||||
final Game game = host.getGame();
|
||||
CardZoneTable table = new CardZoneTable();
|
||||
ZoneType previousZone = host.getZone().getZoneType();
|
||||
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
moveParams.put(AbilityKey.LastStateBattlefield, game.copyLastStateBattlefield());
|
||||
moveParams.put(AbilityKey.LastStateGraveyard, game.copyLastStateGraveyard());
|
||||
final Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
final CardZoneTable table = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
|
||||
final Card c = game.getAction().moveToPlay(host, host.getController(), sa, moveParams);
|
||||
sa.setHostCard(c);
|
||||
@@ -47,10 +42,6 @@ public class PermanentEffect extends SpellAbilityEffect {
|
||||
registerDelayedTrigger(sa, "Sacrifice", Lists.newArrayList(c));
|
||||
}
|
||||
|
||||
ZoneType newZone = c.getZone().getZoneType();
|
||||
if (newZone != previousZone) {
|
||||
table.put(previousZone, newZone, c);
|
||||
}
|
||||
table.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ package forge.game.card;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
import com.google.common.collect.*;
|
||||
|
||||
import forge.game.CardTraitBase;
|
||||
@@ -34,8 +32,8 @@ public class CardZoneTable extends ForwardingTable<ZoneType, ZoneType, CardColle
|
||||
}
|
||||
|
||||
public CardZoneTable(CardCollectionView lastStateBattlefield, CardCollectionView lastStateGraveyard) {
|
||||
setLastStateBattlefield(ObjectUtils.firstNonNull(lastStateBattlefield, CardCollection.EMPTY));
|
||||
setLastStateGraveyard(ObjectUtils.firstNonNull(lastStateGraveyard, CardCollection.EMPTY));
|
||||
setLastStateBattlefield(lastStateBattlefield);
|
||||
setLastStateGraveyard(lastStateGraveyard);
|
||||
}
|
||||
|
||||
public CardZoneTable(CardZoneTable cardZoneTable) {
|
||||
@@ -64,10 +62,10 @@ public class CardZoneTable extends ForwardingTable<ZoneType, ZoneType, CardColle
|
||||
}
|
||||
public void setLastStateBattlefield(CardCollectionView lastState) {
|
||||
// store it in a new object, it might be from Game which can also refresh itself
|
||||
this.lastStateBattlefield = new CardCollection(lastState);
|
||||
lastStateBattlefield = lastState == null ? CardCollection.EMPTY : new CardCollection(lastState);
|
||||
}
|
||||
public void setLastStateGraveyard(CardCollectionView lastState) {
|
||||
this.lastStateGraveyard = new CardCollection(lastState);
|
||||
lastStateGraveyard = lastState == null ? CardCollection.EMPTY : new CardCollection(lastState);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,6 +100,14 @@ public class CardZoneTable extends ForwardingTable<ZoneType, ZoneType, CardColle
|
||||
// will be handled by original "cause" instead
|
||||
return;
|
||||
}
|
||||
// this should still refresh for empty battlefield
|
||||
if (lastStateBattlefield != CardCollection.EMPTY) {
|
||||
game.getTriggerHandler().resetActiveTriggers(false);
|
||||
// register all LTB trigger from last state battlefield
|
||||
for (Card lki : lastStateBattlefield) {
|
||||
game.getTriggerHandler().registerActiveLTBTrigger(lki);
|
||||
}
|
||||
}
|
||||
if (!isEmpty()) {
|
||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.Cards, new CardZoneTable(this));
|
||||
|
||||
Reference in New Issue
Block a user