* Fixed a bug that adding counters with Skyship Plunder or Maulfist Revolution did not trigger counter added events.

This commit is contained in:
LevelX2 2017-01-13 22:40:37 +01:00
parent 350436dee2
commit 17fbee2400
6 changed files with 58 additions and 81 deletions

View file

@ -54,17 +54,17 @@ import mage.watchers.Watcher;
public class FairgroundsTrumpeter extends CardImpl {
public FairgroundsTrumpeter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
this.subtype.add("Elephant");
this.power = new MageInt(2);
this.toughness = new MageInt(2);
// At the beginning of each end step, if a +1/+1 counter was placed on a permanent under your control this turn, put a +1/+1 counter on Fairgrounds Trumpeter.
this.addAbility(new ConditionalTriggeredAbility(new BeginningOfEndStepTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
TargetController.ANY, false), FairgroundsTrumpeterCondition.getInstance(),
"At the beginning of each end step, if a +1/+1 counter was placed on a permanent under your control this turn, put a +1/+1 counter on Fairgrounds Trumpeter."),
new FairgroundsTrumpeterWatcher());
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
TargetController.ANY, false), FairgroundsTrumpeterCondition.getInstance(),
"At the beginning of each end step, if a +1/+1 counter was placed on a permanent under your control this turn, put a +1/+1 counter on {this}."),
new FairgroundsTrumpeterWatcher());
}
public FairgroundsTrumpeter(final FairgroundsTrumpeter card) {
@ -87,7 +87,7 @@ class FairgroundsTrumpeterCondition implements Condition {
@Override
public boolean apply(Game game, Ability source) {
FairgroundsTrumpeterWatcher watcher = (FairgroundsTrumpeterWatcher) game.getState().getWatchers().get("FairgroundsTrumpeterWatcher");
FairgroundsTrumpeterWatcher watcher = (FairgroundsTrumpeterWatcher) game.getState().getWatchers().get(FairgroundsTrumpeterWatcher.class.getName());
return watcher != null && watcher.p1p1AddedToPermanent(source.getControllerId());
}
@ -103,7 +103,7 @@ class FairgroundsTrumpeterWatcher extends Watcher {
private final Set<UUID> players = new HashSet<>();
public FairgroundsTrumpeterWatcher() {
super("FairgroundsTrumpeterWatcher", WatcherScope.GAME);
super(FairgroundsTrumpeterWatcher.class.getName(), WatcherScope.GAME);
}
public FairgroundsTrumpeterWatcher(final FairgroundsTrumpeterWatcher watcher) {
@ -115,7 +115,7 @@ class FairgroundsTrumpeterWatcher extends Watcher {
public void watch(GameEvent event, Game game) {
if (event.getType() == GameEvent.EventType.COUNTER_ADDED && event.getData().equals(CounterType.P1P1.getName())) {
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (permanent != null && permanent.getCardType().contains(CardType.CREATURE)) {
if (permanent != null) {
players.add(permanent.getControllerId());
}
}
@ -135,4 +135,3 @@ class FairgroundsTrumpeterWatcher extends Watcher {
return new FairgroundsTrumpeterWatcher(this);
}
}

View file

@ -39,6 +39,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.counters.Counter;
import mage.counters.CounterType;
import mage.counters.Counters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@ -95,14 +97,31 @@ class MaulfistRevolutionaryEffect extends OneShotEffect {
if (controller != null) {
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null) {
for (Counter counter : player.getCounters().values()) {
counter.increase();
Counters counters = player.getCounters().copy();
for (Counter counter : counters.values()) {
CounterType counterType = CounterType.findByName(counter.getName());
Counter counterToAdd;
if (counterType != null) {
counterToAdd = counterType.createInstance();
} else {
counterToAdd = new Counter(counter.getName());
}
player.addCounters(counterToAdd, game);
}
return true;
}
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent != null) {
for (Counter counter : permanent.getCounters(game).values()) {
counter.increase();
Counters counters = permanent.getCounters(game).copy();
for (Counter counter : counters.values()) {
CounterType counterType = CounterType.findByName(counter.getName());
Counter counterToAdd;
if (counterType != null) {
counterToAdd = counterType.createInstance();
} else {
counterToAdd = new Counter(counter.getName());
}
permanent.addCounters(counterToAdd, source, game);
}
}
return true;

View file

@ -39,6 +39,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.counters.Counter;
import mage.counters.CounterType;
import mage.counters.Counters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@ -94,17 +96,35 @@ class SkyshipPlundererEffect extends OneShotEffect {
if (controller != null) {
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
if (player != null) {
for (Counter counter : player.getCounters().values()) {
counter.increase();
Counters counters = player.getCounters().copy();
for (Counter counter : counters.values()) {
CounterType counterType = CounterType.findByName(counter.getName());
Counter counterToAdd;
if (counterType != null) {
counterToAdd = counterType.createInstance();
} else {
counterToAdd = new Counter(counter.getName());
}
player.addCounters(counterToAdd, game);
}
return true;
}
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
if (permanent != null) {
for (Counter counter : permanent.getCounters(game).values()) {
counter.increase();
Counters counters = permanent.getCounters(game).copy();
for (Counter counter : counters.values()) {
CounterType counterType = CounterType.findByName(counter.getName());
Counter counterToAdd;
if (counterType != null) {
counterToAdd = counterType.createInstance();
} else {
counterToAdd = new Counter(counter.getName());
}
permanent.addCounters(counterToAdd, source, game);
}
}
return true;
}
return false;
}