Consolidating both CantUseSpecialAbilities and PlayerCantUseSpecialAbilities (formerly called CantPlaySpecialAbilities) under CantUseSpecialAbilities (but using the superior implementation of CantPlaySpecialAbilities).

This commit is contained in:
Christian 'ketura' McCarty
2024-05-29 19:59:36 -05:00
parent 2e04760c6f
commit 136bb0170c
10 changed files with 24 additions and 57 deletions

View File

@@ -326,7 +326,7 @@
{
type: modifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
requires: {
type: canSpot
filter: another,culture(isengard),orc

View File

@@ -61,7 +61,7 @@
{
type: addModifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
player: you
phase: archery
}
@@ -245,7 +245,7 @@
{
type: addModifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
player: you
phase: archery
}

View File

@@ -494,7 +494,7 @@
{
type: addModifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
player: free people
phase: archery
}

View File

@@ -262,7 +262,7 @@
{
type: modifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
phase: skirmish
}
}

View File

@@ -312,7 +312,7 @@
{
type: addModifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
phase: skirmish
filter: or(memory(assignedCompanion),memory(assignedMinion))
}

View File

@@ -291,7 +291,7 @@
{
type: modifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
requires: {
type: canSpot
filter: bearer,unique,companion

View File

@@ -514,7 +514,7 @@
effect: {
type: addModifier
modifier: {
type: PlayerCantUseSpecialAbilities
type: CantUseSpecialAbilities
filter: memory(spottedMinion)
}
until: regroup

View File

@@ -3,6 +3,9 @@ package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.logic.modifiers.CantUseSpecialAbilitiesModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.PlayerCantUseCardSpecialAbilitiesModifier;
import com.gempukku.lotro.logic.modifiers.PlayersCantUseCardSpecialAbilitiesModifier;
import org.json.simple.JSONObject;
@@ -10,24 +13,25 @@ import org.json.simple.JSONObject;
public class CantUseSpecialAbilities implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter", "requires", "player");
FieldUtils.validateAllowedFields(object, "player", "phase", "requires", "filter");
String player = FieldUtils.getString(object.get("player"), "player");
final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final String filter = FieldUtils.getString(object.get("filter"), "filter", "any");
final String player = FieldUtils.getString(object.get("player"), "player");
String filter = FieldUtils.getString(object.get("filter"), "filter", "any");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
PlayerSource playerSource = player != null ? PlayerResolver.resolvePlayer(player, environment) : null;
FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return actionContext -> {
if (playerSource != null) {
return new PlayerCantUseCardSpecialAbilitiesModifier(actionContext.getSource(),
playerSource.getPlayer(actionContext),
RequirementCondition.createCondition(requirements, actionContext), filterableSource.getFilterable(actionContext));
} else {
return new PlayersCantUseCardSpecialAbilitiesModifier(actionContext.getSource(),
RequirementCondition.createCondition(requirements, actionContext), filterableSource.getFilterable(actionContext));
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
String bannedPlayer = (playerSource != null) ? playerSource.getPlayer(actionContext) : null;
return new CantUseSpecialAbilitiesModifier(actionContext.getSource(),
RequirementCondition.createCondition(requirements, actionContext), phase, bannedPlayer, filterableSource.getFilterable(actionContext));
}
};
}

View File

@@ -57,7 +57,6 @@ public class ModifierSourceFactory {
modifierProducers.put("canttakewoundsfromlosingskirmish", new CantTakeWoundsFromLosingSkirmish());
modifierProducers.put("canttouchtokens", new AddModifierFlag(ModifierFlag.CANT_TOUCH_CULTURE_TOKENS));
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
modifierProducers.put("playercantusespecialabilities", new PlayerCantUseSpecialAbilities());
modifierProducers.put("disablegametext", new DisableGameText());
modifierProducers.put("doesnotaddtoarcherytotal", new DoesNotAddToArcheryTotal());
modifierProducers.put("extracosttoplay", new ExtraCostToPlay());

View File

@@ -1,36 +0,0 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.logic.modifiers.CantUseSpecialAbilitiesModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import org.json.simple.JSONObject;
public class PlayerCantUseSpecialAbilities implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "player", "phase", "requires", "filter");
String player = FieldUtils.getString(object.get("player"), "player");
final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
String filter = FieldUtils.getString(object.get("filter"), "filter", "any");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
PlayerSource playerSource = player != null ? PlayerResolver.resolvePlayer(player, environment) : null;
FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
String bannedPlayer = (playerSource != null) ? playerSource.getPlayer(actionContext) : null;
return new CantUseSpecialAbilitiesModifier(actionContext.getSource(),
RequirementCondition.createCondition(requirements, actionContext), phase, bannedPlayer, filterableSource.getFilterable(actionContext));
}
};
}
}