Skip to content

Commit 8dec122

Browse files
authored
CardFaceView: make better Serializable (Card-Forge#9405)
1 parent df90e40 commit 8dec122

File tree

5 files changed

+34
-38
lines changed

5 files changed

+34
-38
lines changed

forge-core/src/main/java/forge/card/ICardCharacteristics.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package forge.card;
22

33
import forge.card.mana.ManaCost;
4+
import forge.util.IHasName;
45

56
import java.util.Set;
67

7-
public interface ICardCharacteristics {
8-
String getName();
8+
public interface ICardCharacteristics extends IHasName {
99
CardType getType();
1010
ManaCost getManaCost();
1111
ColorSet getColor();

forge-game/src/main/java/forge/game/ability/effects/VentureEffect.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.ArrayList;
44
import java.util.List;
55
import java.util.Map;
6+
import java.util.TreeMap;
67
import java.util.function.Predicate;
78
import java.util.stream.Collectors;
89

@@ -57,7 +58,7 @@ private Card getDungeonCard(SpellAbility sa, Player player, Map<AbilityKey, Obje
5758
filter = e -> e.getValue().isEnterableDungeon();
5859
}
5960
Map<ICardFace, String> mapping = StaticData.instance().getAllTokens().getRules().entrySet()
60-
.stream().filter(filter).collect(Collectors.toMap(e -> e.getValue().getMainPart(), Map.Entry::getKey));
61+
.stream().filter(filter).collect(Collectors.toMap(e -> e.getValue().getMainPart(), Map.Entry::getKey, (a,b) -> a, TreeMap::new));
6162
String message = Localizer.getInstance().getMessage("lblChooseDungeon");
6263
ICardFace chosen = player.getController().chooseSingleCardFace(sa, Lists.newArrayList(mapping.keySet()), message);
6364
if (chosen == null) {

forge-game/src/main/java/forge/game/card/CardFaceView.java

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,37 @@
22

33
import java.io.Serializable;
44

5-
public class CardFaceView implements Serializable, Comparable<CardFaceView> {
6-
/**
7-
*
8-
*/
9-
private static final long serialVersionUID = 1874016432028306386L;
10-
private String displayName;
11-
private String oracleName;
5+
import forge.card.ICardFace;
6+
import forge.util.CardTranslation;
7+
import forge.util.ITranslatable;
128

13-
public CardFaceView(String displayName) {
14-
this(displayName, displayName);
15-
}
9+
public record CardFaceView(String name, String displayName) implements Serializable, ITranslatable, Comparable<CardFaceView> {
10+
private static final long serialVersionUID = 1874016432028306386L;
1611

17-
public CardFaceView(String displayFaceName, String oracleFaceName ) {
18-
this.displayName = displayFaceName;
19-
this.oracleName = oracleFaceName;
12+
public CardFaceView(ICardFace face) {
13+
this(face.getName(), face.getDisplayName());
2014
}
2115

22-
public String getName() { return displayName;}
23-
24-
public void setName(String name) {
25-
this.displayName = name;
16+
@Override
17+
public String getName() {
18+
return this.name;
2619
}
27-
28-
public String getOracleName() { return oracleName; }
29-
30-
public void setOracleName(String name) {
31-
this.oracleName = name;
20+
@Override
21+
public String getTranslatedName() {
22+
return CardTranslation.getTranslatedName(this.displayName);
3223
}
33-
24+
@Override
3425
public String toString() {
35-
return displayName;
26+
return name;
3627
}
3728

3829
@Override
3930
public int compareTo(CardFaceView o) {
40-
return this.getOracleName().compareTo(o.getOracleName());
31+
return this.getName().compareTo(o.getName());
32+
}
33+
34+
@Override
35+
public int hashCode() {
36+
return this.name.hashCode();
4137
}
4238
}

forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import forge.screens.match.CMatchUI;
2626
import forge.toolbox.FOptionPane;
2727
import forge.util.FSerializableFunction;
28+
import forge.util.IHasName;
2829
import forge.util.Localizer;
2930
import forge.view.arcane.ListCardArea;
3031

@@ -155,12 +156,7 @@ public static <T> List<T> getChoices(final String message, final int min, final
155156
matchUI.setCard((InventoryItem) list.getSelectedValue());
156157
return;
157158
} else if (sel instanceof ICardFace || sel instanceof CardFaceView) {
158-
String faceName;
159-
if (sel instanceof ICardFace) {
160-
faceName = ((ICardFace) sel).getName();
161-
} else {
162-
faceName = ((CardFaceView) sel).getOracleName();
163-
}
159+
String faceName = ((IHasName)sel).getName();
164160
PaperCard paper = FModel.getMagicDb().getCommonCards().getUniqueByName(faceName);
165161
if (paper == null) {
166162
paper = FModel.getMagicDb().getVariantCards().getUniqueByName(faceName);

forge-gui/src/main/java/forge/player/PlayerControllerHuman.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
import java.io.*;
7878
import java.util.*;
7979
import java.util.Map.Entry;
80+
import java.util.function.Function;
8081
import java.util.function.Predicate;
8182
import java.util.stream.Collectors;
8283

@@ -1865,16 +1866,18 @@ public ICardFace chooseSingleCardFace(final SpellAbility sa, final String messag
18651866
final String name) {
18661867
List<CardFaceView> choices = FModel.getMagicDb().getCommonCards().streamAllFaces()
18671868
.filter(cpp)
1868-
.map(cardFace -> new CardFaceView(CardTranslation.getTranslatedName(cardFace.getDisplayName()), cardFace.getName()))
1869+
.map(CardFaceView::new)
18691870
.sorted()
18701871
.collect(Collectors.toList());
18711872
CardFaceView cardFaceView = getGui().one(message, choices);
1872-
return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getOracleName());
1873+
return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getName());
18731874
}
18741875

18751876
@Override
18761877
public ICardFace chooseSingleCardFace(SpellAbility sa, List<ICardFace> faces, String message) {
1877-
return getGui().one(message, faces);
1878+
Map<CardFaceView, ICardFace> mapped = faces.stream().collect(Collectors.toMap(CardFaceView::new, Function.identity(), (a, b) -> a, TreeMap::new));
1879+
CardFaceView chosen = getGui().one(message, Lists.newArrayList(mapped.keySet()));
1880+
return mapped.get(chosen);
18781881
}
18791882

18801883
@Override
@@ -2931,7 +2934,7 @@ private void addCardToZone(ZoneType zone, final boolean repeatLast, final boolea
29312934
return;
29322935
}
29332936

2934-
PaperCard c = carddb.getUniqueByName(f.getOracleName());
2937+
PaperCard c = carddb.getUniqueByName(f.getName());
29352938
final Card forgeCard = Card.fromPaperCard(c, p);
29362939
forgeCard.setGameTimestamp(getGame().getNextTimestamp());
29372940

0 commit comments

Comments
 (0)