mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +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
|
* @return true, if is valid
|
||||||
*/
|
*/
|
||||||
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) {
|
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) {
|
||||||
|
|
||||||
for (final String restriction : restrictions) {
|
for (final String restriction : restrictions) {
|
||||||
if (this.isValid(restriction, sourceController, source)) {
|
if (this.isValid(restriction, sourceController, source)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
} // isValid
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if is valid.
|
* 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} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final int hashCode() {
|
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
|
else if (newCol == null) { //if multiple views have cards, we need to create a new collection
|
||||||
newCol = new CardCollection(viewWithCards);
|
newCol = new CardCollection(viewWithCards);
|
||||||
|
newCol.addAll(v);
|
||||||
viewWithCards = newCol;
|
viewWithCards = newCol;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -70,41 +70,41 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final boolean hasDelayedTriggers() {
|
public final boolean hasDelayedTriggers() {
|
||||||
return !this.delayedTriggers.isEmpty();
|
return !delayedTriggers.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void registerDelayedTrigger(final Trigger trig) {
|
public final void registerDelayedTrigger(final Trigger trig) {
|
||||||
this.delayedTriggers.add(trig);
|
delayedTriggers.add(trig);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void clearDelayedTrigger() {
|
public final void clearDelayedTrigger() {
|
||||||
this.delayedTriggers.clear();
|
delayedTriggers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void clearDelayedTrigger(Card card) {
|
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) {
|
for (Trigger trigger : deltrigs) {
|
||||||
if (trigger.getHostCard().equals(card)) {
|
if (trigger.getHostCard().equals(card)) {
|
||||||
this.delayedTriggers.remove(trigger);
|
delayedTriggers.remove(trigger);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void registerPlayerDefinedDelayedTrigger(final Player player, final Trigger trig) {
|
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) {
|
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) {
|
public final void suppressMode(final TriggerType mode) {
|
||||||
this.suppressedModes.add(mode);
|
suppressedModes.add(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void clearSuppression(final TriggerType 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) {
|
public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) {
|
||||||
@@ -207,7 +207,7 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
|
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
|
||||||
if (this.suppressedModes.contains(mode)) {
|
if (suppressedModes.contains(mode)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,9 +226,9 @@ public class TriggerHandler {
|
|||||||
boolean checkStatics = false;
|
boolean checkStatics = false;
|
||||||
// only cards in play can run state triggers
|
// 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)) {
|
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
||||||
this.runSingleTrigger(t, runParams);
|
runSingleTrigger(t, runParams);
|
||||||
checkStatics = true;
|
checkStatics = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,14 +261,14 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy triggers here, so things can be modified just in case
|
// 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;
|
boolean checkStatics = false;
|
||||||
|
|
||||||
// Static triggers
|
// Static triggers
|
||||||
for (final Trigger t : this.activeTriggers) {
|
for (final Trigger t : activeTriggers) {
|
||||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||||
this.runSingleTrigger(t, runParams);
|
runSingleTrigger(t, runParams);
|
||||||
checkStatics = true;
|
checkStatics = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -297,7 +297,7 @@ public class TriggerHandler {
|
|||||||
boolean checkStatics = false;
|
boolean checkStatics = false;
|
||||||
|
|
||||||
Card card = null;
|
Card card = null;
|
||||||
for (final Trigger t : this.activeTriggers) {
|
for (final Trigger t : activeTriggers) {
|
||||||
if (!t.isStatic() && t.getHostCard().getController().equals(player)
|
if (!t.isStatic() && t.getHostCard().getController().equals(player)
|
||||||
&& canRunTrigger(t, mode, runParams)) {
|
&& canRunTrigger(t, mode, runParams)) {
|
||||||
|
|
||||||
@@ -311,16 +311,16 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.runSingleTrigger(t, runParams);
|
runSingleTrigger(t, runParams);
|
||||||
checkStatics = true;
|
checkStatics = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Trigger deltrig : delayedTriggersWorkingCopy) {
|
for (Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||||
if (deltrig.getHostCard().getController().equals(player)) {
|
if (deltrig.getHostCard().getController().equals(player)) {
|
||||||
if (this.isTriggerActive(deltrig) && this.canRunTrigger(deltrig, mode, runParams)) {
|
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||||
this.runSingleTrigger(deltrig, runParams);
|
runSingleTrigger(deltrig, runParams);
|
||||||
this.delayedTriggers.remove(deltrig);
|
delayedTriggers.remove(deltrig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
|||||||
// it enters the battlefield this way, and should not fire
|
// it enters the battlefield this way, and should not fire
|
||||||
// triggers
|
// triggers
|
||||||
c.setTapped(true);
|
c.setTapped(true);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// ETBTapped static abilities
|
// ETBTapped static abilities
|
||||||
for (final Card ca : game.getCardsIn(ZoneType.listValueOf("Battlefield,Command"))) {
|
for (final Card ca : game.getCardsIn(ZoneType.listValueOf("Battlefield,Command"))) {
|
||||||
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
||||||
@@ -74,10 +75,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
|
|||||||
if (trigger) {
|
if (trigger) {
|
||||||
c.setSickness(true); // summoning sickness
|
c.setSickness(true); // summoning sickness
|
||||||
c.executeTrigger(ZCTrigger.ENTERFIELD);
|
c.executeTrigger(ZCTrigger.ENTERFIELD);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} // end add()
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user