reduce nesting by replacing annonymouse inner class with lambdas

master
melvinzhang 2016-01-17 11:12:06 +08:00
parent 4cf08c9860
commit ccf3574796
89 changed files with 765 additions and 1095 deletions

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.MagicCard;
@FunctionalInterface
public interface MagicCardAction {
void doAction(final MagicCard card);
}

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.stack.MagicCardOnStack;
@FunctionalInterface
public interface MagicCardOnStackAction {
void doAction(final MagicCardOnStack card);
}

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.stack.MagicItemOnStack;
@FunctionalInterface
public interface MagicItemOnStackAction {
void doAction(final MagicItemOnStack item);
}

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.MagicPermanent;
@FunctionalInterface
public interface MagicPermanentAction {
void doAction(final MagicPermanent perm);
}

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.MagicPlayer;
@FunctionalInterface
public interface MagicPlayerAction {
void doAction(final MagicPlayer player);
}

View File

@ -2,6 +2,7 @@ package magic.model.action;
import magic.model.target.MagicTarget;
@FunctionalInterface
public interface MagicTargetAction {
void doAction(final MagicTarget perm);
}

View File

@ -29,12 +29,8 @@ import java.util.LinkedList;
public abstract class MagicCondition implements MagicMatchedCostEvent {
private static final MagicEventAction PLAY_ABILITY_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new PlayAbilityAction(event.getPermanent()));
}
};
private static final MagicEventAction PLAY_ABILITY_ACTION = (final MagicGame game, final MagicEvent event) ->
game.doAction(new PlayAbilityAction(event.getPermanent()));
public static List<MagicMatchedCostEvent> build(final String costs) {
final List<MagicMatchedCostEvent> matched = new LinkedList<MagicMatchedCostEvent>();

View File

@ -16,19 +16,14 @@ public class MagicAddCounterChosenEvent extends MagicEvent {
super(
source,
MagicTargetChoice.A_CREATURE_YOU_CONTROL,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent perm) {
game.doAction(new ChangeCountersAction(
perm,
counterType,
1
));
}
});
}
(final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent perm) -> {
game.doAction(new ChangeCountersAction(
perm,
counterType,
1
));
});
},
"Put a " + counterType.getName() + " counter on a creature$ you control."
);

View File

@ -10,15 +10,12 @@ public class MagicAddCounterEvent extends MagicEvent {
public MagicAddCounterEvent(final MagicPermanent permanent,final MagicCounterType counterType,final int amount) {
super(
permanent,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
counterType,
amount
));
}
(final MagicGame game, final MagicEvent event) -> {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
counterType,
amount
));
},
genDescription(permanent,counterType,amount)
);

View File

@ -50,21 +50,16 @@ public class MagicAwakenEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent it) {
game.doAction(new ChangeCountersAction(
it,
MagicCounterType.PlusOne,
event.getRefInt()
));
game.doAction(new AddStaticAction(it, PT));
game.doAction(new AddStaticAction(it, Type));
game.doAction(new GainAbilityAction(it, MagicAbility.Haste, MagicStatic.Forever));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent it) -> {
game.doAction(new ChangeCountersAction(
it,
MagicCounterType.PlusOne,
event.getRefInt()
));
game.doAction(new AddStaticAction(it, PT));
game.doAction(new AddStaticAction(it, Type));
game.doAction(new GainAbilityAction(it, MagicAbility.Haste, MagicStatic.Forever));
});
};
}

View File

@ -30,14 +30,12 @@ public class MagicBestowActivation extends MagicHandCastActivation {
) {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final boolean valid = event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new PlayCardFromStackAction(
event.getCardOnStack(),
creature,
MagicPlayMod.BESTOWED
));
}
final boolean valid = event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new PlayCardFromStackAction(
event.getCardOnStack(),
creature,
MagicPlayMod.BESTOWED
));
});
if (!valid) {
game.doAction(new PlayCardFromStackAction(event.getCardOnStack()));
@ -68,39 +66,36 @@ public class MagicBestowActivation extends MagicHandCastActivation {
);
}
private final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
game.doAction(new RemoveCardAction(card,MagicLocationType.OwnersHand));
private final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
game.doAction(new RemoveCardAction(card,MagicLocationType.OwnersHand));
final MagicCardOnStack cardOnStack=new MagicCardOnStack(
card,
BestowEvent,
game.getPayedCost()
) {
@Override
public boolean hasType(final MagicType type) {
if (type == MagicType.Creature) {
return false;
} else {
return super.hasType(type);
}
final MagicCardOnStack cardOnStack=new MagicCardOnStack(
card,
BestowEvent,
game.getPayedCost()
) {
@Override
public boolean hasType(final MagicType type) {
if (type == MagicType.Creature) {
return false;
} else {
return super.hasType(type);
}
}
@Override
public boolean hasSubType(final MagicSubType subType) {
if (subType == MagicSubType.Aura) {
return true;
} else if (MagicSubType.ALL_CREATURES.contains(subType)) {
return false;
} else {
return super.hasSubType(subType);
}
@Override
public boolean hasSubType(final MagicSubType subType) {
if (subType == MagicSubType.Aura) {
return true;
} else if (MagicSubType.ALL_CREATURES.contains(subType)) {
return false;
} else {
return super.hasSubType(subType);
}
};
}
};
game.doAction(new PutItemOnStackAction(cardOnStack));
}
game.doAction(new PutItemOnStackAction(cardOnStack));
};
}

View File

@ -14,19 +14,14 @@ import magic.model.target.Operator;
public class MagicBolsterEvent extends MagicEvent {
public static final MagicEventAction ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new ChangeCountersAction(
creature,
MagicCounterType.PlusOne,
event.getRefInt()
));
}
});
}
public static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new ChangeCountersAction(
creature,
MagicCounterType.PlusOne,
event.getRefInt()
));
});
};
public MagicBolsterEvent(final MagicSource source, final MagicPlayer player, final int amount, final int minToughness) {
@ -44,7 +39,7 @@ public class MagicBolsterEvent extends MagicEvent {
"a creature with least toughness among creatures you control"
),
amount,
ACTION,
EVENT_ACTION,
"PN puts RN +1/+1 counters on creature$ with least toughness among creatures he or she control."
);
}

View File

@ -29,17 +29,12 @@ public class MagicBounceChosenPermanentEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
game.doAction(new RemoveFromPlayAction(
permanent,
MagicLocationType.OwnersHand
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
game.doAction(new RemoveFromPlayAction(
permanent,
MagicLocationType.OwnersHand
));
});
};
}

View File

@ -17,10 +17,7 @@ public class MagicBouncePermanentEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new RemoveFromPlayAction(event.getRefPermanent(),MagicLocationType.OwnersHand));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new RemoveFromPlayAction(event.getRefPermanent(),MagicLocationType.OwnersHand));
};
}

View File

@ -38,15 +38,12 @@ public abstract class MagicCardAbilityActivation extends MagicHandCastActivation
public MagicEvent getEvent(final MagicSource source) {
return new MagicEvent(
source,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
MagicCardAbilityActivation.this,
getCardEvent(event.getCard(), game.getPayedCost())
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
}
(final MagicGame game, final MagicEvent event) -> {
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
MagicCardAbilityActivation.this,
getCardEvent(event.getCard(), game.getPayedCost())
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
},
"Play activated ability of SN."
);

View File

