mirror of
https://github.com/correl/mage.git
synced 2024-11-25 03:00:11 +00:00
[ONE] Implement Infectious Bite
This commit is contained in:
parent
efcda8cf2a
commit
602e622c7d
13 changed files with 177 additions and 105 deletions
|
@ -38,7 +38,7 @@ public final class DaxosTheReturned extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// Whenever you cast an enchantment spell, you get an experience counter.
|
// Whenever you cast an enchantment spell, you get an experience counter.
|
||||||
Effect effect = new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1), false);
|
Effect effect = new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1));
|
||||||
effect.setText("you get an experience counter");
|
effect.setText("you get an experience counter");
|
||||||
Ability ability = new SpellCastControllerTriggeredAbility(effect, filter, false);
|
Ability ability = new SpellCastControllerTriggeredAbility(effect, filter, false);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -47,7 +47,7 @@ public final class EzuriClawOfProgress extends CardImpl {
|
||||||
|
|
||||||
// Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.
|
// Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.
|
||||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersControllerEffect(
|
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersControllerEffect(
|
||||||
CounterType.EXPERIENCE.createInstance(1), false), filter, false, rule, true));
|
CounterType.EXPERIENCE.createInstance(1)), filter, false, rule, true));
|
||||||
|
|
||||||
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have.
|
// At the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have.
|
||||||
Ability ability = new BeginningOfCombatTriggeredAbility(new EzuriClawOfProgressEffect(), TargetController.YOU, false);
|
Ability ability = new BeginningOfCombatTriggeredAbility(new EzuriClawOfProgressEffect(), TargetController.YOU, false);
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
|
|
||||||
package mage.cards.i;
|
package mage.cards.i;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddPoisonCounterAllEffect;
|
||||||
import mage.abilities.keyword.InfectAbility;
|
import mage.abilities.keyword.InfectAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.TargetController;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Loki
|
* @author Loki
|
||||||
*/
|
*/
|
||||||
public final class IchorRats extends CardImpl {
|
public final class IchorRats extends CardImpl {
|
||||||
|
@ -30,7 +31,9 @@ public final class IchorRats extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
this.addAbility(InfectAbility.getInstance());
|
this.addAbility(InfectAbility.getInstance());
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new IchorRatsEffect(), false));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||||
|
new AddPoisonCounterAllEffect(TargetController.EACH_PLAYER), false
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private IchorRats(final IchorRats card) {
|
private IchorRats(final IchorRats card) {
|
||||||
|
@ -43,32 +46,3 @@ public final class IchorRats extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class IchorRatsEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
public IchorRatsEffect() {
|
|
||||||
super(Outcome.Damage);
|
|
||||||
staticText = "each player gets a poison counter";
|
|
||||||
}
|
|
||||||
|
|
||||||
public IchorRatsEffect(final IchorRatsEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) {
|
|
||||||
Player player = game.getPlayer(playerId);
|
|
||||||
if (player != null) {
|
|
||||||
player.addCounters(CounterType.POISON.createInstance(), source.getControllerId(), source, game);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IchorRatsEffect copy() {
|
|
||||||
return new IchorRatsEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
38
Mage.Sets/src/mage/cards/i/InfectiousBite.java
Normal file
38
Mage.Sets/src/mage/cards/i/InfectiousBite.java
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
package mage.cards.i;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import mage.abilities.effects.common.DamageWithPowerFromOneToAnotherTargetEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddPoisonCounterAllEffect;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.TargetController;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class InfectiousBite extends CardImpl {
|
||||||
|
|
||||||
|
public InfectiousBite(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
|
||||||
|
|
||||||
|
// Target creature you control deals damage equal to its power to target creature you don't control. Each opponent gets a poison counter.
|
||||||
|
this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect());
|
||||||
|
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||||
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
|
||||||
|
this.getSpellAbility().addEffect(new AddPoisonCounterAllEffect(TargetController.OPPONENT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private InfectiousBite(final InfectiousBite card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InfectiousBite copy() {
|
||||||
|
return new InfectiousBite(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -54,7 +54,7 @@ public final class KalemneDiscipleOfIroas extends CardImpl {
|
||||||
this.addAbility(VigilanceAbility.getInstance());
|
this.addAbility(VigilanceAbility.getInstance());
|
||||||
|
|
||||||
// Whenever you cast a creature spell with converted mana cost 5 or greater, you get an experience counter.
|
// Whenever you cast a creature spell with converted mana cost 5 or greater, you get an experience counter.
|
||||||
Effect effect = new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1), false);
|
Effect effect = new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1));
|
||||||
effect.setText("you get an experience counter");
|
effect.setText("you get an experience counter");
|
||||||
Ability ability = new SpellCastControllerTriggeredAbility(effect, filterSpell, false);
|
Ability ability = new SpellCastControllerTriggeredAbility(effect, filterSpell, false);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -53,7 +53,7 @@ public final class KelsienThePlague extends CardImpl {
|
||||||
// {T}: Kelsien deals 1 damage to target creature you don't control. When that creature dies this turn, you get an experience counter.
|
// {T}: Kelsien deals 1 damage to target creature you don't control. When that creature dies this turn, you get an experience counter.
|
||||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost());
|
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost());
|
||||||
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new WhenTargetDiesDelayedTriggeredAbility(
|
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(new WhenTargetDiesDelayedTriggeredAbility(
|
||||||
new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(), false)
|
new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance())
|
||||||
)));
|
)));
|
||||||
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
|
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public final class MerenOfClanNelToth extends CardImpl {
|
||||||
|
|
||||||
// Whenever another creature you control dies, you get an experience counter.
|
// Whenever another creature you control dies, you get an experience counter.
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersControllerEffect(
|
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersControllerEffect(
|
||||||
CounterType.EXPERIENCE.createInstance(1), false
|
CounterType.EXPERIENCE.createInstance(1)
|
||||||
).setText("you get an experience counter"), false, filter));
|
).setText("you get an experience counter"), false, filter));
|
||||||
|
|
||||||
// At the beginning of your end step, choose target creature card in your graveyard.
|
// At the beginning of your end step, choose target creature card in your graveyard.
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class MizzixOfTheIzmagnus extends CardImpl {
|
||||||
|
|
||||||
// Whenever you cast an instant or sorcery spell with converted mana cost greater than the number of experience counters you have, you get an experience counter.
|
// Whenever you cast an instant or sorcery spell with converted mana cost greater than the number of experience counters you have, you get an experience counter.
|
||||||
this.addAbility(new SpellCastControllerTriggeredAbility(
|
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||||
new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1), false), filter, false));
|
new AddCountersControllerEffect(CounterType.EXPERIENCE.createInstance(1)), filter, false));
|
||||||
|
|
||||||
// Instant and sorcery spells you cast cost {1} less to cast for each experience counter you have.
|
// Instant and sorcery spells you cast cost {1} less to cast for each experience counter you have.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MizzixOfTheIzmagnusCostReductionEffect()));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MizzixOfTheIzmagnusCostReductionEffect()));
|
||||||
|
|
|
@ -1,41 +1,44 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.abilities.common.OnEventTriggeredAbility;
|
import mage.abilities.common.OnEventTriggeredAbility;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddPoisonCounterAllEffect;
|
||||||
import mage.abilities.keyword.InfectAbility;
|
import mage.abilities.keyword.InfectAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.TargetController;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent.EventType;
|
import mage.game.events.GameEvent.EventType;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Viserion
|
* @author Viserion
|
||||||
*/
|
*/
|
||||||
public final class PhyrexianVatmother extends CardImpl {
|
public final class PhyrexianVatmother extends CardImpl {
|
||||||
|
|
||||||
public PhyrexianVatmother (UUID ownerId, CardSetInfo setInfo) {
|
public PhyrexianVatmother(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}");
|
||||||
this.subtype.add(SubType.PHYREXIAN);
|
this.subtype.add(SubType.PHYREXIAN);
|
||||||
this.subtype.add(SubType.HORROR);
|
this.subtype.add(SubType.HORROR);
|
||||||
|
|
||||||
this.power = new MageInt(4);
|
this.power = new MageInt(4);
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
this.addAbility(InfectAbility.getInstance());
|
this.addAbility(InfectAbility.getInstance());
|
||||||
this.addAbility(new OnEventTriggeredAbility(EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new PoisonControllerEffect()));
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
|
new AddPoisonCounterAllEffect(TargetController.YOU), TargetController.YOU, false
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PhyrexianVatmother (final PhyrexianVatmother card) {
|
public PhyrexianVatmother(final PhyrexianVatmother card) {
|
||||||
super(card);
|
super(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,34 +46,4 @@ public final class PhyrexianVatmother extends CardImpl {
|
||||||
public PhyrexianVatmother copy() {
|
public PhyrexianVatmother copy() {
|
||||||
return new PhyrexianVatmother(this);
|
return new PhyrexianVatmother(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class PoisonControllerEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
public PoisonControllerEffect() {
|
|
||||||
super(Outcome.Damage);
|
|
||||||
staticText = "you get a poison counter";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public PoisonControllerEffect(final PoisonControllerEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PoisonControllerEffect copy() {
|
|
||||||
return new PoisonControllerEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
|
||||||
if (player != null) {
|
|
||||||
player.addCounters(CounterType.POISON.createInstance(), source.getControllerId(), source, game);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,30 @@
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.BecomesTappedAttachedTriggeredAbility;
|
import mage.abilities.common.BecomesTappedAttachedTriggeredAbility;
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.counter.AddCountersControllerEffect;
|
import mage.abilities.effects.common.counter.AddCountersControllerEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddPoisonCounterAllEffect;
|
||||||
import mage.abilities.keyword.EnchantAbility;
|
import mage.abilities.keyword.EnchantAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.TargetController;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetArtifactPermanent;
|
import mage.target.common.TargetArtifactPermanent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author nantuko
|
* @author nantuko
|
||||||
*/
|
*/
|
||||||
public final class RelicPutrescence extends CardImpl {
|
public final class RelicPutrescence extends CardImpl {
|
||||||
|
|
||||||
public RelicPutrescence (UUID ownerId, CardSetInfo setInfo) {
|
public RelicPutrescence(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}");
|
||||||
this.subtype.add(SubType.AURA);
|
this.subtype.add(SubType.AURA);
|
||||||
|
|
||||||
TargetPermanent auraTarget = new TargetArtifactPermanent();
|
TargetPermanent auraTarget = new TargetArtifactPermanent();
|
||||||
|
@ -33,12 +35,12 @@ public final class RelicPutrescence extends CardImpl {
|
||||||
|
|
||||||
// Whenever enchanted artifact becomes tapped, its controller gets a poison counter.
|
// Whenever enchanted artifact becomes tapped, its controller gets a poison counter.
|
||||||
this.addAbility(new BecomesTappedAttachedTriggeredAbility(
|
this.addAbility(new BecomesTappedAttachedTriggeredAbility(
|
||||||
new AddCountersControllerEffect(CounterType.POISON.createInstance(), true),
|
new AddPoisonCounterAllEffect(TargetController.CONTROLLER_ATTACHED_TO),
|
||||||
"enchanted artifact"
|
"enchanted artifact"
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public RelicPutrescence (final RelicPutrescence card) {
|
public RelicPutrescence(final RelicPutrescence card) {
|
||||||
super(card);
|
super(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,7 @@ public final class PhyrexiaAllWillBeOne extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Hexgold Halberd", 136, Rarity.UNCOMMON, mage.cards.h.HexgoldHalberd.class));
|
cards.add(new SetCardInfo("Hexgold Halberd", 136, Rarity.UNCOMMON, mage.cards.h.HexgoldHalberd.class));
|
||||||
cards.add(new SetCardInfo("Hexgold Slash", 137, Rarity.COMMON, mage.cards.h.HexgoldSlash.class));
|
cards.add(new SetCardInfo("Hexgold Slash", 137, Rarity.COMMON, mage.cards.h.HexgoldSlash.class));
|
||||||
cards.add(new SetCardInfo("Incisor Glider", 15, Rarity.COMMON, mage.cards.i.IncisorGlider.class));
|
cards.add(new SetCardInfo("Incisor Glider", 15, Rarity.COMMON, mage.cards.i.IncisorGlider.class));
|
||||||
|
cards.add(new SetCardInfo("Infectious Bite", 172, Rarity.UNCOMMON, mage.cards.i.InfectiousBite.class));
|
||||||
cards.add(new SetCardInfo("Infested Fleshcutter", 17, Rarity.UNCOMMON, mage.cards.i.InfestedFleshcutter.class));
|
cards.add(new SetCardInfo("Infested Fleshcutter", 17, Rarity.UNCOMMON, mage.cards.i.InfestedFleshcutter.class));
|
||||||
cards.add(new SetCardInfo("Island", 273, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Island", 273, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Jawbone Duelist", 18, Rarity.UNCOMMON, mage.cards.j.JawboneDuelist.class));
|
cards.add(new SetCardInfo("Jawbone Duelist", 18, Rarity.UNCOMMON, mage.cards.j.JawboneDuelist.class));
|
||||||
|
|
|
@ -16,19 +16,14 @@ import java.util.UUID;
|
||||||
public class AddCountersControllerEffect extends OneShotEffect {
|
public class AddCountersControllerEffect extends OneShotEffect {
|
||||||
|
|
||||||
private Counter counter;
|
private Counter counter;
|
||||||
private final boolean enchantedEquipped;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param counter Counter to add. Includes type and amount.
|
* @param counter Counter to add. Includes type and amount.
|
||||||
* @param enchantedEquipped If true, not source controller will get the
|
|
||||||
* counter, but the permanent's controller that the source permanent
|
|
||||||
* enchants or equippes.
|
|
||||||
*/
|
*/
|
||||||
public AddCountersControllerEffect(Counter counter, boolean enchantedEquipped) {
|
public AddCountersControllerEffect(Counter counter) {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.counter = counter.copy();
|
this.counter = counter.copy();
|
||||||
this.enchantedEquipped = enchantedEquipped;
|
staticText = "you get" + counter.getDescription();
|
||||||
staticText = (enchantedEquipped ? "its controller gets " : "you get ") + counter.getDescription();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddCountersControllerEffect(final AddCountersControllerEffect effect) {
|
public AddCountersControllerEffect(final AddCountersControllerEffect effect) {
|
||||||
|
@ -36,27 +31,11 @@ public class AddCountersControllerEffect extends OneShotEffect {
|
||||||
if (effect.counter != null) {
|
if (effect.counter != null) {
|
||||||
this.counter = effect.counter.copy();
|
this.counter = effect.counter.copy();
|
||||||
}
|
}
|
||||||
this.enchantedEquipped = effect.enchantedEquipped;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
UUID uuid = source.getControllerId();
|
Player player = game.getPlayer(source.getControllerId());
|
||||||
if (this.enchantedEquipped) {
|
|
||||||
Permanent enchantment = game.getPermanent(source.getSourceId());
|
|
||||||
if (enchantment != null && enchantment.getAttachedTo() != null) {
|
|
||||||
UUID eUuid = enchantment.getAttachedTo();
|
|
||||||
Permanent permanent = game.getPermanent(eUuid);
|
|
||||||
if (permanent != null) {
|
|
||||||
uuid = permanent.getControllerId();
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Player player = game.getPlayer(uuid);
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.addCounters(counter, source.getControllerId(), source, game);
|
player.addCounters(counter, source.getControllerId(), source, game);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
package mage.abilities.effects.common.counter;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.effects.Effect;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.constants.Outcome;
|
||||||
|
import mage.constants.TargetController;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.players.Player;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public class AddPoisonCounterAllEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
private final int amount;
|
||||||
|
private final TargetController targetController;
|
||||||
|
|
||||||
|
public AddPoisonCounterAllEffect(TargetController targetController) {
|
||||||
|
this(1, targetController);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AddPoisonCounterAllEffect(int amount, TargetController targetController) {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
this.amount = amount;
|
||||||
|
this.targetController = targetController;
|
||||||
|
staticText = makeText();
|
||||||
|
}
|
||||||
|
|
||||||
|
private AddPoisonCounterAllEffect(final AddPoisonCounterAllEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
this.amount = effect.amount;
|
||||||
|
this.targetController = effect.targetController;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AddPoisonCounterAllEffect copy() {
|
||||||
|
return new AddPoisonCounterAllEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<UUID> getPlayers(Game game, Ability source) {
|
||||||
|
switch (targetController) {
|
||||||
|
case OPPONENT:
|
||||||
|
return game.getOpponents(source.getControllerId());
|
||||||
|
case EACH_PLAYER:
|
||||||
|
case ANY:
|
||||||
|
return game.getState().getPlayersInRange(source.getControllerId(), game);
|
||||||
|
case YOU:
|
||||||
|
return Arrays.asList(source.getControllerId());
|
||||||
|
case CONTROLLER_ATTACHED_TO:
|
||||||
|
List<UUID> list = new ArrayList<>();
|
||||||
|
Optional.ofNullable(source.getSourcePermanentOrLKI(game))
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(Permanent::getAttachedTo)
|
||||||
|
.map(game::getControllerId)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.ifPresent(list::add);
|
||||||
|
return list;
|
||||||
|
default:
|
||||||
|
throw new UnsupportedOperationException(targetController + " not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
for (UUID playerId : getPlayers(game, source)) {
|
||||||
|
Player player = game.getPlayer(playerId);
|
||||||
|
if (player != null) {
|
||||||
|
player.addCounters(CounterType.POISON.createInstance(amount), source.getControllerId(), source, game);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String makeText() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
switch (targetController) {
|
||||||
|
case OPPONENT:
|
||||||
|
sb.append("each opponent gets");
|
||||||
|
break;
|
||||||
|
case ANY:
|
||||||
|
case EACH_PLAYER:
|
||||||
|
sb.append("each player gets");
|
||||||
|
break;
|
||||||
|
case YOU:
|
||||||
|
sb.append("you get");
|
||||||
|
break;
|
||||||
|
case CONTROLLER_ATTACHED_TO:
|
||||||
|
sb.append("its controller gets");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new UnsupportedOperationException(targetController + " not supported");
|
||||||
|
}
|
||||||
|
sb.append(' ' + CardUtil.numberToText(amount, "a") + " poison counter");
|
||||||
|
if (amount > 1) {
|
||||||
|
sb.append('s');
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue