Migrated Site cards in set 3 to hjson

This commit is contained in:
MarcinSc
2024-04-11 15:49:42 +07:00
parent 53a06d7cd4
commit db617e74bd
10 changed files with 114 additions and 251 deletions

View File

@@ -1,61 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.common.SitesBlock;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.Assignment;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 3
* Type: Site
* Site: 6
* Game Text: Forest. Sanctuary. While the fellowship is at Caras Galadhon, no more than one minion may be assigned
* to each skirmish.
*/
public class Card3_115 extends AbstractSite {
public Card3_115() {
super("Caras Galadhon", SitesBlock.FELLOWSHIP, 6, 3, Direction.LEFT);
addKeyword(Keyword.FOREST);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new AbstractModifier(self, "No more than one minion may be assigned to each skirmish", null, new LocationCondition(Filters.name(getTitle())), ModifierEffect.ASSIGNMENT_MODIFIER) {
@Override
public boolean isValidAssignments(LotroGame game, Side side, Map<PhysicalCard, Set<PhysicalCard>> assignments) {
for (Map.Entry<PhysicalCard, Set<PhysicalCard>> minionsAssignedToCharacter : assignments.entrySet()) {
PhysicalCard fp = minionsAssignedToCharacter.getKey();
Set<PhysicalCard> minions = minionsAssignedToCharacter.getValue();
List<Assignment> alreadyAssigned = game.getGameState().getAssignments();
if (countMinionsCurrentlyAssignedToFPChar(alreadyAssigned, fp) + minions.size() > 1)
return false;
}
return true;
}
private int countMinionsCurrentlyAssignedToFPChar(List<Assignment> assignments, PhysicalCard fp) {
for (Assignment assignment : assignments) {
if (assignment.getFellowshipCharacter() == fp)
return assignment.getShadowCharacters().size();
}
return 0;
}
});
}
}

View File

@@ -1,37 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.AddBurdenEffect;
import com.gempukku.lotro.common.SitesBlock;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 2
* Type: Site
* Site: 4
* Game Text: When the fellowship moves to Eregion Hills, add a burden.
*/
public class Card3_116 extends AbstractSite {
public Card3_116() {
super("Eregion Hills", SitesBlock.FELLOWSHIP, 4, 2, Direction.RIGHT);
}
@Override
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.movesTo(game, effectResult, self)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new AddBurdenEffect(game.getGameState().getCurrentPlayerId(), self, 1));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,33 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.SitesBlock;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsModifier;
import java.util.Collections;
import java.util.List;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 8
* Type: Site
* Site: 8
* Game Text: River. Maneuver events may not be played.
*/
public class Card3_117 extends AbstractSite {
public Card3_117() {
super("Gates of Argonath", SitesBlock.FELLOWSHIP, 8, 8, Direction.RIGHT);
addKeyword(Keyword.RIVER);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new PlayersCantPlayPhaseEventsModifier(self, Phase.MANEUVER));
}
}

View File

@@ -1,34 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.SitesBlock;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier;
import com.gempukku.lotro.logic.modifiers.condition.LocationCondition;
import java.util.Collections;
import java.util.List;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 6
* Type: Site
* Site: 7
* Game Text: River. While the fellowship is at The Great River, cards may not be played from draw decks or discard piles.
*/
public class Card3_118 extends AbstractSite {
public Card3_118() {
super("The Great River", SitesBlock.FELLOWSHIP, 7, 6, Direction.RIGHT);
addKeyword(Keyword.RIVER);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new SpecialFlagModifier(self, new LocationCondition(self), ModifierFlag.CANT_PLAY_FROM_DISCARD_OR_DECK));
}
}

View File