@ -28,23 +28,18 @@ public class MagicCipherEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
game.doAction(new ChangeCardDestinationAction(event.getCardOnStack(), MagicLocationType.Exile));
event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent creatureToEncode) {
game.doAction(new AddTriggerAction(
creatureToEncode,
DamageIsDealtTrigger.Cipher(event.getCardOnStack().getCardDefinition())
));
}
});
} else {
game.doAction(new ChangeCardDestinationAction(event.getCardOnStack(), MagicLocationType.Graveyard));
}
game.doAction(new MoveCardAction(event.getCardOnStack()));
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
if (event.isYes()) {
game.doAction(new ChangeCardDestinationAction(event.getCardOnStack(), MagicLocationType.Exile));
event.processTargetPermanent(game, (final MagicPermanent creatureToEncode) -> {
game.doAction(new AddTriggerAction(
creatureToEncode,
DamageIsDealtTrigger.Cipher(event.getCardOnStack().getCardDefinition())
));
});
} else {
game.doAction(new ChangeCardDestinationAction(event.getCardOnStack(), MagicLocationType.Graveyard));
}
game.doAction(new MoveCardAction(event.getCardOnStack()));
};
}

View File

@ -24,15 +24,12 @@ public class MagicClashEvent extends MagicEvent {
}
public static final MagicEventAction EventAction(final MagicEventAction clashAction) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer winner = executeClash(game, event);
if (winner == event.getPlayer()) {
clashAction.executeEvent(game, event);
};
game.executeTrigger(MagicTriggerType.WhenClash, winner);
}
return (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer winner = executeClash(game, event);
if (winner == event.getPlayer()) {
clashAction.executeEvent(game, event);
};
game.executeTrigger(MagicTriggerType.WhenClash, winner);
};
}

View File

@ -34,29 +34,26 @@ public class MagicCoinFlipEvent extends MagicEvent {
}
public static final MagicEventAction EventAction(final MagicEventAction winAction, final MagicEventAction loseAction) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
//True = Heads
final MagicPlayer player = event.getPlayer();
boolean coinFace = (player.getStateId() & 1) == 0;
boolean playerFace = event.isMode(1);
if (coinFace) {
game.logAppendMessage(player, "Coin landed heads.");
//Heads trigger
} else {
game.logAppendMessage(player, "Coin landed tails.");
//Tails trigger
}
if (playerFace == coinFace) {
game.logAppendMessage(player, player.getName() + " wins.");
winAction.executeEvent(game, event);
//Win trigger
} else {
game.logAppendMessage(player, player.getName() + " loses.");
loseAction.executeEvent(game, event);
//Lose trigger
}
return (final MagicGame game, final MagicEvent event) -> {
//True = Heads
final MagicPlayer player = event.getPlayer();
boolean coinFace = (player.getStateId() & 1) == 0;
boolean playerFace = event.isMode(1);
if (coinFace) {
game.logAppendMessage(player, "Coin landed heads.");
//Heads trigger
} else {
game.logAppendMessage(player, "Coin landed tails.");
//Tails trigger
}
if (playerFace == coinFace) {
game.logAppendMessage(player, player.getName() + " wins.");
winAction.executeEvent(game, event);
//Win trigger
} else {
game.logAppendMessage(player, player.getName() + " loses.");
loseAction.executeEvent(game, event);
//Lose trigger
}
};
}

View File

@ -25,15 +25,12 @@ public class MagicCounterUnlessEvent extends MagicEvent {
new MagicPayManaCostChoice(cost)
),
itemOnStack,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isNo()) {
game.doAction(new CounterItemOnStackAction(
event.getRefItemOnStack(),
toLocation
));
}
(final MagicGame game, final MagicEvent event) -> {
if (event.isNo()) {
game.doAction(new CounterItemOnStackAction(
event.getRefItemOnStack(),
toLocation
));
}
},
String.format("You may$ pay %s$. If you don't, counter %s.",

View File

@ -46,24 +46,21 @@ public class MagicCyclingActivation extends MagicCardAbilityActivation {
public MagicEvent getEvent(final MagicSource source) {
return new MagicEvent(
source,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
MagicCyclingActivation.this,
getCardEvent(card, game.getPayedCost())
(final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
MagicCyclingActivation.this,
getCardEvent(card, game.getPayedCost())
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
game.executeTrigger(MagicTriggerType.WhenOtherCycle, card);
for (final MagicTrigger<MagicCard> trigger : card.getCardDefinition().getCycleTriggers()) {
game.executeTrigger(
trigger,
MagicPermanent.NONE,
card,
card
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
game.executeTrigger(MagicTriggerType.WhenOtherCycle, card);
for (final MagicTrigger<MagicCard> trigger : card.getCardDefinition().getCycleTriggers()) {
game.executeTrigger(
trigger,
MagicPermanent.NONE,
card,
card
);
}
}
},
name + " SN."

View File

@ -19,13 +19,10 @@ public class MagicDeclareAttackersEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
final MagicDeclareAttackersResult result = event.getAttackers();
game.doAction(new DeclareAttackersAction(player,result));
game.logAttackers(player,result);
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer player = event.getPlayer();
final MagicDeclareAttackersResult result = event.getAttackers();
game.doAction(new DeclareAttackersAction(player,result));
game.logAttackers(player,result);
};
}

View File

@ -19,13 +19,10 @@ public class MagicDeclareBlockersEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
final MagicDeclareBlockersResult result = event.getBlockers();
game.doAction(new DeclareBlockersAction(player,result));
game.logBlockers(player,result);
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer player = event.getPlayer();
final MagicDeclareBlockersResult result = event.getBlockers();
game.doAction(new DeclareBlockersAction(player,result));
game.logBlockers(player,result);
};
}

View File

@ -24,16 +24,12 @@ public class MagicDiscardChosenEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card
));
});
};
}

View File

@ -60,16 +60,10 @@ public class MagicDiscardEvent extends MagicEvent {
cond = MagicConditionFactory.HandAtLeast(minHandSize);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processChosenCards(game, new MagicCardAction() {
@Override
public void doAction(final MagicCard card) {
game.doAction(new DiscardCardAction(event.getPlayer(), card));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processChosenCards(game, (final MagicCard card) -> {
game.doAction(new DiscardCardAction(event.getPlayer(), card));
});
};
@Override

View File

@ -22,14 +22,11 @@ public class MagicDiscardHandEvent extends MagicEvent {
this(source, source.getController());
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
final MagicCardList hand = new MagicCardList(player.getHand());
for (final MagicCard card : hand) {
game.doAction(new DiscardCardAction(player,card));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer player = event.getPlayer();
final MagicCardList hand = new MagicCardList(player.getHand());
for (final MagicCard card : hand) {
game.doAction(new DiscardCardAction(player,card));
}
};
}

View File

@ -14,10 +14,7 @@ public class MagicDiscardSelfEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new DiscardCardAction(event.getPlayer(), event.getCard()));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new DiscardCardAction(event.getPlayer(), event.getCard()));
};
}

View File

@ -16,12 +16,8 @@ public class MagicDrawEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new DrawAction(event.getPlayer(), event.getRefInt()));
}
};
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) ->
game.doAction(new DrawAction(event.getPlayer(), event.getRefInt()));
private static final String genDescription(final int amount) {
if (amount != 1) {

View File

@ -70,10 +70,8 @@ public class MagicEquipActivation extends MagicPermanentActivation {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new AttachAction(event.getPermanent(),creature));
}
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new AttachAction(event.getPermanent(),creature));
});
}
}

View File

@ -2,12 +2,11 @@ package magic.model.event;
import magic.model.MagicGame;
@FunctionalInterface
public interface MagicEventAction {
void executeEvent(final MagicGame game, final MagicEvent event);
public static final MagicEventAction NONE = new MagicEventAction() {
public void executeEvent(final MagicGame game, final MagicEvent event) {
//do nothing
}
public static final MagicEventAction NONE = (final MagicGame game, final MagicEvent event) -> {
//do nothing
};
}

View File

@ -4,20 +4,17 @@ import magic.model.MagicGame;
public class MagicEventActionFactory {
static MagicEventAction compose(final MagicEventAction... acts) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.getTargetChoice().isValid() &&
event.getTargetChoice().isTargeted() &&
event.hasLegalTarget(game) == false) {
//countered on resolution due to illegal target
return;
}
return (final MagicGame game, final MagicEvent event) -> {
if (event.getTargetChoice().isValid() &&
event.getTargetChoice().isTargeted() &&
event.hasLegalTarget(game) == false) {
//countered on resolution due to illegal target
return;
}
// has legal target
for (final MagicEventAction act : acts) {
act.executeEvent(game, event);
}
// has legal target
for (final MagicEventAction act : acts) {
act.executeEvent(game, event);
}
};
}

