mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Merge origin/master
This commit is contained in:
commit
23a0d97807
1 changed files with 59 additions and 28 deletions
|
@ -1,12 +1,12 @@
|
||||||
|
|
||||||
package mage.abilities.effects.common;
|
package mage.abilities.effects.common;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.SpellAbility;
|
import mage.abilities.SpellAbility;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.keyword.EnchantAbility;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
|
@ -20,8 +20,9 @@ import mage.target.TargetPermanent;
|
||||||
import mage.util.functions.ApplyToPermanent;
|
import mage.util.functions.ApplyToPermanent;
|
||||||
import mage.util.functions.EmptyApplyToPermanent;
|
import mage.util.functions.EmptyApplyToPermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author BetaSteward_at_googlemail.com
|
* @author BetaSteward_at_googlemail.com
|
||||||
*/
|
*/
|
||||||
public class CopyPermanentEffect extends OneShotEffect {
|
public class CopyPermanentEffect extends OneShotEffect {
|
||||||
|
@ -59,7 +60,9 @@ public class CopyPermanentEffect extends OneShotEffect {
|
||||||
super(effect);
|
super(effect);
|
||||||
this.filter = effect.filter.copy();
|
this.filter = effect.filter.copy();
|
||||||
this.applier = effect.applier;
|
this.applier = effect.applier;
|
||||||
this.bluePrintPermanent = effect.bluePrintPermanent;
|
if (effect.bluePrintPermanent != null) {
|
||||||
|
this.bluePrintPermanent = effect.bluePrintPermanent.copy();
|
||||||
|
}
|
||||||
this.useTargetOfAbility = effect.useTargetOfAbility;
|
this.useTargetOfAbility = effect.useTargetOfAbility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,42 +87,70 @@ public class CopyPermanentEffect extends OneShotEffect {
|
||||||
}
|
}
|
||||||
if (copyFromPermanent != null) {
|
if (copyFromPermanent != null) {
|
||||||
bluePrintPermanent = game.copyPermanent(copyFromPermanent, sourcePermanent.getId(), source, applier);
|
bluePrintPermanent = game.copyPermanent(copyFromPermanent, sourcePermanent.getId(), source, applier);
|
||||||
|
if (bluePrintPermanent == null) {
|
||||||
//if object is a copy of an aura, it needs to attach
|
return false;
|
||||||
if (bluePrintPermanent.hasSubtype(SubType.AURA, game)){
|
}
|
||||||
|
|
||||||
|
// if object is a copy of an aura, it needs to attach again for new target
|
||||||
|
if (bluePrintPermanent.hasSubtype(SubType.AURA, game)) {
|
||||||
//copied from mage.cards.c.CopyEnchantment.java
|
//copied from mage.cards.c.CopyEnchantment.java
|
||||||
Target target = bluePrintPermanent.getSpellAbility().getTargets().get(0);
|
|
||||||
|
// permanent can be attached (Estrid's Mask) or enchant (Utopia Sprawl)
|
||||||
|
// TODO: fix Animate Dead -- it's can't be copied (can't retarget)
|
||||||
Outcome auraOutcome = Outcome.BoostCreature;
|
Outcome auraOutcome = Outcome.BoostCreature;
|
||||||
|
Target auraTarget = null;
|
||||||
|
|
||||||
|
// attach - search effect in spell ability (example: cast Utopia Sprawl, cast Estrid's Invocation on it)
|
||||||
for (Ability ability : bluePrintPermanent.getAbilities()) {
|
for (Ability ability : bluePrintPermanent.getAbilities()) {
|
||||||
if (ability instanceof SpellAbility) {
|
if (ability instanceof SpellAbility) {
|
||||||
for (Effect effect : ability.getEffects()) {
|
for (Effect effect : ability.getEffects()) {
|
||||||
if (effect instanceof AttachEffect) {
|
if (effect instanceof AttachEffect) {
|
||||||
auraOutcome = effect.getOutcome();
|
if (bluePrintPermanent.getSpellAbility().getTargets().size() > 0) {
|
||||||
|
auraTarget = bluePrintPermanent.getSpellAbility().getTargets().get(0);
|
||||||
|
auraOutcome = effect.getOutcome();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if this is a copy of a copy, the copy's target has been
|
// enchant - search in all abilities (example: cast Estrid's Invocation on enchanted creature by Estrid, the Masked second ability, cast Estrid's Invocation on it)
|
||||||
*copied and needs to be cleared
|
if (auraTarget == null) {
|
||||||
*/
|
for (Ability ability : bluePrintPermanent.getAbilities()) {
|
||||||
{
|
if (ability instanceof EnchantAbility) {
|
||||||
UUID targetId = target.getFirstTarget();
|
if (ability.getTargets().size() > 0) { // Animate Dead don't have targets
|
||||||
if(targetId != null)
|
auraTarget = ability.getTargets().get(0);
|
||||||
target.remove(targetId);
|
for (Effect effect : ability.getEffects()) {
|
||||||
|
// first outcome
|
||||||
|
auraOutcome = effect.getOutcome();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target.setNotTarget(true);
|
/* if this is a copy of a copy, the copy's target has been
|
||||||
if (controller.choose(auraOutcome, target, source.getSourceId(), game)) {
|
* copied and needs to be cleared
|
||||||
UUID targetId = target.getFirstTarget();
|
*/
|
||||||
Permanent targetPermanent = game.getPermanent(targetId);
|
if (auraTarget != null) {
|
||||||
Player targetPlayer = game.getPlayer(targetId);
|
// clear selected target
|
||||||
if (targetPermanent != null) {
|
if (auraTarget.getFirstTarget() != null) {
|
||||||
targetPermanent.addAttachment(sourcePermanent.getId(), game);
|
auraTarget.remove(auraTarget.getFirstTarget());
|
||||||
} else if (targetPlayer != null) {
|
}
|
||||||
targetPlayer.addAttachment(sourcePermanent.getId(), game);
|
|
||||||
} else {
|
// select new target
|
||||||
return false;
|
auraTarget.setNotTarget(true);
|
||||||
|
if (controller.choose(auraOutcome, auraTarget, source.getSourceId(), game)) {
|
||||||
|
UUID targetId = auraTarget.getFirstTarget();
|
||||||
|
Permanent targetPermanent = game.getPermanent(targetId);
|
||||||
|
Player targetPlayer = game.getPlayer(targetId);
|
||||||
|
if (targetPermanent != null) {
|
||||||
|
targetPermanent.addAttachment(sourcePermanent.getId(), game);
|
||||||
|
} else if (targetPlayer != null) {
|
||||||
|
targetPlayer.addAttachment(sourcePermanent.getId(), game);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue