forked from External/mage
* replaced blocking/blocked by predicates * added test for knight of dusk (currently fails) * added source parameter to filters and everything else that needs it * some changes to various predicates * test fix * small changes to filter code * merge fix * fixed a test failure * small change to Karn, Scion of Urza * removed sourceId from filter methods and other similar places * added new getobject method to fix some test failures * a few more fixes * fixed merge conflicts * merge fix
77 lines
2.5 KiB
Java
77 lines
2.5 KiB
Java
package mage.abilities.common;
|
|
|
|
import mage.abilities.TriggeredAbilityImpl;
|
|
import mage.abilities.effects.Effect;
|
|
import mage.constants.TargetController;
|
|
import mage.constants.Zone;
|
|
import mage.filter.FilterPermanent;
|
|
import mage.game.Game;
|
|
import mage.game.events.GameEvent;
|
|
import mage.game.permanent.Permanent;
|
|
import mage.players.Player;
|
|
|
|
/**
|
|
*
|
|
* @author LevelX2
|
|
*/
|
|
public class SacrificeAllTriggeredAbility extends TriggeredAbilityImpl {
|
|
|
|
private final FilterPermanent filter;
|
|
private final TargetController sacrificingPlayer;
|
|
|
|
public SacrificeAllTriggeredAbility(Effect effect, FilterPermanent filter, TargetController sacrificingPlayer, boolean optional) {
|
|
super(Zone.BATTLEFIELD, effect, optional);
|
|
this.filter = filter;
|
|
this.sacrificingPlayer = sacrificingPlayer;
|
|
}
|
|
|
|
public SacrificeAllTriggeredAbility(final SacrificeAllTriggeredAbility ability) {
|
|
super(ability);
|
|
this.filter = ability.filter;
|
|
this.sacrificingPlayer = ability.sacrificingPlayer;
|
|
}
|
|
|
|
@Override
|
|
public SacrificeAllTriggeredAbility copy() {
|
|
return new SacrificeAllTriggeredAbility(this);
|
|
}
|
|
|
|
@Override
|
|
public boolean checkEventType(GameEvent event, Game game) {
|
|
return event.getType() == GameEvent.EventType.SACRIFICED_PERMANENT;
|
|
}
|
|
|
|
@Override
|
|
public boolean checkTrigger(GameEvent event, Game game) {
|
|
boolean sacrificed = false;
|
|
switch (sacrificingPlayer) {
|
|
case YOU:
|
|
if (event.getPlayerId().equals(getControllerId())) {
|
|
sacrificed = true;
|
|
}
|
|
break;
|
|
case OPPONENT:
|
|
Player controller = game.getPlayer(getControllerId());
|
|
if (controller == null || controller.hasOpponent(event.getPlayerId(), game)) {
|
|
sacrificed = true;
|
|
}
|
|
break;
|
|
}
|
|
Permanent sacrificedPermanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
|
return sacrificed && filter.match(sacrificedPermanent, getControllerId(), this, game);
|
|
}
|
|
|
|
@Override
|
|
public String getTriggerPhrase() {
|
|
String targetControllerText = "a player sacrifices ";
|
|
switch (sacrificingPlayer) {
|
|
case YOU:
|
|
targetControllerText = "you sacrifice ";
|
|
break;
|
|
case OPPONENT:
|
|
targetControllerText = "an opponent sacrifices ";
|
|
break;
|
|
}
|
|
return "Whenever " + targetControllerText + filter.getMessage() + ", ";
|
|
}
|
|
}
|