2013-08-08 23:58:28 -07:00
def Duplicate = new MagicAtUpkeepTrigger ( ) {
@Override
public MagicEvent executeTrigger ( final MagicGame game , final MagicPermanent permanent , final MagicPlayer upkeepPlayer ) {
return permanent . isController ( upkeepPlayer ) & & permanent . isNonToken ( ) ?
new MagicEvent (
permanent ,
this ,
"PN puts a token onto the battlefield that's a copy of SN."
) :
MagicEvent . NONE ;
}
@Override
public void executeEvent ( final MagicGame game , final MagicEvent event ) {
game . doAction ( new MagicPlayTokenAction (
event . getPlayer ( ) ,
2013-10-08 22:40:16 -07:00
event . getPermanent ( )
2013-08-08 23:58:28 -07:00
) ) ;
}
} ;
def GainTrig = new MagicStatic ( MagicLayer . Ability ) {
@Override
public void modAbilityFlags ( final MagicPermanent source , final MagicPermanent permanent , final Set < MagicAbility > flags ) {
2013-08-18 06:41:41 -07:00
permanent . addAbility ( Duplicate ) ;
2013-08-08 23:58:28 -07:00
}
} ;
[
new MagicSpellCardEvent ( ) {
@Override
public MagicEvent getEvent ( final MagicCardOnStack cardOnStack , final MagicPayedCost payedCost ) {
return new MagicEvent (
cardOnStack ,
new MagicMayChoice ( MagicTargetChoice . CREATURE ) ,
MagicCopyTargetPicker . create ( ) ,
this ,
"Put SN onto the battlefield. You may\$ have SN enter the battlefield as a copy of any creature\$ on the battlefield, " +
"except it gains \"At the beginning of your upkeep, if this creature isn't a token, put a token onto the battlefield that's a copy of this creature.\""
) ;
}
@Override
public void executeEvent ( final MagicGame game , final MagicEvent event ) {
if ( event . isYes ( ) ) {
event . processTargetPermanent ( game , {
final MagicPermanent chosen - >
2013-10-08 22:40:16 -07:00
final MagicPlayCardFromStackAction action = MagicPlayCardFromStackAction . EnterAsCopy (
2013-08-08 23:58:28 -07:00
event . getCardOnStack ( ) ,
2013-10-08 22:40:16 -07:00
chosen
2013-08-08 23:58:28 -07:00
) ;
game . doAction ( action ) ;
final MagicPermanent perm = action . getPermanent ( ) ;
game . doAction ( new MagicAddStaticAction ( perm , GainTrig ) ) ;
2013-11-21 17:41:43 -08:00
} ) ;
2013-08-08 23:58:28 -07:00
} else {
game . doAction ( new MagicPlayCardFromStackAction (
event . getCardOnStack ( )
) ) ;
}
}
}
]