View File

@ -14,10 +14,7 @@ public class MagicEvokeEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new SetKickerAction(1));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new SetKickerAction(1));
};
}

View File

@ -17,10 +17,7 @@ public class MagicExcludeEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.getExclude().exclude(game);
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.getExclude().exclude(game);
};
}

View File

@ -27,18 +27,14 @@ public class MagicExileCardEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
final MagicLocationType fromLocation=card.getLocation();
game.doAction(new ShiftCardAction(
card,
fromLocation,
MagicLocationType.Exile
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetCard(game, (final MagicCard card) -> {
final MagicLocationType fromLocation=card.getLocation();
game.doAction(new ShiftCardAction(
card,
fromLocation,
MagicLocationType.Exile
));
});
};
}

View File

@ -27,19 +27,14 @@ public class MagicExileCardPayManaCostEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Graveyard,
MagicLocationType.Exile
));
game.addFirstEvent(new MagicPayManaCostEvent(event.getSource(), card.getCost()));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Graveyard,
MagicLocationType.Exile
));
game.addFirstEvent(new MagicPayManaCostEvent(event.getSource(), card.getCost()));
});
};
}

View File

@ -15,10 +15,7 @@ public class MagicExileEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new RemoveFromPlayAction(event.getPermanent(),MagicLocationType.Exile));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new RemoveFromPlayAction(event.getPermanent(),MagicLocationType.Exile));
};
}

View File

@ -16,16 +16,13 @@ public class MagicExileSelfEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
final MagicLocationType fromLocation = MagicLocationType.values()[event.getRefInt()];
game.doAction(new ShiftCardAction(
card,
fromLocation,
MagicLocationType.Exile
));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
final MagicLocationType fromLocation = MagicLocationType.values()[event.getRefInt()];
game.doAction(new ShiftCardAction(
card,
fromLocation,
MagicLocationType.Exile
));
};
}

View File

@ -29,13 +29,10 @@ public class MagicExileTopLibraryEvent extends MagicEvent{
cond = MagicConditionFactory.LibraryAtLeast(amount);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardList exile = new MagicCardList(event.getPlayer().getLibrary().getCardsFromTop(event.getRefInt()));
for (final MagicCard card : exile) {
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary,MagicLocationType.Exile));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCardList exile = new MagicCardList(event.getPlayer().getLibrary().getCardsFromTop(event.getRefInt()));
for (final MagicCard card : exile) {
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary,MagicLocationType.Exile));
}
};

View File

@ -20,13 +20,9 @@ public class MagicGainLifeEvent extends MagicEvent {
this(permanent, permanent.getController(), amt);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeLifeAction(
event.getPlayer(),
event.getRefInt()
));
}
};
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) ->
game.doAction(new ChangeLifeAction(
event.getPlayer(),
event.getRefInt()
));
}

View File

@ -20,13 +20,10 @@ public class MagicGainProtectionFromEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new GainAbilityAction(
event.getRefPermanent(),
event.getChosenColor().getProtectionAbility()
));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new GainAbilityAction(
event.getRefPermanent(),
event.getChosenColor().getProtectionAbility()
));
};
}

View File

@ -70,27 +70,24 @@ public class MagicHandCastActivation extends MagicActivation<MagicCard> implemen
private final MagicEventAction EVENT_ACTION = genPlayEventAction(MagicLocationType.OwnersHand);
protected MagicEventAction genPlayEventAction(final MagicLocationType fromLocation) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
if (card.getCardDefinition().isLand()) {
game.incLandsPlayed();
}
return (final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
if (card.getCardDefinition().isLand()) {
game.incLandsPlayed();
}
game.doAction(new RemoveCardAction(card, fromLocation));
game.doAction(new RemoveCardAction(card, fromLocation));
if (usesStack) {
final MagicCardOnStack cardOnStack=new MagicCardOnStack(
card,
MagicHandCastActivation.this,
game.getPayedCost()
);
cardOnStack.setFromLocation(fromLocation);
game.doAction(new PutItemOnStackAction(cardOnStack));
} else {
game.doAction(new PlayCardAction(card,card.getController()));
}
if (usesStack) {
final MagicCardOnStack cardOnStack=new MagicCardOnStack(
card,
MagicHandCastActivation.this,
game.getPayedCost()
);
cardOnStack.setFromLocation(fromLocation);
game.doAction(new PutItemOnStackAction(cardOnStack));
} else {
game.doAction(new PlayCardAction(card,card.getController()));
}
};
}
@ -170,12 +167,9 @@ public class MagicHandCastActivation extends MagicActivation<MagicCard> implemen
final MagicEvent ev = cardDef.getCardEvent().getEvent(cardOnStack, payedCost);
final MagicEventAction effect = ev.getEventAction();
final MagicEventAction awaken = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
ev.getEventAction().executeEvent(game, event);
game.addEvent(new MagicAwakenEvent(event.getSource(), event.getPlayer(), n));
}
final MagicEventAction awaken = (final MagicGame game, final MagicEvent event) -> {
ev.getEventAction().executeEvent(game, event);
game.addEvent(new MagicAwakenEvent(event.getSource(), event.getPlayer(), n));
};
return new MagicEvent(
ev.getSource(),

View File

@ -29,13 +29,10 @@ public class MagicMillEvent extends MagicEvent{
cond = MagicConditionFactory.LibraryAtLeast(amount);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardList exile = new MagicCardList(event.getPlayer().getLibrary().getCardsFromTop(event.getRefInt()));
for (final MagicCard card : exile) {
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary,MagicLocationType.Graveyard));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCardList exile = new MagicCardList(event.getPlayer().getLibrary().getCardsFromTop(event.getRefInt()));
for (final MagicCard card : exile) {
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary,MagicLocationType.Graveyard));
}
};

View File

@ -107,13 +107,10 @@ public class MagicMorphCastActivation extends MagicHandCastActivation {
};
}
private final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
game.doAction(new RemoveCardAction(card,MagicLocationType.OwnersHand));
game.doAction(new PutItemOnStackAction(genMorphSpell(card)));
}
private final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
game.doAction(new RemoveCardAction(card,MagicLocationType.OwnersHand));
game.doAction(new PutItemOnStackAction(genMorphSpell(card)));
};
@Override

View File

@ -21,16 +21,13 @@ public class MagicMulliganEvent extends MagicEvent {
"PN may$ take a mulligan."
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer player = event.getPlayer();
if (event.isYes()) {
final MagicCardList hand = new MagicCardList(player.getHand());
game.doAction(new ShuffleCardsIntoLibraryAction(hand, MagicLocationType.OwnersHand));
game.doAction(new DrawAction(player, hand.size() - 1));
game.addEvent(new MagicMulliganEvent(player));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer player = event.getPlayer();
if (event.isYes()) {
final MagicCardList hand = new MagicCardList(player.getHand());
game.doAction(new ShuffleCardsIntoLibraryAction(hand, MagicLocationType.OwnersHand));
game.doAction(new DrawAction(player, hand.size() - 1));
game.addEvent(new MagicMulliganEvent(player));
}
};
}

View File

@ -11,6 +11,9 @@ public class MagicPayLifeEvent extends MagicEvent {
private final MagicCondition cond;
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) ->
game.doAction(new ChangeLifeAction(event.getPlayer(), -event.getRefInt()));
public MagicPayLifeEvent(final MagicSource source,final int amount) {
this(source, source.getController(), amount);
}
@ -19,13 +22,9 @@ public class MagicPayLifeEvent extends MagicEvent {
super(
source,
player,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeLifeAction(event.getPlayer(),-amount));
}
},
"Pay "+amount+" life."
amount,
EVENT_ACTION,
"Pay RN life."
);
cond = MagicConditionFactory.YouLifeAtLeast(amount);
}

