From 3a2c828fb86d714065b69f49adfdd2c6ce5a01c2 Mon Sep 17 00:00:00 2001 From: Achilles Date: Sun, 26 Mar 2017 18:25:45 -0500 Subject: [PATCH] - Fixed Rivals' Duel. --- Mage.Sets/src/mage/cards/r/RivalsDuel.java | 59 +++------------ ...TargetCreaturePermanentSameController.java | 9 ++- ...etCreaturePermanentWithDifferentTypes.java | 75 +++++++++++++++++++ 3 files changed, 93 insertions(+), 50 deletions(-) create mode 100644 Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java diff --git a/Mage.Sets/src/mage/cards/r/RivalsDuel.java b/Mage.Sets/src/mage/cards/r/RivalsDuel.java index 3f151591eb5..e86dd8686f0 100644 --- a/Mage.Sets/src/mage/cards/r/RivalsDuel.java +++ b/Mage.Sets/src/mage/cards/r/RivalsDuel.java @@ -34,10 +34,10 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; +import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.target.common.TargetCreaturePermanent; -import mage.util.CardUtil; +import mage.target.common.TargetCreaturePermanentWithDifferentTypes; /** * @@ -46,11 +46,12 @@ import mage.util.CardUtil; public class RivalsDuel extends CardImpl { public RivalsDuel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}"); // Choose two target creatures that share no creature types. Those creatures fight each other. - this.getSpellAbility().addTarget(new TargetCreaturePermanentWithDifferentTypes(2)); this.getSpellAbility().addEffect(new RivalsDuelFightTargetsEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanentWithDifferentTypes(2, 2, new FilterCreaturePermanent(), false)); + } public RivalsDuel(final RivalsDuel card) { @@ -63,40 +64,6 @@ public class RivalsDuel extends CardImpl { } } -class TargetCreaturePermanentWithDifferentTypes extends TargetCreaturePermanent { - - public TargetCreaturePermanentWithDifferentTypes(int numTargets) { - super(numTargets); - } - - public TargetCreaturePermanentWithDifferentTypes(final TargetCreaturePermanentWithDifferentTypes target) { - super(target); - } - - @Override - public TargetCreaturePermanentWithDifferentTypes copy() { - return new TargetCreaturePermanentWithDifferentTypes(this); - } - - @Override - public boolean canTarget(UUID id, Game game) { - if (super.canTarget(id, game)) { - Permanent creature = game.getPermanent(id); - if (creature != null) { - for (Object object : getTargets()) { - UUID targetId = (UUID) object; - Permanent selectedCreature = game.getPermanent(targetId); - if (CardUtil.shareSubtypes(creature, selectedCreature, game)) { - return false; - } - } - return true; - } - } - return false; - } -} - class RivalsDuelFightTargetsEffect extends OneShotEffect { public RivalsDuelFightTargetsEffect() { @@ -110,16 +77,14 @@ class RivalsDuelFightTargetsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - TargetCreaturePermanentWithDifferentTypes target = (TargetCreaturePermanentWithDifferentTypes) source.getTargets().get(0); - Permanent creature1 = game.getPermanent(target.getFirstTarget()); - Permanent creature2 = game.getPermanent(target.getTargets().get(1)); + Permanent creature1 = game.getPermanent(source.getFirstTarget()); + Permanent creature2 = game.getPermanent(source.getTargets().get(0).getTargets().get(1)); // 20110930 - 701.10 - if (creature1 != null && creature2 != null) { - if (creature1.isCreature() && creature2.isCreature()) { - creature1.damage(creature2.getPower().getValue(), creature2.getId(), game, false, true); - creature2.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); - return true; - } + if (creature1 != null + && creature2 != null) { + creature1.damage(creature2.getPower().getValue(), creature2.getId(), game, false, true); + creature2.damage(creature1.getPower().getValue(), creature1.getId(), game, false, true); + return true; } return false; } diff --git a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java index 45e62b9fea5..dc403740861 100644 --- a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java +++ b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java @@ -55,9 +55,12 @@ public class TargetCreaturePermanentSameController extends TargetCreaturePermane for (Object object : getTargets()) { UUID targetId = (UUID) object; Permanent targetPermanent = game.getPermanent(targetId); - if (targetPermanent == null - || !firstTargetPermanent.getControllerId().equals(targetPermanent.getOwnerId())) { - return false; + if (targetPermanent != null) { + if (firstTargetPermanent.getId() != targetPermanent.getId()) { + if (!firstTargetPermanent.getControllerId().equals(targetPermanent.getOwnerId())) { + return false; + } + } } } return true; diff --git a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java new file mode 100644 index 00000000000..a480187b9c2 --- /dev/null +++ b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.target.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.util.CardUtil; + +/** + * + * @author LevelX2 + */ +public class TargetCreaturePermanentWithDifferentTypes extends TargetCreaturePermanent { + + public TargetCreaturePermanentWithDifferentTypes(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { + super(minNumTargets, maxNumTargets, filter, notTarget); + } + + public TargetCreaturePermanentWithDifferentTypes(final TargetCreaturePermanentWithDifferentTypes target) { + super(target); + } + + @Override + public TargetCreaturePermanentWithDifferentTypes copy() { + return new TargetCreaturePermanentWithDifferentTypes(this); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (super.canTarget(controllerId, id, source, game)) { + Permanent creature = game.getPermanent(id); + if (creature != null) { + for (Object object : getTargets()) { + UUID targetId = (UUID) object; + Permanent selectedCreature = game.getPermanent(targetId); + if (creature.getId() != selectedCreature.getId()) { + if (CardUtil.shareSubtypes(creature, selectedCreature, game)) { + return false; + } + } + } + return true; + } + } + return false; + } +}