refactor: use copy() for targetPointer (#11751)

This commit is contained in:
xenohedron 2024-02-03 01:21:16 -05:00 committed by GitHub
parent da2466d87d
commit 6cf05a554c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
42 changed files with 52 additions and 55 deletions

View file

@ -85,7 +85,7 @@ class ApostlesBlessingEffect extends OneShotEffect {
protectionFilter.setMessage(choice.getChoice());
ProtectionAbility protectionAbility = new ProtectionAbility(protectionFilter);
ContinuousEffect effect = new GainAbilityTargetEffect(protectionAbility, Duration.EndOfTurn);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
return true;
}

View file

@ -80,7 +80,7 @@ class BrambleSovereignEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(permanent.getControllerId());
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}
return true;

View file

@ -71,10 +71,10 @@ class BringTheEndingCounterEffect extends OneShotEffect {
Player player = game.getPlayer(controllerId);
if (player != null && player.getCounters().getCount(CounterType.POISON) >= 3) {
hardCounterEffect.setTargetPointer(this.getTargetPointer());
hardCounterEffect.setTargetPointer(this.getTargetPointer().copy());
return hardCounterEffect.apply(game, source);
} else {
softCounterEffect.setTargetPointer(this.getTargetPointer());
softCounterEffect.setTargetPointer(this.getTargetPointer().copy());
return softCounterEffect.apply(game, source);
}

View file

@ -90,7 +90,7 @@ class ChampionsOfMinasTirithEffect extends OneShotEffect {
new TargetPlayerCantAttackYouEffect(Duration.EndOfCombat),
ManaUtil.createManaCost(CardsInTargetPlayerHandCount.instance, game, source, this),
"Pay to be able to attack " + player.getName() + " this combat?"
).setTargetPointer(targetPointer).apply(game, source);
).setTargetPointer(this.getTargetPointer().copy()).apply(game, source);
}
}
@ -113,4 +113,4 @@ class ChampionsOfMinasTirithDoIfCostPaid extends DoIfCostPaid {
protected Player getPayingPlayer(Game game, Ability source) {
return game.getPlayer(targetPointer.getFirst(game, source));
}
}
}

View file

@ -16,7 +16,6 @@ import mage.constants.SubType;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.ZombieToken;
import mage.players.Player;
@ -120,7 +119,7 @@ class CurseOfShallowEffect extends OneShotEffect {
Player attacker = game.getPlayer(this.getTargetPointer().getFirst(game, source));
if (attacker != null && attacker.chooseUse(outcome, "create a tapped 2/2 black Zombie creature token?", source, game)) {
Effect effect = new CreateTokenTargetEffect(new ZombieToken(), StaticValue.get(1), true, false);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
return effect.apply(game, source);
}
return false;

View file

@ -58,7 +58,7 @@ class DebtOfLoyaltyEffect extends RegenerateTargetEffect {
Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source));
if (super.replaceEvent(event, source, game) && permanent != null) {
GainControlTargetEffect effect = new GainControlTargetEffect(Duration.EndOfGame);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
return true;
}

View file

