mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Combine GoldenArgosyWatcher's function into CrewedVehicleWatcher to reduce duplicated code. Also refactor getCrewers to remove usage of deprecated MOR constructor.
This commit is contained in:
parent
cbec029622
commit
624cb3fc30
2 changed files with 18 additions and 49 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.MageObjectReference;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||||
|
|
@ -14,14 +13,12 @@ import mage.cards.Cards;
|
||||||
import mage.cards.CardsImpl;
|
import mage.cards.CardsImpl;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.targetpointer.FixedTargets;
|
import mage.target.targetpointer.FixedTargets;
|
||||||
import mage.watchers.Watcher;
|
import mage.watchers.common.CrewedVehicleWatcher;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
|
|
@ -37,7 +34,7 @@ public final class GoldenArgosy extends CardImpl {
|
||||||
this.toughness = new MageInt(6);
|
this.toughness = new MageInt(6);
|
||||||
|
|
||||||
// Whenever Golden Argosy attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step.
|
// Whenever Golden Argosy attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new GoldenArgosyEffect()), new GoldenArgosyWatcher());
|
this.addAbility(new AttacksTriggeredAbility(new GoldenArgosyEffect()), new CrewedVehicleWatcher());
|
||||||
|
|
||||||
// Crew 1
|
// Crew 1
|
||||||
this.addAbility(new CrewAbility(1));
|
this.addAbility(new CrewAbility(1));
|
||||||
|
|
@ -73,10 +70,11 @@ class GoldenArgosyEffect extends OneShotEffect {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Player player = game.getPlayer(source.getControllerId());
|
Player player = game.getPlayer(source.getControllerId());
|
||||||
if (player == null) {
|
Permanent vehicle = game.getPermanent(source.getSourceId());
|
||||||
|
if (player == null || vehicle == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Cards cards = new CardsImpl(GoldenArgosyWatcher.getCrewers(source, game));
|
Cards cards = new CardsImpl(CrewedVehicleWatcher.getCrewers(vehicle, game));
|
||||||
if (cards.isEmpty()) {
|
if (cards.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -90,45 +88,3 @@ class GoldenArgosyEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GoldenArgosyWatcher extends Watcher {
|
|
||||||
|
|
||||||
private final Map<MageObjectReference, Set<MageObjectReference>> crewMap = new HashMap<>();
|
|
||||||
|
|
||||||
GoldenArgosyWatcher() {
|
|
||||||
super(WatcherScope.GAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void watch(GameEvent event, Game game) {
|
|
||||||
if (event.getType() != GameEvent.EventType.CREWED_VEHICLE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Permanent vehicle = game.getPermanent(event.getSourceId());
|
|
||||||
Permanent crewer = game.getPermanent(event.getTargetId());
|
|
||||||
if (vehicle == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
crewMap.computeIfAbsent(
|
|
||||||
new MageObjectReference(vehicle, game), x -> new HashSet<>()
|
|
||||||
).add(new MageObjectReference(crewer, game));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reset() {
|
|
||||||
super.reset();
|
|
||||||
crewMap.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
static Set<Permanent> getCrewers(Ability source, Game game) {
|
|
||||||
return game
|
|
||||||
.getState()
|
|
||||||
.getWatcher(GoldenArgosyWatcher.class)
|
|
||||||
.crewMap
|
|
||||||
.getOrDefault(new MageObjectReference(source), Collections.emptySet())
|
|
||||||
.stream()
|
|
||||||
.map(mor -> mor.getPermanent(game))
|
|
||||||
.filter(Objects::nonNull)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import mage.game.permanent.Permanent;
|
||||||
import mage.watchers.Watcher;
|
import mage.watchers.Watcher;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
|
|
@ -52,4 +53,16 @@ public class CrewedVehicleWatcher extends Watcher {
|
||||||
.getOrDefault(new MageObjectReference(vehicle, game), Collections.emptySet())
|
.getOrDefault(new MageObjectReference(vehicle, game), Collections.emptySet())
|
||||||
.size();
|
.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Set<Permanent> getCrewers(Permanent vehicle, Game game) {
|
||||||
|
return game
|
||||||
|
.getState()
|
||||||
|
.getWatcher(CrewedVehicleWatcher.class)
|
||||||
|
.crewMap
|
||||||
|
.getOrDefault(new MageObjectReference(vehicle, game), Collections.emptySet())
|
||||||
|
.stream()
|
||||||
|
.map(mor -> mor.getPermanent(game))
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue