mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
another batch of text gen improvements (#11247)
* describe targets: UntapTargetEffect * describe targets: SetBasePowerToughnessTargetEffect * cleanup text * describe targets: RegenerateTargetEffect * describe targets: PhaseOutTargetEffect * adjust text * remove superfluous param * describe targets: TapAllTargetPlayerControlsEffect * describe targets: TurnFaceUpTargetEffect * describe targets: TransformTargetEffect * describe targets: RemoveFromCombatTargetEffect * describe targets: DetainTargetEffect * cleanup DiscardHandTargetEffect * describe targets: DrawCardTargetEffect * describe targets: GainLifeTargetEffect * describe targets: LoseLifeTargetEffect * describe targets: ExchangeLifeTargetEffect * describe targets: DamageTargetControllerEffect
This commit is contained in:
parent
4273d3b5ba
commit
d9ca387fad
30 changed files with 95 additions and 319 deletions
|
|
@ -65,11 +65,9 @@ public class DamageTargetControllerEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
String text = "{this} deals " + amount.getMessage() + " damage to target "
|
||||
+ mode.getTargets().get(0).getTargetName() + "'s controller";
|
||||
if (!preventable) {
|
||||
text += ". The damage can't be prevented";
|
||||
}
|
||||
return text;
|
||||
return "{this} deals " + amount.getMessage() + " damage to "
|
||||
+ getTargetPointer().describeTargets(mode.getTargets(), "that creature")
|
||||
+ "'s controller"
|
||||
+ (preventable ? "" : ". The damage can't be prevented");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import mage.constants.PhaseStep;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.turn.Step;
|
||||
import mage.target.Target;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -32,11 +30,6 @@ public class DetainTargetEffect extends OneShotEffect {
|
|||
super(Outcome.LoseAbility);
|
||||
}
|
||||
|
||||
public DetainTargetEffect(String ruleText) {
|
||||
super(Outcome.LoseAbility);
|
||||
staticText = ruleText;
|
||||
}
|
||||
|
||||
protected DetainTargetEffect(final DetainTargetEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
|
@ -56,8 +49,7 @@ public class DetainTargetEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
}
|
||||
DetainRestrictionEffect effect = new DetainRestrictionEffect();
|
||||
game.addEffect(effect, source);
|
||||
game.addEffect(new DetainRestrictionEffect(), source);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -66,40 +58,24 @@ public class DetainTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Target target = mode.getTargets().get(0);
|
||||
|
||||
if (target.getMaxNumberOfTargets() == target.getNumberOfTargets()) {
|
||||
if (target.getMaxNumberOfTargets() == 1) {
|
||||
sb.append("detain target ").append(target.getTargetName());
|
||||
} else {
|
||||
sb.append("detain ").append(target.getMaxNumberOfTargets()).append(" target ").append(target.getTargetName());
|
||||
}
|
||||
} else {
|
||||
sb.append("detain up to ").append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(" target ").append(target.getTargetName());
|
||||
}
|
||||
sb.append(". <i>(Until your next turn, ");
|
||||
boolean plural = target.getMaxNumberOfTargets() > 1;
|
||||
sb.append(plural ? "those " : "that ");
|
||||
sb.append(target.getTargetName().contains("creature") ? "creature" : "permanent");
|
||||
if (plural) {
|
||||
sb.append('s');
|
||||
}
|
||||
sb.append(" can't attack or block and ");
|
||||
sb.append(plural ? "their" : "its");
|
||||
sb.append(" activated abilities can't be activated.)</i>");
|
||||
return sb.toString();
|
||||
String description = getTargetPointer().describeTargets(mode.getTargets(), "that creature");
|
||||
boolean plural = getTargetPointer().isPlural(mode.getTargets());
|
||||
String reminder = ". <i>(Until your next turn, " + (plural ? "those " : "that ")
|
||||
+ (description.contains("creature") ? "creature" : "permanent") + (plural ? "s" : "")
|
||||
+ " can't attack or block and " + (plural ? "their" : "its")
|
||||
+ " activated abilities can't be activated.)</i>";
|
||||
return "detain " + description + reminder;
|
||||
}
|
||||
}
|
||||
|
||||
class DetainRestrictionEffect extends RestrictionEffect {
|
||||
|
||||
public DetainRestrictionEffect() {
|
||||
DetainRestrictionEffect() {
|
||||
super(Duration.Custom);
|
||||
staticText = "";
|
||||
}
|
||||
|
||||
protected DetainRestrictionEffect(final DetainRestrictionEffect effect) {
|
||||
private DetainRestrictionEffect(final DetainRestrictionEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import mage.abilities.effects.OneShotEffect;
|
|||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.targetpointer.SecondTargetPointer;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
|
|
@ -82,18 +80,7 @@ public class DrawCardTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (!mode.getTargets().isEmpty()) {
|
||||
Target target;
|
||||
if (targetPointer instanceof SecondTargetPointer && mode.getTargets().size() > 1) {
|
||||
target = mode.getTargets().get(1);
|
||||
} else {
|
||||
target = mode.getTargets().get(0);
|
||||
}
|
||||
sb.append("target ").append(target.getTargetName());
|
||||
} else {
|
||||
sb.append("that player");
|
||||
}
|
||||
StringBuilder sb = new StringBuilder(getTargetPointer().describeTargets(mode.getTargets(), "that player"));
|
||||
if (optional) {
|
||||
sb.append(" may draw ");
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -39,6 +38,6 @@ public class ExchangeLifeControllerTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "Exchange life totals with target " + mode.getTargets().get(0).getTargetName();
|
||||
return "exchange life totals with " + getTargetPointer().describeTargets(mode.getTargets(), "that player");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import mage.players.Player;
|
|||
*/
|
||||
public class GainLifeTargetEffect extends OneShotEffect {
|
||||
|
||||
private DynamicValue life;
|
||||
private final DynamicValue life;
|
||||
|
||||
public GainLifeTargetEffect(int life) {
|
||||
this(StaticValue.get(life));
|
||||
|
|
@ -50,20 +50,13 @@ public class GainLifeTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (!staticText.isEmpty()) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringBuilder sb = new StringBuilder(getTargetPointer().describeTargets(mode.getTargets(), "that player"));
|
||||
sb.append(" gains ");
|
||||
String message = life.getMessage();
|
||||
|
||||
if (!mode.getTargets().isEmpty() && mode.getTargets().get(0).getMaxNumberOfTargets() == Integer.MAX_VALUE) {
|
||||
sb.append("any number of target players each gain ");
|
||||
} else if (!mode.getTargets().isEmpty()) {
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName()).append(" gains ");
|
||||
} else {
|
||||
sb.append("that player gains ");
|
||||
}
|
||||
if (message.isEmpty() || !message.equals("1")) {
|
||||
if (!message.equals("1")) {
|
||||
sb.append(life.toString()).append(' ');
|
||||
}
|
||||
sb.append("life");
|
||||
|
|
|
|||
|
|
@ -52,19 +52,13 @@ public class LoseLifeTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (!staticText.isEmpty()) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String message = amount.getMessage();
|
||||
|
||||
if (!mode.getTargets().isEmpty()) {
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
} else {
|
||||
sb.append("that player");
|
||||
}
|
||||
StringBuilder sb = new StringBuilder(getTargetPointer().describeTargets(mode.getTargets(), "that player"));
|
||||
sb.append(" loses ");
|
||||
if (message.isEmpty() || !message.equals("1")) {
|
||||
String message = amount.getMessage();
|
||||
if (!message.equals("1")) {
|
||||
sb.append(amount).append(' ');
|
||||
}
|
||||
sb.append("life");
|
||||
|
|
|
|||
|
|
@ -14,20 +14,12 @@ import java.util.UUID;
|
|||
*/
|
||||
public class PhaseOutTargetEffect extends OneShotEffect {
|
||||
|
||||
protected final String targetDescription;
|
||||
|
||||
public PhaseOutTargetEffect() {
|
||||
this((String) null);
|
||||
}
|
||||
|
||||
public PhaseOutTargetEffect(String targetDescription) {
|
||||
super(Outcome.Detriment);
|
||||
this.targetDescription = targetDescription;
|
||||
}
|
||||
|
||||
private PhaseOutTargetEffect(final PhaseOutTargetEffect effect) {
|
||||
super(effect);
|
||||
this.targetDescription = effect.targetDescription;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -51,18 +43,7 @@ public class PhaseOutTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (targetDescription != null && !targetDescription.isEmpty()) {
|
||||
sb.append(targetDescription);
|
||||
} else {
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
}
|
||||
sb.append(" phase");
|
||||
if (mode.getTargets().isEmpty()
|
||||
|| mode.getTargets().get(0).getMaxNumberOfTargets() <= 1) {
|
||||
sb.append('s');
|
||||
}
|
||||
sb.append(" out");
|
||||
return sb.toString();
|
||||
return getTargetPointer().describeTargets(mode.getTargets(), "it")
|
||||
+ (getTargetPointer().isPlural(mode.getTargets()) ? " phase out" : " phases out");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,6 @@ import mage.game.Game;
|
|||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* @author maurer.it_at_gmail.com
|
||||
|
|
@ -40,7 +37,6 @@ public class RegenerateTargetEffect extends ReplacementEffectImpl {
|
|||
@Override
|
||||
public void init(Ability source, Game game) {
|
||||
super.init(source, game);
|
||||
|
||||
RegenerateSourceEffect.initRegenerationShieldInfo(game, source, targetPointer.getFirst(game, source));
|
||||
}
|
||||
|
||||
|
|
@ -62,7 +58,6 @@ public class RegenerateTargetEffect extends ReplacementEffectImpl {
|
|||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
//20110204 - 701.11c - event.getAmount() is used to signal if regeneration is allowed
|
||||
|
||||
return event.getAmount() == 0 && event.getTargetId().equals(targetPointer.getFirst(game, source)) && !this.used;
|
||||
}
|
||||
|
||||
|
|
@ -71,15 +66,6 @@ public class RegenerateTargetEffect extends ReplacementEffectImpl {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("regenerate ");
|
||||
Target target = mode.getTargets().get(0);
|
||||
if (target != null) {
|
||||
if (!target.getTargetName().toLowerCase(Locale.ENGLISH).startsWith("another")) {
|
||||
sb.append("target ");
|
||||
}
|
||||
sb.append(target.getTargetName());
|
||||
}
|
||||
return sb.toString();
|
||||
return "regenerate " + getTargetPointer().describeTargets(mode.getTargets(), "that creature");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -44,7 +43,7 @@ public class RemoveFromCombatTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
return "Remove target " + mode.getTargets().get(0).getTargetName() + " from combat";
|
||||
return "remove " + getTargetPointer().describeTargets(mode.getTargets(), "that creature") + " from combat";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,9 +51,8 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
|
||||
return "tap all " + filter.toString() + " target " +
|
||||
(mode.getTargets().isEmpty() ? "player" : mode.getTargets().get(0).getTargetName()) +
|
||||
" controls";
|
||||
return "tap all " + filter.getMessage() + ' '
|
||||
+ getTargetPointer().describeTargets(mode.getTargets(), "that player")
|
||||
+ " controls";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@ import mage.abilities.effects.OneShotEffect;
|
|||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -32,7 +30,7 @@ public class TransformTargetEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (UUID targetId : getTargetPointer().getTargets(game, source)) {
|
||||
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
if (permanent != null) {
|
||||
permanent.transform(source, game);
|
||||
}
|
||||
|
|
@ -45,24 +43,6 @@ public class TransformTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder("transform ");
|
||||
Target target = mode.getTargets().get(0);
|
||||
if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE
|
||||
&& target.getMinNumberOfTargets() == 0) {
|
||||
sb.append("any number of ");
|
||||
} else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
|
||||
sb.append("up to ");
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
|
||||
sb.append(' ');
|
||||
} else if (target.getMaxNumberOfTargets() > 1) {
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
|
||||
sb.append(' ');
|
||||
}
|
||||
String targetName = mode.getTargets().get(0).getTargetName();
|
||||
if (!targetName.contains("target ")) {
|
||||
sb.append("target ");
|
||||
}
|
||||
sb.append(targetName);
|
||||
return sb.toString();
|
||||
return "transform " + getTargetPointer().describeTargets(mode.getTargets(), "that creature");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ public class TurnFaceUpTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "turn target " + mode.getTargets().get(0).getTargetName() + " face up";
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
return "turn " + getTargetPointer().describeTargets(mode.getTargets(), "it") + " face up";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@ import mage.abilities.effects.OneShotEffect;
|
|||
import mage.constants.Outcome;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -52,31 +50,6 @@ public class UntapTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "untap target permanent"; // TODO: add exeption about missing targets setup?
|
||||
}
|
||||
|
||||
Target target = mode.getTargets().get(0);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("untap ");
|
||||
if (target.getNumberOfTargets() == 0) {
|
||||
sb.append("up to ");
|
||||
}
|
||||
|
||||
boolean haveTargetWord = target.getTargetName().contains("target");
|
||||
if (target.getMaxNumberOfTargets() > 1 || target.getNumberOfTargets() == 0) {
|
||||
sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets()));
|
||||
sb.append(haveTargetWord ? " " : " target ");
|
||||
sb.append(target.getTargetName());
|
||||
if (target.getMaxNumberOfTargets() > 1 && !target.getTargetName().endsWith("s")) {
|
||||
sb.append('s');
|
||||
}
|
||||
} else {
|
||||
sb.append(haveTargetWord ? "" : "target ");
|
||||
sb.append(target.getTargetName());
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
return "untap " + getTargetPointer().describeTargets(mode.getTargets(), "that permanent");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ import mage.constants.Outcome;
|
|||
import mage.constants.SubLayer;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.Target;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -21,8 +19,8 @@ import java.util.UUID;
|
|||
*/
|
||||
public class SetBasePowerToughnessTargetEffect extends ContinuousEffectImpl {
|
||||
|
||||
private DynamicValue power;
|
||||
private DynamicValue toughness;
|
||||
private final DynamicValue power;
|
||||
private final DynamicValue toughness;
|
||||
|
||||
public SetBasePowerToughnessTargetEffect(DynamicValue power, DynamicValue toughness, Duration duration) {
|
||||
super(duration, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature);
|
||||
|
|
@ -69,28 +67,9 @@ public class SetBasePowerToughnessTargetEffect extends ContinuousEffectImpl {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (mode.getTargets().get(0).getMinNumberOfTargets() == 0) {
|
||||
if (!mode.getTargets().get(0).getTargetName().startsWith("any")) {
|
||||
sb.append("up to ");
|
||||
sb.append(CardUtil.numberToText(mode.getTargets().get(0).getMaxNumberOfTargets()));
|
||||
sb.append(' ');
|
||||
}
|
||||
}
|
||||
if (!mode.getTargets().get(0).getTargetName().contains("target")) {
|
||||
sb.append("target ");
|
||||
}
|
||||
sb.append(mode.getTargets().get(0).getTargetName());
|
||||
if (mode.getTargets().stream().mapToInt(Target::getMaxNumberOfTargets).max().orElse(0) > 1) {
|
||||
sb.append(" have");
|
||||
} else {
|
||||
sb.append(" has");
|
||||
}
|
||||
sb.append(" base power and toughness ");
|
||||
sb.append(power).append('/').append(toughness);
|
||||
if (!duration.toString().isEmpty()) {
|
||||
sb.append(' ').append(duration.toString());
|
||||
}
|
||||
return sb.toString();
|
||||
return getTargetPointer().describeTargets(mode.getTargets(), "that creature")
|
||||
+ (getTargetPointer().isPlural(mode.getTargets()) ? " have" : " has")
|
||||
+ " base power and toughness " + power + '/' + toughness
|
||||
+ (duration.toString().isEmpty() ? "" : ' ' + duration.toString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
|
||||
|
||||
package mage.abilities.effects.common.discard;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -17,20 +15,12 @@ import mage.players.Player;
|
|||
|
||||
public class DiscardHandTargetEffect extends OneShotEffect {
|
||||
|
||||
protected String targetDescription;
|
||||
|
||||
public DiscardHandTargetEffect() {
|
||||
this("");
|
||||
}
|
||||
|
||||
public DiscardHandTargetEffect(String targetDescription) {
|
||||
super(Outcome.Discard);
|
||||
this.targetDescription = targetDescription;
|
||||
}
|
||||
|
||||
protected DiscardHandTargetEffect(final DiscardHandTargetEffect effect) {
|
||||
super(effect);
|
||||
this.targetDescription = effect.targetDescription;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -40,17 +30,13 @@ public class DiscardHandTargetEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
for (UUID playerId : getTargetPointer().getTargets(game, source)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.discard(player.getHand().size(), false, false, source, game);
|
||||
}
|
||||
for (UUID playerId : getTargetPointer().getTargets(game, source)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.discard(player.getHand().size(), false, false, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -58,13 +44,7 @@ public class DiscardHandTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (!targetDescription.isEmpty()) {
|
||||
sb.append(targetDescription);
|
||||
} else {
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
}
|
||||
sb.append(" discards their hand");
|
||||
return sb.toString();
|
||||
return getTargetPointer().describeTargets(mode.getTargets(), "that player")
|
||||
+ " discards their hand";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,20 +10,21 @@ import mage.target.TargetPermanent;
|
|||
public class TargetArtifactPermanent extends TargetPermanent {
|
||||
|
||||
public TargetArtifactPermanent() {
|
||||
this(1, 1, StaticFilters.FILTER_PERMANENT_ARTIFACT, false);
|
||||
}
|
||||
|
||||
|
||||
public TargetArtifactPermanent(FilterArtifactPermanent filter) {
|
||||
this(1, 1, filter, false);
|
||||
this(1);
|
||||
}
|
||||
|
||||
public TargetArtifactPermanent(int numTargets) {
|
||||
this(numTargets, numTargets, StaticFilters.FILTER_PERMANENT_ARTIFACT, false);
|
||||
this(numTargets, numTargets);
|
||||
}
|
||||
|
||||
public TargetArtifactPermanent(int minNumTargets, int maxNumTargets) {
|
||||
this(minNumTargets, maxNumTargets, StaticFilters.FILTER_PERMANENT_ARTIFACT, false);
|
||||
this(minNumTargets, maxNumTargets,
|
||||
(maxNumTargets > 1 ? StaticFilters.FILTER_PERMANENT_ARTIFACTS : StaticFilters.FILTER_PERMANENT_ARTIFACT),
|
||||
false);
|
||||
}
|
||||
|
||||
public TargetArtifactPermanent(FilterArtifactPermanent filter) {
|
||||
this(1, 1, filter, false);
|
||||
}
|
||||
|
||||
public TargetArtifactPermanent(int minNumTargets, int maxNumTargets, FilterArtifactPermanent filter, boolean notTarget) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue