diff --git a/forge-core/src/main/java/forge/card/CardRulesPredicates.java b/forge-core/src/main/java/forge/card/CardRulesPredicates.java index 66dca47b592..4133e4e5bbc 100644 --- a/forge-core/src/main/java/forge/card/CardRulesPredicates.java +++ b/forge-core/src/main/java/forge/card/CardRulesPredicates.java @@ -350,7 +350,11 @@ public final class CardRulesPredicates { boolean shouldContain; switch (this.field) { case NAME: - return op(card.getName(), this.operand); + boolean otherName = false; + if (card.getOtherPart() != null) { + otherName = op(card.getOtherPart().getName(), this.operand); + } + return otherName || op(card.getName(), this.operand); case SUBTYPE: shouldContain = (this.getOperator() == StringOp.CONTAINS) || (this.getOperator() == StringOp.EQUALS); return shouldContain == card.getType().hasSubtype(this.operand); diff --git a/forge-gui-desktop/src/main/java/forge/ImageCache.java b/forge-gui-desktop/src/main/java/forge/ImageCache.java index a00c1740386..0dc85e1085f 100644 --- a/forge-gui-desktop/src/main/java/forge/ImageCache.java +++ b/forge-gui-desktop/src/main/java/forge/ImageCache.java @@ -107,7 +107,10 @@ public class ImageCache { * and cannot be loaded from disk. pass -1 for width and/or height to avoid resizing in that dimension. */ public static BufferedImage getImage(InventoryItem ii, int width, int height) { - return scaleImage(ii.getImageKey(false), width, height, true); + return getImage(ii, width, height, false); + } + public static BufferedImage getImage(InventoryItem ii, int width, int height, boolean altState) { + return scaleImage(ii.getImageKey(altState), width, height, true); } /** diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java index 29888438033..0460643fdfe 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java @@ -37,6 +37,7 @@ import forge.game.card.CardView; import forge.gui.framework.ILocalRepaint; import forge.item.IPaperCard; import forge.item.InventoryItem; +import forge.item.PaperCard; import forge.itemmanager.ColumnDef; import forge.itemmanager.GroupDef; import forge.itemmanager.ItemManager; @@ -79,6 +80,8 @@ public class ImageView extends ItemView { private ItemInfo hoveredItem; private ItemInfo focalItem; private boolean panelOptionsCreated = false; + // cards with alternate states are added twice for displaying + private InventoryItem lastAltCard = null; private final List orderedItems = new ArrayList<>(); private final List groups = new ArrayList<>(); @@ -1141,7 +1144,27 @@ public class ImageView extends ItemView { g.fillRoundRect(bounds.x, bounds.y, bounds.width, bounds.height, cornerSize, cornerSize); InventoryItem item = itemInfo.item; - BufferedImage img = ImageCache.getImage(itemInfo.item, bounds.width - 2 * borderSize, bounds.height - 2 * borderSize); + + boolean tryAltState = false; + if (hoveredItem == null || hoveredItem.item != item) { + if (item instanceof PaperCard) { + if (((PaperCard)item).getRules().getOtherPart() != null) { + if (item.equals(lastAltCard)) { + tryAltState = true; + lastAltCard = null; + } + else { + lastAltCard = item; + } + } + else { + lastAltCard = null; + } + } + } + + BufferedImage img = ImageCache.getImage(item, bounds.width - 2 * borderSize, bounds.height - 2 * borderSize, tryAltState); + if (img != null) { g.drawImage(img, null, bounds.x + borderSize, bounds.y + borderSize); } @@ -1149,7 +1172,7 @@ public class ImageView extends ItemView { g.setColor(Color.white); Shape clip = g.getClip(); g.setClip(bounds); - g.drawString(itemInfo.item.getName(), bounds.x + 10, bounds.y + 20); + g.drawString(item.getName(), bounds.x + 10, bounds.y + 20); g.setClip(clip); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java index 08ba64ea142..bf84c8450f8 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java @@ -286,7 +286,7 @@ public final class CEditorConstructed extends CDeckEditor { break; //no other sections should support toAlternate } } - else { + else if (!editor.getCatalogManager().isInfinite()) { editor.getCatalogManager().addItems(items); } editor.getDeckManager().removeItems(items); diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index b782c039c60..be65ab4074e 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -484,6 +484,7 @@ public class QuestController { } public HashSet GetRating() { + if (model == null) return null; return model.Ratings; }