diff --git a/Mage.Sets/src/mage/sets/ravnika/HuntedLammasu.java b/Mage.Sets/src/mage/sets/ravnika/HuntedLammasu.java index fd8a291036..48c17d4b78 100644 --- a/Mage.Sets/src/mage/sets/ravnika/HuntedLammasu.java +++ b/Mage.Sets/src/mage/sets/ravnika/HuntedLammasu.java @@ -38,6 +38,7 @@ import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.game.Game; @@ -62,7 +63,7 @@ public class HuntedLammasu extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // When Hunted Lammasu enters the battlefield, put a 4/4 black Horror creature token onto the battlefield under target opponent's control. - Ability ability = new EntersBattlefieldTriggeredAbility(new HuntedLammasuEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new HorrorToken()), false); Target target = new TargetOpponent(); target.setRequired(true); ability.addTarget(target); @@ -79,27 +80,6 @@ public class HuntedLammasu extends CardImpl { } } -class HuntedLammasuEffect extends OneShotEffect { - HuntedLammasuEffect() { - super(Constants.Outcome.PutCreatureInPlay); - staticText = "put a 4/4 black Horror creature token onto the battlefield under target opponent's control"; - } - - HuntedLammasuEffect(final HuntedLammasuEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return new HorrorToken().putOntoBattlefield(1, game, source.getSourceId(), targetPointer.getFirst(source)); - } - - @Override - public HuntedLammasuEffect copy() { - return new HuntedLammasuEffect(); - } -} - class HorrorToken extends Token { HorrorToken() { super("Horror", "a 4/4 black Horror creature token"); diff --git a/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java b/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java new file mode 100644 index 0000000000..da1d593e74 --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/CreateTokenTargetEffect.java @@ -0,0 +1,68 @@ +package mage.abilities.effects.common; + +import mage.Constants; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.OneShotEffect; +import mage.game.Game; +import mage.game.permanent.token.Token; + +/** + * @author Loki + */ +public class CreateTokenTargetEffect extends OneShotEffect { + private Token token; + private DynamicValue amount; + + public CreateTokenTargetEffect(Token token) { + this(token, new StaticValue(1)); + } + + public CreateTokenTargetEffect(Token token, int amount) { + this(token, new StaticValue(amount)); + } + + public CreateTokenTargetEffect(Token token, DynamicValue amount) { + super(Constants.Outcome.PutCreatureInPlay); + this.token = token; + this.amount = amount.clone(); + } + + public CreateTokenTargetEffect(final CreateTokenTargetEffect effect) { + super(effect); + this.amount = effect.amount; + this.token = effect.token.copy(); + } + + @Override + public CreateTokenTargetEffect copy() { + return new CreateTokenTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + int value = amount.calculate(game, source); + token.putOntoBattlefield(value, game, source.getSourceId(), targetPointer.getFirst(source)); + return true; + } + + @Override + public String getText(Mode mode) { + StringBuilder sb = new StringBuilder("put "); + if (amount.toString().equals("1")) { + sb.append("a"); + } else { + sb.append(amount.toString()); + } + sb.append(" ").append(token.getDescription()).append(" onto the battlefield"); + String message = amount.getMessage(); + if (message.length() > 0) { + sb.append(" for each "); + } + sb.append(message); + sb.append(" under target ").append(mode.getTargets().get(0).getTargetName()); + return sb.toString(); + } +}