foul-magics/Mage/src/main/java/mage/game/command/emblems/AjaniSteadfastEmblem.java

75 lines
2.3 KiB
Java

package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.PreventionEffectImpl;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
/**
* @author spjspj
*/
public final class AjaniSteadfastEmblem extends Emblem {
public AjaniSteadfastEmblem() {
super("Emblem Ajani");
this.getAbilities().add(new SimpleStaticAbility(Zone.COMMAND, new AjaniSteadfastPreventEffect()));
}
private AjaniSteadfastEmblem(final AjaniSteadfastEmblem card) {
super(card);
}
@Override
public AjaniSteadfastEmblem copy() {
return new AjaniSteadfastEmblem(this);
}
}
class AjaniSteadfastPreventEffect extends PreventionEffectImpl {
public AjaniSteadfastPreventEffect() {
super(Duration.EndOfGame);
this.staticText = "If a source would deal damage to you or a planeswalker you control, prevent all but 1 of that damage";
consumable = false;
}
public AjaniSteadfastPreventEffect(AjaniSteadfastPreventEffect effect) {
super(effect);
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
int damage = event.getAmount();
if (damage > 1) {
amountToPrevent = damage - 1;
preventDamageAction(event, source, game);
}
return false;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (event.getType() == GameEvent.EventType.DAMAGE_PLAYER
&& event.getTargetId().equals(source.getControllerId())) {
return super.applies(event, source, game);
}
if (event.getType() == GameEvent.EventType.DAMAGE_PERMANENT) {
Permanent permanent = game.getPermanent(event.getTargetId());
if (permanent != null && permanent.isPlaneswalker(game) && permanent.isControlledBy(source.getControllerId())) {
return super.applies(event, source, game);
}
}
return false;
}
@Override
public AjaniSteadfastPreventEffect copy() {
return new AjaniSteadfastPreventEffect(this);
}
}