View File

@ -76,18 +76,15 @@ public abstract class MagicPermanentActivation extends MagicActivation<MagicPerm
return this;
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public final void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPermanentActivation permanentActivation = event.getRefPermanentActivation();
final MagicPermanent permanent = event.getPermanent();
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
permanentActivation,
permanent,
game.getPayedCost()
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPermanentActivation permanentActivation = event.getRefPermanentActivation();
final MagicPermanent permanent = event.getPermanent();
final MagicAbilityOnStack abilityOnStack = new MagicAbilityOnStack(
permanentActivation,
permanent,
game.getPayedCost()
);
game.doAction(new PutItemOnStackAction(abilityOnStack));
};
@Override

View File

@ -21,11 +21,9 @@ public class MagicPlayAbilityEvent extends MagicEvent {
);
cond = condition;
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new PlayAbilityAction(event.getPermanent()));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new PlayAbilityAction(event.getPermanent()));
};
@Override

View File

@ -44,10 +44,8 @@ public class MagicPlayAuraEvent extends MagicSpellCardEvent {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new PlayCardFromStackAction(event.getCardOnStack(),creature));
}
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new PlayCardFromStackAction(event.getCardOnStack(),creature));
});
}

View File

@ -15,19 +15,14 @@ public class MagicPopulateEvent extends MagicEvent {
source,
MagicTargetChoice.CREATURE_TOKEN_YOU_CONTROL,
MagicCopyPermanentPicker.create(),
EA,
EVENT_ACTION,
"Put a token onto the battlefield that's a copy of a creature token$ you control."
);
}
private static final MagicEventAction EA = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new PlayTokenAction(event.getPlayer(), creature.getCardDefinition()));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new PlayTokenAction(event.getPlayer(), creature.getCardDefinition()));
});
};
}

View File

@ -9,64 +9,60 @@ import magic.model.phase.MagicStep;
public class MagicPriorityEvent extends MagicEvent {
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayChoiceResult playChoiceResult = event.getPlayChoice();
if (playChoiceResult==MagicPlayChoiceResult.PASS ||
playChoiceResult==MagicPlayChoiceResult.SKIP) {
game.incrementPriorityPassedCount();
// when passing, the last played activation can no longer be played.
if (playChoiceResult==MagicPlayChoiceResult.PASS) {
game.getPriorityPlayer().getActivationPriority().incActivationId();
}
if (game.getPriorityPassed()) {
game.setPriorityPassed(false);
game.resolve();
} else {
game.setPriorityPassed(true);
switch (game.getStep()) {
case ActivePlayer:
game.setStep(MagicStep.OtherPlayer);
break;
case OtherPlayer:
game.setStep(MagicStep.ActivePlayer);
break;
default:
throw new IllegalStateException("Can not pass in "+game.getStep());
}
}
} else {
// Clear priority passed only when stack is used.
final MagicSourceActivation<? extends MagicSource> sourceActivation = playChoiceResult.sourceActivation;
if (sourceActivation.usesStack()) {
game.setPriorityPassed(false);
}
// set activation/priority of controller
sourceActivation.changeActivationPriority();
// reset payed costs
game.resetPayedCost();
// pay costs without choices first, eg {T}
for (final MagicEvent costEvent : sourceActivation.getCostEvent()) {
if (costEvent.hasChoice() == false) {
game.executeEvent(costEvent, MagicEvent.NO_CHOICE_RESULTS);
}
}
// then pay costs with choices. eg mana cost
for (final MagicEvent costEvent : sourceActivation.getCostEvent()) {
if (costEvent.hasChoice() == true) {
game.addEvent(costEvent);
}
}
game.addEvent(sourceActivation.getEvent());
final MagicPlayChoiceResult playChoiceResult = event.getPlayChoice();
if (playChoiceResult==MagicPlayChoiceResult.PASS ||
playChoiceResult==MagicPlayChoiceResult.SKIP) {
game.incrementPriorityPassedCount();
// when passing, the last played activation can no longer be played.
if (playChoiceResult==MagicPlayChoiceResult.PASS) {
game.getPriorityPlayer().getActivationPriority().incActivationId();
}
if (game.getPriorityPassed()) {
game.setPriorityPassed(false);
game.resolve();
} else {
game.setPriorityPassed(true);
switch (game.getStep()) {
case ActivePlayer:
game.setStep(MagicStep.OtherPlayer);
break;
case OtherPlayer:
game.setStep(MagicStep.ActivePlayer);
break;
default:
throw new IllegalStateException("Can not pass in "+game.getStep());
}
}
} else {
// Clear priority passed only when stack is used.
final MagicSourceActivation<? extends MagicSource> sourceActivation = playChoiceResult.sourceActivation;
if (sourceActivation.usesStack()) {
game.setPriorityPassed(false);
}
// set activation/priority of controller
sourceActivation.changeActivationPriority();
// reset payed costs
game.resetPayedCost();
// pay costs without choices first, eg {T}
for (final MagicEvent costEvent : sourceActivation.getCostEvent()) {
if (costEvent.hasChoice() == false) {
game.executeEvent(costEvent, MagicEvent.NO_CHOICE_RESULTS);
}
}
// then pay costs with choices. eg mana cost
for (final MagicEvent costEvent : sourceActivation.getCostEvent()) {
if (costEvent.hasChoice() == true) {
game.addEvent(costEvent);
}
}
game.addEvent(sourceActivation.getEvent());
}
};

View File

@ -19,24 +19,21 @@ public class MagicPutCardOnStackEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardOnStack cardOnStack = new MagicCardOnStack(
event.getCard(),
event.getPlayer(),
game.getPayedCost()
);
final int locations = event.getRefInt();
final MagicLocationType from = MagicLocationType.values()[locations / 10];
final MagicLocationType to = MagicLocationType.values()[locations % 10];
cardOnStack.setFromLocation(from);
cardOnStack.setMoveLocation(to);
final MagicCard card = event.getCard();
if (card.isToken() == false) {
game.doAction(new RemoveCardAction(card, from));
}
game.doAction(new PutItemOnStackAction(cardOnStack));
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCardOnStack cardOnStack = new MagicCardOnStack(
event.getCard(),
event.getPlayer(),
game.getPayedCost()
);
final int locations = event.getRefInt();
final MagicLocationType from = MagicLocationType.values()[locations / 10];
final MagicLocationType to = MagicLocationType.values()[locations % 10];
cardOnStack.setFromLocation(from);
cardOnStack.setMoveLocation(to);
final MagicCard card = event.getCard();
if (card.isToken() == false) {
game.doAction(new RemoveCardAction(card, from));
}
game.doAction(new PutItemOnStackAction(cardOnStack));
};
}

View File

@ -27,19 +27,14 @@ public class MagicPutCounterEvent extends MagicEvent {
}
private static final MagicEventAction EventActionTarget(final MagicCounterType type) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new ChangeCountersAction(
creature,
type,
event.getRefInt()
));
}
});
}
return (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new ChangeCountersAction(
creature,
type,
event.getRefInt()
));
});
};
}
@ -53,15 +48,12 @@ public class MagicPutCounterEvent extends MagicEvent {
}
private static final MagicEventAction EventAction(final MagicCounterType type) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
type,
event.getRefInt()
));
}
return (final MagicGame game, final MagicEvent event) -> {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
type,
event.getRefInt()
));
};
}
}

View File

