mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 03:51:58 -08:00
commit
1ab3d24e7c
24 changed files with 1446 additions and 5 deletions
|
|
@ -47,11 +47,13 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
|||
|
||||
protected int amount;
|
||||
protected boolean putToGraveyard;
|
||||
protected boolean mayShuffleAfter; // for Visions
|
||||
|
||||
public LookLibraryTopCardTargetPlayerEffect(int amount) {
|
||||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
this.putToGraveyard = false;
|
||||
this.mayShuffleAfter = false;
|
||||
setText();
|
||||
}
|
||||
|
||||
|
|
@ -59,6 +61,15 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
|||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
this.putToGraveyard = putToGraveyard;
|
||||
this.mayShuffleAfter = false;
|
||||
setText();
|
||||
}
|
||||
|
||||
public LookLibraryTopCardTargetPlayerEffect(int amount, boolean putToGraveyard, boolean mayShuffleAfter) {
|
||||
super(Outcome.Benefit);
|
||||
this.amount = amount;
|
||||
this.putToGraveyard = putToGraveyard;
|
||||
this.mayShuffleAfter = mayShuffleAfter;
|
||||
setText();
|
||||
}
|
||||
|
||||
|
|
@ -70,6 +81,7 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
|||
super(effect);
|
||||
amount = effect.amount;
|
||||
putToGraveyard = effect.putToGraveyard;
|
||||
mayShuffleAfter = effect.mayShuffleAfter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -95,6 +107,11 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (mayShuffleAfter) {
|
||||
if (player.chooseUse(Outcome.Benefit, (player == targetPlayer ? "Shuffle your library?" : "Do you want the chosen player to shuffle his or her library?"), source, game)) {
|
||||
targetPlayer.shuffleLibrary(source, game);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -118,6 +135,9 @@ public class LookLibraryTopCardTargetPlayerEffect extends OneShotEffect {
|
|||
}
|
||||
sb.append(" into that player's graveyard");
|
||||
}
|
||||
if (mayShuffleAfter) {
|
||||
sb.append(". You may then have that player shuffle that library");
|
||||
}
|
||||
this.staticText = sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ import mage.constants.Duration;
|
|||
import mage.constants.Layer;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubLayer;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
||||
|
|
@ -50,6 +53,7 @@ public class ExchangeControlTargetEffect extends ContinuousEffectImpl {
|
|||
private String rule;
|
||||
private boolean withSource;
|
||||
private boolean withSecondTarget;
|
||||
private boolean destroyAttachedAuras;
|
||||
private Map<UUID, Integer> zoneChangeCounter = new HashMap<>();
|
||||
private Map<UUID, UUID> lockedControllers = new HashMap<>();
|
||||
|
||||
|
|
@ -62,9 +66,14 @@ public class ExchangeControlTargetEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
|
||||
public ExchangeControlTargetEffect(Duration duration, String rule, boolean withSource, boolean withSecondTarget) {
|
||||
this(duration, rule, withSource, withSecondTarget, false);
|
||||
}
|
||||
|
||||
public ExchangeControlTargetEffect(Duration duration, String rule, boolean withSource, boolean withSecondTarget, boolean destroyAttachedAuras) {
|
||||
super(duration, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl);
|
||||
this.withSource = withSource;
|
||||
this.withSecondTarget = withSecondTarget;
|
||||
this.destroyAttachedAuras = destroyAttachedAuras;
|
||||
this.rule = rule;
|
||||
}
|
||||
|
||||
|
|
@ -73,6 +82,7 @@ public class ExchangeControlTargetEffect extends ContinuousEffectImpl {
|
|||
this.rule = effect.rule;
|
||||
this.withSource = effect.withSource;
|
||||
this.withSecondTarget = effect.withSecondTarget;
|
||||
this.destroyAttachedAuras = effect.destroyAttachedAuras;
|
||||
this.lockedControllers = new HashMap<>(effect.lockedControllers);
|
||||
this.zoneChangeCounter = new HashMap<>(effect.zoneChangeCounter);
|
||||
}
|
||||
|
|
@ -141,6 +151,16 @@ public class ExchangeControlTargetEffect extends ContinuousEffectImpl {
|
|||
}
|
||||
permanent.changeControllerId(lockedControllers.get(permanent.getId()), game);
|
||||
permanent.getAbilities().setControllerId(lockedControllers.get(permanent.getId()));
|
||||
if (destroyAttachedAuras) {
|
||||
FilterPermanent filter = new FilterPermanent();
|
||||
filter.add(new SubtypePredicate(SubType.AURA));
|
||||
for (UUID attachmentId : new HashSet<>(permanent.getAttachments())) {
|
||||
Permanent attachment = game.getPermanent(attachmentId);
|
||||
if (attachment != null && filter.match(attachment, game)) {
|
||||
attachment.destroy(source.getSourceId(), game, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!toDelete.isEmpty()) {
|
||||
for (UUID uuid : toDelete) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue