package mage.cards.a;
import mage.MageInt;
import mage.MageObject;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.FlipSourceEffect;
import mage.abilities.keyword.HasteAbility;
import mage.abilities.keyword.ProtectionAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.game.Game;
import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.Token;
import java.util.UUID;
/**
* @author Loki
*/
public class AkkiLavarunner extends CardImpl {
public AkkiLavarunner(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
this.subtype.add("Goblin");
this.subtype.add("Warrior");
this.power = new MageInt(1);
this.toughness = new MageInt(1);
this.flipCard = true;
this.flipCardName = "Tok-Tok, Volcano Born";
// Haste
this.addAbility(HasteAbility.getInstance());
// Whenever Akki Lavarunner deals damage to an opponent, flip it.
this.addAbility(new AkkiLavarunnerAbility());
}
public AkkiLavarunner(final AkkiLavarunner card) {
super(card);
}
@Override
public AkkiLavarunner copy() {
return new AkkiLavarunner(this);
}
}
class AkkiLavarunnerAbility extends TriggeredAbilityImpl {
public AkkiLavarunnerAbility() {
super(Zone.BATTLEFIELD, new FlipSourceEffect(new TokTokVolcanoBorn()));
}
public AkkiLavarunnerAbility(final AkkiLavarunnerAbility ability) {
super(ability);
}
@Override
public AkkiLavarunnerAbility copy() {
return new AkkiLavarunnerAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == EventType.DAMAGED_PLAYER;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event;
return damageEvent.isCombatDamage() && this.sourceId.equals(event.getSourceId());
}
@Override
public String getRule() {
return "Whenever {this} deals damage to an opponent, flip it.";
}
}
class TokTokVolcanoBorn extends Token {
TokTokVolcanoBorn() {
super("Tok-Tok, Volcano Born", "");
addSuperType(SuperType.LEGENDARY);
cardType.add(CardType.CREATURE);
color.setRed(true);
subtype.add("Goblin");
subtype.add("Shaman");
power = new MageInt(2);
toughness = new MageInt(2);
this.addAbility(ProtectionAbility.from(ObjectColor.RED));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TokTokVolcanoBornEffect()));
}
}
class TokTokVolcanoBornEffect extends ReplacementEffectImpl {
TokTokVolcanoBornEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead";
}
TokTokVolcanoBornEffect(final TokTokVolcanoBornEffect effect) {
super(effect);
}
@Override
public boolean checksEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.DAMAGE_PLAYER;
}
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
MageObject sourceObject;
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(event.getSourceId());
if(sourcePermanent == null) {
sourceObject = game.getObject(event.getSourceId());
}
else {
sourceObject = sourcePermanent;
}
if (sourceObject != null && sourceObject.getColor(game).isRed()) {
return true;
}
return false;
}
@Override
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
event.setAmount(event.getAmount() + 1);
return false;
}
@Override
public TokTokVolcanoBornEffect copy() {
return new TokTokVolcanoBornEffect(this);
}
}