mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
StaticAbilityPanharmonicon: use LKI only for ChangeZone Trigger
This commit is contained in:
@@ -4,6 +4,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
@@ -171,6 +172,10 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else if (o instanceof String) {
|
||||
if (ArrayUtils.contains(valids, o)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -34,7 +34,6 @@ import forge.game.GameEntity;
|
||||
import forge.game.GameStage;
|
||||
import forge.game.IIdentifiable;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
@@ -46,7 +45,6 @@ import forge.game.phase.PhaseHandler;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
@@ -460,19 +458,6 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
|
||||
return false;
|
||||
}
|
||||
|
||||
public final boolean applyAbility(final String mode, final Trigger trigger, final Map<AbilityKey, Object> runParams) {
|
||||
// don't apply the ability if it hasn't got the right mode
|
||||
if (!getParam("Mode").equals(mode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mode.equals("Panharmonicon")) {
|
||||
return StaticAbilityPanharmonicon.applyPanharmoniconAbility(this, trigger, runParams);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public final Cost getAttackCost(final Card attacker, final GameEntity target) {
|
||||
if (this.isSuppressed() || !getParam("Mode").equals("CantAttackUnless") || !this.checkConditions()) {
|
||||
return null;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package forge.game.staticability;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardZoneTable;
|
||||
@@ -15,6 +17,26 @@ import java.util.Map;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
public class StaticAbilityPanharmonicon {
|
||||
static String MODE = "Panharmonicon";
|
||||
|
||||
public static int handlePanharmonicon(final Game game, final Trigger t, final Map<AbilityKey, Object> runParams) {
|
||||
int n = 0;
|
||||
|
||||
// Checks only the battlefield, as those effects only work from there
|
||||
for (final Card ca : t.getMode() == TriggerType.ChangesZone ? game.getLastStateBattlefield() : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
|
||||
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
||||
if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) {
|
||||
continue;
|
||||
}
|
||||
if (applyPanharmoniconAbility(stAb, t, runParams)) {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
public static boolean applyPanharmoniconAbility(final StaticAbility stAb, final Trigger trigger, final Map<AbilityKey, Object> runParams) {
|
||||
final Card card = stAb.getHostCard();
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ package forge.game.trigger;
|
||||
import java.util.*;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimaps;
|
||||
@@ -35,11 +34,10 @@ import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.effects.CharmEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.staticability.StaticAbility;
|
||||
import forge.game.staticability.StaticAbilityPanharmonicon;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.FileSection;
|
||||
@@ -358,7 +356,7 @@ public class TriggerHandler {
|
||||
|
||||
for (final Trigger t : triggers) {
|
||||
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
|
||||
int x = 1 + handlePanharmonicon(t, runParams);
|
||||
int x = 1 + StaticAbilityPanharmonicon.handlePanharmonicon(game, t, runParams);
|
||||
|
||||
for (int i = 0; i < x; ++i) {
|
||||
runSingleTrigger(t, runParams);
|
||||
@@ -622,21 +620,6 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
private int handlePanharmonicon(final Trigger t, final Map<AbilityKey, Object> runParams) {
|
||||
int n = 0;
|
||||
|
||||
// Checks only the battlefield, as those effects only work from there
|
||||
for (final Card ca : game.getLastStateBattlefield()) {
|
||||
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
||||
if (stAb.applyAbility("Panharmonicon", t, runParams) && stAb.checkConditions()) {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
public List<Trigger> getActiveTrigger(final TriggerType mode, final Map<AbilityKey, Object> runParams) {
|
||||
List<Trigger> trigger = Lists.newArrayList();
|
||||
for (final Trigger t : activeTriggers) {
|
||||
|
||||
Reference in New Issue
Block a user