Fixed #12874. A code simplification is warranted if someone has the time. Fix is inline with the rest of it.

This commit is contained in:
Jeff Wadsworth 2024-09-19 14:35:30 -05:00
parent b40e7222b3
commit fb63fe0318

View file

@ -1,4 +1,3 @@
package mage.cards.b; package mage.cards.b;
import java.util.ArrayList; import java.util.ArrayList;
@ -100,24 +99,34 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect {
List<Permanent> fromBattlefield = new ArrayList<>(); List<Permanent> fromBattlefield = new ArrayList<>();
List<Card> fromHandGraveyard = new ArrayList<>(); List<Card> fromHandGraveyard = new ArrayList<>();
int countBattlefield = game.getBattlefield().getActivePermanents(filterAura, source.getControllerId(), source, game).size() - sourcePermanent.getAttachments().size(); int countBattlefield = (int) (game.getBattlefield().getActivePermanents(filterAura, source.getControllerId(), source, game).size()
- sourcePermanent.getAttachments().stream().map(game::getPermanent).filter(permanent -> permanent != null
&& permanent.hasSubtype(SubType.AURA, game)).count());
while (controller.canRespond() while (controller.canRespond()
&& countBattlefield > 0 && countBattlefield > 0
&& controller.chooseUse(Outcome.Benefit, "Attach an Aura from the battlefield?", source, game)) { && controller.chooseUse(Outcome.Benefit, "Attach an Aura from the battlefield?", source, game)) {
Target targetAura = new TargetPermanent(filterAura); Target targetAura = new TargetPermanent(filterAura);
targetAura.withNotTarget(true); targetAura.withNotTarget(true);
if (!controller.choose(Outcome.Benefit, targetAura, source, game)) { continue; } if (!controller.choose(Outcome.Benefit, targetAura, source, game)) {
continue;
}
Permanent aura = game.getPermanent(targetAura.getFirstTarget()); Permanent aura = game.getPermanent(targetAura.getFirstTarget());
if (aura == null) { continue; } if (aura == null) {
continue;
}
Target target = aura.getSpellAbility().getTargets().get(0); Target target = aura.getSpellAbility().getTargets().get(0);
if (target == null) { continue; } if (target == null) {
continue;
}
fromBattlefield.add(aura); fromBattlefield.add(aura);
filterAura.add(Predicates.not(new CardIdPredicate(aura.getId()))); filterAura.add(Predicates.not(new CardIdPredicate(aura.getId())));
countBattlefield = game.getBattlefield().getActivePermanents(filterAura, source.getControllerId(), source, game).size() - sourcePermanent.getAttachments().size(); countBattlefield = (int) (game.getBattlefield().getActivePermanents(filterAura, source.getControllerId(), source, game).size()
- sourcePermanent.getAttachments().stream().map(game::getPermanent).filter(permanent -> permanent != null
&& permanent.hasSubtype(SubType.AURA, game)).count());
} }
int countHand = controller.getHand().count(filterAuraCard, game); int countHand = controller.getHand().count(filterAuraCard, game);
@ -125,13 +134,19 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect {
&& countHand > 0 && countHand > 0
&& controller.chooseUse(Outcome.Benefit, "Attach an Aura from your hand?", source, game)) { && controller.chooseUse(Outcome.Benefit, "Attach an Aura from your hand?", source, game)) {
TargetCard targetAura = new TargetCard(Zone.HAND, filterAuraCard); TargetCard targetAura = new TargetCard(Zone.HAND, filterAuraCard);
if (!controller.choose(Outcome.Benefit, controller.getHand(), targetAura, source, game)) { continue; } if (!controller.choose(Outcome.Benefit, controller.getHand(), targetAura, source, game)) {
continue;
}
Card aura = game.getCard(targetAura.getFirstTarget()); Card aura = game.getCard(targetAura.getFirstTarget());
if (aura == null) { continue; } if (aura == null) {
continue;
}
Target target = aura.getSpellAbility().getTargets().get(0); Target target = aura.getSpellAbility().getTargets().get(0);
if (target == null) { continue; } if (target == null) {
continue;
}
fromHandGraveyard.add(aura); fromHandGraveyard.add(aura);
filterAuraCard.add(Predicates.not(new CardIdPredicate(aura.getId()))); filterAuraCard.add(Predicates.not(new CardIdPredicate(aura.getId())));
@ -143,13 +158,19 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect {
&& countGraveyard > 0 && countGraveyard > 0
&& controller.chooseUse(Outcome.Benefit, "Attach an Aura from your graveyard?", source, game)) { && controller.chooseUse(Outcome.Benefit, "Attach an Aura from your graveyard?", source, game)) {
TargetCard targetAura = new TargetCard(Zone.GRAVEYARD, filterAuraCard); TargetCard targetAura = new TargetCard(Zone.GRAVEYARD, filterAuraCard);
if (!controller.choose(Outcome.Benefit, controller.getGraveyard(), targetAura, source, game)) { continue; } if (!controller.choose(Outcome.Benefit, controller.getGraveyard(), targetAura, source, game)) {
continue;
}
Card aura = game.getCard(targetAura.getFirstTarget()); Card aura = game.getCard(targetAura.getFirstTarget());
if (aura == null) { continue; } if (aura == null) {
continue;
}
Target target = aura.getSpellAbility().getTargets().get(0); Target target = aura.getSpellAbility().getTargets().get(0);
if (target == null) { continue; } if (target == null) {
continue;
}
fromHandGraveyard.add(aura); fromHandGraveyard.add(aura);
filterAuraCard.add(Predicates.not(new CardIdPredicate(aura.getId()))); filterAuraCard.add(Predicates.not(new CardIdPredicate(aura.getId())));
@ -168,7 +189,9 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect {
// Move cards // Move cards
for (Card aura : fromHandGraveyard) { for (Card aura : fromHandGraveyard) {
if (aura == null) { continue; } if (aura == null) {
continue;
}
game.getState().setValue("attachTo:" + aura.getId(), sourcePermanent); game.getState().setValue("attachTo:" + aura.getId(), sourcePermanent);
controller.moveCards(aura, Zone.BATTLEFIELD, source, game); controller.moveCards(aura, Zone.BATTLEFIELD, source, game);