use of mage.filter.FilterPermanent in project mage by magefree.
the class GlamerSpinnersEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
/*
5/1/2008 When Glamer Spinners enters the battlefield, you target only one permanent: the one that will be losing its Auras. You don't choose the permanent that will be receiving the Auras until the ability resolves.
5/1/2008 You may target a permanent that has no Auras enchanting it.
5/1/2008 When the ability resolves, you choose the permanent that will be receiving the Auras. It can't be the targeted permanent, it must have the same controller as the targeted permanent, and it must be able to be enchanted by all the Auras attached to the targeted permanent. If you can't choose a permanent that meets all those criteria, the Auras won't move.
*/
Permanent targetPermanent = game.getPermanent(getTargetPointer().getFirst(game, source));
Player controller = game.getPlayer(source.getControllerId());
Permanent glamerSpinners = game.getPermanent(source.getSourceId());
if (targetPermanent != null && controller != null && glamerSpinners != null) {
boolean passed = true;
FilterPermanent filterChoice = new FilterPermanent("a different permanent with the same controller as the target to attach the enchantments to");
filterChoice.add(new ControllerIdPredicate(targetPermanent.getControllerId()));
filterChoice.add(Predicates.not(new PermanentIdPredicate(targetPermanent.getId())));
Target chosenPermanentToAttachAuras = new TargetPermanent(filterChoice);
chosenPermanentToAttachAuras.setNotTarget(true);
LinkedList<UUID> auras = new LinkedList<>();
auras.addAll(targetPermanent.getAttachments());
if (// not blinked
source.getSourceObjectZoneChangeCounter() == glamerSpinners.getZoneChangeCounter(game) && chosenPermanentToAttachAuras.canChoose(source.getSourceId(), source.getControllerId(), game) && controller.choose(Outcome.Neutral, chosenPermanentToAttachAuras, source.getSourceId(), game)) {
Permanent permanentToAttachAuras = game.getPermanent(chosenPermanentToAttachAuras.getFirstTarget());
if (permanentToAttachAuras != null) {
for (UUID auraId : auras) {
Permanent aura = game.getPermanent(auraId);
if (aura != null && passed) {
// Check the target filter
Target target = aura.getSpellAbility().getTargets().get(0);
if (target instanceof TargetPermanent) {
if (!target.getFilter().match(permanentToAttachAuras, game)) {
passed = false;
}
}
// Check for protection
MageObject auraObject = game.getObject(auraId);
if (auraObject != null) {
if (permanentToAttachAuras.cantBeAttachedBy(auraObject, source, game, true)) {
passed = false;
}
}
}
}
if (passed) {
LinkedList<UUID> aurasToAttach = new LinkedList<>();
aurasToAttach.addAll(auras);
for (UUID auraId : aurasToAttach) {
Permanent auraToAttachToPermanent = game.getPermanent(auraId);
targetPermanent.removeAttachment(auraToAttachToPermanent.getId(), source, game);
permanentToAttachAuras.addAttachment(auraToAttachToPermanent.getId(), source, game);
}
return true;
}
game.informPlayers("Glamer Spinners" + ": No enchantments were moved from the target permanent.");
}
}
return true;
}
return false;
}
use of mage.filter.FilterPermanent in project mage by magefree.
the class GuardianProjectEffect method checkCondition.
// This is needed as checkInterveningIfClause can't access trigger event information
static boolean checkCondition(Permanent permanent, UUID controllerId, Game game) {
Player player = game.getPlayer(controllerId);
if (player == null) {
return false;
}
if (!permanent.getName().isEmpty()) {
FilterCard filterCard = new FilterCard();
filterCard.add(new NamePredicate(permanent.getName()));
filterCard.add(new OwnerIdPredicate(controllerId));
if (player.getGraveyard().count(filterCard, game) > 0) {
return false;
}
}
FilterPermanent filterPermanent = new FilterCreaturePermanent();
filterPermanent.add(new NamePredicate(permanent.getName()));
filterPermanent.add(Predicates.not(new CardIdPredicate(permanent.getId())));
filterPermanent.add(new ControllerIdPredicate(controllerId));
if (!game.getBattlefield().getActivePermanents(filterPermanent, controllerId, game).isEmpty()) {
return false;
}
return true;
}
use of mage.filter.FilterPermanent in project mage by magefree.
the class InvokeJusticeEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
if (controller == null || player == null) {
return false;
}
FilterPermanent filter = new FilterPermanent("creatures and/or Vehicles controlled by " + player.getName());
filter.add(new ControllerIdPredicate(player.getId()));
if (!game.getBattlefield().contains(filter, source, game, 1)) {
return false;
}
TargetAmount target = new TargetPermanentAmount(4, filter);
target.setNotTarget(true);
controller.choose(outcome, target, source.getSourceId(), game);
for (UUID targetId : target.getTargets()) {
Permanent permanent = game.getPermanent(targetId);
if (permanent != null) {
permanent.addCounters(CounterType.P1P1.createInstance(target.getTargetAmount(targetId)), source, game);
}
}
return true;
}
use of mage.filter.FilterPermanent in project mage by magefree.
the class KappaTechWreckerEffect method apply.
@Override
public boolean apply(Game game, Ability source) {
FilterPermanent filter = new FilterArtifactOrEnchantmentPermanent("artifact or enchantment that player controls");
filter.add(new ControllerIdPredicate(getTargetPointer().getFirst(game, source)));
ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ExileTargetEffect(), false);
ability.addTarget(new TargetPermanent(filter));
return new DoWhenCostPaid(ability, new RemoveCountersSourceCost(CounterType.DEATHTOUCH.createInstance()), "Remove a deathtouch counter?").apply(game, source);
}
use of mage.filter.FilterPermanent in project mage by magefree.
the class KarmicJusticeTriggeredAbility method checkTrigger.
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (event.getPlayerId().equals(controllerId) && game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId()))) {
MageObject mageObject = game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
if (!mageObject.isCreature(game)) {
this.getTargets().clear();
FilterPermanent filter = new FilterPermanent("target permanent that opponent controls");
filter.add(new ControllerIdPredicate(game.getControllerId(event.getSourceId())));
Target target = new TargetPermanent(filter);
this.getTargets().add(target);
return true;
}
}
return false;
}
Aggregations