@ -37,21 +37,16 @@ public class MagicPutOntoBattlefieldEvent extends MagicEvent {
}
private static final MagicEventAction EventAction(final List<? extends MagicPermanentAction> mods) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
// choice could be MagicMayChoice or MagicTargetChoice, the condition below takes care of both cases
if (event.isNo() == false) {
event.processTargetCard(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
game.logAppendMessage(
event.getPlayer(),
String.format("Chosen (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new ReturnCardAction(MagicLocationType.OwnersHand,card,event.getPlayer(),mods));
}
});
}
return (final MagicGame game, final MagicEvent event) -> {
// choice could be MagicMayChoice or MagicTargetChoice, the condition below takes care of both cases
if (event.isNo() == false) {
event.processTargetCard(game, (final MagicCard card) -> {
game.logAppendMessage(
event.getPlayer(),
String.format("Chosen (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new ReturnCardAction(MagicLocationType.OwnersHand,card,event.getPlayer(),mods));
});
}
};
}

View File

@ -25,24 +25,19 @@ public class MagicRedirectDamageEvent extends MagicEvent {
}
private static final MagicEventAction EventAction(final int amount, final boolean isCombat) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent planeswalker) {
final MagicDamage damage = isCombat ?
MagicDamage.Combat(event.getSource(), planeswalker, amount) :
new MagicDamage(event.getSource(), planeswalker, amount);
game.doAction(new DealDamageAction(damage));
}
});
} else {
return (final MagicGame game, final MagicEvent event) -> {
if (event.isYes()) {
event.processTargetPermanent(game, (final MagicPermanent planeswalker) -> {
final MagicDamage damage = isCombat ?
MagicDamage.Combat(event.getSource(), event.getRefPlayer(), amount) :
new MagicDamage(event.getSource(), event.getRefPlayer(), amount);
game.doAction(DealDamageAction.NoRedirect(damage));
}
MagicDamage.Combat(event.getSource(), planeswalker, amount) :
new MagicDamage(event.getSource(), planeswalker, amount);
game.doAction(new DealDamageAction(damage));
});
} else {
final MagicDamage damage = isCombat ?
MagicDamage.Combat(event.getSource(), event.getRefPlayer(), amount) :
new MagicDamage(event.getSource(), event.getRefPlayer(), amount);
game.doAction(DealDamageAction.NoRedirect(damage));
}
};
}

View File

@ -21,19 +21,14 @@ public class MagicRemoveCounterChosenEvent extends MagicEvent {
MagicTargetFilterFactory.creature(counterType, Control.You),
"a creature you control with a " + counterType.getName() + " counter on it"
),
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent perm) {
game.doAction(new ChangeCountersAction(
perm,
counterType,
-1
));
}
});
}
(final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent perm) -> {
game.doAction(new ChangeCountersAction(
perm,
counterType,
-1
));
});
},
"Remove a " + counterType.getName() + " counter from a creature$ you control."
);

View File

@ -14,15 +14,12 @@ public class MagicRemoveCounterEvent extends MagicEvent {
public MagicRemoveCounterEvent(final MagicPermanent permanent,final MagicCounterType counterType,final int amount) {
super(
permanent,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
counterType,
-amount
));
}
(final MagicGame game, final MagicEvent event) -> {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
counterType,
-amount
));
},
genDescription(permanent,counterType,amount)
);

View File

@ -15,14 +15,11 @@ public class MagicRepeatedCardsEvent extends MagicEvent {
source,
targetChoice,
amt - 1,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicEvent ev = factory.getEvent(event);
ev.executeEvent(game, event.getChosen());
for (int i = 0; i < event.getRefInt(); i++) {
game.addFirstEvent(ev);
}
(final MagicGame game, final MagicEvent event) -> {
final MagicEvent ev = factory.getEvent(event);
ev.executeEvent(game, event.getChosen());
for (int i = 0; i < event.getRefInt(); i++) {
game.addFirstEvent(ev);
}
},
factory.getEvent(source, targetChoice).getDescription()

View File

@ -15,14 +15,11 @@ public class MagicRepeatedPermanentsEvent extends MagicEvent {
source,
targetChoice,
amt - 1,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicEvent ev = factory.getEvent(event);
ev.executeEvent(game, event.getChosen());
for (int i = 0; i < event.getRefInt(); i++) {
game.addFirstEvent(ev);
}
(final MagicGame game, final MagicEvent event) -> {
final MagicEvent ev = factory.getEvent(event);
ev.executeEvent(game, event.getChosen());
for (int i = 0; i < event.getRefInt(); i++) {
game.addFirstEvent(ev);
}
},
factory.getEvent(source, targetChoice).getDescription()

View File

@ -21,18 +21,13 @@ public class MagicReturnCardEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card,
MagicLocationType.TopOfOwnersLibrary
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card,
MagicLocationType.TopOfOwnersLibrary
));
});
};
}

View File

@ -1489,14 +1489,12 @@ public enum MagicRuleEventAction {
@Override
public MagicEventAction getAction(final Matcher matcher) {
final List<MagicPlayMod> mods = ARG.mods(matcher);
return (game, event) -> event.processTargetCard(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new ReanimateAction(
card,
event.getPlayer(),
mods
));
}
return (game, event) -> event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new ReanimateAction(
card,
event.getPlayer(),
mods
));
});
}
},
@ -1793,11 +1791,8 @@ public enum MagicRuleEventAction {
@Override
public MagicEventAction getAction(final Matcher matcher) {
final int amount = Integer.parseInt(matcher.group("amount"));
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.addEvent(new MagicScryXEvent(event.getSource(),event.getPlayer(),amount));
}
return (final MagicGame game, final MagicEvent event) -> {
game.addEvent(new MagicScryXEvent(event.getSource(),event.getPlayer(),amount));
};
}
},
@ -1809,15 +1804,10 @@ public enum MagicRuleEventAction {
) {
@Override
public MagicEventAction getAction(final Matcher matcher) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPlayer(game,new MagicPlayerAction() {
public void doAction(final MagicPlayer player) {
game.doAction(new MagicRevealAction(player.getHand()));
}
});
}
return (final MagicGame game, final MagicEvent event) -> {
event.processTargetPlayer(game, (final MagicPlayer player) -> {
game.doAction(new MagicRevealAction(player.getHand()));
});
};
}
},
@ -1950,20 +1940,16 @@ public enum MagicRuleEventAction {
new MagicNoCombatTargetPicker(true, true, false),
MagicTiming.FirstMain,
"Detain",
(game, event) -> event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new DetainAction(event.getPlayer(), creature));
}
(game, event) -> event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new DetainAction(event.getPlayer(), creature));
})
),
CopySpell(
"copy " + ARG.CHOICE + "\\. You may choose new targets for (the|that) copy(\\.|,)?",
MagicTiming.Spell,
"Copy",
(game, event) -> event.processTargetCardOnStack(game, new MagicCardOnStackAction() {
public void doAction(final MagicCardOnStack item) {
game.doAction(new CopyCardOnStackAction(event.getPlayer(), item));
}
(game, event) -> event.processTargetCardOnStack(game, (final MagicCardOnStack item) -> {
game.doAction(new CopyCardOnStackAction(event.getPlayer(), item));
})
),
Monstrosity(

View File

@ -14,10 +14,7 @@ public class MagicSacrificeEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new SacrificeAction(event.getPermanent()));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new SacrificeAction(event.getPermanent()));
};
}

View File

@ -32,14 +32,9 @@ public class MagicSacrificePermanentEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
game.doAction(new SacrificeAction(permanent));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
game.doAction(new SacrificeAction(permanent));
});
};
}

View File

@ -63,14 +63,12 @@ public class MagicScavengeActivation extends MagicCardAbilityActivation {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game, new MagicPermanentAction() {
public void doAction(final MagicPermanent perm) {
game.doAction(new ChangeCountersAction(
perm,
MagicCounterType.PlusOne,
event.getRefInt()
));
}
event.processTargetPermanent(game, (final MagicPermanent perm) -> {
game.doAction(new ChangeCountersAction(
perm,
MagicCounterType.PlusOne,
event.getRefInt()
));
});
}
}

View File

