text fixes and filter corrections: GainAbilityControlledEffect

This commit is contained in:
xenohedron 2023-10-03 23:05:52 -04:00
parent c8da0f6216
commit 708ec9b8e9
20 changed files with 61 additions and 51 deletions

View file

@ -25,15 +25,12 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
protected boolean excludeSource;
protected FilterPermanent filter;
protected boolean forceQuotes = false;
protected boolean durationRuleAtStart = false; // put duration rule to the start of the rules instead end
public GainAbilityControlledEffect(Ability ability, Duration duration) {
this(ability, duration, StaticFilters.FILTER_PERMANENTS);
}
public GainAbilityControlledEffect(CompoundAbility ability, Duration duration) {
this(ability, duration, StaticFilters.FILTER_PERMANENTS);
}
public GainAbilityControlledEffect(Ability ability, Duration duration, FilterPermanent filter) {
this(ability, duration, filter, false);
}
@ -62,6 +59,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
this.filter = effect.filter.copy();
this.excludeSource = effect.excludeSource;
this.forceQuotes = effect.forceQuotes;
this.durationRuleAtStart = effect.durationRuleAtStart;
}
@Override
@ -121,6 +119,9 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
private void setText() {
StringBuilder sb = new StringBuilder();
if (durationRuleAtStart && !duration.toString().isEmpty() && duration != Duration.EndOfGame) {
sb.append(duration.toString()).append(", ");
}
if (excludeSource) {
sb.append("other ");
}
@ -128,14 +129,14 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
sb.append(filter.getMessage()).append(" you control ");
if (duration == Duration.WhileOnBattlefield || duration == Duration.EndOfGame) {
sb.append("have ");
if (forceQuotes || gainedAbility.startsWith("When") || gainedAbility.startsWith("{T}")) {
gainedAbility = '"' + gainedAbility + '"';
}
} else {
sb.append("gain ");
}
if (forceQuotes || gainedAbility.startsWith("When") || gainedAbility.startsWith("{T}")) {
gainedAbility = '"' + gainedAbility + '"';
}
sb.append(gainedAbility);
if (!duration.toString().isEmpty() && duration != Duration.EndOfGame) {
if (!durationRuleAtStart && !duration.toString().isEmpty() && duration != Duration.EndOfGame) {
sb.append(' ').append(duration.toString());
}
staticText = sb.toString();
@ -143,12 +144,16 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl {
/**
* Add quotes to gains abilities (by default static abilities don't have it)
*
* @return
*/
public GainAbilityControlledEffect withForceQuotes() {
this.forceQuotes = true;
setText();
return this;
}
public GainAbilityControlledEffect withDurationRuleAtStart(boolean durationRuleAtStart) {
this.durationRuleAtStart = durationRuleAtStart;
setText();
return this;
}
}

View file

@ -10,6 +10,7 @@ import mage.abilities.keyword.LifelinkAbility;
import mage.abilities.keyword.VigilanceAbility;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
@ -21,13 +22,13 @@ public final class ObiWanKenobiEmblem extends Emblem {
public ObiWanKenobiEmblem() {
super("Emblem Obi-Wan Kenobi");
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new BoostControlledEffect(1, 1, Duration.EndOfGame));
Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame);
Effect effect = new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and have vigilance");
ability.addEffect(effect);
effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield);
effect = new GainAbilityControlledEffect(FirstStrikeAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText(", first strike");
ability.addEffect(effect);
effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield);
effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfGame, StaticFilters.FILTER_PERMANENT_CREATURES);
effect.setText("and lifelink.");
ability.addEffect(effect);
getAbilities().add(ability);

View file

@ -27,8 +27,6 @@ import java.util.List;
*/
public class TheGreatForestPlane extends Plane {
private static final String rule = "Each creature assigns combat damage equal to its toughness rather than its power";
public TheGreatForestPlane() {
this.setPlaneType(Planes.PLANE_THE_GREAT_FOREST);
@ -39,13 +37,13 @@ public class TheGreatForestPlane extends Plane {
// Active player can roll the planar die: Whenever you roll {CHAOS}, creatures you control get +0/+2 and gain trample until end of turn
Effect chaosEffect = new BoostControlledEffect(0, 2, Duration.EndOfTurn);
Target chaosTarget = null;
Effect chaosEffect2 = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
Effect chaosEffect2 = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES);
Target chaosTarget2 = null;
List<Effect> chaosEffects = new ArrayList<Effect>();
List<Effect> chaosEffects = new ArrayList<>();
chaosEffects.add(chaosEffect);
chaosEffects.add(chaosEffect2);
List<Target> chaosTargets = new ArrayList<Target>();
List<Target> chaosTargets = new ArrayList<>();
chaosTargets.add(chaosTarget);
chaosTargets.add(chaosTarget2);