@Override
 public boolean applies(GameEvent event, Ability source, Game game) {
   Card targetCard = game.getCard(event.getTargetId());
   StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId());
   if (targetCard != null
       && stackObject != null
       && targetCard.getId().equals(source.getSourceId())) {
     if (stackObject.getColor(game).contains(ObjectColor.BLACK)
         || stackObject.getColor(game).contains(ObjectColor.RED)) {
       if (!stackObject.getControllerId().equals(source.getControllerId())
               && stackObject.getCardType().contains(CardType.INSTANT)
           || stackObject.getCardType().contains(CardType.SORCERY)) {
         return true;
       }
     }
   }
   return false;
 }
示例#2
0
 @Override
 public void watch(GameEvent event, Game game) {
   if (condition == true) { // no need to check - condition has already occured
     return;
   }
   if (event.getType() == EventType.COUNTERED) {
     StackObject stackObject = game.getStack().getStackObject(event.getTargetId());
     if (stackObject == null) {
       stackObject = (StackObject) game.getLastKnownInformation(event.getTargetId(), Zone.STACK);
     }
     StackObject counterObject = game.getStack().getStackObject(event.getSourceId());
     if (counterObject == null) {
       counterObject = (StackObject) game.getLastKnownInformation(event.getSourceId(), Zone.STACK);
     }
     if (stackObject != null
         && counterObject != null
         && stackObject.getCardType().contains(CardType.CREATURE)
         && game.getOpponents(controllerId).contains(counterObject.getControllerId())) {
       condition = true;
     }
   }
 }