mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 13:02:06 -08:00
fext tixes
This commit is contained in:
parent
77f15413e6
commit
f16b5881e8
61 changed files with 223 additions and 224 deletions
|
|
@ -59,7 +59,7 @@ public class IsStepCondition implements Condition {
|
|||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("during ");
|
||||
if (onlyDuringYourSteps) {
|
||||
sb.append("your ");
|
||||
sb.append("your ").append(phaseStep.getStepText());
|
||||
} else if (phaseStep == PhaseStep.UPKEEP) {
|
||||
sb.append("any upkeep step");
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,9 @@ public class AddConditionalManaOfAnyColorEffect extends ManaEffect {
|
|||
staticText = "Add "
|
||||
+ (amount instanceof StaticValue ? (CardUtil.numberToText(((StaticValue) amount).toString())) : "")
|
||||
+ " mana "
|
||||
+ (oneChoice ? "of any one color" : "in any combination of colors")
|
||||
+ (oneChoice ? "of any"
|
||||
+ (amount instanceof StaticValue && (((StaticValue) amount).toString()).equals("1") ? "" : " one")
|
||||
+ " color" : "in any combination of colors")
|
||||
+ " to your mana pool. " + manaBuilder.getRule();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -277,14 +277,14 @@ public class CreateTokenCopyTargetEffect extends OneShotEffect {
|
|||
if (tapped && !attacking) {
|
||||
sb.append("tapped ");
|
||||
}
|
||||
sb.append("token");
|
||||
sb.append("token that's a copy of target creature");
|
||||
} else {
|
||||
sb.append(number);
|
||||
sb.append(" ");
|
||||
if (tapped && !attacking) {
|
||||
sb.append("tapped ");
|
||||
}
|
||||
sb.append("tokens");
|
||||
sb.append("tokens that are copies of target creature");
|
||||
}
|
||||
if (attacking) {
|
||||
sb.append(" that are");
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.constants.Duration;
|
||||
|
|
@ -45,23 +44,23 @@ public class PreventDamageToTargetEffect extends PreventionEffectImpl {
|
|||
public PreventDamageToTargetEffect(Duration duration) {
|
||||
this(duration, false);
|
||||
}
|
||||
|
||||
|
||||
public PreventDamageToTargetEffect(Duration duration, boolean onlyCombat) {
|
||||
this(duration, Integer.MAX_VALUE, onlyCombat);
|
||||
}
|
||||
|
||||
|
||||
public PreventDamageToTargetEffect(Duration duration, int amount) {
|
||||
this(duration, amount, false);
|
||||
}
|
||||
|
||||
|
||||
public PreventDamageToTargetEffect(Duration duration, int amount, boolean onlyCombat) {
|
||||
super(duration, amount, onlyCombat);
|
||||
}
|
||||
|
||||
|
||||
public PreventDamageToTargetEffect(Duration duration, boolean onlyCombat, boolean consumable, DynamicValue amountToPreventDynamic) {
|
||||
super(duration, 0, onlyCombat, consumable, amountToPreventDynamic);
|
||||
}
|
||||
|
||||
|
||||
public PreventDamageToTargetEffect(final PreventDamageToTargetEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
|
@ -83,9 +82,9 @@ public class PreventDamageToTargetEffect extends PreventionEffectImpl {
|
|||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (amountToPrevent == Integer.MAX_VALUE) {
|
||||
sb.append("Prevent all damage that would be dealt to target ");
|
||||
sb.append("prevent all damage that would be dealt to target ");
|
||||
} else {
|
||||
sb.append("Prevent the next ").append(amountToPrevent).append(" damage that would be dealt to target ");
|
||||
sb.append("prevent the next ").append(amountToPrevent).append(" damage that would be dealt to target ");
|
||||
}
|
||||
sb.append(mode.getTargets().get(0).getTargetName());
|
||||
if (!duration.toString().isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ public class PutTopCardOfLibraryIntoGraveTargetEffect extends OneShotEffect {
|
|||
}
|
||||
|
||||
private String setText() {
|
||||
StringBuilder sb = new StringBuilder("Target player puts the top ");
|
||||
StringBuilder sb = new StringBuilder("target player puts the top ");
|
||||
if (numberCards.toString().equals("1")) {
|
||||
sb.append(" card");
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -80,6 +80,6 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
return "tap all " + filter.getMessage() + " target " + mode.getTargets().get(0).getMessage() + " controls";
|
||||
return "tap all " + filter.toString() + " target " + mode.getTargets().get(0).getMessage() + " controls";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -38,12 +37,11 @@ import mage.game.permanent.Permanent;
|
|||
/**
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
||||
public class BlocksIfAbleAttachedEffect extends RequirementEffect {
|
||||
|
||||
public BlocksIfAbleAttachedEffect(Duration duration, AttachmentType attachmentType) {
|
||||
super(duration);
|
||||
this.staticText = attachmentType.verb() + " creature blocks each turn if able";
|
||||
this.staticText = attachmentType.verb() + " creature blocks each combat if able";
|
||||
}
|
||||
|
||||
public BlocksIfAbleAttachedEffect(final BlocksIfAbleAttachedEffect effect) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -39,7 +38,6 @@ import mage.game.permanent.Permanent;
|
|||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
||||
public class BlocksIfAbleSourceEffect extends RequirementEffect {
|
||||
|
||||
public BlocksIfAbleSourceEffect(Duration duration) {
|
||||
|
|
@ -78,7 +76,7 @@ public class BlocksIfAbleSourceEffect extends RequirementEffect {
|
|||
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
return "{this} blocks each turn if able.";
|
||||
return "{this} blocks each combat if able.";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
|
||||
package mage.abilities.effects.common.combat;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -35,35 +34,32 @@ import mage.constants.Duration;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
|
||||
/**
|
||||
* !! This effect does only support one target.
|
||||
*
|
||||
*
|
||||
* http://tappedout.net/mtg-questions/must-be-blocked-if-able-effect-makes-other-attacking-creatures-essentially-unblockable/
|
||||
*
|
||||
* When you Declare Blockers, you choose an arrangement for your blockers,
|
||||
* then check to see if there are any restrictions or requirements.
|
||||
* When you Declare Blockers, you choose an arrangement for your blockers, then
|
||||
* check to see if there are any restrictions or requirements.
|
||||
*
|
||||
* If any restrictions are violated, the block is illegal. (For example,
|
||||
* trying to block with Sightless Ghoul)
|
||||
* If any requirements are violated, the least possible number of requirements
|
||||
* must be violated, otherwise the block is illegal. (For example, your opponent
|
||||
* control two creatures that he has cast Deadly Allure on, but you control only
|
||||
* one creature. Blocking either one will violate a requirement, "This creature
|
||||
* must be blocked this turn if able", but it will also violate the least
|
||||
* possible number of requirements, thus it is legal.)
|
||||
* If the block is illegal, the game state backs up and you declare blockers
|
||||
* again. (Note that while you can, in some cases, circumvent requirements
|
||||
* such as "This creature must be blocked" or "This creature must block
|
||||
* any attacking creature" you can never circumvent restrictions: "This creature
|
||||
* can't block" or "Only one creature may block this turn.")
|
||||
* Because you declare ALL your blockers at once, THEN check for
|
||||
* restrictions/requirements, you may block Deadly Allure'd creatures
|
||||
* with only one creature, if you choose.
|
||||
* This still works with Lure: This card sets up a requirement that ALL
|
||||
* creatures must block it if able. Any block that violates more than
|
||||
* the minimum number of requirements is still illegal.
|
||||
* If any restrictions are violated, the block is illegal. (For example, trying
|
||||
* to block with Sightless Ghoul) If any requirements are violated, the least
|
||||
* possible number of requirements must be violated, otherwise the block is
|
||||
* illegal. (For example, your opponent control two creatures that he has cast
|
||||
* Deadly Allure on, but you control only one creature. Blocking either one will
|
||||
* violate a requirement, "This creature must be blocked this turn if able", but
|
||||
* it will also violate the least possible number of requirements, thus it is
|
||||
* legal.) If the block is illegal, the game state backs up and you declare
|
||||
* blockers again. (Note that while you can, in some cases, circumvent
|
||||
* requirements such as "This creature must be blocked" or "This creature must
|
||||
* block any attacking creature" you can never circumvent restrictions: "This
|
||||
* creature can't block" or "Only one creature may block this turn.") Because
|
||||
* you declare ALL your blockers at once, THEN check for
|
||||
* restrictions/requirements, you may block Deadly Allure'd creatures with only
|
||||
* one creature, if you choose. This still works with Lure: This card sets up a
|
||||
* requirement that ALL creatures must block it if able. Any block that violates
|
||||
* more than the minimum number of requirements is still illegal.
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
|
|
@ -75,7 +71,7 @@ public class MustBeBlockedByAtLeastOneTargetEffect extends RequirementEffect {
|
|||
|
||||
public MustBeBlockedByAtLeastOneTargetEffect(Duration duration) {
|
||||
super(duration);
|
||||
staticText = "Target creature must be blocked this turn if able";
|
||||
staticText = "target creature must be blocked this turn if able";
|
||||
}
|
||||
|
||||
public MustBeBlockedByAtLeastOneTargetEffect(final MustBeBlockedByAtLeastOneTargetEffect effect) {
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect
|
|||
@Override
|
||||
public String getText(Mode mode) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Search ").append(this.searchWhatText);
|
||||
sb.append("search ").append(this.searchWhatText);
|
||||
sb.append(" graveyard, hand, and library for ");
|
||||
sb.append(this.searchForText);
|
||||
sb.append(" and exile them. Then that player shuffles his or her library");
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.keyword;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
|
|
@ -11,12 +10,9 @@ import mage.game.events.GameEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
|
||||
/**
|
||||
* @author Plopman
|
||||
*/
|
||||
|
||||
|
||||
public class FlankingAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public FlankingAbility() {
|
||||
|
|
@ -37,9 +33,8 @@ public class FlankingAbility extends TriggeredAbilityImpl {
|
|||
if (event.getTargetId().equals(this.getSourceId())) {
|
||||
Permanent permanent = game.getPermanent(event.getSourceId());
|
||||
if (permanent != null) {
|
||||
boolean hasFlankingAbility =
|
||||
permanent.getAbilities().stream().anyMatch(ability -> ability instanceof FlankingAbility);
|
||||
|
||||
boolean hasFlankingAbility
|
||||
= permanent.getAbilities().stream().anyMatch(ability -> ability instanceof FlankingAbility);
|
||||
|
||||
if (!hasFlankingAbility) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
|
|
@ -54,7 +49,7 @@ public class FlankingAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Flanking";
|
||||
return "flanking";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -62,5 +57,4 @@ public class FlankingAbility extends TriggeredAbilityImpl {
|
|||
return new FlankingAbility(this);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,7 +138,11 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
|
|||
break;
|
||||
}
|
||||
}
|
||||
sb.append(morphCosts.getText()).append(' ');
|
||||
sb.append(morphCosts.getText());
|
||||
if (!(morphCosts.get(morphCosts.size() - 1) instanceof ManaCosts)) {
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(' ');
|
||||
if (megamorph) {
|
||||
sb.append(REMINDER_TEXT_MEGA);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class RampageAbility extends BecomesBlockedTriggeredAbility {
|
|||
|
||||
public RampageAbility(int amount) {
|
||||
super(null, false);
|
||||
rule = "rampage " + amount + "(Whenever this creature becomes blocked, it gets +"
|
||||
rule = "rampage " + amount + " (Whenever this creature becomes blocked, it gets +"
|
||||
+ amount + "/+" + amount + " until end of turn for each creature blocking it beyond the first.)";
|
||||
RampageValue rv = new RampageValue(amount);
|
||||
this.addEffect(new BoostSourceEffect(rv, rv, Duration.EndOfTurn, true));
|
||||
|
|
|
|||
|
|
@ -12,10 +12,12 @@ import mage.game.permanent.Permanent;
|
|||
|
||||
/**
|
||||
* "Shadow" keyword
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public class ShadowAbility extends EvasionAbility implements MageSingleton {
|
||||
private static final ShadowAbility instance = new ShadowAbility();
|
||||
|
||||
private static final ShadowAbility instance = new ShadowAbility();
|
||||
|
||||
private Object readResolve() throws ObjectStreamException {
|
||||
return instance;
|
||||
|
|
@ -31,7 +33,7 @@ public class ShadowAbility extends EvasionAbility implements MageSingleton {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Shadow <i>(This creature can block or be blocked by only creatures with shadow.)</i>";
|
||||
return "shadow <i>(This creature can block or be blocked by only creatures with shadow.)</i>";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public final class StaticFilters {
|
|||
public static final FilterCreaturePermanent FILTER_PERMANENT_A_CREATURE = new FilterCreaturePermanent("a creature");
|
||||
public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURES = new FilterCreaturePermanent("creatures");
|
||||
public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE_GOBLINS = new FilterCreaturePermanent(SubType.GOBLIN, "Goblin creatures");
|
||||
public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE_SLIVERS = new FilterCreaturePermanent(SubType.SLIVER, "Sliver creatures");
|
||||
public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE_SLIVERS = new FilterCreaturePermanent(SubType.SLIVER, "all Sliver creatures");
|
||||
public static final FilterPlaneswalkerPermanent FILTER_PERMANENT_PLANESWALKER = new FilterPlaneswalkerPermanent();
|
||||
|
||||
public static final FilterPermanent FILTER_PERMANENT_NON_LAND = new FilterNonlandPermanent();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue