mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Fix so Enters the Battlefield triggers work
This commit is contained in:
@@ -22,15 +22,13 @@ public abstract class GameObject {
|
||||
* @return true, if is valid
|
||||
*/
|
||||
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) {
|
||||
|
||||
for (final String restriction : restrictions) {
|
||||
if (this.isValid(restriction, sourceController, source)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
} // isValid
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is valid.
|
||||
|
||||
@@ -3074,18 +3074,6 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
|
||||
}
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final boolean equals(final Object o) {
|
||||
if (o instanceof Card) {
|
||||
final Card c = (Card) o;
|
||||
final int a = id;
|
||||
final int b = c.id;
|
||||
return (a == b);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
|
||||
@@ -34,6 +34,7 @@ public class CardCollection extends FCollection<Card> implements CardCollectionV
|
||||
}
|
||||
else if (newCol == null) { //if multiple views have cards, we need to create a new collection
|
||||
newCol = new CardCollection(viewWithCards);
|
||||
newCol.addAll(v);
|
||||
viewWithCards = newCol;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -70,41 +70,41 @@ public class TriggerHandler {
|
||||
}
|
||||
|
||||
public final boolean hasDelayedTriggers() {
|
||||
return !this.delayedTriggers.isEmpty();
|
||||
return !delayedTriggers.isEmpty();
|
||||
}
|
||||
|
||||
public final void registerDelayedTrigger(final Trigger trig) {
|
||||
this.delayedTriggers.add(trig);
|
||||
delayedTriggers.add(trig);
|
||||
}
|
||||
|
||||
public final void clearDelayedTrigger() {
|
||||
this.delayedTriggers.clear();
|
||||
delayedTriggers.clear();
|
||||
}
|
||||
|
||||
public final void clearDelayedTrigger(Card card) {
|
||||
ArrayList<Trigger> deltrigs = new ArrayList<Trigger>(this.delayedTriggers);
|
||||
ArrayList<Trigger> deltrigs = new ArrayList<Trigger>(delayedTriggers);
|
||||
|
||||
for (Trigger trigger : deltrigs) {
|
||||
if (trigger.getHostCard().equals(card)) {
|
||||
this.delayedTriggers.remove(trigger);
|
||||
delayedTriggers.remove(trigger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final void registerPlayerDefinedDelayedTrigger(final Player player, final Trigger trig) {
|
||||
this.playerDefinedDelayedTriggers.put(player, trig);
|
||||
playerDefinedDelayedTriggers.put(player, trig);
|
||||
}
|
||||
|
||||
public final void handlePlayerDefinedDelTriggers(final Player player) {
|
||||
this.delayedTriggers.addAll(this.playerDefinedDelayedTriggers.removeAll(player));
|
||||
delayedTriggers.addAll(playerDefinedDelayedTriggers.removeAll(player));
|
||||
}
|
||||
|
||||
public final void suppressMode(final TriggerType mode) {
|
||||
this.suppressedModes.add(mode);
|
||||
suppressedModes.add(mode);
|
||||
}
|
||||
|
||||
public final void clearSuppression(final TriggerType mode) {
|
||||
this.suppressedModes.remove(mode);
|
||||
suppressedModes.remove(mode);
|
||||
}
|
||||
|
||||
public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) {
|
||||
@@ -166,7 +166,7 @@ public class TriggerHandler {
|
||||
public final void resetActiveTriggers() {
|
||||
activeTriggers.clear();
|
||||
CardCollection allCards = new CardCollection();
|
||||
for(Player p : game.getPlayers()) {
|
||||
for (Player p : game.getPlayers()) {
|
||||
allCards.addAll(p.getAllCards());
|
||||
}
|
||||
|
||||
@@ -191,13 +191,13 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
for(Trigger removed : toBeRemoved) {
|
||||
for (Trigger removed : toBeRemoved) {
|
||||
activeTriggers.remove(removed);
|
||||
}
|
||||
}
|
||||
|
||||
public final void registerActiveTrigger(Card c, boolean onlyExtrinsic) {
|
||||
for(final Trigger t: c.getTriggers()) {
|
||||
for (final Trigger t: c.getTriggers()) {
|
||||
if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || t instanceof TriggerAlways) {
|
||||
if (isTriggerActive(t)) {
|
||||
activeTriggers.add(t);
|
||||
@@ -207,7 +207,7 @@ public class TriggerHandler {
|
||||
}
|
||||
|
||||
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
|
||||
if (this.suppressedModes.contains(mode)) {
|
||||
if (suppressedModes.contains(mode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -226,9 +226,9 @@ public class TriggerHandler {
|
||||
boolean checkStatics = false;
|
||||
// only cards in play can run state triggers
|
||||
|
||||
for(final Trigger t: this.activeTriggers) {
|
||||
for (final Trigger t: activeTriggers) {
|
||||
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
||||
this.runSingleTrigger(t, runParams);
|
||||
runSingleTrigger(t, runParams);
|
||||
checkStatics = true;
|
||||
}
|
||||
}
|
||||
@@ -261,14 +261,14 @@ public class TriggerHandler {
|
||||
}
|
||||
|
||||
// Copy triggers here, so things can be modified just in case
|
||||
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers);
|
||||
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(delayedTriggers);
|
||||
|
||||
boolean checkStatics = false;
|
||||
|
||||
// Static triggers
|
||||
for (final Trigger t : this.activeTriggers) {
|
||||
for (final Trigger t : activeTriggers) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||
this.runSingleTrigger(t, runParams);
|
||||
runSingleTrigger(t, runParams);
|
||||
checkStatics = true;
|
||||
}
|
||||
}
|
||||
@@ -297,7 +297,7 @@ public class TriggerHandler {
|
||||
boolean checkStatics = false;
|
||||
|
||||
Card card = null;
|
||||
for (final Trigger t : this.activeTriggers) {
|
||||
for (final Trigger t : activeTriggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player)
|
||||
&& canRunTrigger(t, mode, runParams)) {
|
||||
|
||||
@@ -311,16 +311,16 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
this.runSingleTrigger(t, runParams);
|
||||
runSingleTrigger(t, runParams);
|
||||
checkStatics = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||
if (deltrig.getHostCard().getController().equals(player)) {
|
||||
if (this.isTriggerActive(deltrig) && this.canRunTrigger(deltrig, mode, runParams)) {
|
||||
this.runSingleTrigger(deltrig, runParams);
|
||||
this.delayedTriggers.remove(deltrig);
|
||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||
runSingleTrigger(deltrig, runParams);
|
||||
delayedTriggers.remove(deltrig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
||||
// it enters the battlefield this way, and should not fire
|
||||
// triggers
|
||||
c.setTapped(true);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// ETBTapped static abilities
|
||||
for (final Card ca : game.getCardsIn(ZoneType.listValueOf("Battlefield,Command"))) {
|
||||
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
||||
@@ -74,10 +75,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
||||
if (trigger) {
|
||||
c.setSickness(true); // summoning sickness
|
||||
c.executeTrigger(ZCTrigger.ENTERFIELD);
|
||||
|
||||
}
|
||||
|
||||
} // end add()
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user