From 2cf15830d752f6f56e09215739ad45a4654ea1d2 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 29 Jan 2017 11:15:09 +0100 Subject: [PATCH 1/4] * Some fixes to Hivestone and BecomesSubtyoeAllEffect. --- Mage.Sets/src/mage/cards/h/Hivestone.java | 2 +- Mage.Sets/src/mage/cards/m/MuscleSliver.java | 7 +++--- .../test/cards/single/tsp/HivestoneTest.java | 23 +++++++++++-------- .../continuous/BecomesSubtypeAllEffect.java | 8 +++---- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Mage.Sets/src/mage/cards/h/Hivestone.java b/Mage.Sets/src/mage/cards/h/Hivestone.java index 2f5d24e4a4b..6331f80a7c9 100644 --- a/Mage.Sets/src/mage/cards/h/Hivestone.java +++ b/Mage.Sets/src/mage/cards/h/Hivestone.java @@ -28,7 +28,7 @@ public class Hivestone extends CardImpl { // Creatures you control are Slivers in addition to their other creature types. ArrayList subTypes = new ArrayList<>(); - subTypes.add("Slivers"); + subTypes.add("Sliver"); Effect effect = new BecomesSubtypeAllEffect(Duration.WhileOnBattlefield, subTypes, filter, false); effect.setText("Creatures you control are Slivers in addition to their other creature types"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); diff --git a/Mage.Sets/src/mage/cards/m/MuscleSliver.java b/Mage.Sets/src/mage/cards/m/MuscleSliver.java index c639ae6ebc4..01b4f1b3c15 100644 --- a/Mage.Sets/src/mage/cards/m/MuscleSliver.java +++ b/Mage.Sets/src/mage/cards/m/MuscleSliver.java @@ -28,13 +28,12 @@ package mage.cards.m; import java.util.UUID; - -import mage.constants.CardType; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; @@ -52,11 +51,13 @@ public class MuscleSliver extends CardImpl { } public MuscleSliver(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); this.subtype.add("Sliver"); this.power = new MageInt(1); this.toughness = new MageInt(1); + + // All Sliver creatures get +1/+1. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/tsp/HivestoneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/tsp/HivestoneTest.java index 945e1848111..3fcfd21c844 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/tsp/HivestoneTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/tsp/HivestoneTest.java @@ -16,26 +16,32 @@ public class HivestoneTest extends CardTestPlayerBase { */ @Test public void abilityCheckTest() { - addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears", 1); - addCard(Zone.BATTLEFIELD, playerA, "Hivestone", 1); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + addCard(Zone.HAND, playerA, "Grizzly Bears", 1); // Creature {1}{G} + // Creatures you control are Slivers in addition to their other creature types. + addCard(Zone.HAND, playerA, "Hivestone", 1); // Artifact {2} + // All Sliver creatures get +1/+1. addCard(Zone.BATTLEFIELD, playerA, "Muscle Sliver", 1); + addCard(Zone.BATTLEFIELD, playerB, "Runeclaw Bear", 1); // Creature 2/2 - addCard(Zone.BATTLEFIELD, playerB, "Runeclaw Bear", 1); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hivestone"); - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); + assertPermanentCount(playerA, "Hivestone", 1); + assertPermanentCount(playerA, "Grizzly Bears", 1); assertPowerToughness(playerA, "Grizzly Bears", 3, 3, Filter.ComparisonScope.Any); - assertPowerToughness(playerB, "Runeclaw Bear", 2, 2, Filter.ComparisonScope.Any); - } /** - * Turns only your creatures on the battlefield, not in other zones, into Slivers. It won’t allow you to have - * Root Sliver on the battlefield and make your Grizzly Bears uncounterable, for example. + * Turns only your creatures on the battlefield, not in other zones, into + * Slivers. It won’t allow you to have Root Sliver on the battlefield and + * make your Grizzly Bears uncounterable, for example. */ @Test public void rootSliverTest() { @@ -45,7 +51,6 @@ public class HivestoneTest extends CardTestPlayerBase { addCard(Zone.BATTLEFIELD, playerA, "Root Sliver", 1); addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); addCard(Zone.HAND, playerB, "Counterspell"); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java index e1967e797a8..982a6831d9e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesSubtypeAllEffect.java @@ -70,7 +70,7 @@ public class BecomesSubtypeAllEffect extends ContinuousEffectImpl { @Override public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) { + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { if (permanent != null) { switch (layer) { case TypeChangingEffects_4: @@ -86,10 +86,8 @@ public class BecomesSubtypeAllEffect extends ContinuousEffectImpl { } break; } - } else { - if (duration.equals(Duration.Custom)) { - discard(); - } + } else if (duration.equals(Duration.Custom)) { + discard(); } } return true; From 0a1356d40ead6bbfb6982d3a0dfe7c0a81ba5ed0 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 29 Jan 2017 11:16:04 +0100 Subject: [PATCH 2/4] * Fixes to test and fix for issue #2816 --- Mage.Sets/src/mage/cards/f/FlameheartWerewolf.java | 4 +++- Mage.Sets/src/mage/cards/k/KessigForgemaster.java | 6 ++++-- .../abilities/oneshot/damage/FlameheartWerewolfTest.java | 7 ++----- .../common/BlocksOrBecomesBlockedTriggeredAbility.java | 6 +++--- Mage/src/main/java/mage/filter/StaticFilters.java | 1 + 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Mage.Sets/src/mage/cards/f/FlameheartWerewolf.java b/Mage.Sets/src/mage/cards/f/FlameheartWerewolf.java index bb3430b6b7c..a7fa3dd5d68 100644 --- a/Mage.Sets/src/mage/cards/f/FlameheartWerewolf.java +++ b/Mage.Sets/src/mage/cards/f/FlameheartWerewolf.java @@ -41,6 +41,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; +import mage.filter.StaticFilters; /** * @@ -60,7 +61,8 @@ public class FlameheartWerewolf extends CardImpl { this.transformable = true; // Whenever Flameheart Werewolf blocks or becomes blocked by a creature, Flameheart Werewolf deals 2 damage to that creature. - this.addAbility(new BlocksOrBecomesBlockedTriggeredAbility(new DamageTargetEffect(2, true, "that creature"), false)); + this.addAbility(new BlocksOrBecomesBlockedTriggeredAbility(new DamageTargetEffect(2, true, "that creature"), + StaticFilters.FILTER_PERMANENT_CREATURE, false, null, true)); // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Flameheart Werewolf. TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(false), TargetController.ANY, false); diff --git a/Mage.Sets/src/mage/cards/k/KessigForgemaster.java b/Mage.Sets/src/mage/cards/k/KessigForgemaster.java index 74079a54881..57e4d743c53 100644 --- a/Mage.Sets/src/mage/cards/k/KessigForgemaster.java +++ b/Mage.Sets/src/mage/cards/k/KessigForgemaster.java @@ -37,11 +37,12 @@ import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.TransformAbility; -import mage.cards.f.FlameheartWerewolf; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.f.FlameheartWerewolf; import mage.constants.CardType; import mage.constants.TargetController; +import mage.filter.StaticFilters; /** * @@ -61,7 +62,8 @@ public class KessigForgemaster extends CardImpl { this.secondSideCardClazz = FlameheartWerewolf.class; // Whenever Kessig Forgemaster blocks or becomes blocked by a creature, Kessig Forgemaster deals 1 damage to that creature. - this.addAbility(new BlocksOrBecomesBlockedTriggeredAbility(new DamageTargetEffect(1, true, "that creature"), false)); + this.addAbility(new BlocksOrBecomesBlockedTriggeredAbility(new DamageTargetEffect(1, true, "that creature"), + StaticFilters.FILTER_PERMANENT_CREATURE, false, null, true)); // At the beginning of each upkeep, if no spells were cast last turn, transform Kessig Forgemaster. this.addAbility(new TransformAbility()); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/FlameheartWerewolfTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/FlameheartWerewolfTest.java index 10be65edff2..583b54cce93 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/FlameheartWerewolfTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/FlameheartWerewolfTest.java @@ -24,8 +24,7 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package org.mage.test.cards.abilities.oneshot.damage; import mage.constants.PhaseStep; @@ -48,11 +47,9 @@ public class FlameheartWerewolfTest extends CardTestPlayerBase { // Flameheart Werewolf is a 3/2 with: // Whenever Flameheart Werewolf blocks or becomes blocked by a creature, Flameheart Werewolf deals 2 damage to that creature. - // Kalitas, Traitor of Ghet is a 3/4 with: // Lifelink // If a nontoken creature an opponent controls would die, instead exile that card and put a 2/2 black Zombie creature token onto the battlefield - addCard(Zone.BATTLEFIELD, playerA, "Flameheart Werewolf"); addCard(Zone.BATTLEFIELD, playerB, "Kalitas, Traitor of Ghet"); @@ -92,8 +89,8 @@ public class FlameheartWerewolfTest extends CardTestPlayerBase { // both 2/2s should die before they had a chance to deal damage // to Flameheart Werewolf + assertGraveyardCount(playerA, "Kessig Forgemaster", 0); assertPermanentCount(playerA, "Flameheart Werewolf", 1); - assertGraveyardCount(playerA, "Flameheart Werewolf", 0); assertPermanentCount(playerB, "Falkenrath Reaver", 0); assertGraveyardCount(playerB, "Falkenrath Reaver", 1); assertPermanentCount(playerB, "Wind Drake", 0); diff --git a/Mage/src/main/java/mage/abilities/common/BlocksOrBecomesBlockedTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BlocksOrBecomesBlockedTriggeredAbility.java index fe7135ddd6a..94b871001da 100644 --- a/Mage/src/main/java/mage/abilities/common/BlocksOrBecomesBlockedTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BlocksOrBecomesBlockedTriggeredAbility.java @@ -27,11 +27,11 @@ */ package mage.abilities.common; -import mage.constants.Zone; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; +import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -48,7 +48,7 @@ public class BlocksOrBecomesBlockedTriggeredAbility extends TriggeredAbilityImpl protected boolean setTargetPointer; public BlocksOrBecomesBlockedTriggeredAbility(Effect effect, boolean optional) { - this(effect, new FilterCreaturePermanent(), optional, null, true); + this(effect, StaticFilters.FILTER_PERMANENT_CREATURE, optional, null, false); } public BlocksOrBecomesBlockedTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) { diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 310eec34584..5ec5687a926 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -32,6 +32,7 @@ public class StaticFilters { public static final FilterNonlandCard FILTER_CARD_NON_LAND = new FilterNonlandCard(); public static final FilterCard FILTER_CARD_ARTIFACT_OR_CREATURE = new FilterCard("artifact or creature card"); + public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE = new FilterCreaturePermanent(); public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE_GOBLINS = new FilterCreaturePermanent("Goblin", "Goblin creatures"); public static final FilterCreaturePermanent FILTER_PERMANENT_CREATURE_SLIVERS = new FilterCreaturePermanent("Sliver", "Sliver creatures"); From 532eb3fdeace34d1cde8e287d34dae50a4652a28 Mon Sep 17 00:00:00 2001 From: spjspj Date: Mon, 30 Jan 2017 23:48:16 +1100 Subject: [PATCH 3/4] Add Canadian Highlander format --- .../src/mage/deck/CanadianHighlander.java | 158 ++++++++++++++++++ Mage.Server/config/config.xml | 1 + Mage.Server/release/config/config.xml | 1 + 3 files changed, 160 insertions(+) create mode 100644 Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java new file mode 100644 index 00000000000..4dda4a97102 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java @@ -0,0 +1,158 @@ +/* + * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.deck; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.cards.decks.Deck; +import mage.constants.SetType; + +/** + * + * @author spjspj + */ +public class CanadianHighlander extends Constructed { + + public CanadianHighlander() { + this("Canadian Highlander"); + for (ExpansionSet set : Sets.getInstance().values()) { + if (set.getSetType() != SetType.CUSTOM_SET) { + setCodes.add(set.getCode()); + } + } + } + + public CanadianHighlander(String name) { + super(name); + } + + @Override + public boolean validate(Deck deck) { + boolean valid = true; + + if (deck.getCards().size() < 100) { + invalid.put("Deck", "Must contain 100 or more singleton cards: has " + (deck.getCards().size()) + " cards"); + valid = false; + } + + if (deck.getSideboard().size() > 0) { + invalid.put("Deck", "Sideboard can't contain any cards: has " + (deck.getSideboard().size()) + " cards"); + valid = false; + } + + List basicLandNames = new ArrayList<>(Arrays.asList("Forest", "Island", "Mountain", "Swamp", "Plains", "Wastes", + "Snow-Covered Forest", "Snow-Covered Island", "Snow-Covered Mountain", "Snow-Covered Swamp", "Snow-Covered Plains")); + Map counts = new HashMap<>(); + countCards(counts, deck.getCards()); + countCards(counts, deck.getSideboard()); + for (Map.Entry entry : counts.entrySet()) { + if (entry.getValue() > 1) { + if (!basicLandNames.contains(entry.getKey()) && !entry.getKey().equals("Relentless Rats") && !entry.getKey().equals("Shadowborn Apostle")) { + invalid.put(entry.getKey(), "Too many: " + entry.getValue()); + valid = false; + } + } + } + + int allowedPoints = 10 * (int) Math.ceil(deck.getCards().size()/100.0); + int totalPoints = 0; + for (Map.Entry entry : counts.entrySet()) { + String cn = entry.getKey(); + if(cn.equals("Balance") + || cn.equals("Dig Through Time") + || cn.equals("Fastbond") + || cn.equals("Gifts Ungiven") + || cn.equals("Intuition") + || cn.equals("Library of Alexandria") + || cn.equals("Lim-Dul's Vault") + || cn.equals("Mana Vault") + || cn.equals("Mind Twist") + || cn.equals("Oath of Druids") + || cn.equals("Personal Tutor") + || cn.equals("Stoneforge Mystic") + || cn.equals("Tainted Pact") + || cn.equals("Tolarian Academy") + || cn.equals("Transmute Artifact") + || cn.equals("Treasure Cruise") + || cn.equals("True-Name Nemesis")) { + totalPoints += 1; + } + if(cn.equals("Doomsday") + || cn.equals("Enlightened Tutor") + || cn.equals("Imperial Seal") + || cn.equals("Mana Crypt") + || cn.equals("Mystical Tutor") + || cn.equals("Strip Mine") + || cn.equals("Summoner's Pact") + || cn.equals("Survival of the Fittest") + || cn.equals("Umezawa's Jitte")) { + totalPoints += 2; + } + if(cn.equals("Birthing Pod") + || cn.equals("Mox Emerald") + || cn.equals("Mox Jet") + || cn.equals("Mox Pearl") + || cn.equals("Mox Ruby") + || cn.equals("Mox Sapphire") + || cn.equals("Protean Hulk") + || cn.equals("Vampiric Tutor")) { + totalPoints += 3; + } + if(cn.equals("Demonic Tutor") + || cn.equals("Hermit Druid") + || cn.equals("Sol Ring")) { + totalPoints += 4; + } + if(cn.equals("Ancestral Recall") + || cn.equals("Natural Order") + || cn.equals("Time Walk") + || cn.equals("Tinker")) { + totalPoints += 5; + } + if(cn.equals("Flash")) { + totalPoints += 6; + } + if(cn.equals("Black Lotus") + || cn.equals("Time Vault")) { + totalPoints += 7; + } + } + if(totalPoints > allowedPoints) { + invalid.put("Total points too high", "Your calculated point total was " + totalPoints); + valid = false; + } + return valid; + } +} diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index fd41c97a47c..b55317e1f67 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -132,6 +132,7 @@ + diff --git a/Mage.Server/release/config/config.xml b/Mage.Server/release/config/config.xml index 0f2c1d167eb..0272609ef97 100644 --- a/Mage.Server/release/config/config.xml +++ b/Mage.Server/release/config/config.xml @@ -129,6 +129,7 @@ + From de6fae8c00ce3406ee8b05039f5de3852ce64547 Mon Sep 17 00:00:00 2001 From: spjspj Date: Mon, 30 Jan 2017 23:57:59 +1100 Subject: [PATCH 4/4] Add Canadian Highlander format --- Mage.Client/src/main/java/mage/client/table/TablesPanel.java | 2 +- .../Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 4081bcdc2bc..a165d13a7ce 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -599,7 +599,7 @@ public class TablesPanel extends javax.swing.JPanel { formatFilterList.add(RowFilter.regexFilter("^Limited", TableTableModel.COLUMN_DECK_TYPE)); } if (btnFormatOther.isSelected()) { - formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Frontier|^Constructed - Extended|^Constructed - Eternal|^Constructed - Historical|^Constructed - Super|^Constructed - Freeform|^Australian Highlander", TableTableModel.COLUMN_DECK_TYPE)); + formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Frontier|^Constructed - Extended|^Constructed - Eternal|^Constructed - Historical|^Constructed - Super|^Constructed - Freeform|^Australian Highlander|^Canadian Highlander", TableTableModel.COLUMN_DECK_TYPE)); } List> skillFilterList = new ArrayList<>(); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java index 4dda4a97102..893eb639fa3 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/CanadianHighlander.java @@ -86,7 +86,7 @@ public class CanadianHighlander extends Constructed { } } - int allowedPoints = 10 * (int) Math.ceil(deck.getCards().size()/100.0); + int allowedPoints = 10 * (int) Math.floor(deck.getCards().size()/100.0); int totalPoints = 0; for (Map.Entry entry : counts.entrySet()) { String cn = entry.getKey();