From e550c307c28b973a7d16a016d15fd43bc335a8dd Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 06:29:49 -0400 Subject: [PATCH 1/2] Option to remove unsupported card from collection --- forge-core/src/main/java/forge/card/CardRules.java | 7 ++++++- .../src/forge/adventure/scene/AdventureDeckEditor.java | 8 ++++++++ forge-gui-mobile/src/forge/card/CardRenderer.java | 4 ++++ forge-gui-mobile/src/forge/menu/FDropDownMenu.java | 5 +++++ forge-gui-mobile/src/forge/toolbox/FContainer.java | 1 + forge-gui/res/languages/de-DE.properties | 4 +++- forge-gui/res/languages/en-US.properties | 4 +++- forge-gui/res/languages/es-ES.properties | 4 +++- forge-gui/res/languages/fr-FR.properties | 4 +++- forge-gui/res/languages/it-IT.properties | 4 +++- forge-gui/res/languages/ja-JP.properties | 4 +++- forge-gui/res/languages/pt-BR.properties | 4 +++- forge-gui/res/languages/zh-CN.properties | 4 +++- 13 files changed, 48 insertions(+), 9 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index b2b41a1bd03..fe36b18679e 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -53,6 +53,7 @@ public final class CardRules implements ICardCharacteristics { private boolean addsWildCardColor; private int setColorID; private boolean custom; + private boolean unsupported; private String path; public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah) { @@ -220,7 +221,9 @@ public final class CardRules implements ICardCharacteristics { } public boolean isCustom() { return custom; } - public void setCustom() { custom = true; } + public void setCustom() { custom = true; } + + public boolean isUnsupported() { return unsupported; } @Override public CardType getType() { @@ -825,6 +828,8 @@ public final class CardRules implements ICardCharacteristics { faces[0].assignMissingFields(); final CardRules result = new CardRules(faces, CardSplitType.None, cah); + result.unsupported = true; + return result; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index 1a6207e7314..968fc9d50d1 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -350,6 +350,14 @@ public class AdventureDeckEditor extends FDeckEditor { int safeToSellCount = amountInCollection - copiesUsedInDecks; //Number we can sell without losing cards from a deck. int autoSellCount = Current.player().autoSellCards.count(card); //Number currently in auto-sell. int canMoveToAutoSell = safeToSellCount - autoSellCount; //Number that can be moved to auto-sell from here. + + if (card.getRules().isUnsupported()) { + menu.clearItems(); + FMenuItem removeItem = new FMenuItem(localizer.getMessage("lblRemoveUnsupportedCard"), FSkinImage.HDDELETE, e -> + removeCard(card, safeToSellCount)); + menu.addItem(removeItem); + return; + } if (copiesUsedInDecks > 0) { String text = localizer.getMessage("lblCopiesInUse", copiesUsedInDecks); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 627dd19b46d..af3b1e5dfe9 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -220,6 +220,10 @@ public class CardRenderer { if (pc.getRules() == null) return getCardArt(pc.getImageKey(backFace), false, false, false, false, false, false, false, false, true, false); + if (pc.getRules().isUnsupported()) { + return CardImageRenderer.forgeArt; + } + CardType type = pc.getRules().getType(); return getCardArt(pc.getImageKey(backFace), pc.getRules().getSplitType() == CardSplitType.Split, type.isPlane() || type.isPhenomenon(), pc.getRules().getOracleText().contains("Aftermath"), diff --git a/forge-gui-mobile/src/forge/menu/FDropDownMenu.java b/forge-gui-mobile/src/forge/menu/FDropDownMenu.java index 725426fdc87..1301cfea13c 100644 --- a/forge-gui-mobile/src/forge/menu/FDropDownMenu.java +++ b/forge-gui-mobile/src/forge/menu/FDropDownMenu.java @@ -69,6 +69,11 @@ public abstract class FDropDownMenu extends FDropDown { } } + public void clearItems() { + clear(); + items.clear(); + } + @Override public boolean tap(float x, float y, int count) { super.tap(x, y, count); diff --git a/forge-gui-mobile/src/forge/toolbox/FContainer.java b/forge-gui-mobile/src/forge/toolbox/FContainer.java index 2a747c9dd1d..b7b85529963 100644 --- a/forge-gui-mobile/src/forge/toolbox/FContainer.java +++ b/forge-gui-mobile/src/forge/toolbox/FContainer.java @@ -23,6 +23,7 @@ public abstract class FContainer extends FDisplayObject { public void clear() { children.clear(); + ((ArrayList) children).trimToSize(); } public int indexOf(FDisplayObject child) { diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index e7c02dccd8b..c619d74df95 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -3542,4 +3542,6 @@ cbPreloadCustomDrafts=Benutzerdefinierte Entwürfe vorladen nlPreloadCustomDrafts=Wenn aktiviert, werden die benutzerdefinierten Entwurfsdateien beim Start vorab geladen (Forge benötigt beim Parsen von Entwurfsdateien eine längere Startzeit). lblRepairCost=Reparaturkosten: {0} ? lblRepair=Reparieren -lblDataMigrationMsg=Datenmigration abgeschlossen!\nBitte überprüfen Sie Ihr Inventar und Ihre Ausrüstung.\nBitte erstellen Sie an dieser Stelle eine Sicherungskopie Ihrer Spielstände, da der aktuelle Spielstand noch nicht überschrieben wird, wenn Sie im Menü „Szene“ den Punkt „Daten“ -> „Sicherungskopie“ verwenden. \ No newline at end of file +lblDataMigrationMsg=Datenmigration abgeschlossen!\nBitte überprüfen Sie Ihr Inventar und Ihre Ausrüstung.\nBitte erstellen Sie an dieser Stelle eine Sicherungskopie Ihrer Spielstände, da der aktuelle Spielstand noch nicht überschrieben wird, wenn Sie im Menü „Szene“ den Punkt „Daten“ -> „Sicherungskopie“ verwenden. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Verwijder niet-ondersteunde kaart \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index e82665d5aaf..cffccf1d684 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -3296,4 +3296,6 @@ cbPreloadCustomDrafts=Preload Custom Drafts nlPreloadCustomDrafts=If enabled, the custom drafts files are preloaded on startup (Forge will have longer startup time when parsing drafts files). lblRepairCost=Repair Cost: {0} ? lblRepair=Repair -lblDataMigrationMsg=Data Migration completed!\nPlease check your Inventory and Equipments.\nPlease make a backup of your saves at this point since the actual save is not yet overwritten by using the Data -> Backup at the Menu Scene. \ No newline at end of file +lblDataMigrationMsg=Data Migration completed!\nPlease check your Inventory and Equipments.\nPlease make a backup of your saves at this point since the actual save is not yet overwritten by using the Data -> Backup at the Menu Scene. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Remove unsupported card \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 0e10be48fd8..6a969b6fa39 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -3546,4 +3546,6 @@ cbPreloadCustomDrafts=Precargar borradores personalizados nlPreloadCustomDrafts=Si está habilitado, los archivos de borradores personalizados se precargan al inicio (Forge tendrá un tiempo de inicio más largo al analizar los archivos de borradores). lblRepairCost=Costo de reparación: {0} ? lblRepair=Reparar -lblDataMigrationMsg=¡Migración de datos completada!\nPor favor revise su inventario y equipos.\nPor favor, haz una copia de seguridad de tus partidas guardadas en este punto, ya que la partida guardada real aún no se sobrescribe al usar Datos -> Copia de seguridad en la Escena del menú. \ No newline at end of file +lblDataMigrationMsg=¡Migración de datos completada!\nPor favor revise su inventario y equipos.\nPor favor, haz una copia de seguridad de tus partidas guardadas en este punto, ya que la partida guardada real aún no se sobrescribe al usar Datos -> Copia de seguridad en la Escena del menú. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Quitar tarjeta incompatible \ No newline at end of file diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 3504790fa5d..e2f2b5c4a71 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -3547,4 +3547,6 @@ cbPreloadCustomDrafts=Précharger les brouillons personnalisés nlPreloadCustomDrafts=Si cette option est activée, les fichiers de brouillons personnalisés sont préchargés au démarrage (Forge aura un temps de démarrage plus long lors de l'analyse des fichiers de brouillons). lblRepairCost=Coût de réparation : {0} ? lblRepair=Réparation -lblDataMigrationMsg=Migration des données terminée!\nVeuillez vérifier votre inventaire et vos équipements.\nVeuillez effectuer une sauvegarde de vos sauvegardes à ce stade, car la sauvegarde réelle n'est pas encore écrasée en utilisant Données -> Sauvegarde dans le menu Scène. \ No newline at end of file +lblDataMigrationMsg=Migration des données terminée!\nVeuillez vérifier votre inventaire et vos équipements.\nVeuillez effectuer une sauvegarde de vos sauvegardes à ce stade, car la sauvegarde réelle n'est pas encore écrasée en utilisant Données -> Sauvegarde dans le menu Scène. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Supprimer la carte non prise en charge \ No newline at end of file diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 60765f4a8e4..054dcadfdf1 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -3545,4 +3545,6 @@ cbPreloadCustomDrafts=Precarica bozze personalizzate nlPreloadCustomDrafts=Se abilitato, i file delle bozze personalizzate vengono precaricati all'avvio (Forge avrà tempi di avvio più lunghi durante l'analisi dei file delle bozze). lblRepairCost=Costo di riparazione: {0} ? lblRepair=Riparazione -lblDataMigrationMsg=Migrazione dati completata!\nControlla il tuo inventario e le tue attrezzature.\nA questo punto, esegui un backup dei tuoi salvataggi, poiché il salvataggio effettivo non è ancora stato sovrascritto, utilizzando Dati -> Backup nel menu Scena. \ No newline at end of file +lblDataMigrationMsg=Migrazione dati completata!\nControlla il tuo inventario e le tue attrezzature.\nA questo punto, esegui un backup dei tuoi salvataggi, poiché il salvataggio effettivo non è ancora stato sovrascritto, utilizzando Dati -> Backup nel menu Scena. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Rimuovi la carta non supportata \ No newline at end of file diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 8612c0ac14f..b69952d3fdc 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -3541,4 +3541,6 @@ cbPreloadCustomDrafts=カスタムドラフトをプリロードする nlPreloadCustomDrafts=有効にすると、起動時にカスタム ドラフト ファイルがプリロードされます (ドラフト ファイルを解析するときに Forge の起動時間が長くなります)。 lblRepairCost=修理費用: {0}? lblRepair=修理 -lblDataMigrationMsg=データ移行が完了しました!\nインベントリと装備を確認してください。\n実際の保存はまだメニューシーンの「データ」->「バックアップ」を使用して上書きされていないため、この時点で保存のバックアップを作成してください。 \ No newline at end of file +lblDataMigrationMsg=データ移行が完了しました!\nインベントリと装備を確認してください。\n実際の保存はまだメニューシーンの「データ」->「バックアップ」を使用して上書きされていないため、この時点で保存のバックアップを作成してください。 +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=サポートされていないカードを削除する \ No newline at end of file diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 5dbb6aa09ea..2af56447c9a 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -3630,4 +3630,6 @@ cbPreloadCustomDrafts=Pré-carregar rascunhos personalizados nlPreloadCustomDrafts=Se habilitado, os arquivos de rascunhos personalizados serão pré-carregados na inicialização (o Forge terá um tempo de inicialização maior ao analisar arquivos de rascunhos). lblRepairCost=Custo do reparo: {0} ? lblRepair=Reparar -lblDataMigrationMsg=Migração de dados concluída!\nVerifique seu inventário e equipamentos.\nPor favor, faça um backup dos seus arquivos salvos neste momento, já que o arquivo salvo atual ainda não foi sobrescrito usando Dados -> Backup na Cena do Menu. \ No newline at end of file +lblDataMigrationMsg=Migração de dados concluída!\nVerifique seu inventário e equipamentos.\nPor favor, faça um backup dos seus arquivos salvos neste momento, já que o arquivo salvo atual ainda não foi sobrescrito usando Dados -> Backup na Cena do Menu. +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=Remover cartão não suportado \ No newline at end of file diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 55bcd7cc03b..89382b38946 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -3532,4 +3532,6 @@ cbPreloadCustomDrafts=预加载自定义草稿 nlPreloadCustomDrafts=如果启用,自定义草稿文件将在启动时预加载(Forge 在解析草稿文件时会有更长的启动时间)。 lblRepairCost=维修费用:{0}? lblRepair=维修 -lblDataMigrationMsg=数据迁移完成!\n请检查您的库存和设备。此时请备份您的保存内容,因为尚未使用菜单场景中的数据->备份覆盖实际保存内容。 \ No newline at end of file +lblDataMigrationMsg=数据迁移完成!\n请检查您的库存和设备。此时请备份您的保存内容,因为尚未使用菜单场景中的数据->备份覆盖实际保存内容。 +#AdventureDeckEditor.java +lblRemoveUnsupportedCard=移除不受支持的卡 \ No newline at end of file From 31e537f42b2bdaff8fb9bdac299831be10ff0973 Mon Sep 17 00:00:00 2001 From: Eradev Date: Tue, 26 Aug 2025 06:33:30 -0400 Subject: [PATCH 2/2] Remove changes to FContainer --- forge-gui-mobile/src/forge/toolbox/FContainer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/toolbox/FContainer.java b/forge-gui-mobile/src/forge/toolbox/FContainer.java index b7b85529963..2a747c9dd1d 100644 --- a/forge-gui-mobile/src/forge/toolbox/FContainer.java +++ b/forge-gui-mobile/src/forge/toolbox/FContainer.java @@ -23,7 +23,6 @@ public abstract class FContainer extends FDisplayObject { public void clear() { children.clear(); - ((ArrayList) children).trimToSize(); } public int indexOf(FDisplayObject child) {