@ -36,20 +36,17 @@ public class MagicScryEvent extends MagicEvent {
}
private static final MagicEventAction EventAction(final boolean trigger) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPlayer p = event.getPlayer();
if (event.isYes()) {
game.logAppendMessage(p, p + " looks at the top card of his or her library and moves it to the bottom.");
game.doAction(new ScryAction(p));
} else {
game.logAppendMessage(p, p + " looks at the top card of his or her library and puts it back on top.");
}
//Scry triggers even if the card is not moved. Only once regardless of amount of cards scryed
if (trigger) {
game.executeTrigger(MagicTriggerType.WhenScry,p);
}
return (final MagicGame game, final MagicEvent event) -> {
final MagicPlayer p = event.getPlayer();
if (event.isYes()) {
game.logAppendMessage(p, p + " looks at the top card of his or her library and moves it to the bottom.");
game.doAction(new ScryAction(p));
} else {
game.logAppendMessage(p, p + " looks at the top card of his or her library and puts it back on top.");
}
//Scry triggers even if the card is not moved. Only once regardless of amount of cards scryed
if (trigger) {
game.executeTrigger(MagicTriggerType.WhenScry,p);
}
};
};

View File

@ -22,56 +22,43 @@ public class MagicScryXEvent extends MagicEvent {
);
}
private static final MagicEventAction StartScrying = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final int X = event.getRefInt();
final MagicCardList choiceList = event.getPlayer().getLibrary().getCardsFromTop(X);
private static final MagicEventAction TopAction = (final MagicGame game, final MagicEvent event) -> {
event.processChosenCards(game, (final MagicCard card) -> {
game.doAction(new ScryComplAction(event.getPlayer(), card, false));
game.logAppendMessage(event.getPlayer(), event.getPlayer() + " puts back a card to the top of his or her library.");
});
};
private static final MagicEventAction BottomAction = (final MagicGame game, final MagicEvent event) -> {
final MagicCardList processedCards = new MagicCardList();
event.processChosenCards(game, (final MagicCard card) -> {
processedCards.add(card);
game.doAction(new ScryComplAction(event.getPlayer(), card, true));
game.logAppendMessage(event.getPlayer(), event.getPlayer() + " moves a card from top of his or her library to the bottom.");
});
final int X = event.getRefInt() - processedCards.size();
final MagicCardList choiceList = event.getPlayer().getLibrary().getCardsFromTop(X);
if (choiceList.size() > 1) {
game.addFirstEvent(new MagicEvent(
event.getSource(),
event.getPlayer(),
new MagicFromCardListChoice(choiceList, choiceList.size(), true, "to be put on the bottom of your library"),
choiceList.size(),
BottomAction,
new MagicFromCardListChoice(choiceList, choiceList.size(), "to be put on the top of your library"),
TopAction,
""
));
}
};
private static final MagicEventAction BottomAction = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardList processedCards = new MagicCardList();
event.processChosenCards(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
processedCards.add(card);
game.doAction(new ScryComplAction(event.getPlayer(), card, true));
game.logAppendMessage(event.getPlayer(), event.getPlayer() + " moves a card from top of his or her library to the bottom.");
}
});
final int X = event.getRefInt() - processedCards.size();
final MagicCardList choiceList = event.getPlayer().getLibrary().getCardsFromTop(X);
if (choiceList.size() > 1) {
game.addFirstEvent(new MagicEvent(
event.getSource(),
event.getPlayer(),
new MagicFromCardListChoice(choiceList, choiceList.size(), "to be put on the top of your library"),
TopAction,
""
));
}
}
};
private static final MagicEventAction TopAction = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processChosenCards(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new ScryComplAction(event.getPlayer(), card, false));
game.logAppendMessage(event.getPlayer(), event.getPlayer() + " puts back a card to the top of his or her library.");
}
});
}
private static final MagicEventAction StartScrying = (final MagicGame game, final MagicEvent event) -> {
final int X = event.getRefInt();
final MagicCardList choiceList = event.getPlayer().getLibrary().getCardsFromTop(X);
game.addFirstEvent(new MagicEvent(
event.getSource(),
event.getPlayer(),
new MagicFromCardListChoice(choiceList, choiceList.size(), true, "to be put on the bottom of your library"),
choiceList.size(),
BottomAction,
""
));
};
}

View File

@ -43,37 +43,30 @@ public class MagicSearchOntoBattlefieldEvent extends MagicEvent {
}
private static final MagicEventAction EventAction(final List<? extends MagicPermanentAction> mods) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
// choice could be MagicMayChoice or MagicTargetChoice or MagicFromCardListChoice
if (event.isNo()) {
// do nothing
} else if (event.getChosen()[0] instanceof MagicCardChoiceResult) {
event.processChosenCards(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
game.doAction(new ReturnCardAction(MagicLocationType.OwnersLibrary,card,event.getPlayer(),mods));
}
});
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
} else {
event.processTargetCard(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
game.doAction(new ReturnCardAction(MagicLocationType.OwnersLibrary,card,event.getPlayer(),mods));
}
});
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
}
return (final MagicGame game, final MagicEvent event) -> {
// choice could be MagicMayChoice or MagicTargetChoice or MagicFromCardListChoice
if (event.isNo()) {
// do nothing
} else if (event.getChosen()[0] instanceof MagicCardChoiceResult) {
event.processChosenCards(game, (final MagicCard card) -> {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
game.doAction(new ReturnCardAction(MagicLocationType.OwnersLibrary,card,event.getPlayer(),mods));
});
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
} else {
event.processTargetCard(game, (final MagicCard card) -> {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
game.doAction(new ReturnCardAction(MagicLocationType.OwnersLibrary,card,event.getPlayer(),mods));
});
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
}
};
}

View File

@ -44,43 +44,36 @@ public class MagicSearchToLocationEvent extends MagicEvent {
private static final MagicEventAction ACTION_WITHOUT_REVEAL = genEventAction(false);
private static final MagicEventAction genEventAction(final boolean revealed) {
return new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicLocationType toLocation = MagicLocationType.values()[event.getRefInt()];
return (final MagicGame game, final MagicEvent event) -> {
final MagicLocationType toLocation = MagicLocationType.values()[event.getRefInt()];
// choice could be MagicMayChoice or MagicTargetChoice or MagicFromCardListChoice
if (event.isNo()) {
// do nothing
} else if (event.getChosen()[0] instanceof MagicCardChoiceResult) {
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
event.processChosenCards(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
if (revealed) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
}
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary, toLocation));
}
});
} else {
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
event.processTargetCard(game, new MagicCardAction() {
public void doAction(final MagicCard card) {
if (revealed) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
}
game.doAction(new ShiftCardAction(card, MagicLocationType.OwnersLibrary, toLocation));
}
});
}
// choice could be MagicMayChoice or MagicTargetChoice or MagicFromCardListChoice
if (event.isNo()) {
// do nothing
} else if (event.getChosen()[0] instanceof MagicCardChoiceResult) {
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
event.processChosenCards(game, (final MagicCard card) -> {
if (revealed) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
}
game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary, toLocation));
});
} else {
game.doAction(new ShuffleLibraryAction(event.getPlayer()));
event.processTargetCard(game, (final MagicCard card) -> {
if (revealed) {
game.logAppendMessage(
event.getPlayer(),
String.format("Found (%s).", MagicMessage.getCardToken(card))
);
game.doAction(new AIRevealAction(card));
}
game.doAction(new ShiftCardAction(card, MagicLocationType.OwnersLibrary, toLocation));
});
}
};
}

View File

@ -37,20 +37,15 @@ public class MagicSoulbondEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new SoulbondAction(
event.getPermanent(),
creature,
true
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
if (event.isYes()) {
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new SoulbondAction(
event.getPermanent(),
creature,
true
));
});
}
};
}

View File

