use of mage.target.common.TargetLandPermanent in project mage by magefree.
the class SunderingTitanDestroyLandEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId());
Set<UUID> lands = new HashSet<>();
if (controller != null && sourcePermanent != null) {
for (SubType landName : SubType.getBasicLands()) {
FilterLandPermanent filter = new FilterLandPermanent(landName + " to destroy");
filter.add(landName.getPredicate());
Target target = new TargetLandPermanent(1, 1, filter, true);
if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) {
controller.chooseTarget(outcome, target, source, game);
lands.add(target.getFirstTarget());
}
}
if (!lands.isEmpty()) {
int destroyedLands = 0;
for (UUID landId : lands) {
Permanent land = game.getPermanent(landId);
if (land != null) {
if (land.destroy(source, game, false)) {
destroyedLands++;
}
}
}
game.informPlayers(sourcePermanent.getLogName() + ": " + destroyedLands + (destroyedLands > 1 ? " lands were" : "land was") + " destroyed");
}
return true;
}
return false;
}
use of mage.target.common.TargetLandPermanent in project mage by magefree.
the class CyclopeanTombCounterWatcher method apply.
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
MageObjectReference mor = new MageObjectReference(source.getSourceId(), source.getSourceObjectZoneChangeCounter(), game);
CyclopeanTombCounterWatcher watcher = game.getState().getWatcher(CyclopeanTombCounterWatcher.class);
if (controller != null && watcher != null) {
Set<MageObjectReference> landRef = watcher.landMiredByCyclopeanTombInstance(mor, game);
if (landRef == null || landRef.isEmpty()) {
// no lands got mire counter from that instance
return true;
}
FilterLandPermanent filter = new FilterLandPermanent("a land with a mire counter added from the Cyclopean Tomb instance (" + landRef.size() + " left)");
Set<PermanentIdPredicate> idPref = new HashSet<>();
for (MageObjectReference ref : landRef) {
Permanent land = ref.getPermanent(game);
if (land != null) {
idPref.add(new PermanentIdPredicate(land.getId()));
}
}
filter.add(Predicates.or(idPref));
TargetLandPermanent target = new TargetLandPermanent(1, 1, filter, true);
/*Player must choose a land each upkeep. Using the message are above the player hand where frequent interactions
* take place is the most logical way to prompt for this scenario. A new constructor added to provide a not optional
* option for any cards like this where the player must choose a target in such the way this card requires.
*/
if (controller.chooseTarget(Outcome.Neutral, target, source, game)) {
Permanent chosenLand = game.getPermanent(target.getFirstTarget());
if (chosenLand != null) {
Effect effect = new RemoveAllCountersTargetEffect(CounterType.MIRE);
effect.setTargetPointer(new FixedTarget(chosenLand, game));
effect.apply(game, source);
landRef.remove(new MageObjectReference(chosenLand, game));
}
}
return true;
}
return false;
}
use of mage.target.common.TargetLandPermanent in project mage by magefree.
the class RisingWatersUntapEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(game.getActivePlayerId());
FilterLandPermanent filter = new FilterLandPermanent("land you control");
filter.add(new ControllerIdPredicate(game.getActivePlayerId()));
Target target = new TargetLandPermanent(filter);
if (player != null && player.chooseTarget(Outcome.Untap, target, source, game)) {
for (UUID landId : target.getTargets()) {
Permanent land = game.getPermanent(landId);
if (land != null) {
land.untap(game);
}
}
return true;
}
return false;
}
use of mage.target.common.TargetLandPermanent in project mage by magefree.
the class SteamVinesEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Permanent steamVines = game.getPermanentOrLKIBattlefield(source.getSourceId());
if (steamVines != null) {
Permanent enchantedLand = game.getPermanentOrLKIBattlefield(steamVines.getAttachedTo());
Player controller = game.getPlayer(source.getControllerId());
if (enchantedLand != null && controller != null) {
Player landsController = game.getPlayer(enchantedLand.getControllerId());
if (game.getState().getZone(enchantedLand.getId()) == Zone.BATTLEFIELD) {
// if 2 or more Steam Vines were on a land
enchantedLand.destroy(source, game, false);
if (landsController != null) {
landsController.damage(1, source.getSourceId(), source, game);
}
}
if (!game.getBattlefield().getAllActivePermanents(CardType.LAND, game).isEmpty()) {
// lands are available on the battlefield
Target target = new TargetLandPermanent();
// not a target, it is chosen
target.setNotTarget(true);
Card steamVinesCard = game.getCard(source.getSourceId());
if (steamVinesCard != null && landsController != null) {
if (landsController.choose(Outcome.DestroyPermanent, target, source.getId(), game)) {
if (target.getFirstTarget() != null) {
Permanent landChosen = game.getPermanent(target.getFirstTarget());
if (landChosen != null) {
for (Target targetTest : steamVinesCard.getSpellAbility().getTargets()) {
Filter filterTest = targetTest.getFilter();
if (filterTest.match(landChosen, game)) {
if (game.getBattlefield().containsPermanent(landChosen.getId())) {
// verify that it is still on the battlefield
game.informPlayers(landsController.getLogName() + " attaches " + steamVines.getLogName() + " to " + landChosen.getLogName());
Effect effect = new AttachEffect(Outcome.Neutral);
effect.setTargetPointer(new FixedTarget(landChosen, game));
return effect.apply(game, source);
}
}
}
}
}
}
}
}
}
}
return false;
}
use of mage.target.common.TargetLandPermanent in project mage by magefree.
the class ThespiansStageCopyEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Permanent sourcePermanent = game.getPermanent(source.getSourceId());
Permanent copyFromPermanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (sourcePermanent != null && copyFromPermanent != null) {
Permanent newPermanent = game.copyPermanent(copyFromPermanent, sourcePermanent.getId(), source, new EmptyCopyApplier());
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ThespiansStageCopyEffect(), new GenericManaCost(2));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetLandPermanent());
newPermanent.addAbility(ability, source.getSourceId(), game);
return true;
}
return false;
}
Aggregations