diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index 58760679446..38153e1bf8c 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -603,7 +603,6 @@ public class NewTableDialog extends MageDialog { options.getPlayerTypes().add(player.getPlayerType()); } options.setDeckType((String) this.cbDeckType.getSelectedItem()); - options.setLimited(options.getDeckType().startsWith("Limited")); options.setMatchTimeLimit((MatchTimeLimit) this.cbTimeLimit.getSelectedItem()); options.setAttackOption((MultiplayerAttackOption) this.cbAttackOption.getSelectedItem()); options.setSkillLevel((SkillLevel) this.cbSkillLevel.getSelectedItem()); @@ -621,6 +620,10 @@ public class NewTableDialog extends MageDialog { options.setMullgianType((MulliganType) this.cbMulligan.getSelectedItem()); String serverAddress = SessionHandler.getSession().getServerHostname().orElse(""); options.setBannedUsers(IgnoreList.getIgnoredUsers(serverAddress)); + options.setLimited(options.getDeckType().startsWith("Limited")); + if (options.getDeckType().startsWith("Variant Magic - Freeform Unlimited Commander")) { + options.setLimited(true); // limited-style sideboarding with unlimited basics enabled for Freeform Unlimited Commander + } return options; } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java index e5418cbfead..1b77225df99 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -1329,6 +1329,9 @@ public class NewTournamentDialog extends MageDialog { tOptions.getMatchOptions().setDeckType((String) this.cbDeckType.getSelectedItem()); tOptions.getMatchOptions().setGameType(((GameTypeView) this.cbGameType.getSelectedItem()).getName()); tOptions.getMatchOptions().setLimited(tOptions.getMatchOptions().getDeckType().startsWith("Limited")); + if (tOptions.getMatchOptions().getDeckType().startsWith("Variant Magic - Freeform Unlimited Commander")) { + tOptions.getMatchOptions().setLimited(true); // limited-style sideboarding with unlimited basics enabled for Freeform Unlimited Commander + } } String serverAddress = SessionHandler.getSession().getServerHostname().orElse(""); diff --git a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommander.java b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommander.java index 68a077cd269..5d9b471eeaa 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommander.java +++ b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommander.java @@ -1,19 +1,49 @@ + package mage.game; +import java.util.UUID; import mage.constants.MultiplayerAttackOption; import mage.constants.RangeOfInfluence; +import mage.game.match.MatchType; import mage.game.mulligan.Mulligan; -public class FreeformUnlimitedCommander extends FreeformCommanderFreeForAll { +public class FreeformUnlimitedCommander extends GameCommanderImpl { - protected int numPlayers; + private int numPlayers; public FreeformUnlimitedCommander(MultiplayerAttackOption attackOption, RangeOfInfluence range, Mulligan mulligan, int startLife) { - super(attackOption, range, mulligan, startLife); + super(attackOption, range, mulligan, startLife, 60); } public FreeformUnlimitedCommander(final FreeformUnlimitedCommander game) { super(game); this.numPlayers = game.numPlayers; } + + @Override + protected void init(UUID choosingPlayerId) { + if (state.getPlayerList().size() > 2) { + startingPlayerSkipsDraw = false; + } + super.init(choosingPlayerId); + } + + @Override + public MatchType getGameType() { + return new FreeformUnlimitedCommanderType(); + } + + @Override + public int getNumPlayers() { + return numPlayers; + } + + public void setNumPlayers(int numPlayers) { + this.numPlayers = numPlayers; + } + + @Override + public FreeformUnlimitedCommander copy() { + return new FreeformUnlimitedCommander(this); + } } diff --git a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderMatch.java b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderMatch.java index 8a6af4e5dd7..0f33ac2a60a 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderMatch.java +++ b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderMatch.java @@ -1,10 +1,23 @@ package mage.game; +import mage.game.match.MatchImpl; import mage.game.match.MatchOptions; +import mage.game.mulligan.Mulligan; -public class FreeformUnlimitedCommanderMatch extends FreeformCommanderFreeForAllMatch { +public class FreeformUnlimitedCommanderMatch extends MatchImpl { public FreeformUnlimitedCommanderMatch(MatchOptions options) { super(options); } -} + + @Override + public void startGame() throws GameException { + int startLife = 40; + Mulligan mulligan = options.getMulliganType().getMulligan(options.getFreeMulligans()); + FreeformUnlimitedCommander game = new FreeformUnlimitedCommander(options.getAttackOption(), options.getRange(), mulligan, startLife); + game.setStartMessage(this.createGameStartMessage()); + initGame(game); + games.add(game); + } + +} \ No newline at end of file diff --git a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderType.java b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderType.java index cf3ad35b10c..01b5fe3350e 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderType.java +++ b/Mage.Server.Plugins/Mage.Game.FreeformUnlimitedCommander/src/mage/game/FreeformUnlimitedCommanderType.java @@ -1,6 +1,8 @@ package mage.game; -public class FreeformUnlimitedCommanderType extends FreeformCommanderFreeForAllType { +import mage.game.match.MatchType; + +public class FreeformUnlimitedCommanderType extends MatchType { public FreeformUnlimitedCommanderType() { this.name = "Freeform Unlimited Commander"; @@ -10,7 +12,7 @@ public class FreeformUnlimitedCommanderType extends FreeformCommanderFreeForAllT this.playersPerTeam = 0; this.useAttackOption = true; this.useRange = true; - this.sideboardingAllowed = false; + this.sideboardingAllowed = true; } protected FreeformUnlimitedCommanderType(final FreeformUnlimitedCommanderType matchType) { diff --git a/Mage.Tests/src/test/java/org/mage/test/game/FreeformUnlimitedCommander/FreeformUnlimitedCommanderTypeTest.java b/Mage.Tests/src/test/java/org/mage/test/game/FreeformUnlimitedCommander/FreeformUnlimitedCommanderTypeTest.java index 725c63384b8..66efd7d6083 100644 --- a/Mage.Tests/src/test/java/org/mage/test/game/FreeformUnlimitedCommander/FreeformUnlimitedCommanderTypeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/game/FreeformUnlimitedCommander/FreeformUnlimitedCommanderTypeTest.java @@ -90,11 +90,11 @@ public class FreeformUnlimitedCommanderTypeTest extends MageTestPlayerBase { } @Test - public void test_isSideboardingAllowed_returnsFalse() { + public void test_isSideboardingAllowed_returnsTrue() { // Arrange MatchType gametype = new FreeformUnlimitedCommanderType(); // Assert - Assert.assertFalse(gametype.isSideboardingAllowed()); + Assert.assertTrue(gametype.isSideboardingAllowed()); } }