From 9f2cfc9e09e876fb0bdd3594dd3e2da2a3fe65ce Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Feb 2025 14:34:45 +0400 Subject: [PATCH] tests: added runtime check for OrTriggeredAbility (related to #12826, 13309) --- .../mage/abilities/meta/OrTriggeredAbility.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java b/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java index b3d2851fb42..2383d0bbf9a 100644 --- a/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/meta/OrTriggeredAbility.java @@ -42,7 +42,7 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl { //Remove useless data ability.getEffects().clear(); - for(Watcher watcher : ability.getWatchers()) { + for (Watcher watcher : ability.getWatchers()) { super.addWatcher(watcher); } @@ -51,6 +51,21 @@ public class OrTriggeredAbility extends TriggeredAbilityImpl { } } setTriggerPhrase(generateTriggerPhrase()); + + // runtime check: enters and sacrifice must use Zone.ALL, see https://github.com/magefree/mage/issues/12826 + boolean haveEnters = false; + boolean haveSacrifice = false; + for (Ability ability : abilities) { + if (ability.getRule().toLowerCase(Locale.ENGLISH).contains("enters")) { + haveEnters = true; + } + if (ability.getRule().toLowerCase(Locale.ENGLISH).contains("sacrifice")) { + haveSacrifice = true; + } + } + if (zone != Zone.ALL && haveEnters && haveSacrifice) { + throw new IllegalArgumentException("Wrong code usage: on enters and sacrifice OrTriggeredAbility must use Zone.ALL"); + } } public OrTriggeredAbility(OrTriggeredAbility ability) {