mage/Mage.Sets/src/mage/cards/c/ChannelHarm.java

98 lines
3.6 KiB
Java

package mage.cards.c;
import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.PreventionEffectData;
import mage.abilities.effects.PreventionEffectImpl;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.game.Controllable;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
/**
*
* @author emerald000
*/
public final class ChannelHarm extends CardImpl {
public ChannelHarm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{5}{W}");
// Prevent all damage that would be dealt to you and permanents you control this turn by sources you don't control. If damage is prevented this way, you may have Channel Harm deal that much damage to target creature.
this.getSpellAbility().addEffect(new ChannelHarmEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}
public ChannelHarm(final ChannelHarm card) {
super(card);
}
@Override
public ChannelHarm copy() {
return new ChannelHarm(this);
}
}
class ChannelHarmEffect extends PreventionEffectImpl {
ChannelHarmEffect() {
super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false);
staticText = "Prevent all damage that would be dealt to you and permanents you control this turn by sources you don't control. If damage is prevented this way, you may have {this} deal that much damage to target creature";
}
ChannelHarmEffect(final ChannelHarmEffect effect) {
super(effect);
}
@Override
public ChannelHarmEffect copy() {
return new ChannelHarmEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
return true;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
Player sourceController = game.getPlayer(source.getControllerId());
PreventionEffectData preventionData = preventDamageAction(event, source, game);
if (preventionData.getPreventedDamage() > 0) {
Permanent targetCreature = game.getPermanent(source.getFirstTarget());
if (targetCreature != null) {
if (sourceController != null && sourceController.chooseUse(outcome, "Would you like to have " + preventionData.getPreventedDamage() + " damage dealt to " + targetCreature.getLogName() + "?", source, game)) {
targetCreature.damage(preventionData.getPreventedDamage(), source.getSourceId(), game, false, true);
}
}
}
return true;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
if (super.applies(event, source, game)) {
Permanent targetPermanent = game.getPermanent(event.getTargetId());
if ((targetPermanent != null && targetPermanent.isControlledBy(source.getControllerId()))
|| event.getTargetId().equals(source.getControllerId())) {
MageObject damageSource = game.getObject(event.getSourceId());
if (damageSource instanceof Controllable) {
return !((Controllable) damageSource).isControlledBy(source.getControllerId());
}
else if (damageSource instanceof Card) {
return !((Card) damageSource).isOwnedBy(source.getControllerId());
}
}
}
return false;
}
}