From 8e34d7dd746d1812049b70d70efb78dc2e97eaea Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 8 Mar 2022 21:26:58 +0100 Subject: [PATCH 1/2] Fix for Shorikai --- .../src/main/java/forge/deck/DeckSection.java | 13 ++++++------- .../forge/deck/CardRelationMatrixGenerator.java | 8 +------- .../java/forge/deck/CommanderDeckGenerator.java | 10 ++-------- forge-gui/src/main/java/forge/deck/DeckgenUtil.java | 11 ++--------- 4 files changed, 11 insertions(+), 31 deletions(-) diff --git a/forge-core/src/main/java/forge/deck/DeckSection.java b/forge-core/src/main/java/forge/deck/DeckSection.java index d3487da32ae..87dc3b7509e 100644 --- a/forge-core/src/main/java/forge/deck/DeckSection.java +++ b/forge-core/src/main/java/forge/deck/DeckSection.java @@ -67,8 +67,7 @@ public enum DeckSection { // NOTE: Same rules applies to both Deck and Side, despite "Conspiracy cards" are allowed // in the SideBoard (see Rule 313.2) // Those will be matched later, in case (see `Deck::validateDeferredSections`) - return (!t.isConspiracy() && !t.isDungeon() && !t.isPhenomenon() && !t.isPlane() && !t.isScheme() && - !t.isVanguard()); + return !t.isConspiracy() && !t.isDungeon() && !t.isPhenomenon() && !t.isPlane() && !t.isScheme() && !t.isVanguard(); } }; @@ -76,7 +75,7 @@ public enum DeckSection { @Override public Boolean apply(PaperCard card) { CardType t = card.getRules().getType(); - return (t.isPlaneswalker() || (t.isCreature() && t.isLegendary())); + return card.getRules().canBeCommander() || t.isPlaneswalker(); } }; @@ -84,7 +83,7 @@ public enum DeckSection { @Override public Boolean apply(PaperCard card) { CardType t = card.getRules().getType(); - return (t.isPlane() || t.isPhenomenon()); + return t.isPlane() || t.isPhenomenon(); } }; @@ -100,7 +99,7 @@ public enum DeckSection { @Override public Boolean apply(PaperCard card) { CardType t = card.getRules().getType(); - return (t.isScheme()); + return t.isScheme(); } }; @@ -108,7 +107,7 @@ public enum DeckSection { @Override public Boolean apply(PaperCard card) { CardType t = card.getRules().getType(); - return (t.isConspiracy()); + return t.isConspiracy(); } }; @@ -116,7 +115,7 @@ public enum DeckSection { @Override public Boolean apply(PaperCard card) { CardType t = card.getRules().getType(); - return ((t.isCreature() && t.hasSubtype("Avatar")) || t.isVanguard()); + return (t.isCreature() && t.hasSubtype("Avatar")) || t.isVanguard(); } }; diff --git a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java index c019486221f..99d6a15ca23 100644 --- a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java @@ -159,13 +159,7 @@ public final class CardRelationMatrixGenerator { } //filter to just legal commanders - List legends = Lists.newArrayList(Iterables.filter(cardList,Predicates.compose( - new Predicate() { - @Override - public boolean apply(CardRules rules) { - return format.isLegalCommander(rules); - } - }, PaperCard.FN_GET_RULES))); + List legends = Lists.newArrayList(Iterables.filter(cardList, format.isLegalCommanderPredicate())); //generate lookups for legends to link commander names to matrix rows for (int i=0; i canPlay = isForAi ? DeckGeneratorBase.AI_CAN_PLAY : DeckGeneratorBase.HUMAN_CAN_PLAY; @SuppressWarnings("unchecked") - Iterable legends = Iterables.filter(uniqueCards.toFlatList(), Predicates.compose(Predicates.and( - new Predicate() { - @Override - public boolean apply(CardRules rules) { - return format.isLegalCommander(rules); - } - }, - canPlay), PaperCard.FN_GET_RULES)); + Iterable legends = Iterables.filter(uniqueCards.toFlatList(), Predicates.and(format.isLegalCommanderPredicate(), Predicates.compose( + canPlay, PaperCard.FN_GET_RULES))); final List decks = new ArrayList<>(); for (PaperCard legend: legends) { decks.add(new CommanderDeckGenerator(legend, format, isForAi, isCardGen)); diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index 013320d480b..051096f595d 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -601,15 +601,8 @@ public class DeckgenUtil { final DeckFormat format = gameType.getDeckFormat(); Predicate canPlay = forAi ? DeckGeneratorBase.AI_CAN_PLAY : DeckGeneratorBase.HUMAN_CAN_PLAY; @SuppressWarnings("unchecked") - Iterable legends = cardDb.getAllCards(Predicates.and(format.isLegalCardPredicate(), - Predicates.compose(Predicates.and( - new Predicate() { - @Override - public boolean apply(CardRules rules) { - return format.isLegalCommander(rules); - } - }, - canPlay), PaperCard.FN_GET_RULES))); + Iterable legends = cardDb.getAllCards(Predicates.and(format.isLegalCardPredicate(), format.isLegalCommanderPredicate(), + Predicates.compose(canPlay, PaperCard.FN_GET_RULES))); commander = Aggregates.random(legends); return generateRandomCommanderDeck(commander, format, forAi, false); From 132ff7ed21a781821571e05cb1c2a11bf2ce4a38 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 8 Mar 2022 21:44:15 +0100 Subject: [PATCH 2/2] Clean up --- .../src/main/java/forge/ai/ability/PumpAi.java | 14 +++++--------- .../src/main/java/forge/ai/ability/PumpAiBase.java | 7 ++----- .../src/main/java/forge/item/ItemPredicate.java | 3 +-- .../forge/deck/CardRelationMatrixGenerator.java | 2 -- .../gamemodes/limited/CardThemedDeckBuilder.java | 2 +- 5 files changed, 9 insertions(+), 19 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index c25d0310fef..5ce91433d59 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -540,11 +540,8 @@ public class PumpAi extends PumpAiBase { // Filter AI-specific targets if provided list = ComputerUtil.filterAITgts(sa, ai, list, true); - if (list.isEmpty()) { - if (ComputerUtil.activateForCost(sa, ai)) { - return pumpMandatoryTarget(ai, sa); - } - return mandatory && pumpMandatoryTarget(ai, sa); + if (list.isEmpty() || ComputerUtil.activateForCost(sa, ai)) { + return pumpMandatoryTarget(ai, sa); } if (!sa.isCurse()) { @@ -623,9 +620,9 @@ public class PumpAi extends PumpAiBase { if (sa.isCurse()) { pref = CardLists.filterControlledBy(list, ai.getOpponents()); - forced = CardLists.filterControlledBy(list, ai); + forced = CardLists.filterControlledBy(list, ai.getYourTeam()); } else { - pref = CardLists.filterControlledBy(list, ai); + pref = CardLists.filterControlledBy(list, ai.getYourTeam()); forced = CardLists.filterControlledBy(list, ai.getOpponents()); } @@ -634,7 +631,7 @@ public class PumpAi extends PumpAiBase { break; } - Card c = ComputerUtilCard.getBestAI(list); + Card c = ComputerUtilCard.getBestAI(pref); pref.remove(c); sa.getTargets().add(c); } @@ -652,7 +649,6 @@ public class PumpAi extends PumpAiBase { } forced.remove(c); - sa.getTargets().add(c); } diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java b/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java index 97e89c71426..8c1870afb4e 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAiBase.java @@ -448,14 +448,11 @@ public abstract class PumpAiBase extends SpellAbilityAi { * @return a {@link forge.CardList} object. */ protected CardCollection getCurseCreatures(final Player ai, final SpellAbility sa, final int defense, final int attack, final List keywords) { - CardCollection list = new CardCollection(); - for (final Player opp : ai.getOpponents()) { - list.addAll(opp.getCardsIn(ZoneType.Battlefield)); - } + CardCollection list = ai.getOpponents().getCardsIn(ZoneType.Battlefield); final Game game = ai.getGame(); final Combat combat = game.getCombat(); list = CardLists.getTargetableCards(list, sa); - + if (list.isEmpty()) { return list; } diff --git a/forge-core/src/main/java/forge/item/ItemPredicate.java b/forge-core/src/main/java/forge/item/ItemPredicate.java index 5c48f57f7f6..3a237a56273 100644 --- a/forge-core/src/main/java/forge/item/ItemPredicate.java +++ b/forge-core/src/main/java/forge/item/ItemPredicate.java @@ -8,8 +8,7 @@ import com.google.common.base.Predicates; */ public abstract class ItemPredicate { - // Static builder methods - they choose concrete implementation by - // themselves + // Static builder methods - they choose concrete implementation by themselves public static final Predicate IsBoosterPack = Predicates.instanceOf(BoosterPack.class); public static final Predicate IsPrebuiltDeck = Predicates.instanceOf(PreconDeck.class); diff --git a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java index 99d6a15ca23..84ddc1e998f 100644 --- a/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java +++ b/forge-gui/src/main/java/forge/deck/CardRelationMatrixGenerator.java @@ -12,12 +12,10 @@ import java.util.Map; import org.apache.commons.lang3.ArrayUtils; -import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import forge.card.CardRules; import forge.card.CardRulesPredicates; import forge.deck.io.CardThemedMatrixIO; import forge.deck.io.DeckStorage; diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java index 903868338a1..89ed35ae39e 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardThemedDeckBuilder.java @@ -434,7 +434,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { @Override public boolean apply(CardRules subject) { - return ((allowedColor.containsAllColorsFrom(subject.getColorIdentity().getColor()))); + return allowedColor.containsAllColorsFrom(subject.getColorIdentity().getColor()); } }