forked from External/mage
* Fixed a problem that optional effects could produce IndexOutOfBoundsExceptions.
This commit is contained in:
parent
8e42660e33
commit
ca25cc4679
5 changed files with 19 additions and 12 deletions
|
|
@ -163,8 +163,9 @@ public abstract class StackObjImpl implements StackObject {
|
|||
for (UUID targetId : target.getTargets()) {
|
||||
String targetNames = getNamesOftargets(targetId, game);
|
||||
// change the target?
|
||||
Outcome outcome = mode.getEffects().isEmpty() ? Outcome.Detriment : mode.getEffects().get(0).getOutcome();
|
||||
if (targetNames != null
|
||||
&& (forceChange || targetController.chooseUse(mode.getEffects().get(0).getOutcome(), "Change this target: " + targetNames + "?", ability, game))) {
|
||||
&& (forceChange || targetController.chooseUse(outcome, "Change this target: " + targetNames + "?", ability, game))) {
|
||||
Set<UUID> possibleTargets = target.possibleTargets(this.getSourceId(), getControllerId(), game);
|
||||
// choose exactly one other target - already targeted objects are not counted
|
||||
if (forceChange && possibleTargets != null && possibleTargets.size() > 1) { // controller of spell must be used (e.g. TargetOpponent)
|
||||
|
|
@ -176,7 +177,7 @@ public abstract class StackObjImpl implements StackObject {
|
|||
iteration++;
|
||||
newTarget.clearChosen();
|
||||
|
||||
newTarget.chooseTarget(mode.getEffects().get(0).getOutcome(), getControllerId(), ability, game);
|
||||
newTarget.chooseTarget(outcome, getControllerId(), ability, game);
|
||||
// check target restriction
|
||||
if (newTarget.getFirstTarget() != null && filterNewTarget != null) {
|
||||
Permanent newTargetPermanent = game.getPermanent(newTarget.getFirstTarget());
|
||||
|
|
@ -203,7 +204,7 @@ public abstract class StackObjImpl implements StackObject {
|
|||
do {
|
||||
again = false;
|
||||
tempTarget.clearChosen();
|
||||
if (!tempTarget.chooseTarget(mode.getEffects().get(0).getOutcome(), getControllerId(), ability, game)) {
|
||||
if (!tempTarget.chooseTarget(outcome, getControllerId(), ability, game)) {
|
||||
if (targetController.chooseUse(Outcome.Benefit, "No target object selected. Reset to original target?", ability, game)) {
|
||||
// use previous target no target was selected
|
||||
newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false);
|
||||
|
|
@ -211,7 +212,8 @@ public abstract class StackObjImpl implements StackObject {
|
|||
again = true;
|
||||
}
|
||||
} else // if possible add the alternate Target - it may not be included in the old definition nor in the already selected targets of the new definition
|
||||
if (newTarget.getTargets().contains(tempTarget.getFirstTarget()) || target.getTargets().contains(tempTarget.getFirstTarget())) {
|
||||
{
|
||||
if (newTarget.getTargets().contains(tempTarget.getFirstTarget()) || target.getTargets().contains(tempTarget.getFirstTarget())) {
|
||||
if (targetController.isHuman()) {
|
||||
if (targetController.chooseUse(Outcome.Benefit, "This target was already selected from origin spell. Reset to original target?", ability, game)) {
|
||||
// use previous target no target was selected
|
||||
|
|
@ -240,6 +242,7 @@ public abstract class StackObjImpl implements StackObject {
|
|||
// valid target was selected, add it to the new target definition
|
||||
newTarget.addTarget(tempTarget.getFirstTarget(), target.getTargetAmount(targetId), ability, game, false);
|
||||
}
|
||||
}
|
||||
} while (again && targetController.canRespond());
|
||||
}
|
||||
} // keep the target
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue