From 00951279eae776435aaff9b6655fb0ba9d1e0d63 Mon Sep 17 00:00:00 2001
From: Neil Gentleman <ngentleman@gmail.com>
Date: Sun, 16 Oct 2016 15:48:13 -0700
Subject: [PATCH] Academy Elite, Aggravate, Agonizing Demise, Akki Underminer

removed custom effects
---
 Mage.Sets/src/mage/cards/a/AcademyElite.java  | 46 ++---------------
 Mage.Sets/src/mage/cards/a/Aggravate.java     | 40 +--------------
 .../src/mage/cards/a/AgonizingDemise.java     | 40 ++-------------
 .../src/mage/cards/a/AkkiUnderminer.java      | 51 +------------------
 4 files changed, 11 insertions(+), 166 deletions(-)

diff --git a/Mage.Sets/src/mage/cards/a/AcademyElite.java b/Mage.Sets/src/mage/cards/a/AcademyElite.java
index 3d018cdb93..90de9a8908 100644
--- a/Mage.Sets/src/mage/cards/a/AcademyElite.java
+++ b/Mage.Sets/src/mage/cards/a/AcademyElite.java
@@ -30,24 +30,19 @@ package mage.cards.a;
 import java.util.UUID;
 import mage.MageInt;
 import mage.abilities.Ability;
-import mage.abilities.SpellAbility;
 import mage.abilities.common.EntersBattlefieldAbility;
 import mage.abilities.common.SimpleActivatedAbility;
 import mage.abilities.costs.common.RemoveCountersSourceCost;
 import mage.abilities.costs.mana.ManaCostsImpl;
 import mage.abilities.dynamicvalue.common.CardsInAllGraveyardsCount;
-import mage.abilities.effects.EntersBattlefieldEffect;
-import mage.abilities.effects.OneShotEffect;
 import mage.abilities.effects.common.DrawDiscardControllerEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.Outcome;
 import mage.constants.Zone;
 import mage.counters.CounterType;
 import mage.filter.common.FilterInstantOrSorceryCard;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
 
 /**
  *
@@ -65,7 +60,9 @@ public class AcademyElite extends CardImpl {
 
         // Academy Elite enters the battlefield with X +1/+1 counters on it, where X is the number of instant and
         // sorcery cards in all graveyards.
-        this.addAbility(new EntersBattlefieldAbility(new AcademyEliteEffect1(), "with X +1/+1 counters on it, where X is the number of instant and sorcery cards in all graveyards"));
+        this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(),
+                new CardsInAllGraveyardsCount(new FilterInstantOrSorceryCard()), false),
+                "with X +1/+1 counters on it, where X is the number of instant and sorcery cards in all graveyards"));
 
         // {2}{U}, Remove a +1/+1 counter from Academy Elite: Draw a card, then discard a card.
         Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawDiscardControllerEffect(1, 1, false), new ManaCostsImpl("{2}{U}"));
@@ -83,38 +80,3 @@ public class AcademyElite extends CardImpl {
     }
 
 }
-
-class AcademyEliteEffect1 extends OneShotEffect {
-
-    public AcademyEliteEffect1() {
-        super(Outcome.BoostCreature);
-        staticText = "{this} enters the battlefield with X +1/+1 counters on it, where X is the number of instant and sorcery cards in all graveyards";
-    }
-
-    public AcademyEliteEffect1(final AcademyEliteEffect1 effect) {
-        super(effect);
-    }
-
-    @Override
-    public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanentEntering(source.getSourceId());
-        if (permanent != null) {
-            SpellAbility spellAbility = (SpellAbility) getValue(EntersBattlefieldEffect.SOURCE_CAST_SPELL_ABILITY);
-            if (spellAbility != null
-                    && spellAbility.getSourceId().equals(source.getSourceId())
-                    && permanent.getZoneChangeCounter(game) == spellAbility.getSourceObjectZoneChangeCounter()) {
-                CardsInAllGraveyardsCount instantsAndSorceries = new CardsInAllGraveyardsCount(new FilterInstantOrSorceryCard("instant or sorcery cards"));
-                int instantsAndSorceriesCount = instantsAndSorceries.calculate(game, source, this);
-                if (instantsAndSorceriesCount > 0) {
-                    permanent.addCounters(CounterType.P1P1.createInstance(instantsAndSorceriesCount), game);
-                }
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public AcademyEliteEffect1 copy() {
-        return new AcademyEliteEffect1(this);
-    }
-}
diff --git a/Mage.Sets/src/mage/cards/a/Aggravate.java b/Mage.Sets/src/mage/cards/a/Aggravate.java
index 62179dea21..ba4826ab1a 100644
--- a/Mage.Sets/src/mage/cards/a/Aggravate.java
+++ b/Mage.Sets/src/mage/cards/a/Aggravate.java
@@ -27,21 +27,17 @@
  */
 package mage.cards.a;
 
