[FIN] fix Stolen Uniform issues

This commit is contained in:
theelk801 2025-07-17 12:30:03 -04:00
parent 81750ae10f
commit cfbcf4f598

View file

@ -80,7 +80,7 @@ class StolenUniformAttachEffect extends OneShotEffect {
.map(game::getPermanent) .map(game::getPermanent)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
return permanents.size() >= 2 && permanents.get(1).addAttachment(permanents.get(0).getId(), source, game); return permanents.size() >= 2 && permanents.get(0).addAttachment(permanents.get(1).getId(), source, game);
} }
} }
@ -116,16 +116,19 @@ class StolenUniformTriggerEffect extends OneShotEffect {
class StolenUniformTriggeredAbility extends DelayedTriggeredAbility { class StolenUniformTriggeredAbility extends DelayedTriggeredAbility {
private final MageObjectReference mor; private final MageObjectReference mor;
private final int turnNum;
StolenUniformTriggeredAbility(Permanent permanent, Game game) { StolenUniformTriggeredAbility(Permanent permanent, Game game) {
super(new StolenUniformUnattachEffect(permanent, game), Duration.EndOfTurn, true, false); super(new StolenUniformUnattachEffect(permanent, game), Duration.Custom, false, false);
setTriggerPhrase("When you lose control of that Equipment this turn, "); setTriggerPhrase("When you lose control of that Equipment this turn, ");
this.mor = new MageObjectReference(permanent, game); this.mor = new MageObjectReference(permanent, game);
this.turnNum = game.getTurnNum();
} }
private StolenUniformTriggeredAbility(final StolenUniformTriggeredAbility ability) { private StolenUniformTriggeredAbility(final StolenUniformTriggeredAbility ability) {
super(ability); super(ability);
this.mor = ability.mor; this.mor = ability.mor;
this.turnNum = ability.turnNum;
} }
@Override @Override
@ -140,6 +143,11 @@ class StolenUniformTriggeredAbility extends DelayedTriggeredAbility {
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
// We can't use end of turn duration as losing control happens after the trigger has gone away, so we need this workaround
if (game.getTurnNum() > this.turnNum) {
this.setDuration(Duration.EndOfTurn);
return false;
}
return isControlledBy(event.getPlayerId()) return isControlledBy(event.getPlayerId())
&& mor.zoneCounterIsCurrent(game) && mor.zoneCounterIsCurrent(game)
&& event.getTargetId().equals(mor.getSourceId()); && event.getTargetId().equals(mor.getSourceId());