mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
Fixed some bugs where return to battlefield effects on end of turn could bring back cards, that should return first on next turn (e.g. Flickerwisp targets Flickerwisp).
This commit is contained in:
parent
583f696320
commit
baeaaa3eb7
15 changed files with 151 additions and 78 deletions
|
|
@ -1,16 +1,16 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
|
|
@ -20,12 +20,11 @@
|
|||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
|
|
@ -49,6 +48,7 @@ public abstract class DelayedTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public DelayedTriggeredAbility(Effect effect, Duration duration) {
|
||||
this(effect, duration, true);
|
||||
}
|
||||
|
||||
public DelayedTriggeredAbility(Effect effect, Duration duration, Boolean triggerOnlyOnce) {
|
||||
this(effect, duration, triggerOnlyOnce, false);
|
||||
}
|
||||
|
|
@ -75,13 +75,25 @@ public abstract class DelayedTriggeredAbility extends TriggeredAbilityImpl {
|
|||
public Boolean getTriggerOnlyOnce() {
|
||||
return triggerOnlyOnce;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is called as the ability is added to the game (not as the
|
||||
* ability triggers later)
|
||||
*
|
||||
* @param game
|
||||
*/
|
||||
public void initOnAdding(Game game) {
|
||||
|
||||
}
|
||||
|
||||
public void init(Game game) {
|
||||
for (Effect effect: this.getEffects()) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.getTargetPointer().init(game, this);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
public boolean isInactive(Game game) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,7 +159,6 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
FILTER_LEGENDARY.add(new SupertypePredicate("Legendary"));
|
||||
}
|
||||
|
||||
|
||||
private transient Object customData;
|
||||
protected boolean simulation = false;
|
||||
|
||||
|
|
@ -1520,10 +1519,11 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
// return addDelayedTriggeredAbility(delayedAbility);
|
||||
DelayedTriggeredAbility newAbility = delayedAbility.copy();
|
||||
newAbility.newId();
|
||||
newAbility.initOnAdding(this);
|
||||
// ability.init is called as the ability triggeres not now.
|
||||
// If a FixedTarget pointer is already set from the effect setting up this delayed ability
|
||||
// it has to be already initialized so it won't be overwitten as the ability triggers
|
||||
state.addDelayedTriggeredAbility(newAbility);
|
||||
getState().addDelayedTriggeredAbility(newAbility);
|
||||
return newAbility.getId();
|
||||
}
|
||||
|
||||
|
|
@ -1532,10 +1532,11 @@ public abstract class GameImpl implements Game, Serializable {
|
|||
public UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility) {
|
||||
DelayedTriggeredAbility newAbility = delayedAbility.copy();
|
||||
newAbility.newId();
|
||||
newAbility.initOnAdding(this);
|
||||
// ability.init is called as the ability triggeres not now.
|
||||
// If a FixedTarget pointer is already set from the effect setting up this delayed ability
|
||||
// it has to be already initialized so it won't be overwitten as the ability triggers
|
||||
state.addDelayedTriggeredAbility(newAbility);
|
||||
getState().addDelayedTriggeredAbility(newAbility);
|
||||
return newAbility.getId();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,18 @@ public class FixedTarget implements TargetPointer {
|
|||
this.zoneChangeCounter = zoneChangeCounter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this to set the target to exactly the zone the target is currently in
|
||||
*
|
||||
* @param targetId
|
||||
* @param game
|
||||
*/
|
||||
public FixedTarget(UUID targetId, Game game) {
|
||||
this.targetId = targetId;
|
||||
this.initialized = true;
|
||||
this.zoneChangeCounter = game.getState().getZoneChangeCounter(targetId);
|
||||
}
|
||||
|
||||
public FixedTarget(final FixedTarget fixedTarget) {
|
||||
this.targetId = fixedTarget.targetId;
|
||||
this.zoneChangeCounter = fixedTarget.zoneChangeCounter;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue