Fix #10655 (getPermanentEntering for COUNTERS_ADDED trigger/watcher)

This commit is contained in:
xenohedron 2023-07-22 19:39:55 -04:00
parent 3886075dac
commit 34c805c4b8
5 changed files with 24 additions and 8 deletions

View file

@ -72,6 +72,6 @@ class AxgardArtisanTriggeredAbility extends TriggeredAbilityImpl {
return permanent != null
&& this.getSourceId().equals(event.getTargetId())
&& event.getData().equals(CounterType.P1P1.getName())
&& BoostCountersAddedFirstTimeWatcher.checkEvent(event, permanent, game);
&& BoostCountersAddedFirstTimeWatcher.checkEvent(event, permanent, game, 0);
}
}

View file

@ -76,12 +76,17 @@ class BotanicalBrawlerTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent permanent = game.getPermanent(event.getTargetId());
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
int offset = 0;
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
offset++;
}
return permanent != null
&& !getSourceId().equals(event.getTargetId())
&& isControlledBy(permanent.getControllerId())
&& event.getData().equals(CounterType.P1P1.getName())
&& BoostCountersAddedFirstTimeWatcher.checkEvent(event, permanent, game);
&& BoostCountersAddedFirstTimeWatcher.checkEvent(event, permanent, game, offset);
}
@Override

View file

@ -70,7 +70,10 @@ class CloakedCadetTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent permanent = game.getPermanent(event.getTargetId());
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
}
return permanent != null
&& isControlledBy(permanent.getControllerId())
&& permanent.hasSubtype(SubType.HUMAN, game)

View file

@ -81,7 +81,10 @@ class ShalaiAndHallarTriggeredAbility extends TriggeredAbilityImpl {
|| event.getAmount() < 1) {
return false;
}
Permanent permanent = game.getPermanent(event.getTargetId());
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
}
if (permanent == null
|| !permanent.isControlledBy(this.getControllerId())
|| !permanent.isCreature(game)) {

View file

@ -29,8 +29,13 @@ public class BoostCountersAddedFirstTimeWatcher extends Watcher {
return;
}
Permanent permanent = game.getPermanent(event.getTargetId());
int offset = 0;
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
offset++;
}
if (permanent != null && event.getData().equals(CounterType.P1P1.getName())) {
map.putIfAbsent(new MageObjectReference(permanent, game), event.getId());
map.putIfAbsent(new MageObjectReference(permanent, game, offset), event.getId());
}
}
@ -40,13 +45,13 @@ public class BoostCountersAddedFirstTimeWatcher extends Watcher {
map.clear();
}
public static boolean checkEvent(GameEvent event, Permanent permanent, Game game) {
public static boolean checkEvent(GameEvent event, Permanent permanent, Game game, int offset) {
return event
.getId()
.equals(game
.getState()
.getWatcher(BoostCountersAddedFirstTimeWatcher.class)
.map
.getOrDefault(new MageObjectReference(permanent, game), null));
.getOrDefault(new MageObjectReference(permanent, game, offset), null));
}
}