@ -17,24 +17,21 @@ public class MagicSpellCastEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
// execute spell is cast triggers
for (final ThisSpellIsCastTrigger trigger : itemOnStack.getCardDefinition().getSpellIsCastTriggers()) {
game.executeTrigger(
trigger,
MagicPermanent.NONE,
itemOnStack.getSource(),
(MagicCardOnStack)itemOnStack
);
}
// execute other spell is cast triggers
game.executeTrigger(MagicTriggerType.WhenOtherSpellIsCast,itemOnStack);
itemOnStack.getController().incSpellsCast();
// execute spell is cast triggers
for (final ThisSpellIsCastTrigger trigger : itemOnStack.getCardDefinition().getSpellIsCastTriggers()) {
game.executeTrigger(
trigger,
MagicPermanent.NONE,
itemOnStack.getSource(),
(MagicCardOnStack)itemOnStack
);
}
// execute other spell is cast triggers
game.executeTrigger(MagicTriggerType.WhenOtherSpellIsCast,itemOnStack);
itemOnStack.getController().incSpellsCast();
};
}

View File

@ -17,11 +17,8 @@ public class MagicStackChangeTargetsEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
event.setTargetChoice(itemOnStack.getChoiceResults());
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
event.setTargetChoice(itemOnStack.getChoiceResults());
};
}

View File

@ -18,17 +18,14 @@ public class MagicStackGetChoicesEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
itemOnStack.setChoiceResults(event.getChosen());
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicItemOnStack itemOnStack = event.getRefItemOnStack();
itemOnStack.setChoiceResults(event.getChosen());
// trigger WhenTargeted
final MagicTargetChoice tchoice = event.getChoice().getTargetChoice();
if (tchoice != null && tchoice.isTargeted()) {
game.executeTrigger(MagicTriggerType.WhenTargeted,itemOnStack);
}
// trigger WhenTargeted
final MagicTargetChoice tchoice = event.getChoice().getTargetChoice();
if (tchoice != null && tchoice.isTargeted()) {
game.executeTrigger(MagicTriggerType.WhenTargeted,itemOnStack);
}
};
}

View File

@ -59,13 +59,10 @@ public class MagicSuspendActivation extends MagicCardAbilityActivation {
public MagicEvent getEvent(final MagicSource source) {
return new MagicEvent(
source,
new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
game.doAction(new ShiftCardAction(card, MagicLocationType.OwnersHand, MagicLocationType.Exile));
game.doAction(new ChangeCountersAction(card, MagicCounterType.Time, amount));
}
(final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
game.doAction(new ShiftCardAction(card, MagicLocationType.OwnersHand, MagicLocationType.Exile));
game.doAction(new ChangeCountersAction(card, MagicCounterType.Time, amount));
},
"PN suspends SN. PN exiles SN, with "+amount+" time counters on it."
);

View File

@ -17,11 +17,8 @@ public class MagicTapEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new TapAction(event.getPermanent()));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new TapAction(event.getPermanent()));
};
@Override

View File

@ -19,16 +19,13 @@ public class MagicTapOrUntapEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPermanent permanent = event.getRefPermanent();
if (event.isYes()) {
if (permanent.isTapped()) {
game.doAction(new UntapAction(permanent));
} else {
game.doAction(new TapAction(permanent));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPermanent permanent = event.getRefPermanent();
if (event.isYes()) {
if (permanent.isTapped()) {
game.doAction(new UntapAction(permanent));
} else {
game.doAction(new TapAction(permanent));
}
}
};

View File

@ -26,14 +26,9 @@ public class MagicTapPermanentEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
game.doAction(new TapAction(permanent));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
game.doAction(new TapAction(permanent));
});
};
}

View File

@ -31,18 +31,13 @@ public class MagicTuckCardEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card,
MagicLocationType.BottomOfOwnersLibrary
));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new DiscardCardAction(
event.getPlayer(),
card,
MagicLocationType.BottomOfOwnersLibrary
));
});
};
}

View File

@ -28,25 +28,20 @@ public class MagicUniquenessEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
final Collection<MagicPermanent> targets = event.getTargetChoice().getPermanentFilter().filter(event);
for (final MagicPermanent target : targets) {
if (target != permanent) {
game.logAppendMessage(
event.getPlayer(),
String.format("Put %s into its owner's graveyard (Uniqueness rule).",
MagicMessage.getCardToken(target)
)
);
game.doAction(new RemoveFromPlayAction(target,MagicLocationType.Graveyard));
}
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
final Collection<MagicPermanent> targets = event.getTargetChoice().getPermanentFilter().filter(event);
for (final MagicPermanent target : targets) {
if (target != permanent) {
game.logAppendMessage(
event.getPlayer(),
String.format("Put %s into its owner's graveyard (Uniqueness rule).",
MagicMessage.getCardToken(target)
)
);
game.doAction(new RemoveFromPlayAction(target,MagicLocationType.Graveyard));
}
});
}
}
});
};
}

View File

@ -17,11 +17,8 @@ public class MagicUntapEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new UntapAction(event.getPermanent()));
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new UntapAction(event.getPermanent()));
};
@Override

View File

@ -28,14 +28,9 @@ public class MagicUntapPermanentEvent extends MagicEvent {
);
}
private static final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
game.doAction(new UntapAction(permanent));
}
});
}
private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
game.doAction(new UntapAction(permanent));
});
};
}

View File

@ -35,14 +35,11 @@ public abstract class AtYourUpkeepTrigger extends AtUpkeepTrigger {
public static AtYourUpkeepTrigger kinship(final String effect, final MagicEventAction action) {
return new AtYourUpkeepTrigger() {
final MagicEventAction ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
final MagicCard card = event.getRefCard();
game.doAction(new RevealAction(event.getRefCard()));
action.executeEvent(game, event);
}
final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
if (event.isYes()) {
final MagicCard card = event.getRefCard();
game.doAction(new RevealAction(event.getRefCard()));
action.executeEvent(game, event);
}
};
@ -65,7 +62,7 @@ public abstract class AtYourUpkeepTrigger extends AtUpkeepTrigger {
event.getSource(),
new MagicMayChoice("Reveal the top card of your library?"),
card,
ACTION,
EVENT_ACTION,
""
));
break;

View File

@ -75,41 +75,35 @@ public class CascadeTrigger extends ThisSpellIsCastTrigger {
}
}
private final MagicEventAction CAST_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardList exiled = new MagicCardList(event.getRefCardList());
if (event.isYes()) {
final MagicCard card = exiled.removeCardAtTop();
game.doAction(CastCardAction.WithoutManaCost(
event.getPlayer(),
card,
MagicLocationType.Exile,
MagicLocationType.Graveyard
));
}
game.addEvent(new MagicEvent(
event.getSource(),
event.getPlayer(),
exiled,
RESTORE_CARDS,
""
private final MagicEventAction RESTORE_CARDS = (final MagicGame game, final MagicEvent event) -> {
final MagicCardList cards = event.getRefCardList();
cards.shuffle();
for (final MagicCard card : cards) {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Exile,
MagicLocationType.BottomOfOwnersLibrary
));
}
};
private final MagicEventAction RESTORE_CARDS = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCardList cards = event.getRefCardList();
cards.shuffle();
for (final MagicCard card : cards) {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Exile,
MagicLocationType.BottomOfOwnersLibrary
));
}
private final MagicEventAction CAST_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCardList exiled = new MagicCardList(event.getRefCardList());
if (event.isYes()) {
final MagicCard card = exiled.removeCardAtTop();
game.doAction(CastCardAction.WithoutManaCost(
event.getPlayer(),
card,
MagicLocationType.Exile,
MagicLocationType.Graveyard
));
}
game.addEvent(new MagicEvent(
event.getSource(),
event.getPlayer(),
exiled,
RESTORE_CARDS,
""
));
};
}

View File

