mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Patch Net Decks Archive
This commit is contained in:
@@ -326,7 +326,33 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
|
||||
|
||||
@Override
|
||||
public void deckTypeSelected(final DecksComboBoxEvent ev) {
|
||||
if ((ev.getDeckType() == DeckType.NET_DECK || ev.getDeckType() == DeckType.NET_COMMANDER_DECK) && !refreshingDeckType) {
|
||||
if (ev.getDeckType() == DeckType.NET_ARCHIVE_STANDARD_DECK&& !refreshingDeckType) {
|
||||
if(lstDecks.getGameType() != GameType.Constructed)
|
||||
return;
|
||||
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks
|
||||
@Override
|
||||
public void run() {
|
||||
final NetDeckArchiveStandard category = NetDeckArchiveStandard.selectAndLoad(lstDecks.getGameType());
|
||||
|
||||
FThreads.invokeInEdtLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (category == null) {
|
||||
decksComboBox.setDeckType(selectedDeckType); //restore old selection if user cancels
|
||||
if (selectedDeckType == DeckType.NET_ARCHIVE_STANDARD_DECK && NetDeckArchiveStandard != null) {
|
||||
decksComboBox.setText(NetDeckArchiveStandard.getDeckType());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
NetDeckArchiveStandard = category;
|
||||
refreshDecksList(ev.getDeckType(), true, ev);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return;
|
||||
} else if ((ev.getDeckType() == DeckType.NET_DECK || ev.getDeckType() == DeckType.NET_COMMANDER_DECK) && !refreshingDeckType) {
|
||||
FThreads.invokeInBackgroundThread(new Runnable() { //needed for loading net decks
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -35,7 +35,6 @@ lblQuestDeckEditor=冒险套牌编辑器
|
||||
lblQuestTournamentDeckEditor=冒险比赛套牌编辑器
|
||||
lblSpellShop=卡牌商店
|
||||
lblLeaveShop=离开商店
|
||||
lblLeaveDraft=离开轮抓
|
||||
lblBazaar=珍宝集市
|
||||
lblConcedeGame=这场游戏认输
|
||||
txerrFailedtodeletelayoutfile=删除布局文件失败。
|
||||
@@ -1231,7 +1230,6 @@ lblSelectNCardsToDiscardUnlessDiscarduType=选择要丢弃的%d张牌,除非
|
||||
lblCleanupPhase=清除步骤
|
||||
lblSelectCardsToDiscardHandDownMaximum=选择要丢弃的{0}张牌,以使你的手牌数量减少到{1}张。
|
||||
lblChooseMinCardToDiscard=选择%d张牌弃掉
|
||||
lblDiscarded=弃牌
|
||||
lblChooseDamageOrderFor=选择{0}造成伤害的顺序
|
||||
lblDamagedFirst=先造成伤害
|
||||
lblChooseBlockerAfterWhichToPlaceAttackert=选择{0}后造成伤害的阻挡者; cancel to place it first
|
||||
|
||||
2366
forge-gui/res/lists/net-decks-archive-standard.txt
Normal file
2366
forge-gui/res/lists/net-decks-archive-standard.txt
Normal file
File diff suppressed because it is too large
Load Diff
121
forge-gui/src/main/java/forge/deck/NetDeckArchiveStandard.java
Normal file
121
forge-gui/src/main/java/forge/deck/NetDeckArchiveStandard.java
Normal file
@@ -0,0 +1,121 @@
|
||||
package forge.deck;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import forge.GuiBase;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.deck.io.DeckStorage;
|
||||
import forge.download.GuiDownloadZipService;
|
||||
import forge.game.GameType;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.WaitCallback;
|
||||
import forge.util.gui.SGuiChoose;
|
||||
import forge.util.storage.StorageBase;
|
||||
|
||||
public class NetDeckArchiveStandard extends StorageBase<Deck> {
|
||||
public static final String PREFIX = "NET_ARCHIVE_STANDARD_DECK";
|
||||
private static Map<String, NetDeckArchiveStandard> constructed, commander, brawl;
|
||||
|
||||
private static Map<String, NetDeckArchiveStandard> loadCategories(String filename) {
|
||||
Map<String, NetDeckArchiveStandard> categories = new TreeMap<>();
|
||||
if (FileUtil.doesFileExist(filename)) {
|
||||
List<String> lines = FileUtil.readFile(filename);
|
||||
for (String line : lines) {
|
||||
int idx = line.indexOf('|');
|
||||
if (idx != -1) {
|
||||
String name = line.substring(0, idx).trim();
|
||||
String url = line.substring(idx + 1).trim();
|
||||
categories.put(name, new NetDeckArchiveStandard(name, url));
|
||||
}
|
||||
}
|
||||
}
|
||||
return categories;
|
||||
}
|
||||
|
||||
public static NetDeckArchiveStandard selectAndLoad(GameType gameType) {
|
||||
return selectAndLoad(gameType, null);
|
||||
}
|
||||
public static NetDeckArchiveStandard selectAndLoad(GameType gameType, String name) {
|
||||
Map<String, NetDeckArchiveStandard> categories;
|
||||
switch (gameType) {
|
||||
case Constructed:
|
||||
case Gauntlet:
|
||||
if (constructed == null) {
|
||||
constructed = loadCategories(ForgeConstants.NET_ARCHIVE_STANDARD_DECKS_LIST_FILE);
|
||||
}
|
||||
categories = constructed;
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
if (name != null) {
|
||||
NetDeckArchiveStandard category = categories.get(name);
|
||||
if (category != null && category.map.isEmpty()) {
|
||||
//if name passed in, try to load decks from current cached files
|
||||
File downloadDir = new File(category.getFullPath());
|
||||
if (downloadDir.exists()) {
|
||||
for (File file : downloadDir.listFiles(DeckStorage.DCK_FILE_FILTER)) {
|
||||
Deck deck = DeckSerializer.fromFile(file);
|
||||
if (deck != null) {
|
||||
category.map.put(deck.getName(), deck);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return category;
|
||||
}
|
||||
|
||||
final NetDeckArchiveStandard c = SGuiChoose.oneOrNone("Select a Net Deck Archive Standard category", categories.values());
|
||||
if (c == null) { return null; }
|
||||
|
||||
if (c.map.isEmpty()) { //only download decks once per session
|
||||
WaitCallback<Boolean> callback = new WaitCallback<Boolean>() {
|
||||
@Override
|
||||
public void run() {
|
||||
String downloadLoc = c.getFullPath();
|
||||
GuiBase.getInterface().download(new GuiDownloadZipService(c.getName(), "decks", c.getUrl(), downloadLoc, downloadLoc, null) {
|
||||
@Override
|
||||
protected void copyInputStream(InputStream in, String outPath) throws IOException {
|
||||
super.copyInputStream(in, outPath);
|
||||
|
||||
Deck deck = DeckSerializer.fromFile(new File(outPath));
|
||||
if (deck != null) {
|
||||
c.map.put(deck.getName(), deck);
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
};
|
||||
if (!callback.invokeAndWait()) { return null; } //wait for download to finish
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
private final String url;
|
||||
|
||||
private NetDeckArchiveStandard(String name0, String url0) {
|
||||
super(name0, ForgeConstants.DECK_NET_ARCHIVE_DIR + name0, new HashMap<>());
|
||||
url = url0;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getDeckType() {
|
||||
return "Net Archive Standard Decks - " + name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user