mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
static keyword may be accessed as method of Trigger
triggers are stored as list (unlike array)
This commit is contained in:
@@ -43,6 +43,11 @@ public abstract class AllZoneUtil {
|
|||||||
*/
|
*/
|
||||||
public static CardList getCardsIn(final Constant.Zone zone) {
|
public static CardList getCardsIn(final Constant.Zone zone) {
|
||||||
final CardList cards = new CardList();
|
final CardList cards = new CardList();
|
||||||
|
getCardsIn(zone, cards);
|
||||||
|
return cards;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void getCardsIn(final Constant.Zone zone, final CardList cards) {
|
||||||
if (zone == Zone.Stack) {
|
if (zone == Zone.Stack) {
|
||||||
cards.addAll(AllZone.getStackZone().getCards());
|
cards.addAll(AllZone.getStackZone().getCards());
|
||||||
} else {
|
} else {
|
||||||
@@ -50,32 +55,25 @@ public abstract class AllZoneUtil {
|
|||||||
cards.addAll(p.getZone(zone).getCards());
|
cards.addAll(p.getZone(zone).getCards());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cards;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static CardList getCardsIn(final Iterable<Constant.Zone> zones) {
|
||||||
*
|
|
||||||
* getCardsIn.
|
|
||||||
*
|
|
||||||
* @param zones
|
|
||||||
* a List<Constant.Zone>
|
|
||||||
* @return CardList
|
|
||||||
*/
|
|
||||||
public static CardList getCardsIn(final List<Constant.Zone> zones) {
|
|
||||||
final CardList cards = new CardList();
|
final CardList cards = new CardList();
|
||||||
for (final Zone z : zones) {
|
for (final Zone z : zones) {
|
||||||
if (z == Zone.Stack) {
|
getCardsIn(z, cards);
|
||||||
cards.addAll(AllZone.getStackZone().getCards());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final Player p : AllZone.getPlayersInGame()) {
|
|
||||||
cards.addAll(p.getZone(z).getCards());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static CardList getCardsIn(final Constant.Zone[] zones) {
|
||||||
|
final CardList cards = new CardList();
|
||||||
|
for (final Zone z : zones) {
|
||||||
|
getCardsIn(z, cards);
|
||||||
|
}
|
||||||
|
return cards;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gets a list of all cards owned by both players that have are currently in
|
* gets a list of all cards owned by both players that have are currently in
|
||||||
* the given zone.
|
* the given zone.
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.util.Collections;
|
|||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@@ -689,7 +690,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
*
|
*
|
||||||
* @return a {@link java.util.ArrayList} object.
|
* @return a {@link java.util.ArrayList} object.
|
||||||
*/
|
*/
|
||||||
public final ArrayList<Trigger> getTriggers() {
|
public final List<Trigger> getTriggers() {
|
||||||
return this.getCharacteristics().getTriggers();
|
return this.getCharacteristics().getTriggers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -720,7 +721,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
* @param trigs
|
* @param trigs
|
||||||
* a {@link java.util.ArrayList} object.
|
* a {@link java.util.ArrayList} object.
|
||||||
*/
|
*/
|
||||||
public final void setTriggers(final ArrayList<Trigger> trigs) {
|
public final void setTriggers(final List<Trigger> trigs) {
|
||||||
final ArrayList<Trigger> copyList = new ArrayList<Trigger>();
|
final ArrayList<Trigger> copyList = new ArrayList<Trigger>();
|
||||||
for (final Trigger t : trigs) {
|
for (final Trigger t : trigs) {
|
||||||
if (t.getIsIntrinsic()) {
|
if (t.getIsIntrinsic()) {
|
||||||
@@ -6613,7 +6614,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
if (!shares) {
|
if (!shares) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (restriction.equals("Battlefield")) {
|
} else if (restriction.equals(Constant.Zone.Battlefield.toString())) {
|
||||||
final CardList list = AllZoneUtil.getCardsIn(Constant.Zone.Battlefield);
|
final CardList list = AllZoneUtil.getCardsIn(Constant.Zone.Battlefield);
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -151,14 +151,13 @@ public class ComputerAIGeneral implements Computer {
|
|||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public static boolean hasETBTrigger(final Card card) {
|
public static boolean hasETBTrigger(final Card card) {
|
||||||
final ArrayList<Trigger> triggers = card.getTriggers();
|
for (final Trigger tr : card.getTriggers()) {
|
||||||
for (final Trigger tr : triggers) {
|
|
||||||
final HashMap<String, String> params = tr.getMapParams();
|
final HashMap<String, String> params = tr.getMapParams();
|
||||||
if (tr.getMode() != TriggerType.ChangesZone) {
|
if (tr.getMode() != TriggerType.ChangesZone) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!params.get("Destination").equals("Battlefield")) {
|
if (!params.get("Destination").equals(Zone.Battlefield.toString())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,8 +86,7 @@ public class ComputerUtilAttack {
|
|||||||
|
|
||||||
// Cards with triggers should come first (for Battle Cry)
|
// Cards with triggers should come first (for Battle Cry)
|
||||||
for (final Card attacker : in) {
|
for (final Card attacker : in) {
|
||||||
final ArrayList<Trigger> registeredTriggers = attacker.getTriggers();
|
for (final Trigger trigger : attacker.getTriggers()) {
|
||||||
for (final Trigger trigger : registeredTriggers) {
|
|
||||||
if (trigger.getMode() == TriggerType.Attacks) {
|
if (trigger.getMode() == TriggerType.Attacks) {
|
||||||
list.add(attacker);
|
list.add(attacker);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,6 +205,8 @@ public final class Constant {
|
|||||||
/** Ante. */
|
/** Ante. */
|
||||||
Ante(false);
|
Ante(false);
|
||||||
|
|
||||||
|
public static final Zone[] StaticAbilitiesSourceZones = new Zone[]{Battlefield, Graveyard, Exile, Hand};
|
||||||
|
|
||||||
private final boolean holdsHiddenInfo;
|
private final boolean holdsHiddenInfo;
|
||||||
private Zone(boolean holdsHidden) {
|
private Zone(boolean holdsHidden) {
|
||||||
holdsHiddenInfo = holdsHidden;
|
holdsHiddenInfo = holdsHidden;
|
||||||
|
|||||||
@@ -1380,6 +1380,15 @@ public abstract class Player extends GameEntity {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final CardList getCardsIn(final Constant.Zone[] zones) {
|
||||||
|
final CardList result = new CardList();
|
||||||
|
for (final Constant.Zone z : zones) {
|
||||||
|
if (this.getZone(z) != null) {
|
||||||
|
result.addAll(this.getZone(z).getCards());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* gets a list of all cards with requested cardName in a given player's
|
* gets a list of all cards with requested cardName in a given player's
|
||||||
* requested zone. This function makes a CardList from Card[].
|
* requested zone. This function makes a CardList from Card[].
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package forge.card;
|
package forge.card;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import forge.CardColor;
|
import forge.CardColor;
|
||||||
import forge.card.replacement.ReplacementEffect;
|
import forge.card.replacement.ReplacementEffect;
|
||||||
@@ -264,7 +265,7 @@ public class CardCharacteristics {
|
|||||||
*
|
*
|
||||||
* @return the triggers
|
* @return the triggers
|
||||||
*/
|
*/
|
||||||
public final ArrayList<Trigger> getTriggers() {
|
public final List<Trigger> getTriggers() {
|
||||||
return this.triggers;
|
return this.triggers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package forge.card.abilityfactory;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
@@ -627,7 +628,7 @@ public final class AbilityFactoryAnimate {
|
|||||||
// suppress triggers from the animated card
|
// suppress triggers from the animated card
|
||||||
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
|
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
|
||||||
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
|
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
|
||||||
final ArrayList<Trigger> triggersToRemove = c.getTriggers();
|
final List<Trigger> triggersToRemove = c.getTriggers();
|
||||||
for (final Trigger trigger : triggersToRemove) {
|
for (final Trigger trigger : triggersToRemove) {
|
||||||
trigger.setSuppressed(true);
|
trigger.setSuppressed(true);
|
||||||
removedTriggers.add(trigger);
|
removedTriggers.add(trigger);
|
||||||
@@ -1251,7 +1252,7 @@ public final class AbilityFactoryAnimate {
|
|||||||
// suppress triggers from the animated card
|
// suppress triggers from the animated card
|
||||||
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
|
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>();
|
||||||
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
|
if (params.containsKey("OverwriteTriggers") || params.containsKey("RemoveAllAbilities")) {
|
||||||
final ArrayList<Trigger> triggersToRemove = c.getTriggers();
|
final List<Trigger> triggersToRemove = c.getTriggers();
|
||||||
for (final Trigger trigger : triggersToRemove) {
|
for (final Trigger trigger : triggersToRemove) {
|
||||||
trigger.setSuppressed(true);
|
trigger.setSuppressed(true);
|
||||||
removedTriggers.add(trigger);
|
removedTriggers.add(trigger);
|
||||||
|
|||||||
@@ -428,8 +428,7 @@ public class SpellPermanent extends Spell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trigger play improvements
|
// Trigger play improvements
|
||||||
final ArrayList<Trigger> triggers = card.getTriggers();
|
for (final Trigger tr : card.getTriggers()) {
|
||||||
for (final Trigger tr : triggers) {
|
|
||||||
// These triggers all care for ETB effects
|
// These triggers all care for ETB effects
|
||||||
|
|
||||||
final HashMap<String, String> params = tr.getMapParams();
|
final HashMap<String, String> params = tr.getMapParams();
|
||||||
@@ -437,7 +436,7 @@ public class SpellPermanent extends Spell {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!params.get("Destination").equals("Battlefield")) {
|
if (!params.get("Destination").equals(Zone.Battlefield.toString())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -312,8 +312,7 @@ public class StaticAbilityContinuous {
|
|||||||
|
|
||||||
// remove triggers
|
// remove triggers
|
||||||
if (params.containsKey("RemoveTriggers") || removeAllAbilities) {
|
if (params.containsKey("RemoveTriggers") || removeAllAbilities) {
|
||||||
final ArrayList<Trigger> triggers = affectedCard.getTriggers();
|
for (final Trigger trigger : affectedCard.getTriggers()) {
|
||||||
for (final Trigger trigger : triggers) {
|
|
||||||
trigger.setTemporarilySuppressed(true);
|
trigger.setTemporarilySuppressed(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -725,4 +725,12 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
copy.setID(this.getId());
|
copy.setID(this.getId());
|
||||||
copy.setMode(this.getMode());
|
copy.setMode(this.getMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isStatic() {
|
||||||
|
return getMapParams().containsKey("Static"); // && params.get("Static").equals("True") [always true if present]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,13 +341,13 @@ public class TriggerHandler {
|
|||||||
// This is done to allow the list of triggers to be modified while
|
// This is done to allow the list of triggers to be modified while
|
||||||
// triggers are running.
|
// triggers are running.
|
||||||
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers);
|
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers);
|
||||||
CardList allCards = AllZoneUtil.getCardsInGame();
|
CardList allCards = AllZoneUtil.getCardsIn(Zone.StaticAbilitiesSourceZones);
|
||||||
boolean checkStatics = false;
|
boolean checkStatics = false;
|
||||||
|
|
||||||
// Static triggers
|
// Static triggers
|
||||||
for (final Card c : allCards) {
|
for (final Card c : allCards) {
|
||||||
for (final Trigger t : c.getTriggers()) {
|
for (final Trigger t : c.getTriggers()) {
|
||||||
if (t.getMapParams().containsKey("Static")) {
|
if (t.isStatic()) {
|
||||||
checkStatics |= this.runSingleTrigger(t, mode, runParams);
|
checkStatics |= this.runSingleTrigger(t, mode, runParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -358,11 +358,11 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AP
|
// AP
|
||||||
allCards = playerAP.getAllCards();
|
allCards = playerAP.getCardsIn(Zone.StaticAbilitiesSourceZones);
|
||||||
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP));
|
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP));
|
||||||
for (final Card c : allCards) {
|
for (final Card c : allCards) {
|
||||||
for (final Trigger t : c.getTriggers()) {
|
for (final Trigger t : c.getTriggers()) {
|
||||||
if (!t.getMapParams().containsKey("Static")) {
|
if (!t.isStatic()) {
|
||||||
this.runSingleTrigger(t, mode, runParams);
|
this.runSingleTrigger(t, mode, runParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,11 +379,11 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NAP
|
// NAP
|
||||||
allCards = playerAP.getOpponent().getAllCards();
|
allCards = playerAP.getOpponent().getCardsIn(Zone.StaticAbilitiesSourceZones);
|
||||||
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP.getOpponent()));
|
allCards.addAll(AllZoneUtil.getCardsIn(Constant.Zone.Stack).getController(playerAP.getOpponent()));
|
||||||
for (final Card c : allCards) {
|
for (final Card c : allCards) {
|
||||||
for (final Trigger t : c.getTriggers()) {
|
for (final Trigger t : c.getTriggers()) {
|
||||||
if (!t.getMapParams().containsKey("Static")) {
|
if (!t.isStatic()) {
|
||||||
this.runSingleTrigger(t, mode, runParams);
|
this.runSingleTrigger(t, mode, runParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -451,18 +451,12 @@ public class TriggerHandler {
|
|||||||
// Torpor Orb check
|
// Torpor Orb check
|
||||||
final CardList torporOrbs = AllZoneUtil.getCardsIn(Zone.Battlefield, "Torpor Orb");
|
final CardList torporOrbs = AllZoneUtil.getCardsIn(Zone.Battlefield, "Torpor Orb");
|
||||||
|
|
||||||
if (torporOrbs.size() != 0) {
|
if (torporOrbs.size() != 0 && mode == TriggerType.ChangesZone) {
|
||||||
if (params.containsKey("Destination")) {
|
String destination = params.get("Destination");
|
||||||
if ((params.get("Destination").equals("Battlefield") || params.get("Destination").equals("Any"))
|
// if destination is not set, or set to 'battlefield' or 'any'
|
||||||
&& mode.equals("ChangesZone")
|
if (null == destination || Zone.Battlefield.toString().equals(destination) || "Any".equals(destination) ) {
|
||||||
&& ((params.get("ValidCard").contains("Creature")) || (params.get("ValidCard").contains("Self") && regtrig
|
if (params.get("ValidCard").contains("Creature")
|
||||||
.getHostCard().isCreature()))) {
|
|| (params.get("ValidCard").contains("Self") && regtrig.getHostCard().isCreature())) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (mode.equals("ChangesZone")
|
|
||||||
&& ((params.get("ValidCard").contains("Creature")) || (params.get("ValidCard").contains("Self") && regtrig
|
|
||||||
.getHostCard().isCreature()))) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1074,7 +1068,7 @@ public class TriggerHandler {
|
|||||||
// Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card"));
|
// Card src = (Card)(sa[0].getSourceCard().getTriggeringObject("Card"));
|
||||||
// System.out.println("Trigger going on stack for "+mode+". Card = "+src);
|
// System.out.println("Trigger going on stack for "+mode+". Card = "+src);
|
||||||
|
|
||||||
if (params.containsKey("Static") && params.get("Static").equals("True")) {
|
if (regtrig.isStatic()) {
|
||||||
Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false);
|
Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false);
|
||||||
} else {
|
} else {
|
||||||
AllZone.getStack().addSimultaneousStackEntry(wrapperAbility);
|
AllZone.getStack().addSimultaneousStackEntry(wrapperAbility);
|
||||||
|
|||||||
Reference in New Issue
Block a user