@Override public void init(Game game) { super.init(game); // because target can already be gone from battlefield if triggered ability resolves, we need to hold an own object reference targetObject = new MageObjectReference(getTargets().getFirstTarget(), game); if (targetObject != null) { for (Effect effect : this.getEffects()) { effect.setValue("sourceId", targetObject.getSourceId()); } this.getTargets().clear(); } }
@Override public boolean apply(Game game, Ability source) { DelayedTriggeredAbility delayedAbility = ability.copy(); if (this.copyTargets) { if (source.getTargets().isEmpty()) { for (Effect effect : delayedAbility.getEffects()) { effect.setTargetPointer(targetPointer); } } else { delayedAbility.getTargets().addAll(source.getTargets()); for (Effect effect : delayedAbility.getEffects()) { effect.getTargetPointer().init(game, source); } } } if (initAbility) { delayedAbility.init(game); } game.addDelayedTriggeredAbility(delayedAbility, source); return true; }