-import java.util.List;
 import java.util.UUID;
 import mage.abilities.Ability;
-import mage.abilities.effects.OneShotEffect;
 import mage.abilities.effects.RequirementEffect;
+import mage.abilities.effects.common.DamageAllControlledTargetEffect;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
 import mage.constants.Duration;
-import mage.constants.Outcome;
 import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.predicate.permanent.ControllerIdPredicate;
 import mage.game.Game;
 import mage.game.permanent.Permanent;
-import mage.players.Player;
 import mage.target.TargetPlayer;
 import mage.watchers.common.DamagedByWatcher;
 
@@ -56,7 +52,7 @@ public class Aggravate extends CardImpl {
 
 
         // Aggravate deals 1 damage to each creature target player controls.
-        this.getSpellAbility().addEffect(new AggravateEffect());
+        this.getSpellAbility().addEffect(new DamageAllControlledTargetEffect(1, new FilterCreaturePermanent()));
         this.getSpellAbility().addTarget(new TargetPlayer());
         // Each creature dealt damage this way attacks this turn if able.
         this.getSpellAbility().addEffect(new AggravateRequirementEffect());
@@ -73,38 +69,6 @@ public class Aggravate extends CardImpl {
     }
 }
 
-class AggravateEffect extends OneShotEffect {
-
-    public AggravateEffect() {
-        super(Outcome.Damage);
-        this.staticText = "{this} deals 1 damage to each creature target player controls";
-    }
-
-    public AggravateEffect(final AggravateEffect effect) {
-        super(effect);
-    }
-
-    @Override
-    public AggravateEffect copy() {
-        return new AggravateEffect(this);
-    }
-
-    @Override
-    public boolean apply(Game game, Ability source) {
-        Player player = game.getPlayer(source.getFirstTarget());
-        if (player != null) {
-            FilterCreaturePermanent filter = new FilterCreaturePermanent();
-            filter.add(new ControllerIdPredicate(player.getId()));
-            List<Permanent> creatures = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game);
-            for (Permanent creature : creatures) {
-                creature.damage(1, source.getSourceId(), game, false, true);
-            }
-            return true;
-        }
-        return false;
-    }
-}
-
 class AggravateRequirementEffect extends RequirementEffect {
 
     public AggravateRequirementEffect() {
diff --git a/Mage.Sets/src/mage/cards/a/AgonizingDemise.java b/Mage.Sets/src/mage/cards/a/AgonizingDemise.java
index 4e11d73649..9de2d4ec72 100644
--- a/Mage.Sets/src/mage/cards/a/AgonizingDemise.java
+++ b/Mage.Sets/src/mage/cards/a/AgonizingDemise.java
@@ -29,22 +29,18 @@ package mage.cards.a;
 
 import java.util.UUID;
 import mage.ObjectColor;
-import mage.abilities.Ability;
 import mage.abilities.condition.common.KickedCondition;
 import mage.abilities.decorator.ConditionalOneShotEffect;
-import mage.abilities.effects.OneShotEffect;
+import mage.abilities.dynamicvalue.common.TargetPermanentPowerCount;
+import mage.abilities.effects.common.DamageTargetControllerEffect;
 import mage.abilities.effects.common.DestroyTargetEffect;
 import mage.abilities.keyword.KickerAbility;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.Outcome;
 import mage.filter.common.FilterCreaturePermanent;
 import mage.filter.predicate.Predicates;
 import mage.filter.predicate.mageobject.ColorPredicate;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.players.Player;
 import mage.target.common.TargetCreaturePermanent;
 
 /**
@@ -70,7 +66,7 @@ public class AgonizingDemise extends CardImpl {
         
         //If Agonizing Demise was kicked, it deals damage equal to that creature's power to the creature's controller.
         this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
-                new AgonizingDemiseEffect(),
+                new DamageTargetControllerEffect(new TargetPermanentPowerCount()),
                 KickedCondition.getInstance(),
                 "If {this} was kicked, it deals damage equal to that creature's power to the creature's controller."));
         
@@ -85,33 +81,3 @@ public class AgonizingDemise extends CardImpl {
         return new AgonizingDemise(this);
     }
 }
-
-class AgonizingDemiseEffect extends OneShotEffect {
-    
-    public AgonizingDemiseEffect() {
-        super(Outcome.Damage);
-    }
-    
-    public AgonizingDemiseEffect(final AgonizingDemiseEffect effect) {
-        super(effect);
-    }
-    
-    @Override
-    public AgonizingDemiseEffect copy() {
-        return new AgonizingDemiseEffect(this);
-    }
-    
-    @Override
-    public boolean apply(Game game, Ability source) {
-        Permanent permanent = game.getPermanentOrLKIBattlefield(this.getTargetPointer().getFirst(game, source));
-        if(permanent != null) {
-            Player controller = game.getPlayer(permanent.getControllerId());
-            if(controller != null) {
-                int amount = permanent.getPower().getValue();
-                controller.damage(amount, source.getSourceId(), game, false, true);
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/Mage.Sets/src/mage/cards/a/AkkiUnderminer.java b/Mage.Sets/src/mage/cards/a/AkkiUnderminer.java
index 7a56048e5c..07f0006058 100644
--- a/Mage.Sets/src/mage/cards/a/AkkiUnderminer.java
+++ b/Mage.Sets/src/mage/cards/a/AkkiUnderminer.java
@@ -30,19 +30,12 @@ package mage.cards.a;
 
 import java.util.UUID;
 import mage.MageInt;
-import mage.abilities.TriggeredAbilityImpl;
-import mage.abilities.effects.Effect;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
 import mage.abilities.effects.common.SacrificeEffect;
 import mage.cards.CardImpl;
 import mage.cards.CardSetInfo;
 import mage.constants.CardType;
-import mage.constants.Zone;
 import mage.filter.FilterPermanent;
-import mage.game.Game;
-import mage.game.events.DamagedPlayerEvent;
-import mage.game.events.GameEvent;
-import mage.game.events.GameEvent.EventType;
-import mage.target.targetpointer.FixedTarget;
 
 /**
  *
@@ -58,7 +51,7 @@ public class AkkiUnderminer extends CardImpl {
 
         this.power = new MageInt(1);
         this.toughness = new MageInt(1);
-        this.addAbility(new AkkiUnderminerAbility());
+        this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new SacrificeEffect(new FilterPermanent(), 1, "that player"), false, true));
     }
 
     public AkkiUnderminer (final AkkiUnderminer card) {
@@ -71,43 +64,3 @@ public class AkkiUnderminer extends CardImpl {
     }
 
 }
-
-class AkkiUnderminerAbility extends TriggeredAbilityImpl {
-
-    public AkkiUnderminerAbility() {
-        super(Zone.BATTLEFIELD, new SacrificeEffect(new FilterPermanent(), 1, ""));
-    }
-
-    public AkkiUnderminerAbility(final AkkiUnderminerAbility ability) {
-        super(ability);
-    }
-
-    @Override
-    public AkkiUnderminerAbility copy() {
-        return new AkkiUnderminerAbility(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;
-        if (damageEvent.isCombatDamage() && event.getSourceId().equals(this.getSourceId())) {
-            for (Effect effect : this.getEffects()) {
-                    effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
-            }
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public String getRule() {
-        return "Whenever {this} deals combat damage to a player, that player sacrifices a permanent.";
-    }
-}
-
-