@@ -1,43 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.timing.PlayConditions;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.effects.RemoveBurdenEffect;
import com.gempukku.lotro.common.SitesBlock;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 0
* Type: Site
* Site: 3
* Game Text: Sanctuary. When the fellowship moves to House of Elrond, the Free Peoples player may spot 2 Elves
* to remove a burden.
*/
public class Card3_119 extends AbstractSite {
public Card3_119() {
super("House of Elrond", SitesBlock.FELLOWSHIP, 3, 0, Direction.RIGHT);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.movesTo(game, effectResult, self)
&& playerId.equals(game.getGameState().getCurrentPlayerId())
&& PlayConditions.canSpot(game, 2, Race.ELF)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new RemoveBurdenEffect(playerId, self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,43 +0,0 @@
package com.gempukku.lotro.cards.set3.site;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.cardtype.AbstractSite;
import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Realms of Elf-lords
* Twilight Cost: 9
* Type: Site
* Site: 9
* Game Text: Maneuver: Spot 4 companions and exert your [ISENGARD] Orc to make the Free Peoples player wound
* a companion.
*/
public class Card3_120 extends AbstractSite {
public Card3_120() {
super("Wastes of Emyn Muil", SitesBlock.FELLOWSHIP, 9, 9, Direction.LEFT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseSiteDuringPhase(game, Phase.MANEUVER, self)
&& PlayConditions.canSpot(game, 4, CardType.COMPANION)
&& PlayConditions.canExert(self, game, Filters.owner(playerId), Culture.ISENGARD, Race.ORC)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.owner(playerId), Culture.ISENGARD, Race.ORC));
action.appendEffect(
new ChooseAndWoundCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -0,0 +1,26 @@
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.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier;
import org.json.simple.JSONObject;
public class CantPlayCardsFromDeckOrDiscardPile implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "requires");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new SpecialFlagModifier(actionContext.getSource(),
new RequirementCondition(requirements, actionContext), ModifierFlag.CANT_PLAY_FROM_DISCARD_OR_DECK);
}
};
}
}

View File

@@ -0,0 +1,31 @@
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.common.Phase;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsModifier;
import org.json.simple.JSONObject;
public class CantPlayPhaseEvents implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "phase", "requires");
final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase");
if (phase == null)
throw new InvalidCardDefinitionException("Has to have a phase defined");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return new ModifierSource() {
@Override
public Modifier getModifier(ActionContext actionContext) {
return new PlayersCantPlayPhaseEventsModifier(actionContext.getSource(),
new RequirementCondition(requirements, actionContext), phase);
}
};
}
}

View File

@@ -37,6 +37,8 @@ public class ModifierSourceFactory {
modifierProducers.put("cantheal", new CantHeal());
modifierProducers.put("cantlookorrevealhand", new CantLookOrRevealHand());
modifierProducers.put("cantplaycards", new CantPlayCards());
modifierProducers.put("cantplaycardsfromdeckordiscardpile", new CantPlayCardsFromDeckOrDiscardPile());
modifierProducers.put("cantplayphaseevents", new CantPlayPhaseEvents());
modifierProducers.put("cantplayphaseeventsorphasespecialabilities", new CantPlayPhaseEventsOrPhaseSpecialAbilities());
modifierProducers.put("cantplayphasespecialabilities", new CantPlayPhaseSpecialAbilities());
modifierProducers.put("cantpreventwounds", new CantPreventWounds());
@@ -63,6 +65,7 @@ public class ModifierSourceFactory {
modifierProducers.put("modifysanctuaryheal", new ModifySanctuaryHeal());
modifierProducers.put("modifysitenumber", new ModifySiteNumber());
modifierProducers.put("modifystrength", new ModifyStrength());
modifierProducers.put("nomorethanoneminionmaybeassignedtoeachskirmish", new NoMorethanOneMinionMayBeAssignedToEachSkirmish());
modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard());
modifierProducers.put("removekeyword", new RemoveKeyword());
modifierProducers.put("ringtextisinactive", new RingTextIsInactive());

View File

@@ -0,0 +1,54 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.ModifierSource;
import com.gempukku.lotro.cards.build.Requirement;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.Assignment;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import org.json.simple.JSONObject;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class NoMorethanOneMinionMayBeAssignedToEachSkirmish implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "requires");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return (actionContext) -> {
RequirementCondition requirementCondition = new RequirementCondition(requirements, actionContext);
return new AbstractModifier(actionContext.getSource(), "No more than one minion may be assigned to each skirmish", null, requirementCondition, ModifierEffect.ASSIGNMENT_MODIFIER) {
@Override
public boolean isValidAssignments(LotroGame game, Side side, Map<PhysicalCard, Set<PhysicalCard>> assignments) {
for (Map.Entry<PhysicalCard, Set<PhysicalCard>> minionsAssignedToCharacter : assignments.entrySet()) {
PhysicalCard fp = minionsAssignedToCharacter.getKey();
Set<PhysicalCard> minions = minionsAssignedToCharacter.getValue();
List<Assignment> alreadyAssigned = game.getGameState().getAssignments();
if (countMinionsCurrentlyAssignedToFPChar(alreadyAssigned, fp) + minions.size() > 1)
return false;
}
return true;
}
private int countMinionsCurrentlyAssignedToFPChar(List<Assignment> assignments, PhysicalCard fp) {
for (Assignment assignment : assignments) {
if (assignment.getFellowshipCharacter() == fp)
return assignment.getShadowCharacters().size();
}
return 0;
}
};
};
}
}