mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
* Some Aftermath rule text fixes.
This commit is contained in:
parent
a7f2f0bd1c
commit
1ddd063928
16 changed files with 73 additions and 158 deletions
|
|
@ -31,14 +31,11 @@ import java.util.UUID;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.*;
|
||||
import mage.abilities.effects.common.ExileSpellEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.SplitCardHalf;
|
||||
import mage.constants.*;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
* Aftermath
|
||||
|
|
@ -55,7 +52,7 @@ public class AftermathAbility extends SimpleStaticAbility {
|
|||
public AftermathAbility() {
|
||||
super(Zone.ALL, new AftermathCastFromGraveyard());
|
||||
addEffect(new AftermathCantCastFromHand());
|
||||
addEffect(new AftermathExileAsResolvesFromGraveyard());
|
||||
addEffect(ExileSpellEffect.getInstance());
|
||||
}
|
||||
|
||||
public AftermathAbility(final AftermathAbility ability) {
|
||||
|
|
@ -68,12 +65,8 @@ public class AftermathAbility extends SimpleStaticAbility {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String getRule(boolean all) {
|
||||
if (all) {
|
||||
return "Aftermath <i>(Cast this card only from your graveyard. Exile it afterwards.)</i>";
|
||||
} else {
|
||||
return "Aftermath";
|
||||
}
|
||||
public String getRule() {
|
||||
return "Aftermath <i>(Cast this spell only from your graveyard. Then exile it.)</i>";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -81,7 +74,6 @@ class AftermathCastFromGraveyard extends AsThoughEffectImpl {
|
|||
|
||||
public AftermathCastFromGraveyard() {
|
||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit);
|
||||
staticText = "Cast {this} from your graveyard";
|
||||
}
|
||||
|
||||
public AftermathCastFromGraveyard(final AftermathCastFromGraveyard effect) {
|
||||
|
|
@ -98,10 +90,6 @@ class AftermathCastFromGraveyard extends AsThoughEffectImpl {
|
|||
return new AftermathCastFromGraveyard(this);
|
||||
}
|
||||
|
||||
private static String msb(UUID id) {
|
||||
return Integer.toUnsignedString((int) id.getMostSignificantBits(), 16);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||
if (objectId.equals(source.getSourceId())
|
||||
|
|
@ -153,75 +141,3 @@ class AftermathCantCastFromHand extends ContinuousRuleModifyingEffectImpl {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class AftermathExileAsResolvesFromGraveyard extends ReplacementEffectImpl {
|
||||
|
||||
AftermathExileAsResolvesFromGraveyard() {
|
||||
super(Duration.WhileOnStack, Outcome.Detriment);
|
||||
this.staticText = "Exile it afterwards.";
|
||||
}
|
||||
|
||||
AftermathExileAsResolvesFromGraveyard(AftermathExileAsResolvesFromGraveyard effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent evt, Ability source, Game game) {
|
||||
ZoneChangeEvent event = (ZoneChangeEvent) evt;
|
||||
if (event.getFromZone() == Zone.STACK && event.getToZone() != Zone.EXILED) {
|
||||
// Moving something from stack to somewhere else
|
||||
|
||||
// Get the source id, getting the whole split card's ID, because
|
||||
// that's the card that is changing zones in the event, but
|
||||
// source.getSourceId is only the split card half.
|
||||
// If branch so that we also support putting Aftermath on
|
||||
// non-split cards for... whatever reason, in case somebody
|
||||
// wants to do that in the future.
|
||||
UUID sourceId = source.getSourceId();
|
||||
Card sourceCard = game.getCard(source.getSourceId());
|
||||
if (sourceCard != null && sourceCard instanceof SplitCardHalf) {
|
||||
sourceCard = ((SplitCardHalf) sourceCard).getParentCard();
|
||||
sourceId = sourceCard.getId();
|
||||
}
|
||||
|
||||
if (event.getTargetId() == sourceId) {
|
||||
// Moving this spell from stack to yard
|
||||
Spell spell = game.getStack().getSpell(source.getSourceId());
|
||||
if (spell != null && spell.getFromZone() == Zone.GRAVEYARD) {
|
||||
// And this spell was cast from the graveyard, so we need to exile it
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||
UUID sourceId = source.getSourceId();
|
||||
Card sourceCard = game.getCard(source.getSourceId());
|
||||
if (sourceCard != null && sourceCard instanceof SplitCardHalf) {
|
||||
sourceCard = ((SplitCardHalf) sourceCard).getParentCard();
|
||||
sourceId = sourceCard.getId();
|
||||
}
|
||||
|
||||
if (sourceCard != null) {
|
||||
Player player = game.getPlayer(sourceCard.getOwnerId());
|
||||
if (player != null) {
|
||||
return player.moveCardToExileWithInfo(sourceCard, null, "", sourceId, game, ((ZoneChangeEvent) event).getFromZone(), true);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AftermathExileAsResolvesFromGraveyard copy() {
|
||||
return new AftermathExileAsResolvesFromGraveyard(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue