foul-magics/Mage/src/main/java/mage/abilities/effects/common/PreventDamageByTargetEffect.java
2023-04-18 18:34:57 -04:00

91 lines
2.8 KiB
Java

package mage.abilities.effects.common;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.PreventionEffectImpl;
import mage.constants.Duration;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.target.Target;
import mage.target.TargetSpell;
/**
* @author nantuko
*/
public class PreventDamageByTargetEffect extends PreventionEffectImpl {
public PreventDamageByTargetEffect(Duration duration) {
this(duration, false);
}
public PreventDamageByTargetEffect(Duration duration, int amount) {
this(duration, amount, false);
}
public PreventDamageByTargetEffect(Duration duration, boolean onlyCombat) {
this(duration, Integer.MAX_VALUE, onlyCombat);
}
public PreventDamageByTargetEffect(Duration duration, int amount, boolean onlyCombat) {
super(duration, amount, onlyCombat);
}
public PreventDamageByTargetEffect(final PreventDamageByTargetEffect effect) {
super(effect);
}
@Override
public PreventDamageByTargetEffect copy() {
return new PreventDamageByTargetEffect(this);
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (!this.used && super.applies(event, source, game)) {
MageObject mageObject = game.getObject(event.getSourceId());
if (mageObject != null
&& mageObject.isInstantOrSorcery(game)) {
for (Target target : source.getTargets()) {
if (target instanceof TargetSpell) {
if (((TargetSpell) target).getSourceIds().contains(event.getSourceId())) {
return true;
}
}
}
}
return this.getTargetPointer().getTargets(game, source).contains(event.getSourceId());
}
return false;
}
@Override
public String getText(Mode mode) {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
StringBuilder sb = new StringBuilder();
if (amountToPrevent == Integer.MAX_VALUE) {
sb.append("Prevent all");
if (onlyCombat) {
sb.append(" combat");
}
sb.append(" damage target ");
} else {
sb.append("Prevent the next ");
sb.append(amountToPrevent);
if (onlyCombat) {
sb.append(" combat");
}
sb.append(" damage that ");
}
sb.append(mode.getTargets().get(0).getTargetName());
sb.append(" would deal ");
if (duration == Duration.EndOfTurn) {
sb.append("this turn");
} else {
sb.append(duration);
}
return sb.toString();
}
}