From eea808d2d64be0ba322c5cad19ff15375c1af19e Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Thu, 28 May 2020 22:38:31 +0400 Subject: [PATCH] Ability refactor: source improves, deprecated code removed; --- .../src/main/java/mage/player/ai/ComputerPlayer.java | 6 +++--- Mage.Sets/src/mage/cards/a/AnimateDead.java | 4 +--- Mage.Sets/src/mage/cards/a/ArtisanOfForms.java | 2 +- Mage.Sets/src/mage/cards/b/BludgeonBrawl.java | 4 ++-- Mage.Sets/src/mage/cards/d/DacksDuplicate.java | 4 ++-- Mage.Sets/src/mage/cards/e/EvilTwin.java | 2 +- Mage.Sets/src/mage/cards/g/GargoyleSentinel.java | 2 +- Mage.Sets/src/mage/cards/g/GravityWell.java | 2 +- Mage.Sets/src/mage/cards/h/HisokasGuard.java | 2 +- Mage.Sets/src/mage/cards/p/ProteanThaumaturge.java | 2 +- Mage.Sets/src/mage/cards/s/SakashimaTheImpostor.java | 2 +- Mage.Sets/src/mage/cards/u/UncheckedGrowth.java | 2 +- Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java | 2 +- Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java | 2 +- .../mage/test/serverside/performance/SerializationTest.java | 2 +- .../mage/abilities/condition/common/BuybackCondition.java | 2 +- .../mage/abilities/condition/common/DashedCondition.java | 4 ++-- .../mage/abilities/condition/common/EvokedCondition.java | 2 +- .../java/mage/abilities/effects/common/CopyTokenEffect.java | 2 +- .../continuous/GainProtectionFromTypeTargetEffect.java | 2 +- .../main/java/mage/abilities/keyword/TransformAbility.java | 6 +++--- Mage/src/main/java/mage/game/GameImpl.java | 2 +- Mage/src/main/java/mage/game/permanent/Battlefield.java | 6 +++--- Mage/src/main/java/mage/game/permanent/PermanentCard.java | 2 +- Mage/src/main/java/mage/game/permanent/PermanentToken.java | 2 +- Mage/src/main/java/mage/players/PlayerImpl.java | 4 ++-- Mage/src/main/java/mage/util/functions/AbilityApplier.java | 2 +- 27 files changed, 37 insertions(+), 39 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 501f5603474..a71a8432fb5 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -1267,7 +1267,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { //play a land that will allow us to play an unplayable for (Mana mana : unplayable.keySet()) { for (Card card : lands) { - for (ActivatedManaAbilityImpl ability : card.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD)) { + for (ActivatedManaAbilityImpl ability : card.getAbilities(game).getActivatedManaAbilities(Zone.BATTLEFIELD)) { for (Mana netMana : ability.getNetMana(game)) { if (netMana.enough(mana)) { this.playLand(card, game, false); @@ -1281,7 +1281,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { //play a land that will get us closer to playing an unplayable for (Mana mana : unplayable.keySet()) { for (Card card : lands) { - for (ActivatedManaAbilityImpl ability : card.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD)) { + for (ActivatedManaAbilityImpl ability : card.getAbilities(game).getActivatedManaAbilities(Zone.BATTLEFIELD)) { for (Mana netMana : ability.getNetMana(game)) { if (mana.contains(netMana)) { this.playLand(card, game, false); @@ -1362,7 +1362,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } } for (Card card : graveyard.getCards(game)) { - for (ActivatedAbility ability : card.getAbilities().getActivatedAbilities(Zone.GRAVEYARD)) { + for (ActivatedAbility ability : card.getAbilities(game).getActivatedAbilities(Zone.GRAVEYARD)) { if (ability.canActivate(playerId, game).canActivate()) { ManaOptions abilityOptions = ability.getManaCosts().getOptions(); if (abilityOptions.isEmpty()) { diff --git a/Mage.Sets/src/mage/cards/a/AnimateDead.java b/Mage.Sets/src/mage/cards/a/AnimateDead.java index 0f833cc16e8..4a2f98ff4f7 100644 --- a/Mage.Sets/src/mage/cards/a/AnimateDead.java +++ b/Mage.Sets/src/mage/cards/a/AnimateDead.java @@ -225,9 +225,7 @@ class AnimateDeadChangeAbilityEffect extends ContinuousEffectImpl implements Sou abilityToRemove = ability; } } - if (abilityToRemove != null) { - permanent.getAbilities().remove(abilityToRemove); - } + permanent.removeAbility(abilityToRemove, source.getSourceId(), game); permanent.addAbility(newAbility, source.getSourceId(), game); return true; } diff --git a/Mage.Sets/src/mage/cards/a/ArtisanOfForms.java b/Mage.Sets/src/mage/cards/a/ArtisanOfForms.java index 1d8a35af4a3..a6848d62d51 100644 --- a/Mage.Sets/src/mage/cards/a/ArtisanOfForms.java +++ b/Mage.Sets/src/mage/cards/a/ArtisanOfForms.java @@ -63,7 +63,7 @@ class ArtisanOfFormsApplyToPermanent extends ApplyToPermanent { @Override public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) { - permanent.addAbility(ArtisanOfForms.createAbility(), game); + permanent.addAbility(ArtisanOfForms.createAbility(), source.getSourceId(), game); return true; } } diff --git a/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java b/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java index 5979a3dca01..71166b33c88 100644 --- a/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java +++ b/Mage.Sets/src/mage/cards/b/BludgeonBrawl.java @@ -122,8 +122,8 @@ class BludgeonBrawlGainAbilityEffect extends ContinuousEffectImpl { Permanent permanent = game.getPermanent(permanentId); if (permanent != null) { int convertedManaCost = permanent.getConvertedManaCost(); - permanent.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(convertedManaCost)), game); - permanent.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(convertedManaCost, 0)), game); + permanent.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(convertedManaCost)), source.getSourceId(), game); + permanent.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(convertedManaCost, 0)), source.getSourceId(), game); } } return true; diff --git a/Mage.Sets/src/mage/cards/d/DacksDuplicate.java b/Mage.Sets/src/mage/cards/d/DacksDuplicate.java index 646597f79c2..ef7b0408370 100644 --- a/Mage.Sets/src/mage/cards/d/DacksDuplicate.java +++ b/Mage.Sets/src/mage/cards/d/DacksDuplicate.java @@ -56,8 +56,8 @@ class DacksDuplicateApplyToPermanent extends ApplyToPermanent { * 29/05/2014 The ability of Dack's Duplicate doesn't target the * creature. */ - permanent.addAbility(new DethroneAbility(), game); - permanent.addAbility(HasteAbility.getInstance(), game); + permanent.addAbility(new DethroneAbility(), source.getSourceId(), game); + permanent.addAbility(HasteAbility.getInstance(), source.getSourceId(), game); return true; } diff --git a/Mage.Sets/src/mage/cards/e/EvilTwin.java b/Mage.Sets/src/mage/cards/e/EvilTwin.java index cda27f37ff9..f08e6c3402b 100644 --- a/Mage.Sets/src/mage/cards/e/EvilTwin.java +++ b/Mage.Sets/src/mage/cards/e/EvilTwin.java @@ -69,7 +69,7 @@ class EvilTwinApplyToPermanent extends ApplyToPermanent { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{U}{B}")); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); - permanent.addAbility(ability, game); + permanent.addAbility(ability, source.getSourceId(), game); return true; } diff --git a/Mage.Sets/src/mage/cards/g/GargoyleSentinel.java b/Mage.Sets/src/mage/cards/g/GargoyleSentinel.java index a3240598e95..5e7f34fc2c6 100644 --- a/Mage.Sets/src/mage/cards/g/GargoyleSentinel.java +++ b/Mage.Sets/src/mage/cards/g/GargoyleSentinel.java @@ -66,7 +66,7 @@ class GargoyleSentinelEffect extends ContinuousEffectImpl { switch (layer) { case AbilityAddingRemovingEffects_6: if (sublayer == SubLayer.NA) { - permanent.getAbilities().removeIf(entry -> entry.getId().equals(DefenderAbility.getInstance().getId())); + permanent.removeAbility(DefenderAbility.getInstance(), source.getSourceId(), game); permanent.getAbilities().add(FlyingAbility.getInstance()); } break; diff --git a/Mage.Sets/src/mage/cards/g/GravityWell.java b/Mage.Sets/src/mage/cards/g/GravityWell.java index 00f083c6d77..0efefec9103 100644 --- a/Mage.Sets/src/mage/cards/g/GravityWell.java +++ b/Mage.Sets/src/mage/cards/g/GravityWell.java @@ -100,7 +100,7 @@ class GravityWellEffect extends ContinuousEffectImpl { switch (layer) { case AbilityAddingRemovingEffects_6: if (sublayer == SubLayer.NA) { - permanent.getAbilities().removeIf(entry -> entry.getId().equals(FlyingAbility.getInstance().getId())); + permanent.removeAbility(FlyingAbility.getInstance(), source.getSourceId(), game); } break; } diff --git a/Mage.Sets/src/mage/cards/h/HisokasGuard.java b/Mage.Sets/src/mage/cards/h/HisokasGuard.java index 0d11887e2aa..886b4aea6d9 100644 --- a/Mage.Sets/src/mage/cards/h/HisokasGuard.java +++ b/Mage.Sets/src/mage/cards/h/HisokasGuard.java @@ -100,7 +100,7 @@ class HisokasGuardGainAbilityTargetEffect extends ContinuousEffectImpl { if (hisokasGuard != null && !hisokasGuard.getConnectedCards("HisokasGuard").isEmpty()) { Permanent guardedCreature = game.getPermanent(hisokasGuard.getConnectedCards("HisokasGuard").get(0)); if (guardedCreature != null && hisokasGuard.isTapped()) { - guardedCreature.addAbility(ability, game); + guardedCreature.addAbility(ability, source.getSourceId(), game); return true; } else { // if guard isn't tapped, the effect is no more valid diff --git a/Mage.Sets/src/mage/cards/p/ProteanThaumaturge.java b/Mage.Sets/src/mage/cards/p/ProteanThaumaturge.java index d8ecd23dac0..337bbe5b63f 100644 --- a/Mage.Sets/src/mage/cards/p/ProteanThaumaturge.java +++ b/Mage.Sets/src/mage/cards/p/ProteanThaumaturge.java @@ -72,7 +72,7 @@ class ProteanThaumaturgeApplyToPermanent extends ApplyToPermanent { @Override public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) { - permanent.addAbility(ProteanThaumaturge.createAbility(), game); + permanent.addAbility(ProteanThaumaturge.createAbility(), source.getSourceId(), game); return true; } } diff --git a/Mage.Sets/src/mage/cards/s/SakashimaTheImpostor.java b/Mage.Sets/src/mage/cards/s/SakashimaTheImpostor.java index 8fed936baa9..a0e23f4e3db 100644 --- a/Mage.Sets/src/mage/cards/s/SakashimaTheImpostor.java +++ b/Mage.Sets/src/mage/cards/s/SakashimaTheImpostor.java @@ -64,7 +64,7 @@ class SakashimaTheImpostorApplier extends ApplyToPermanent { permanent.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new ReturnToHandSourceEffect(true)), false), new ManaCostsImpl("{2}{U}{U}") - ), game); + ), source.getSourceId(), game); return true; } diff --git a/Mage.Sets/src/mage/cards/u/UncheckedGrowth.java b/Mage.Sets/src/mage/cards/u/UncheckedGrowth.java index bcac28c4e4b..6ca3ce9e352 100644 --- a/Mage.Sets/src/mage/cards/u/UncheckedGrowth.java +++ b/Mage.Sets/src/mage/cards/u/UncheckedGrowth.java @@ -63,7 +63,7 @@ public final class UncheckedGrowth extends CardImpl { for (UUID permanentId : targetPointer.getTargets(game, source)) { Permanent permanent = game.getPermanent(permanentId); if (permanent != null && permanent.hasSubtype(SubType.SPIRIT, game)) { - permanent.addAbility(TrampleAbility.getInstance(), game); + permanent.addAbility(TrampleAbility.getInstance(), source.getSourceId(), game); affectedTargets++; } } diff --git a/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java b/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java index d91b45043f2..fff1570c3fb 100644 --- a/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java +++ b/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java @@ -77,7 +77,7 @@ class UnstableShapeshifterEffect extends OneShotEffect { if (targetCreature != null && permanent != null) { Permanent blueprintPermanent = game.copyPermanent(Duration.Custom, targetCreature, permanent.getId(), source, new EmptyApplyToPermanent()); blueprintPermanent.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, - new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, ""), game); + new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, ""), source.getSourceId(), game); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java index 172a230eaa9..3cc609ca21e 100644 --- a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java +++ b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java @@ -86,7 +86,7 @@ class VraskaTheUnseenGainAbilityEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { - permanent.addAbility(ability, game); + permanent.addAbility(ability, source.getSourceId(), game); return true; } return false; diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/performance/SerializationTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/SerializationTest.java index 1720bdcf10b..ecb308c9a88 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/performance/SerializationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/SerializationTest.java @@ -40,7 +40,7 @@ public class SerializationTest extends CardTestPlayerBase { currentGame.addPermanent(permanent); // mark damage from infected ability - permanent.addAbility(InfectAbility.getInstance(), currentGame); + permanent.addAbility(InfectAbility.getInstance(), null, currentGame); permanent.markDamage(1, permanent.getId(), currentGame, false, false); // test compress (it uses default java serialization) diff --git a/Mage/src/main/java/mage/abilities/condition/common/BuybackCondition.java b/Mage/src/main/java/mage/abilities/condition/common/BuybackCondition.java index f61f4ead821..e565ea72f3d 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/BuybackCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/BuybackCondition.java @@ -17,7 +17,7 @@ public enum BuybackCondition implements Condition { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getSourceId()); if (card != null) { - return card.getAbilities().stream() + return card.getAbilities(game).stream() .filter(a -> a instanceof BuybackAbility) .anyMatch(a -> ((BuybackAbility) a).isBuybackActivated(game)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java index 72b75e44c8b..dd7c1e87901 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/DashedCondition.java @@ -19,9 +19,9 @@ public enum DashedCondition implements Condition { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getSourceId()); if (card != null) { - return card.getAbilities().stream() + return card.getAbilities(game).stream() .filter(a -> a instanceof DashAbility) - .anyMatch(d -> ((DashAbility)d).isActivated(source, game)); + .anyMatch(d -> ((DashAbility) d).isActivated(source, game)); } return false; diff --git a/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java b/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java index 82103a9f056..7733f475f7a 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/EvokedCondition.java @@ -22,7 +22,7 @@ public enum EvokedCondition implements Condition { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getSourceId()); if (card != null) { - return card.getAbilities().stream() + return card.getAbilities(game).stream() .filter(ab -> ab instanceof EvokeAbility) .anyMatch(evoke -> ((EvokeAbility) evoke).isActivated(source, game)); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java index 63b3018d234..d5de78070d7 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CopyTokenEffect.java @@ -41,7 +41,7 @@ public class CopyTokenEffect extends ContinuousEffectImpl { } permanent.getAbilities().clear(); for (Ability ability : token.getAbilities()) { - permanent.addAbility(ability, game); + permanent.addAbility(ability, source.getSourceId(), game); } permanent.getPower().setValue(token.getPower().getValue()); permanent.getToughness().setValue(token.getToughness().getValue()); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainProtectionFromTypeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainProtectionFromTypeTargetEffect.java index d2e00db5360..c620c0c4b37 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainProtectionFromTypeTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainProtectionFromTypeTargetEffect.java @@ -38,7 +38,7 @@ public class GainProtectionFromTypeTargetEffect extends GainAbilityTargetEffect public boolean apply(Game game, Ability source) { Permanent creature = game.getPermanent(source.getFirstTarget()); if (creature != null) { - creature.addAbility(ability, game); + creature.addAbility(ability, source.getSourceId(), game); return true; } return false; diff --git a/Mage/src/main/java/mage/abilities/keyword/TransformAbility.java b/Mage/src/main/java/mage/abilities/keyword/TransformAbility.java index fb90104d2d1..199560a1036 100644 --- a/Mage/src/main/java/mage/abilities/keyword/TransformAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/TransformAbility.java @@ -38,7 +38,7 @@ public class TransformAbility extends SimpleStaticAbility { return ""; } - public static void transform(Permanent permanent, Card sourceCard, Game game) { + public static void transform(Permanent permanent, Card sourceCard, Game game, Ability source) { if (sourceCard == null) { return; @@ -63,7 +63,7 @@ public class TransformAbility extends SimpleStaticAbility { permanent.setExpansionSetCode(sourceCard.getExpansionSetCode()); permanent.getAbilities().clear(); for (Ability ability : sourceCard.getAbilities()) { - permanent.addAbility(ability, game); + permanent.addAbility(ability, source == null ? null : source.getSourceId(), game, false); } permanent.getPower().modifyBaseValue(sourceCard.getPower().getValue()); permanent.getToughness().modifyBaseValue(sourceCard.getToughness().getValue()); @@ -105,7 +105,7 @@ class TransformEffect extends ContinuousEffectImpl { return false; } - TransformAbility.transform(permanent, card, game); + TransformAbility.transform(permanent, card, game, source); return true; diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index d0930ad3f05..612783bf0ac 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -1647,7 +1647,7 @@ public abstract class GameImpl implements Game, Serializable { } newBluePrint.assignNewId(); if (copyFromPermanent.isTransformed()) { - TransformAbility.transform(newBluePrint, newBluePrint.getSecondCardFace(), this); + TransformAbility.transform(newBluePrint, newBluePrint.getSecondCardFace(), this, source); } } if (applier != null) { diff --git a/Mage/src/main/java/mage/game/permanent/Battlefield.java b/Mage/src/main/java/mage/game/permanent/Battlefield.java index 6aacd3e45f8..d2e11c2c485 100644 --- a/Mage/src/main/java/mage/game/permanent/Battlefield.java +++ b/Mage/src/main/java/mage/game/permanent/Battlefield.java @@ -327,16 +327,16 @@ public class Battlefield implements Serializable { } } - public List getPhasedIn(UUID controllerId) { + public List getPhasedIn(Game game, UUID controllerId) { return field.values() .stream() - .filter(perm -> perm.getAbilities().containsKey(PhasingAbility.getInstance().getId()) + .filter(perm -> perm.hasAbility(PhasingAbility.getInstance(), game) && perm.isPhasedIn() && perm.isControlledBy(controllerId)) .collect(Collectors.toList()); } - public List getPhasedOut(UUID controllerId) { + public List getPhasedOut(Game game, UUID controllerId) { return field.values() .stream() .filter(perm -> !perm.isPhasedIn() && perm.isControlledBy(controllerId)) diff --git a/Mage/src/main/java/mage/game/permanent/PermanentCard.java b/Mage/src/main/java/mage/game/permanent/PermanentCard.java index bb387139e6e..f66b260eea6 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentCard.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentCard.java @@ -53,7 +53,7 @@ public class PermanentCard extends PermanentImpl { if (game.getState().getValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + getId()) != null) { game.getState().setValue(TransformAbility.VALUE_KEY_ENTER_TRANSFORMED + getId(), null); setTransformed(true); - TransformAbility.transform(this, getSecondCardFace(), game); + TransformAbility.transform(this, getSecondCardFace(), game, null); } } } diff --git a/Mage/src/main/java/mage/game/permanent/PermanentToken.java b/Mage/src/main/java/mage/game/permanent/PermanentToken.java index ba809c20565..48c4f4bae66 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentToken.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentToken.java @@ -59,7 +59,7 @@ public class PermanentToken extends PermanentImpl { } else { // first time -> create ContinuousEffects only once for (Ability ability : token.getAbilities()) { - this.addAbility(ability, game); + this.addAbility(ability, null, game); } } this.abilities.setControllerId(this.controllerId); diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index f79bc6d1651..5c8dd00ea54 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -1759,8 +1759,8 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public void phasing(Game game) { //20091005 - 502.1 - List phasedOut = game.getBattlefield().getPhasedOut(playerId); - for (Permanent permanent : game.getBattlefield().getPhasedIn(playerId)) { + List phasedOut = game.getBattlefield().getPhasedOut(game, playerId); + for (Permanent permanent : game.getBattlefield().getPhasedIn(game, playerId)) { // 502.15i When a permanent phases out, any local enchantments or Equipment // attached to that permanent phase out at the same time. This alternate way of // phasing out is known as phasing out "indirectly." An enchantment or Equipment diff --git a/Mage/src/main/java/mage/util/functions/AbilityApplier.java b/Mage/src/main/java/mage/util/functions/AbilityApplier.java index abbc57d3541..215ba18200c 100644 --- a/Mage/src/main/java/mage/util/functions/AbilityApplier.java +++ b/Mage/src/main/java/mage/util/functions/AbilityApplier.java @@ -21,7 +21,7 @@ public class AbilityApplier extends ApplyToPermanent { @Override public boolean apply(Game game, Permanent permanent, Ability source, UUID copyToObjectId) { - permanent.addAbility(ability, game); + permanent.addAbility(ability, source.getSourceId(), game); return true; }