@Override public boolean apply(ObjectPlayer<Permanent> input, Game game) { Permanent potentialAttachment = input.getObject(); for (TargetAddress addr : TargetAddress.walk(aura)) { Target target = addr.getTarget(aura); Filter filter = target.getFilter(); return filter.match(potentialAttachment, game); } return false; } }
@Override public TargetAddress next() { TargetAddress ret = new TargetAddress(lastSpellAbilityIndex, lastMode, lastTargetIndex); calcNext(); return ret; }
public Target getTarget(Spell spell) { return getMode(spell).getTargets().get(targetIndex); }
Set<TargetAddress> targetsToBeChanged = new HashSet<>(); boolean madeACopy = false; for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); if (targetInstance.getNumberOfTargets() > 1) { throw new UnsupportedOperationException("Changing Target instances with multiple targets is unsupported"); Target sampleTarget = targetsToBeChanged.iterator().next().getTarget(copy); sampleTarget.setNotTarget(true); for (TargetAddress addr : targetsToBeChanged) { Target targetInstance = addr.getTarget(copy); legal &= targetInstance.canTarget(actingPlayer.getId(), objId, addr.getSpellAbility(copy), game); if (!legal) { break; targetInstance = addr.getTarget(spell); legal &= !targetInstance.getTargets().contains(objId); if (!legal) { if (legal) { for (TargetAddress addr : targetsToBeChanged) { Target targetInstance = addr.getTarget(copy); targetInstance.clearChosen(); targetInstance.add(objId, game);
public Mode getMode(Spell spell) { return getSpellAbility(spell).getModes().get(mode); }
public Mode getMode(Card card) { return getSpellAbility(card).getModes().get(mode); }
@Override public boolean apply(ObjectPlayer<Spell> input, Game game) { Spell spell = input.getObject(); if (spell == null) { return false; } UUID singleTarget = null; for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID targetId : targetInstance.getTargets()) { if (singleTarget == null) { singleTarget = targetId; } else if (!singleTarget.equals(targetId)) { return false; } } } return singleTarget != null; } }
public Target getTarget(Card card) { return getMode(card).getTargets().get(targetIndex); }
@Override public boolean apply(ObjectPlayer<Spell> input, Game game) { Spell spell = input.getObject(); if (spell == null) { return false; } UUID singleTarget = null; for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID targetId : targetInstance.getTargets()) { if (singleTarget == null) { singleTarget = targetId; } else if (!singleTarget.equals(targetId)) { return false; } } } return singleTarget != null; } }
@Override public boolean apply(ObjectPlayer<Spell> input, Game game) { Spell spell = input.getObject(); if (spell == null) { return false; } for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID targetId : targetInstance.getTargets()) { if (game.getPlayer(targetId) == null) { return false; } } } return true; } }
@Override public boolean checkInterveningIfClause(Game game) { Spell spell = (Spell) getEffects().get(0).getValue("triggeringSpell"); if (spell != null) { boolean allTargetsInkTreaderNephilim = true; boolean atLeastOneTargetsInkTreaderNephilim = false; for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID target : targetInstance.getTargets()) { allTargetsInkTreaderNephilim &= target.equals(sourceId); atLeastOneTargetsInkTreaderNephilim |= target.equals(sourceId); } } if (allTargetsInkTreaderNephilim && atLeastOneTargetsInkTreaderNephilim) { return true; } } return false; }
@Override public boolean apply(ObjectPlayer<Spell> input, Game game) { Spell spell = input.getObject(); if (spell == null) { return false; } for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID targetId : targetInstance.getTargets()) { if (game.getPermanent(targetId) == null && game.getPlayer(targetId) == null) { return false; } } } return true; } }
private boolean checkSpell(Spell spell, Game game) { if (spell != null && (spell.isInstant() || spell.isSorcery())) { boolean noTargets = true; for (TargetAddress addr : TargetAddress.walk(spell)) { noTargets = false; Target targetInstance = addr.getTarget(spell); for (UUID target : targetInstance.getTargets()) { Permanent permanent = game.getPermanent(target); if (permanent == null || !permanent.getId().equals(getSourceId())) { return false; } } } if (noTargets) { return false; } getEffects().get(0).setValue("triggeringSpell", spell); return true; } return false; }
private boolean checkSpell(Spell spell, Game game) { if (spell != null && (spell.isInstant() || spell.isSorcery())) { UUID targetGolem = null; for (TargetAddress addr : TargetAddress.walk(spell)) { Target targetInstance = addr.getTarget(spell); for (UUID target : targetInstance.getTargets()) { Permanent permanent = game.getPermanent(target); if (permanent == null || !permanent.hasSubtype(SubType.GOLEM, game)) { return false; } if (targetGolem == null) { targetGolem = target; } else // If a spell has multiple targets, but it's targeting the same Golem with all of them, Precursor Golem's last ability will trigger { if (!targetGolem.equals(target)) { return false; } } } } if (targetGolem != null) { getEffects().get(0).setValue("triggeringSpell", spell); getEffects().get(0).setValue("targetedGolem", targetGolem); return true; } } return false; }