@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (controller != null && sourcePermanent != null) { TargetControlledPermanent target = new TargetControlledPermanent(1, 1, filter, true); SacrificeTargetCost cost = new SacrificeTargetCost(target); if (!controller.chooseUse(Outcome.Benefit, "Do you wish to sacrifice a Forest?", source, game) || !cost.canPay(source, source.getSourceId(), source.getControllerId(), game) || !cost.pay(source, game, source.getSourceId(), source.getControllerId(), true)) { sourcePermanent.sacrifice(source.getSourceId(), game); controller.damage(7, sourcePermanent.getId(), game, false, true); } else if (cost.isPaid()) { for (Permanent permanent : cost.getPermanents()) { if (filterSnow.match(permanent, game)) { game.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn), source); break; } } } return true; } return false; } }