@ -82,7 +82,7 @@ class DecimatorBeetleEffect extends OneShotEffect {
if (targetCreature != null
&& targetCreature.getCounters(game).containsKey(CounterType.M1M1)) {
Effect effect = new RemoveCounterTargetEffect(CounterType.M1M1.createInstance(1));
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}
targetCreature = game.getPermanent(source.getTargets().get(1).getFirstTarget());

View file

@ -67,7 +67,7 @@ class DelayEffect extends OneShotEffect {
Spell spell = game.getStack().getSpell(getTargetPointer().getFirst(game, source));
if (controller != null && spell != null) {
Effect effect = new CounterTargetWithReplacementEffect(PutCards.EXILED);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
Card card = game.getCard(spell.getSourceId());
if (card != null && effect.apply(game, source) && game.getState().getZone(card.getId()) == Zone.EXILED) {
boolean hasSuspend = card.getAbilities(game).containsClass(SuspendAbility.class);

View file

@ -84,7 +84,7 @@ class DelinaWildMageEffect extends OneShotEffect {
effect.addAdditionalAbilities(new EndOfCombatTriggeredAbility(
new ExileSourceEffect(), false, "Exile this creature at end of combat."
));
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
while (true) {
int result = player.rollDice(outcome, source, game, 20);
effect.apply(game, source);

View file

@ -76,7 +76,7 @@ class DiabolicServitudeReturnCreatureEffect extends OneShotEffect {
Card cardInGraveyard = game.getCard(getTargetPointer().getFirst(game, source));
if (cardInGraveyard != null) {
Effect effect = new ReturnFromGraveyardToBattlefieldTargetEffect();
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
game.getState().setValue(source.getSourceId().toString() + "returnedCreature", new MageObjectReference(cardInGraveyard.getId(), game));

View file

@ -87,7 +87,7 @@ class DualNatureCreateTokenEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(permanent.getControllerId());
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
Object object = game.getState().getValue(CardUtil.getCardZoneString("_tokensCreated", source.getSourceId(), game));
Set<UUID> tokensCreated;

View file

@ -82,7 +82,7 @@ class ElvishBranchbenderEffect extends OneShotEffect {
new ElvishBranchbenderToken(xValue),
false, false, Duration.EndOfTurn)
.withDurationRuleAtStart(true);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
return false;
}
@ -104,4 +104,4 @@ class ElvishBranchbenderToken extends TokenImpl {
public ElvishBranchbenderToken copy() {
return new ElvishBranchbenderToken(this);
}
}
}

View file

@ -74,7 +74,7 @@ class FelhideSpiritbinderEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(null, CardType.ENCHANTMENT, true);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
if (effect.apply(game, source)) {
for (Permanent tokenPermanent : effect.getAddedPermanents()) {
ExileTargetEffect exileEffect = new ExileTargetEffect();

View file

@ -70,7 +70,7 @@ class FlameKinWarScourEffect extends OneShotEffect {
if (permanent != null) {
if (permanent.sacrifice(source, game)) {
Effect effect = new DamageTargetEffect(4).setText("{this} deals 4 damage to it");
effect.setTargetPointer(this.getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
return effect.apply(game, source);
}
}

View file

@ -69,7 +69,7 @@ class FlameshadowConjuringEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(null, null, true);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
if (effect.apply(game, source)) {
for (Permanent tokenPermanent : effect.getAddedPermanents()) {
ExileTargetEffect exileEffect = new ExileTargetEffect();

View file

@ -87,7 +87,7 @@ class GildedDrakeEffect extends OneShotEffect {
}
ContinuousEffect effect = new ExchangeControlTargetEffect(Duration.EndOfGame, "", true);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
return true;
}

View file

@ -61,7 +61,7 @@ class GravePerilEffect extends OneShotEffect {
if (permanent != null) {
if (permanent.sacrifice(source, game)) {
Effect effect = new DestroyTargetEffect();
effect.setTargetPointer(this.getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
return effect.apply(game, source);
}
}

View file

@ -19,7 +19,6 @@ import mage.constants.Duration;
import mage.constants.Outcome;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetAnyTarget;
@ -80,10 +79,10 @@ class GuardianAngelEffect extends OneShotEffect {
targetName = "player " + targetPlayer.getName();
}
ContinuousEffect effect = new PreventDamageToTargetEffect(Duration.EndOfTurn, source.getManaCostsToPay().getX(), false);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
SpecialAction specialAction = new GuardianAngelAction();
specialAction.getEffects().get(0).setTargetPointer(getTargetPointer());
specialAction.getEffects().get(0).setTargetPointer(this.getTargetPointer().copy());
specialAction.getEffects().get(0).setText("Prevent the next 1 damage that would be dealt to any target this turn (" + targetName + ").");
new CreateSpecialActionEffect(specialAction).apply(game, source);
// Create a hidden delayed triggered ability to remove the special action at end of turn.

View file

@ -70,7 +70,7 @@ class HollowSpecterEffect extends OneShotEffect {
if (targetPlayer != null && controller != null && controller.chooseUse(Outcome.Benefit, "Pay {X}?", source, game)) {
int payCount = ManaUtil.playerPaysXGenericMana(true, "Hollow Specter", controller, source, game);
if (payCount > 0) {
return new DiscardCardYouChooseTargetEffect(payCount).setTargetPointer(targetPointer).apply(game, source);
return new DiscardCardYouChooseTargetEffect(payCount).setTargetPointer(this.getTargetPointer().copy()).apply(game, source);
}
return true;
}

View file

@ -65,7 +65,7 @@ class ImpulsiveWagerEffect extends OneShotEffect {
List<Card> cards = cost.getCards();
if (cards.size() == 1 && cards.get(0).isLand(game)) {
Effect effect = new AddCountersTargetEffect(CounterType.BOUNTY.createInstance());
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
} else {
player.drawCards(2, source, game);

View file

@ -112,7 +112,7 @@ class InallaArchmageRitualistEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(null, null, true);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
if (effect.apply(game, source)) {
for (Permanent tokenPermanent : effect.getAddedPermanents()) {
ExileTargetEffect exileEffect = new ExileTargetEffect();

View file

@ -80,7 +80,7 @@ class InameLifeAspectEffect extends OneShotEffect {
if (controller != null && sourceObject != null) {
if (controller.chooseUse(outcome, "Exile " + sourceObject.getLogName() + " to return Spirit cards?", source, game)) {
Effect effect = new ReturnToHandTargetEffect();
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.getTargetPointer().init(game, source);
new ExileSourceEffect().apply(game, source);
return effect.apply(game, source);

View file

@ -110,7 +110,7 @@ class InvokePrejudiceEffect extends CounterUnlessPaysEffect {
Spell spell = game.getStack().getSpell(getTargetPointer().getFirst(game, source));
if (spell != null) {
CounterUnlessPaysEffect effect = new CounterUnlessPaysEffect(new GenericManaCost(spell.getManaValue()));
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
result = effect.apply(game, source);
}
return result;

View file

@ -80,7 +80,7 @@ class JarJarBinksEffect extends OneShotEffect {
Player opponent = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null && jarJar != null && opponent != null) {
ContinuousEffect effect = new JarJarBinksGainControlSourceEffect();
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
game.informPlayers(jarJar.getName() + " is now controlled by " + opponent.getLogName());
return true;

View file

@ -69,7 +69,7 @@ class LandsEdgeEffect extends OneShotEffect {
List<Card> cards = cost.getCards();
if (cards.size() == 1 && cards.get(0).isLand(game)) {
Effect effect = new DamageTargetEffect(2);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}

View file

@ -92,7 +92,7 @@ class LiesaForgottenArchangelReturnToHandEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Effect effect = new ReturnToHandTargetEffect();
effect.setText("return that card to its owner's hand");
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
DelayedTriggeredAbility ability = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
game.addDelayedTriggeredAbility(ability, source);
return true;

View file

@ -125,7 +125,7 @@ class MarchesaTheBlackRoseEffect extends OneShotEffect {
Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect();
effect.setText("return that card to the battlefield under your control at the beginning of the next end step");
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect);
delayedAbility.getEffects().get(0).setTargetPointer(getTargetPointer());
delayedAbility.getEffects().get(0).setTargetPointer(this.getTargetPointer().copy());
game.addDelayedTriggeredAbility(delayedAbility, source);
return true;
}

View file

@ -77,7 +77,7 @@ class MirrorMarchEffect extends OneShotEffect {
CreateTokenCopyTargetEffect effect
= new CreateTokenCopyTargetEffect(player.getId(), null, true, counter);
effect.setUseLKI(true);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
effect.exileTokensCreatedAtNextEndStep(game, source);
}

View file

@ -85,7 +85,7 @@ class MoggInfestationEffect extends OneShotEffect {
|| (game.getLastKnownInformation(uuid, Zone.BATTLEFIELD) instanceof PermanentToken
&& !game.getBattlefield().containsPermanent(uuid))) {
Effect effect = new CreateTokenTargetEffect(new GoblinToken(), 2);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}
}

View file

@ -78,7 +78,7 @@ class MoltenEchoesEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(null, null, true);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
if (effect.apply(game, source)) {
for (Permanent tokenPermanent : effect.getAddedPermanents()) {
ExileTargetEffect exileEffect = new ExileTargetEffect();

View file

@ -96,7 +96,7 @@ class NightshadeAssassinEffect extends OneShotEffect {
controller.revealCards(sourceObject.getIdName(), new CardsImpl(target.getTargets()), game);
int unboost = target.getTargets().size() * -1;
ContinuousEffect effect = new BoostTargetEffect(unboost, unboost, Duration.EndOfTurn);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
}
}

View file

@ -74,7 +74,7 @@ class ProfaneProcessionEffect extends OneShotEffect {
UUID exileId = CardUtil.getCardExileZoneId(game, source);
MageObject sourceObject = source.getSourceObject(game);
if (controller != null && exileId != null && sourceObject != null) {
new ExileTargetEffect(exileId, sourceObject.getIdName()).setTargetPointer(targetPointer).apply(game, source);
new ExileTargetEffect(exileId, sourceObject.getIdName()).setTargetPointer(this.getTargetPointer().copy()).apply(game, source);
game.getState().processAction(game);
ExileZone exileZone = game.getExile().getExileZone(exileId);
if (exileZone != null && exileZone.size() > 2) {

View file

@ -81,7 +81,7 @@ class ServantOfTheScaleEffect extends OneShotEffect {
int amount = sourcePermanent.getCounters(game).getCount(CounterType.P1P1);
if (amount > 0) {
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(amount));
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}
return true;

View file

@ -6,7 +6,6 @@ import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.costs.common.ExileSourceFromGraveCost;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DoIfCostPaid;
@ -102,10 +101,10 @@ class SinisterConciergeEffect extends OneShotEffect {
// Exile, put time counters, and give suspend for target
Effect exileTarget = new ExileTargetEffect();
exileTarget.setTargetPointer(this.getTargetPointer());
exileTarget.setTargetPointer(this.getTargetPointer().copy());
if (exileTarget.apply(game, source)) {
Effect addCountersTargetEffect = new AddCountersTargetEffect(CounterType.TIME.createInstance(3));
addCountersTargetEffect.setTargetPointer(this.getTargetPointer());
addCountersTargetEffect.setTargetPointer(this.getTargetPointer().copy());
boolean targetCardShouldGetSuspend = addCountersTargetEffect.apply(game, source);
if (targetCardShouldGetSuspend && !targetCreature.getAbilities(game).containsClass(SuspendAbility.class)) {
@ -123,4 +122,4 @@ class SinisterConciergeEffect extends OneShotEffect {
public SinisterConciergeEffect copy() {
return new SinisterConciergeEffect(this);
}
}
}

View file

@ -62,7 +62,7 @@ class TemptWithReflectionsEffect extends OneShotEffect {
Permanent permanent = getTargetPointer().getFirstTargetPermanentOrLKI(game, source);
if (permanent != null) {
Effect effect = new CreateTokenCopyTargetEffect();
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
Set<UUID> playersSaidYes = new HashSet<>();
@ -85,12 +85,12 @@ class TemptWithReflectionsEffect extends OneShotEffect {
for (UUID playerId : playersSaidYes) {
effect = new CreateTokenCopyTargetEffect(playerId);
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
// create a token for the source controller as well
effect = new CreateTokenCopyTargetEffect();
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
}
return true;

View file

@ -76,7 +76,7 @@ class VastwoodAnimistEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
int amount = new PermanentsOnBattlefieldCount(filterAllies).calculate(game, source, this);
ContinuousEffect effect = new BecomesCreatureTargetEffect(new VastwoodAnimistElementalToken(amount), false, true, Duration.EndOfTurn);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
game.addEffect(effect, source);
return false;
}

View file

@ -65,7 +65,7 @@ class VenarianGlimmerEffect extends OneShotEffect {
FilterCard filter = new FilterNonlandCard();
filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1));
Effect effect = new DiscardCardYouChooseTargetEffect(filter);
effect.setTargetPointer(targetPointer);
effect.setTargetPointer(this.getTargetPointer().copy());
effect.apply(game, source);
return true;
}

View file

@ -89,7 +89,7 @@ class XenagosGodOfRevelsEffect extends OneShotEffect {
int power = targetCreature.getPower().getValue();
game.addEffect(new BoostTargetEffect(
power, power, Duration.EndOfTurn
).setTargetPointer(this.getTargetPointer()), source);
).setTargetPointer(this.getTargetPointer().copy()), source);
return false;
}
}

View file

@ -49,7 +49,7 @@ public class CreateDelayedTriggeredAbilityEffect extends OneShotEffect {
DelayedTriggeredAbility delayedAbility = ability.copy();
if (this.copyTargets) {
if (source.getTargets().isEmpty()) {
delayedAbility.getEffects().setTargetPointer(targetPointer);
delayedAbility.getEffects().setTargetPointer(this.getTargetPointer().copy());
} else {
delayedAbility.getTargets().addAll(source.getTargets());
for (Effect effect : delayedAbility.getEffects()) {

View file

@ -60,7 +60,7 @@ public class DoWhenCostPaid extends OneShotEffect {
int bookmark = game.bookmarkState();
if (cost.pay(source, game, source, player.getId(), false)) {
if (ability.getTargets().isEmpty()) {
ability.getEffects().setTargetPointer(getTargetPointer());
ability.getEffects().setTargetPointer(this.getTargetPointer().copy());
}
game.fireReflexiveTriggeredAbility(ability, source);
player.resetStoredBookmark(game);

View file

@ -56,8 +56,8 @@ public class ExileUntilSourceLeavesEffect extends OneShotEffect {
}
ExileTargetEffect effect = new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName());
if (targetPointer != null) { // Grasping Giant
effect.setTargetPointer(targetPointer);
if (this.getTargetPointer() != null) { // Grasping Giant
effect.setTargetPointer(this.getTargetPointer().copy());
}
if (effect.apply(game, source)) {
game.addDelayedTriggeredAbility(new OnLeaveReturnExiledAbility(returnToZone), source);

View file

@ -72,7 +72,7 @@ class ScavengeEffect extends OneShotEffect {
int count = card.getPower().getValue();
if (count > 0) {
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(count));
effect.setTargetPointer(getTargetPointer());
effect.setTargetPointer(this.getTargetPointer().copy());
return effect.apply(game, source);
}
}
@ -84,4 +84,4 @@ class ScavengeEffect extends OneShotEffect {
public ScavengeEffect copy() {
return new ScavengeEffect(this);
}
}
}