foul-magics/Mage/src/main/java/mage/abilities/TriggeredAbility.java

109 lines
3.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package mage.abilities;
import mage.abilities.condition.Condition;
import mage.game.Game;
import mage.game.events.GameEvent;
import java.util.UUID;
/**
* @author BetaSteward_at_googlemail.com
*/
public interface TriggeredAbility extends Ability {
void trigger(Game game, UUID controllerId, GameEvent event);
/**
* This check for the relevant event types is called at first to prevent
* further actions if the current event is ignored from this triggered
* ability
*/
boolean checkEventType(GameEvent event, Game game);
/**
* This method checks if the event has to trigger the ability,
* and if it does trigger, may set targets and other values in associated effects
* before returning true.
*/
boolean checkTrigger(GameEvent event, Game game);
/**
* If the trigger is limited per turn, check if it can trigger again or the limit is met.
* true if unlimited
*/
boolean checkTriggeredLimit(Game game);
boolean checkUsedAlready(Game game);
/**
* limit the number of triggers each turn
*/
TriggeredAbility setTriggersLimitEachTurn(int limit);
/**
* limit the number of triggers each game
*/
TriggeredAbility setTriggersLimitEachGame(int limit);
/**
* Get the number of times the trigger may trigger this turn.
* e.g. 0, 1 or 2 for a trigger that is limited to trigger twice each turn.
* Integer.MAX_VALUE when no limit.
*/
int getRemainingTriggersLimitEachTurn(Game game);
/**
* Get the number of times the trigger may trigger this game.
* e.g. 0, 1 or 2 for a trigger that is limited to trigger twice each game.
* Integer.MAX_VALUE when no limit.
*/
int getRemainingTriggersLimitEachGame(Game game);
TriggeredAbility setDoOnlyOnceEachTurn(boolean doOnlyOnce);
/**
* if true, replaces "{this}" with "it" in the effect text
*/
TriggeredAbility withRuleTextReplacement(boolean replaceRuleText);
TriggeredAbility withInterveningIf(Condition condition);
boolean checkInterveningIfClause(Game game);
boolean isOptional();
TriggeredAbility setOptional();
/**
* Allow trigger to fire after source leave the battlefield (example: will use LKI on itself sacrifice)
*/
boolean isLeavesTheBattlefieldTrigger();
/**
* 603.6c,603.6d
* If true the game “looks back in time” to determine if those abilities trigger
* This has to be set, if the triggered ability has to check back in time if the permanent the ability is connected
* to had the ability on the battlefield while the trigger is checked
* <p>
* 603.6c
* Leaves-the-battlefield abilities trigger when a permanent moves from the battlefield to another zone,
* or when a phased-in permanent leaves the game because its owner leaves the game. These are written as,
* but arent limited to, “When [this object] leaves the battlefield, . . .” or “Whenever [something] is put
* into a graveyard from the battlefield, . . . .” (See also rule 603.10.) An ability that attempts to do
* something to the card that left the battlefield checks for it only in the first zone that it went to.
* An ability that triggers when a card is put into a certain zone “from anywhere” is never treated as a
* leaves-the-battlefield ability, even if an object is put into that zone from the battlefield.
*/
void setLeavesTheBattlefieldTrigger(boolean leavesTheBattlefieldTrigger);
@Override
TriggeredAbility copy();
void setTriggerEvent(GameEvent event);
GameEvent getTriggerEvent();
TriggeredAbility setTriggerPhrase(String triggerPhrase);
String getTriggerPhrase();
}