reduce nesting by replacing annonymouse inner class with lambdas
parent
4cf08c9860
commit
ccf3574796
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.MagicCard;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicCardAction {
|
||||
void doAction(final MagicCard card);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.stack.MagicCardOnStack;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicCardOnStackAction {
|
||||
void doAction(final MagicCardOnStack card);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.stack.MagicItemOnStack;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicItemOnStackAction {
|
||||
void doAction(final MagicItemOnStack item);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.MagicPermanent;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicPermanentAction {
|
||||
void doAction(final MagicPermanent perm);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.MagicPlayer;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicPlayerAction {
|
||||
void doAction(final MagicPlayer player);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package magic.model.action;
|
|||
|
||||
import magic.model.target.MagicTarget;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface MagicTargetAction {
|
||||
void doAction(final MagicTarget perm);
|
||||
}
|
||||
|
|
|
@ -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>();
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
|
|
|
@ -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()));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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()
|
||||
));
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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()));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
));
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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()));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
""
|
||||
));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
""
|
||||
));
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
}
|
||||
));
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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()
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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."
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue