diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index a367ab10d3d..7f726f5091d 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -361,10 +361,6 @@ private void addCard(Game newGame, ZoneType zone, Card c, Player aiPlayer) { newCard.setDamageReceivedThisTurn(c.getDamageReceivedThisTurn()); newCard.copyFrom(c); - - for (Table.Cell> kw : c.getHiddenExtrinsicKeywordsTable().cellSet()) { - newCard.addHiddenExtrinsicKeywords(kw.getRowKey(), kw.getColumnKey(), kw.getValue()); - } newCard.updateKeywordsCache(); if (c.isTapped()) { diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 53ba318b188..818d355ebf8 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -66,7 +66,6 @@ public class StaticData { public StaticData(CardStorageReader cardReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards) { this(cardReader, null, customCardReader, null, editionFolder, customEditionsFolder, blockDataFolder, "", cardArtPreference, enableUnknownCards, loadNonLegalCards, false, false); } - public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, CardStorageReader customTokenReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String setLookupFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance, boolean enableSmartCardArtSelection) { this.cardReader = cardReader; this.tokenReader = tokenReader; diff --git a/forge-core/src/main/java/forge/deck/DeckFormat.java b/forge-core/src/main/java/forge/deck/DeckFormat.java index 360078df8c1..7f96ac323f2 100644 --- a/forge-core/src/main/java/forge/deck/DeckFormat.java +++ b/forge-core/src/main/java/forge/deck/DeckFormat.java @@ -28,6 +28,7 @@ import forge.item.PaperCard; import forge.item.PaperCardPredicates; import forge.util.Aggregates; +import forge.util.Localizer; import forge.util.TextUtil; import org.apache.commons.lang3.Range; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -290,7 +291,7 @@ public String getDeckConformanceProblem(Deck deck) { final List commanders = deck.getCommanders(); if (commanders.isEmpty()) { - return "is missing a commander"; + return Localizer.getInstance().getMessage("lblPlayerDoesntHaveCommander"); } if (commanders.size() > 2) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 2fd2681c5e3..d3e37662644 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5232,7 +5232,6 @@ public final KeywordCollection getUnhiddenKeywords(CardState state) { public final void updateKeywordsCache() { updateKeywordsCache(getCurrentState()); } - public final void updateKeywordsCache(final CardState state) { KeywordCollection keywords = new KeywordCollection(); @@ -5291,9 +5290,6 @@ public final void removeIntrinsicKeyword(final Keyword k) { public final Iterable getHiddenExtrinsicKeywords() { return Iterables.concat(this.hiddenExtrinsicKeywords.values()); } - public final Table> getHiddenExtrinsicKeywordsTable() { - return hiddenExtrinsicKeywords; - } public final void addHiddenExtrinsicKeywords(long timestamp, long staticId, Iterable keywords) { // TODO if some keywords aren't removed anymore, then no need for extra Array List @@ -8107,6 +8103,9 @@ public void copyFrom(Card in) { this.changedCardColorsCharacterDefining.putAll(in.changedCardColorsCharacterDefining); setChangedCardKeywords(in.getChangedCardKeywords()); + for (Table.Cell> kw : in.hiddenExtrinsicKeywords.cellSet()) { + hiddenExtrinsicKeywords.put(kw.getRowKey(), kw.getColumnKey(), kw.getValue()); + } this.changedCardTypes.putAll(in.changedCardTypes); this.changedCardTypesCharacterDefining.putAll(in.changedCardTypesCharacterDefining); diff --git a/forge-game/src/main/java/forge/game/card/CardCopyService.java b/forge-game/src/main/java/forge/game/card/CardCopyService.java index 2c043a737c3..30aadac7cdb 100644 --- a/forge-game/src/main/java/forge/game/card/CardCopyService.java +++ b/forge-game/src/main/java/forge/game/card/CardCopyService.java @@ -382,7 +382,7 @@ public Card getLKICopy(Map cachedMap) { // update keyword cache on all states for (CardStateName s : newCopy.getStates()) { - newCopy.getState(s).updateKeywordsCache(); + newCopy.updateKeywordsCache(newCopy.getState(s)); } if (copyFrom.getCastSA() != null) { diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index 94872cb5ab8..6c668695f03 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -404,10 +404,6 @@ public final void setIntrinsicKeywords(final Iterable intrinsi for (KeywordInterface k : intrinsicKeyword0) { intrinsicKeywords.insert(k.copy(card, lki)); } - updateKeywordsCache(); - } - - public final void updateKeywordsCache() { card.updateKeywordsCache(this); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java index 63d0ff40ca5..895e4ec880c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDock.java @@ -443,7 +443,9 @@ public DockButton(final SkinImage i0, final String s0) { this.setOpaque(false); this.img = i0; - setButtonSize(this); + setPreferredSize(BUTTON_SIZE); + setMinimumSize(BUTTON_SIZE); + setMaximumSize(BUTTON_SIZE); // FMouseAdapter(true): drag past 3px suppresses the click action final FMouseAdapter adapter = new FMouseAdapter(true) { @@ -666,10 +668,4 @@ private void paintTileAndGlyph(final Graphics g, final int width, final int heig } } - private static void setButtonSize(final javax.swing.JComponent component) { - component.setPreferredSize(BUTTON_SIZE); - component.setMinimumSize(BUTTON_SIZE); - component.setMaximumSize(BUTTON_SIZE); - } - } diff --git a/forge-gui-desktop/src/main/java/forge/view/SplashFrame.java b/forge-gui-desktop/src/main/java/forge/view/SplashFrame.java index 8d49e7592a6..0816584c74f 100644 --- a/forge-gui-desktop/src/main/java/forge/view/SplashFrame.java +++ b/forge-gui-desktop/src/main/java/forge/view/SplashFrame.java @@ -35,9 +35,9 @@ import javax.swing.SwingUtilities; import javax.swing.UIManager; -import forge.gui.GuiBase; import forge.localinstance.properties.ForgePreferences.FPref; import forge.localinstance.skin.FSkinProp; +import forge.model.FModel; import forge.toolbox.FProgressBar; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinIcon; @@ -78,7 +78,7 @@ public void actionPerformed(final ActionEvent e) { */ public SplashFrame() { super(); - FSkin.loadLight(GuiBase.getForgePrefs().getPref(FPref.UI_SKIN), true); + FSkin.loadLight(FModel.getPreferences().getPref(FPref.UI_SKIN), true); try { SwingUtilities.invokeAndWait(SplashFrame.this::init); diff --git a/forge-gui-desktop/src/test/java/forge/net/ComprehensiveTestExecutor.java b/forge-gui-desktop/src/test/java/forge/net/ComprehensiveTestExecutor.java index 5cc5d3c081c..9996650f029 100644 --- a/forge-gui-desktop/src/test/java/forge/net/ComprehensiveTestExecutor.java +++ b/forge-gui-desktop/src/test/java/forge/net/ComprehensiveTestExecutor.java @@ -116,7 +116,7 @@ public MultiProcessGameExecutor.ExecutionResult execute() { } private MultiProcessGameExecutor.ExecutionResult executeSequentially(int[] playerCounts, boolean[] commanderFlags) { - ensureFModelInitialized(); + TestUtils.ensureFModelInitialized(); netLog.info("Starting {} sequential games", playerCounts.length); @@ -173,10 +173,6 @@ private UnifiedNetworkHarness.GameResult runSingleGame(int gameIndex, int port, } } - private static synchronized void ensureFModelInitialized() { - TestUtils.ensureFModelInitialized(); - } - /** * Build a shuffled array of player counts based on configuration. * Shuffling distributes different game types throughout the test run. diff --git a/forge-gui-desktop/src/test/java/forge/net/TestUtils.java b/forge-gui-desktop/src/test/java/forge/net/TestUtils.java index 536700b75a6..7f55b042e0a 100644 --- a/forge-gui-desktop/src/test/java/forge/net/TestUtils.java +++ b/forge-gui-desktop/src/test/java/forge/net/TestUtils.java @@ -1,5 +1,6 @@ package forge.net; +import forge.StaticData; import forge.util.IHasForgeLog; import forge.gamemodes.net.NetworkChecksumUtil; import forge.gamemodes.net.server.RemoteClientGuiGame; @@ -41,7 +42,7 @@ public static synchronized void ensureFModelInitialized() { if (!(GuiBase.getInterface() instanceof HeadlessGuiDesktop)) { GuiBase.setInterface(new HeadlessGuiDesktop()); } - if (FModel.getPreferences() == null) { + if (StaticData.instance() == null) { FModel.initialize(null, preferences -> { preferences.setPref(FPref.LOAD_CARD_SCRIPTS_LAZILY, false); preferences.setPref(FPref.UI_LANGUAGE, "en-US"); diff --git a/forge-gui-desktop/src/test/java/forge/net/UnifiedNetworkHarness.java b/forge-gui-desktop/src/test/java/forge/net/UnifiedNetworkHarness.java index 20ef55c3d81..ce9a1883042 100644 --- a/forge-gui-desktop/src/test/java/forge/net/UnifiedNetworkHarness.java +++ b/forge-gui-desktop/src/test/java/forge/net/UnifiedNetworkHarness.java @@ -168,7 +168,7 @@ private GameResult executeLocalGame() { long startTime = System.currentTimeMillis(); try { - ensureFModelInitialized(); + TestUtils.ensureFModelInitialized(); int port = (specifiedPort > 0) ? specifiedPort : PortAllocator.allocatePort(); result.port = port; @@ -257,7 +257,7 @@ private GameResult executeRemoteGame() { AtomicInteger successfulConnections = new AtomicInteger(0); try { - ensureFModelInitialized(); + TestUtils.ensureFModelInitialized(); int port = (specifiedPort > 0) ? specifiedPort : PortAllocator.allocatePort(); result.port = port; @@ -474,10 +474,6 @@ private void runRemoteClientThread(int clientIndex, String clientName, int port, } } - private void ensureFModelInitialized() { - TestUtils.ensureFModelInitialized(); - } - private List getDecks(int count) { if (decks != null && decks.size() >= count) { return decks.subList(0, count); diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index a3dacd5c099..30b5305d155 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -160,7 +160,7 @@ private Forge() { } private ForgePreferences getForgePreferences() { - return GuiBase.getForgePrefs(); + return FModel.getPreferences(); } public static Localizer getLocalizer() { if (localizer == null) diff --git a/forge-gui-mobile/src/forge/assets/FSkin.java b/forge-gui-mobile/src/forge/assets/FSkin.java index 5d289b1b450..d6f2668331b 100644 --- a/forge-gui-mobile/src/forge/assets/FSkin.java +++ b/forge-gui-mobile/src/forge/assets/FSkin.java @@ -16,6 +16,7 @@ import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences.FPref; import forge.localinstance.skin.FSkinProp; +import forge.model.FModel; import forge.screens.LoadingOverlay; import forge.screens.SplashScreen; import forge.screens.TransitionScreen; @@ -42,10 +43,10 @@ public static void saveSkinName(ForgePreferences prefs, String skinName) { } public static void changeSkin(final String skinName) { - if (skinName.equals(GuiBase.getForgePrefs().getPref(FPref.UI_SKIN))) { return; } + if (skinName.equals(FModel.getPreferences().getPref(FPref.UI_SKIN))) { return; } //save skin preference - saveSkinName(GuiBase.getForgePrefs(), skinName); + saveSkinName(FModel.getPreferences(), skinName); Forge.setTransitionScreen(new TransitionScreen(() -> FThreads.invokeInBackgroundThread(() -> FThreads.invokeInEdtLater(() -> { final LoadingOverlay loader = new LoadingOverlay(Forge.getLocalizer().getMessageorUseDefault("lblRestartInFewSeconds", "Forge will restart after a few seconds..."), true); @@ -100,7 +101,7 @@ private static void checkThemeDir(FileHandle themeDir, String themeName) { FSkinFont.deleteCachedFiles(); //use default skin if valid preferredDir = def; - saveSkinName(GuiBase.getForgePrefs(), "Default"); + saveSkinName(FModel.getPreferences(), "Default"); } else { useFallbackDir(); } diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index eb9d01dc5da..895098bc3fb 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -2986,7 +2986,7 @@ lblRequiredLeastTwoPlayerStartGame=Es braucht mindestens zwei Spieler für ein S lblNotEnoughTeams=Nicht genug Teams! Bitte Teamzuordung anpassen. lblPlayerIsNotReady=Spieler {0} ist nicht startklar. lblPleaseSpecifyPlayerDeck=Bitte wähle ein Deck für {0} -lblPlayerDoesntHaveCommander={0} hat keinen General +lblPlayerDoesntHaveCommander=hat keinen General lblNoSelectedVanguardAvatarForPlayer=Kein Vanguard-Avatar gewählt für {0}. Bitte einen auswählen oder Vanguard abwählen #AutoUpdater.java lblYouHaventSetUpdateChannel=Du hast noch keinen Update-Kanal gewählt. Möchtest du jetzt einen wählen? diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 634f890a457..08bc5af550b 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -3284,7 +3284,7 @@ lblRequiredLeastTwoPlayerStartGame=At least two players are required to start a lblNotEnoughTeams=There are not enough teams! Please adjust team allocations. lblPlayerIsNotReady=Player {0} is not ready lblPleaseSpecifyPlayerDeck=Please specify a deck for {0} -lblPlayerDoesntHaveCommander={0} doesn''t have a commander +lblPlayerDoesntHaveCommander=doesn''t have a commander lblNoSelectedVanguardAvatarForPlayer=No Vanguard avatar selected for {0}. Please choose one or disable the Vanguard variant #AutoUpdater.java lblYouHaventSetUpdateChannel=You haven''t set an update channel. Do you want to check a channel now? diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 8f94d2bd031..981c32ad627 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2977,7 +2977,7 @@ lblRequiredLeastTwoPlayerStartGame=Se requieren al menos dos jugadores para come lblNotEnoughTeams=¡No hay suficientes equipos! Por favor, ajusta las asignaciones del equipo. lblPlayerIsNotReady=El jugador {0} no está listo lblPleaseSpecifyPlayerDeck=Por favor, especifica un mazo para {0} -lblPlayerDoesntHaveCommander={0} no tiene un comandante +lblPlayerDoesntHaveCommander=no tiene un comandante lblNoSelectedVanguardAvatarForPlayer=No seleccionaste ningún avatar de Vanguard para {0}. Elige uno o desactiva la variante Vanguard #AutoUpdater.java lblYouHaventSetUpdateChannel=No ha establecido un canal de actualización. ¿Quieres establecer un canal ahora? diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 21ef2c96ce9..240cbca34ad 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -2971,7 +2971,7 @@ lblRequiredLeastTwoPlayerStartGame=Au moins deux joueurs sont requis pour démar lblNotEnoughTeams=Il n'y a pas assez d'équipes ! Veuillez ajuster les allocations d'équipe. lblPlayerIsNotReady=Le joueur {0} n'est pas prêt lblPleaseSpecifyPlayerDeck=Veuillez spécifier un deck pour {0} -lblPlayerDoesntHaveCommander={0} n'a pas de commandant +lblPlayerDoesntHaveCommander=n'a pas de commandant lblNoSelectedVanguardAvatarForPlayer=Aucun avatar Vanguard sélectionné pour {0}. Veuillez en choisir un ou désactiver la variante Vanguard #AutoUpdater.java lblYouHaventSetUpdateChannel=Vous n'avez pas défini de canal de mise à jour. Voulez-vous vérifier une chaîne maintenant ? diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 711d4e32e2e..0fbddac4823 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -2969,7 +2969,7 @@ lblRequiredLeastTwoPlayerStartGame=Sono richiesti almeno due giocatori per inizi lblNotEnoughTeams=Non ci sono abbastanza squadre! Correggi la ripartizione delle squadre. lblPlayerIsNotReady=Il giocatore {0} non è pronto/a lblPleaseSpecifyPlayerDeck=Specifica un mazzo per {0} -lblPlayerDoesntHaveCommander={0} non ha un Generale +lblPlayerDoesntHaveCommander=non ha un Generale lblNoSelectedVanguardAvatarForPlayer=Nessun avatar Vanguard selezionato per {0}. Selezionane uno o disabilita la variante Vanguard #AutoUpdater.java lblYouHaventSetUpdateChannel=Non hai impostato un canale di aggiornamento. Vuoi controllarne uno ora? diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 7b6573adb85..53ac3569396 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -2965,7 +2965,7 @@ lblRequiredLeastTwoPlayerStartGame=少なくとも二人以上のプレイヤー lblNotEnoughTeams=チーム数が足りない!チームの配分を調整してください。 lblPlayerIsNotReady=プレイヤー {0}がまだ準備中 lblPleaseSpecifyPlayerDeck={0}が使うデッキを指定してください -lblPlayerDoesntHaveCommander={0}が統率者を指定していません +lblPlayerDoesntHaveCommander=が統率者を指定していません lblNoSelectedVanguardAvatarForPlayer={0}がヴァンガードを指定していません。 #AutoUpdater.java lblYouHaventSetUpdateChannel=アップデートで使用するチャンネルがまだ指定していません。今すぐチェックしますか? diff --git a/forge-gui/res/languages/ko-KR.properties b/forge-gui/res/languages/ko-KR.properties index fe9e5292023..c4226ff3f08 100644 --- a/forge-gui/res/languages/ko-KR.properties +++ b/forge-gui/res/languages/ko-KR.properties @@ -3062,7 +3062,7 @@ lblRequiredLeastTwoPlayerStartGame=최소 두 명 이상의 플레이어가 있 lblNotEnoughTeams=팀 수가 부족합니다. 팀 배분을 조정하십시오 lblPlayerIsNotReady=플레이어 {0}가 아직 준비 중입니다 lblPleaseSpecifyPlayerDeck={0}가 사용할 덱을 지정하십시오 -lblPlayerDoesntHaveCommander={0}가 커맨더를 지정하지 않았습니다 +lblPlayerDoesntHaveCommander=가 커맨더를 지정하지 않았습니다 lblNoSelectedVanguardAvatarForPlayer={0}가 방랑자를 지정하지 않았습니다 #AutoUpdater.java lblYouHaventSetUpdateChannel=업데이트에 사용할 채널이 아직 지정되지 않았습니다. 지금 확인하시겠습니까? diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index b196fe8e1df..619e0ec61a8 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -3051,7 +3051,7 @@ lblRequiredLeastTwoPlayerStartGame=Ao menos dois jogadores são requeridos em um lblNotEnoughTeams=Não há equipes suficientes\! Ajuste a alocação da equipe. lblPlayerIsNotReady=Jogador {0} não está pronto lblPleaseSpecifyPlayerDeck=Especifique um deck para {0} -lblPlayerDoesntHaveCommander={0} não tem um Comandante +lblPlayerDoesntHaveCommander=não tem um Comandante lblNoSelectedVanguardAvatarForPlayer=Nenhum avatar de Vanguarda selecionado para {0}. Por favor, escolha um ou desative a variante da Vanguarda #AutoUpdater.java lblYouHaventSetUpdateChannel=Você não definiu um canal de atualização. Deseja verificar um canal agora? diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 63d7c1ca5e1..d980af767e3 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2955,7 +2955,7 @@ lblRequiredLeastTwoPlayerStartGame=至少需要两个牌手才能开始游戏。 lblNotEnoughTeams=没有足够的团队!请调整团队分配。 lblPlayerIsNotReady=牌手{0}没有准备好 lblPleaseSpecifyPlayerDeck=请为{0}选择一个套牌 -lblPlayerDoesntHaveCommander={0}没有指挥官 +lblPlayerDoesntHaveCommander=没有指挥官 lblNoSelectedVanguardAvatarForPlayer={0}没有选择以下先锋Avatar。请选择一种或者禁用先锋变种。 #AutoUpdater.java lblYouHaventSetUpdateChannel=你还没设置更新频道。你要立刻检查更新吗? diff --git a/forge-gui/src/main/java/forge/deck/NetDeckCategory.java b/forge-gui/src/main/java/forge/deck/NetDeckCategory.java index ddcb22729e1..cf43e54276a 100644 --- a/forge-gui/src/main/java/forge/deck/NetDeckCategory.java +++ b/forge-gui/src/main/java/forge/deck/NetDeckCategory.java @@ -20,16 +20,12 @@ public static NetDeckCategory selectAndLoad(GameType gameType, String name) { return selectAndLoad(gameType, name, false); } - public static Map getCategories(GameType gameType) { - return getCategoriesForGameType(gameType); - } - public static NetDeckCategory selectAndLoad(GameType gameType, String name, boolean forceDownload) { - Map categories = getCategoriesForGameType(gameType); + Map categories = getCategories(gameType); return selectAndLoad(categories, name, forceDownload, "Select a Net Deck category"); } - private static Map getCategoriesForGameType(GameType gameType) { + private static Map getCategories(GameType gameType) { Map categories; switch (gameType) { case Constructed: diff --git a/forge-gui/src/main/java/forge/deck/NetDeckStorageBase.java b/forge-gui/src/main/java/forge/deck/NetDeckStorageBase.java index e8be53a2b8d..723344612fa 100644 --- a/forge-gui/src/main/java/forge/deck/NetDeckStorageBase.java +++ b/forge-gui/src/main/java/forge/deck/NetDeckStorageBase.java @@ -75,7 +75,9 @@ protected static T selectAndLoad(final Map category = new ArrayList<>(categories.values()); - Collections.reverse(category); + if (chooserTitle.contains("Archive")) { + Collections.reverse(category); + } final T c = SGuiChoose.oneOrNone(chooserTitle, category); if (c == null) { return null; } diff --git a/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java b/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java index 5c00e158980..8dcd8b4eb9b 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/GameLobby.java @@ -423,12 +423,6 @@ public Runnable startGame() { SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblPleaseSpecifyPlayerDeck", slot.getName())); return null; } - if (hasVariant(GameType.Commander) || hasVariant(GameType.Oathbreaker) || hasVariant(GameType.TinyLeaders) || hasVariant(GameType.Brawl)) { - if (!slot.getDeck().has(DeckSection.Commander)) { - SOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblPlayerDoesntHaveCommander", slot.getName())); - return null; - } - } } final boolean checkLegality = FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY); diff --git a/forge-gui/src/main/java/forge/gui/GuiBase.java b/forge-gui/src/main/java/forge/gui/GuiBase.java index fcb9f16b7fe..06ebc353b07 100644 --- a/forge-gui/src/main/java/forge/gui/GuiBase.java +++ b/forge-gui/src/main/java/forge/gui/GuiBase.java @@ -3,7 +3,6 @@ import forge.util.HWInfo; import forge.gui.interfaces.IGuiBase; import forge.gui.interfaces.IGuiGame; -import forge.localinstance.properties.ForgePreferences; import org.tinylog.Logger; public class GuiBase { @@ -14,19 +13,17 @@ public class GuiBase { private static int androidAPI = 0; private static String downloadsDir = ""; private static boolean usingAppDirectory = false; - private static ForgePreferences forgePrefs; private static HWInfo hwInfo; public static IGuiBase getInterface() { return guiInterface; } public static void setInterface(IGuiBase i0) { guiInterface = i0; } - public static ForgePreferences getForgePrefs() { - if (forgePrefs == null) - forgePrefs = new ForgePreferences(); - return forgePrefs; - } public static void setIsAndroid(boolean value) { isAndroidport = value; } public static boolean isAndroid() { return isAndroidport; } + public static int getAndroidAPILevel() { return androidAPI; } + public static String getDownloadsDir() { + return downloadsDir; + } public static void setAdventureDirectory(String directory) { adventureDirectory = directory; } public static String getAdventureDirectory() { return adventureDirectory; } @@ -68,10 +65,6 @@ public static void logHWInfo() { Logger.info(line); } } - public static String getDownloadsDir() { - return downloadsDir; - } - public static int getAndroidAPILevel() { return androidAPI; } public static boolean isNetPlay(IGuiGame game) { if (game != null) { diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index afe98770ec3..922d78e1204 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -45,7 +45,6 @@ import forge.gamemodes.quest.data.QuestPreferences; import forge.gamemodes.tournament.TournamentData; import forge.gui.FThreads; -import forge.gui.GuiBase; import forge.gui.card.CardPreferences; import forge.gui.interfaces.IProgressBar; import forge.item.PaperCard; @@ -93,7 +92,7 @@ private FModel() { } //don't allow creating instance ConquestUtil.updateRarityFilterOdds(cp); return cp; }); - private static ForgePreferences preferences; + private static final Supplier preferences = Suppliers.memoize(ForgePreferences::new); private static final Supplier netPreferences = Suppliers.memoize(ForgeNetPreferences::new); private static final Supplier> achievements = Suppliers.memoize(() -> { final Map a = Maps.newHashMap(); @@ -130,7 +129,7 @@ private FModel() { } //don't allow creating instance final IStorage w = new StorageBase<>("Quest worlds", null, standardWorlds); return w; }); - private static final Supplier formats = Suppliers.memoize(() -> new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), new File(ForgeConstants.USER_FORMATS_DIR), preferences.getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS)))); + private static final Supplier formats = Suppliers.memoize(() -> new GameFormat.Collection(new GameFormat.Reader( new File(ForgeConstants.FORMATS_DATA_DIR), new File(ForgeConstants.USER_FORMATS_DIR), getPreferences().getPrefBoolean(FPref.LOAD_ARCHIVED_FORMATS)))); private static final Supplier> allCards = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getCommonCards().getAllCards(), PaperCard.class)); private static final Supplier> planechaseCards = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_PLANE_OR_PHENOMENON)), PaperCard.class)); private static final Supplier> archenemyCards = Suppliers.memoize(() -> ItemPool.createFrom(getMagicDb().getVariantCards().getAllCards(PaperCardPredicates.fromRules(CardRulesPredicates.IS_SCHEME)), PaperCard.class)); @@ -155,18 +154,17 @@ public static void initialize(final IProgressBar progressBar, Function progressBar.setDescription(Localizer.getInstance().getMessage("splash.loading.decks"))); @@ -366,11 +364,17 @@ public static StaticData getMagicDb() { } public static ForgePreferences getPreferences() { - return preferences; + return preferences.get(); } public static ForgeNetPreferences getNetPreferences() { return netPreferences.get(); } + public static QuestPreferences getQuestPreferences() { + return questPreferences.get(); + } + public static ConquestPreferences getConquestPreferences() { + return conquestPreferences.get(); + } public static AchievementCollection getAchievements(GameType gameType) { // Translate gameType to appropriate type if needed @@ -386,14 +390,6 @@ public static IStorage getBlocks() { return blocks.get(); } - public static QuestPreferences getQuestPreferences() { - return questPreferences.get(); - } - - public static ConquestPreferences getConquestPreferences() { - return conquestPreferences.get(); - } - public static GauntletData getGauntletData() { return gauntletData; }