@ -72,12 +72,10 @@ public class ChampionTrigger extends EntersBattlefieldTrigger {
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPermanent permanent = event.getPermanent();
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
final ExileLinkAction act = new ExileLinkAction(permanent,creature);
game.doAction(act);
game.executeTrigger(MagicTriggerType.WhenChampioned, act);
}
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
final ExileLinkAction act = new ExileLinkAction(permanent,creature);
game.doAction(act);
game.executeTrigger(MagicTriggerType.WhenChampioned, act);
});
} else {
game.doAction(new SacrificeAction(permanent));

View File

@ -38,21 +38,19 @@ public class DevourTrigger extends EntersBattlefieldTrigger {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
final MagicPermanent permanent = event.getPermanent();
game.doAction(new SacrificeAction(creature));
game.doAction(new ChangeCountersAction(
permanent,
MagicCounterType.PlusOne,
amount
));
game.addEvent(executeTrigger(
game,
permanent,
MagicPayedCost.NO_COST
));
}
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
final MagicPermanent permanent = event.getPermanent();
game.doAction(new SacrificeAction(creature));
game.doAction(new ChangeCountersAction(
permanent,
MagicCounterType.PlusOne,
amount
));
game.addEvent(executeTrigger(
game,
permanent,
MagicPayedCost.NO_COST
));
});
}
}

View File

@ -81,16 +81,11 @@ public abstract class EntersBattlefieldTrigger extends MagicTrigger<MagicPayedCo
};
public static final EntersBattlefieldTrigger Exploit = new EntersBattlefieldTrigger() {
private final MagicEventAction EVENT_ACTION=new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent permanent) {
game.doAction(ChangeStateAction.Set(event.getPermanent(), MagicPermanentState.Exploit));
game.doAction(new SacrificeAction(permanent));
}
});
}
private final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
event.processTargetPermanent(game, (final MagicPermanent permanent) -> {
game.doAction(ChangeStateAction.Set(event.getPermanent(), MagicPermanentState.Exploit));
game.doAction(new SacrificeAction(permanent));
});
};
@Override

View File

@ -33,70 +33,55 @@ public class FadeVanishCounterTrigger extends AtUpkeepTrigger {
sacrifice = amount == 0;
return sacrifice ?
new MagicEvent(
permanent,
SAC_PERM,
"PN sacrifices SN."
):
permanent,
SAC_PERM,
"PN sacrifices SN."
):
new MagicEvent(
permanent,
REMOVE_FADE_COUNTER,
"PN removes a fade counter from SN."
);
permanent,
REMOVE_FADE_COUNTER,
"PN removes a fade counter from SN."
);
} else if (counterType == MagicCounterType.Time){
sacrifice = amount == 1;
return sacrifice ?
new MagicEvent(
permanent,
REMOVE_AND_SAC,
"PN removes a time counter from SN. PN sacrifices SN."
):
permanent,
REMOVE_AND_SAC,
"PN removes a time counter from SN. PN sacrifices SN."
):
new MagicEvent(
permanent,
REMOVE_TIME_COUNTER,
"PN removes a time counter from SN."
);
permanent,
REMOVE_TIME_COUNTER,
"PN removes a time counter from SN."
);
}
return MagicEvent.NONE;
}
private static final MagicEventAction SAC_PERM = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new SacrificeAction(event.getPermanent()));
}
private static final MagicEventAction SAC_PERM = (final MagicGame game, final MagicEvent event) ->
game.doAction(new SacrificeAction(event.getPermanent()));
private static final MagicEventAction REMOVE_TIME_COUNTER = (final MagicGame game, final MagicEvent event) ->
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Time,
-1
));
private static final MagicEventAction REMOVE_AND_SAC = (final MagicGame game, final MagicEvent event) -> {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Time,
-1
));
game.doAction(new SacrificeAction(event.getPermanent()));
};
private static final MagicEventAction REMOVE_TIME_COUNTER = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Time,
-1
));
}
};
private static final MagicEventAction REMOVE_AND_SAC = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Time,
-1
));
game.doAction(new SacrificeAction(event.getPermanent()));
}
};
private static final MagicEventAction REMOVE_FADE_COUNTER = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Fade,
-1
));
}
};
private static final MagicEventAction REMOVE_FADE_COUNTER = (final MagicGame game, final MagicEvent event) ->
game.doAction(new ChangeCountersAction(
event.getPermanent(),
MagicCounterType.Fade,
-1
));
}

View File

@ -37,15 +37,12 @@ public class LivingWeaponTrigger extends EntersBattlefieldTrigger {
game.doAction(new PlayTokenAction(
event.getPlayer(),
CardDefinitions.getToken("0/0 black Germ creature token"),
new MagicPermanentAction() {
@Override
public void doAction(final MagicPermanent perm) {
final MagicGame G = perm.getGame();
G.doAction(new AttachAction(
sn.map(G),
perm
));
}
(final MagicPermanent perm) -> {
final MagicGame G = perm.getGame();
G.doAction(new AttachAction(
sn.map(G),
perm
));
}
));
}

View File

@ -67,21 +67,18 @@ public class MadnessTrigger extends ThisPutIntoGraveyardTrigger {
}
}
private MagicEventAction EVENT_ACTION = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicCard card = event.getCard();
if (card.isInExile()) {
if (event.isYes()) {
game.doAction(CastCardAction.WithoutManaCost(
event.getPlayer(),
card,
MagicLocationType.Exile,
MagicLocationType.Graveyard
));
} else {
game.doAction(new ShiftCardAction(event.getCard(),MagicLocationType.Exile,MagicLocationType.Graveyard));
}
private MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicCard card = event.getCard();
if (card.isInExile()) {
if (event.isYes()) {
game.doAction(CastCardAction.WithoutManaCost(
event.getPlayer(),
card,
MagicLocationType.Exile,
MagicLocationType.Graveyard
));
} else {
game.doAction(new ShiftCardAction(event.getCard(),MagicLocationType.Exile,MagicLocationType.Graveyard));
}
}
};

View File

@ -38,14 +38,12 @@ public class ModularTrigger extends ThisDiesTrigger {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetPermanent(game,new MagicPermanentAction() {
public void doAction(final MagicPermanent creature) {
game.doAction(new ChangeCountersAction(
creature,
MagicCounterType.PlusOne,
event.getRefInt()
));
}
event.processTargetPermanent(game, (final MagicPermanent creature) -> {
game.doAction(new ChangeCountersAction(
creature,
MagicCounterType.PlusOne,
event.getRefInt()
));
});
}
}

View File

@ -51,14 +51,12 @@ public class SoulshiftTrigger extends ThisDiesTrigger {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
if (event.isYes()) {
event.processTargetCard(game,new MagicCardAction() {
public void doAction(final MagicCard card) {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Graveyard,
MagicLocationType.OwnersHand
));
}
event.processTargetCard(game, (final MagicCard card) -> {
game.doAction(new ShiftCardAction(
card,
MagicLocationType.Graveyard,
MagicLocationType.OwnersHand
));
});
}
}

View File

@ -16,19 +16,16 @@ public abstract class TributeTrigger extends EntersBattlefieldTrigger {
private final int amt;
private final MagicEventAction action = new MagicEventAction() {
@Override
public void executeEvent(final MagicGame game, final MagicEvent event) {
final MagicPermanent permanent = event.getPermanent();
if (event.isYes()) {
game.doAction(new ChangeCountersAction(
permanent,
MagicCounterType.PlusOne,
event.getRefInt()
));
} else {
game.doAction(new PutItemOnStackAction(new MagicTriggerOnStack(getEvent(permanent))));
}
private final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> {
final MagicPermanent permanent = event.getPermanent();
if (event.isYes()) {
game.doAction(new ChangeCountersAction(
permanent,
MagicCounterType.PlusOne,
event.getRefInt()
));
} else {
game.doAction(new PutItemOnStackAction(new MagicTriggerOnStack(getEvent(permanent))));
}
};
@ -53,7 +50,7 @@ public abstract class TributeTrigger extends EntersBattlefieldTrigger {
perm.getOpponent(),
new MagicMayChoice(),
amt,
action,
EVENT_ACTION,
"PN may$ put RN +1/+1 counters on SN."
);
}