mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 03:51:58 -08:00
Fixed NPE error on AI calcs
This commit is contained in:
parent
d0e4ecaba1
commit
4495d75d8a
5 changed files with 79 additions and 88 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
package org.mage.plugins.card.dl.sources;
|
package org.mage.plugins.card.dl.sources;
|
||||||
|
|
||||||
import mage.client.dialog.PreferencesDialog;
|
import mage.client.util.CardLanguage;
|
||||||
import org.mage.plugins.card.images.CardDownloadData;
|
import org.mage.plugins.card.images.CardDownloadData;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -14,20 +14,22 @@ public enum ScryfallImageSource implements CardImageSource {
|
||||||
|
|
||||||
private final Set<String> supportedSets;
|
private final Set<String> supportedSets;
|
||||||
private final Map<String, String> languageAliases;
|
private final Map<String, String> languageAliases;
|
||||||
|
private CardLanguage currentLanguage = CardLanguage.ENGLISH; // working language
|
||||||
|
|
||||||
ScryfallImageSource() {
|
ScryfallImageSource() {
|
||||||
// https://scryfall.com/docs/api/languages
|
// https://scryfall.com/docs/api/languages
|
||||||
languageAliases = new HashMap<>();
|
languageAliases = new HashMap<>();
|
||||||
languageAliases.put("en", "en");
|
languageAliases.put(CardLanguage.ENGLISH.getCode(), "en");
|
||||||
languageAliases.put("es", "es");
|
languageAliases.put(CardLanguage.SPANISH.getCode(), "es");
|
||||||
languageAliases.put("jp", "ja");
|
languageAliases.put(CardLanguage.FRENCH.getCode(), "fr");
|
||||||
languageAliases.put("it", "it");
|
languageAliases.put(CardLanguage.GERMAN.getCode(), "de");
|
||||||
languageAliases.put("fr", "fr");
|
languageAliases.put(CardLanguage.ITALIAN.getCode(), "it");
|
||||||
languageAliases.put("cn", "zhs"); // Simplified Chinese
|
languageAliases.put(CardLanguage.PORTUGUESE.getCode(), "pt");
|
||||||
languageAliases.put("de", "de");
|
languageAliases.put(CardLanguage.JAPANESE.getCode(), "ja");
|
||||||
languageAliases.put("ko", "ko");
|
languageAliases.put(CardLanguage.KOREAN.getCode(), "ko");
|
||||||
languageAliases.put("pt", "pt");
|
languageAliases.put(CardLanguage.RUSSIAN.getCode(), "ru");
|
||||||
languageAliases.put("ru", "ru");
|
languageAliases.put(CardLanguage.CHINES_SIMPLE.getCode(), "zhs");
|
||||||
|
languageAliases.put(CardLanguage.CHINES_TRADITION.getCode(), "zht");
|
||||||
|
|
||||||
supportedSets = new LinkedHashSet<>();
|
supportedSets = new LinkedHashSet<>();
|
||||||
// supportedSets.add("PTC"); //
|
// supportedSets.add("PTC"); //
|
||||||
|
|
@ -245,9 +247,9 @@ public enum ScryfallImageSource implements CardImageSource {
|
||||||
@Override
|
@Override
|
||||||
public CardImageUrls generateURL(CardDownloadData card) throws Exception {
|
public CardImageUrls generateURL(CardDownloadData card) throws Exception {
|
||||||
|
|
||||||
String preferredLanguage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PREF_LANGUAGE, "en");
|
String preferredCode = this.getCurrentLanguage().getCode();
|
||||||
String defaultCode = "en";
|
String defaultCode = CardLanguage.ENGLISH.getCode();
|
||||||
String localizedCode = languageAliases.getOrDefault(preferredLanguage, defaultCode);
|
String localizedCode = languageAliases.getOrDefault(preferredCode, defaultCode);
|
||||||
// loc example: https://api.scryfall.com/cards/xln/121/ru?format=image
|
// loc example: https://api.scryfall.com/cards/xln/121/ru?format=image
|
||||||
|
|
||||||
// WARNING, some cards haven't direct images and uses random GUID:
|
// WARNING, some cards haven't direct images and uses random GUID:
|
||||||
|
|
@ -345,6 +347,21 @@ public enum ScryfallImageSource implements CardImageSource {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLanguagesSupport() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCurrentLanguage(CardLanguage cardLanguage) {
|
||||||
|
this.currentLanguage = cardLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CardLanguage getCurrentLanguage() {
|
||||||
|
return currentLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doPause(String httpImageUrl) {
|
public void doPause(String httpImageUrl) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import java.util.logging.Level;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.mage.plugins.card.images.CardDownloadData;
|
import org.mage.plugins.card.images.CardDownloadData;
|
||||||
import org.mage.plugins.card.images.DownloadPictures;
|
import org.mage.plugins.card.images.DownloadPicturesService;
|
||||||
import org.mage.plugins.card.utils.CardImageUtils;
|
import org.mage.plugins.card.utils.CardImageUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -182,7 +182,7 @@ public enum TokensMtgImageSource implements CardImageSource {
|
||||||
private HashMap<String, ArrayList<TokenData>> getTokensData() throws IOException {
|
private HashMap<String, ArrayList<TokenData>> getTokensData() throws IOException {
|
||||||
synchronized (tokensDataSync) {
|
synchronized (tokensDataSync) {
|
||||||
if (tokensData == null) {
|
if (tokensData == null) {
|
||||||
DownloadPictures.getInstance().updateAndViewMessage("Creating token data...");
|
DownloadPicturesService.getInstance().updateAndViewMessage("Find tokens data...");
|
||||||
tokensData = new HashMap<>();
|
tokensData = new HashMap<>();
|
||||||
|
|
||||||
// get tokens data from resource file
|
// get tokens data from resource file
|
||||||
|
|
@ -233,10 +233,10 @@ public enum TokensMtgImageSource implements CardImageSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DownloadPictures.getInstance().updateAndViewMessage("");
|
DownloadPicturesService.getInstance().updateAndViewMessage("");
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.warn("Failed to get tokens description from tokens.mtg.onl", ex);
|
logger.warn("Failed to get tokens description from tokens.mtg.onl", ex);
|
||||||
DownloadPictures.getInstance().updateAndViewMessage(ex.getMessage());
|
DownloadPicturesService.getInstance().updateAndViewMessage(ex.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,10 @@
|
||||||
package org.mage.plugins.card.dl.sources;
|
package org.mage.plugins.card.dl.sources;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import mage.cards.Sets;
|
import mage.cards.Sets;
|
||||||
import mage.cards.repository.CardCriteria;
|
import mage.cards.repository.CardCriteria;
|
||||||
import mage.cards.repository.CardInfo;
|
import mage.cards.repository.CardInfo;
|
||||||
import mage.cards.repository.CardRepository;
|
import mage.cards.repository.CardRepository;
|
||||||
import mage.client.dialog.PreferencesDialog;
|
import mage.client.util.CardLanguage;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.jsoup.nodes.Document;
|
import org.jsoup.nodes.Document;
|
||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
|
|
@ -24,6 +12,12 @@ import org.jsoup.select.Elements;
|
||||||
import org.mage.plugins.card.images.CardDownloadData;
|
import org.mage.plugins.card.images.CardDownloadData;
|
||||||
import org.mage.plugins.card.utils.CardImageUtils;
|
import org.mage.plugins.card.utils.CardImageUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author North
|
* @author North
|
||||||
*/
|
*/
|
||||||
|
|
@ -37,6 +31,7 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
private final Map<String, String> languageAliases;
|
private final Map<String, String> languageAliases;
|
||||||
private final Map<String, Map<String, String>> sets;
|
private final Map<String, Map<String, String>> sets;
|
||||||
private final Set<String> supportedSets;
|
private final Set<String> supportedSets;
|
||||||
|
private CardLanguage currentLanguage = CardLanguage.ENGLISH; // working language
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSourceName() {
|
public String getSourceName() {
|
||||||
|
|
@ -44,6 +39,20 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
}
|
}
|
||||||
|
|
||||||
WizardCardsImageSource() {
|
WizardCardsImageSource() {
|
||||||
|
|
||||||
|
languageAliases = new HashMap<>();
|
||||||
|
languageAliases.put(CardLanguage.ENGLISH.getCode(), "English");
|
||||||
|
languageAliases.put(CardLanguage.SPANISH.getCode(), "Spanish");
|
||||||
|
languageAliases.put(CardLanguage.FRENCH.getCode(), "French");
|
||||||
|
languageAliases.put(CardLanguage.GERMAN.getCode(), "German");
|
||||||
|
languageAliases.put(CardLanguage.ITALIAN.getCode(), "Italian");
|
||||||
|
languageAliases.put(CardLanguage.PORTUGUESE.getCode(), "Portuguese (Brazil)");
|
||||||
|
languageAliases.put(CardLanguage.JAPANESE.getCode(), "Japanese");
|
||||||
|
languageAliases.put(CardLanguage.KOREAN.getCode(), "Korean");
|
||||||
|
languageAliases.put(CardLanguage.RUSSIAN.getCode(), "Russian");
|
||||||
|
languageAliases.put(CardLanguage.CHINES_SIMPLE.getCode(), "Chinese Simplified");
|
||||||
|
languageAliases.put(CardLanguage.CHINES_TRADITION.getCode(), "Chinese Traditional ");
|
||||||
|
|
||||||
supportedSets = new LinkedHashSet<>();
|
supportedSets = new LinkedHashSet<>();
|
||||||
// supportedSets.add("PTC"); // Prerelease Events
|
// supportedSets.add("PTC"); // Prerelease Events
|
||||||
supportedSets.add("LEA");
|
supportedSets.add("LEA");
|
||||||
|
|
@ -430,18 +439,6 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
setsAliases.put("WTH", "Weatherlight");
|
setsAliases.put("WTH", "Weatherlight");
|
||||||
setsAliases.put("WWK", "Worldwake");
|
setsAliases.put("WWK", "Worldwake");
|
||||||
setsAliases.put("ZEN", "Zendikar");
|
setsAliases.put("ZEN", "Zendikar");
|
||||||
|
|
||||||
languageAliases = new HashMap<>();
|
|
||||||
languageAliases.put("en", "English");
|
|
||||||
languageAliases.put("es", "Spanish");
|
|
||||||
languageAliases.put("jp", "Japanese");
|
|
||||||
languageAliases.put("it", "Italian");
|
|
||||||
languageAliases.put("fr", "French");
|
|
||||||
languageAliases.put("cn", "Chinese Simplified");
|
|
||||||
languageAliases.put("de", "German");
|
|
||||||
languageAliases.put("ko", "Korean");
|
|
||||||
languageAliases.put("pt", "Portuguese (Brazil)");
|
|
||||||
languageAliases.put("ru", "Russian");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -517,7 +514,7 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
if (setNames == null) {
|
if (setNames == null) {
|
||||||
setNames = Sets.getInstance().get(cardSet).getName();
|
setNames = Sets.getInstance().get(cardSet).getName();
|
||||||
}
|
}
|
||||||
String preferredLanguage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PREF_LANGUAGE, "en");
|
|
||||||
for (String setName : setNames.split("\\^")) {
|
for (String setName : setNames.split("\\^")) {
|
||||||
// String URLSetName = URLEncoder.encode(setName, "UTF-8");
|
// String URLSetName = URLEncoder.encode(setName, "UTF-8");
|
||||||
String URLSetName = setName.replaceAll(" ", "%20");
|
String URLSetName = setName.replaceAll(" ", "%20");
|
||||||
|
|
@ -555,7 +552,7 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
cardName = cardName.substring(0, pos1);
|
cardName = cardName.substring(0, pos1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Integer preferredMultiverseId = getLocalizedMultiverseId(preferredLanguage, multiverseId);
|
Integer preferredMultiverseId = getLocalizedMultiverseId(getCurrentLanguage().getCode(), multiverseId);
|
||||||
setLinks.put(cardName.toLowerCase(Locale.ENGLISH) + numberChar, generateLink(preferredMultiverseId));
|
setLinks.put(cardName.toLowerCase(Locale.ENGLISH) + numberChar, generateLink(preferredMultiverseId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -618,7 +615,7 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getLocalizedMultiverseId(String preferredLanguage, Integer multiverseId) throws IOException {
|
private int getLocalizedMultiverseId(String preferredLanguage, Integer multiverseId) throws IOException {
|
||||||
if (preferredLanguage.equals("en")) {
|
if (preferredLanguage.equals(CardLanguage.ENGLISH.getCode())) {
|
||||||
return multiverseId;
|
return multiverseId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -682,43 +679,6 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
return 60.0f;
|
return 60.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// private final class GetImageLinkTask implements Runnable {
|
|
||||||
//
|
|
||||||
// private int multiverseId;
|
|
||||||
// private String cardName;
|
|
||||||
// private String preferredLanguage;
|
|
||||||
// private LinkedHashMap setLinks;
|
|
||||||
//
|
|
||||||
// public GetImageLinkTask(int multiverseId, String cardName, String preferredLanguage, LinkedHashMap setLinks) {
|
|
||||||
// try {
|
|
||||||
// this.multiverseId = multiverseId;
|
|
||||||
// this.cardName = cardName;
|
|
||||||
// this.preferredLanguage = preferredLanguage;
|
|
||||||
// this.setLinks = setLinks;
|
|
||||||
// } catch (Exception ex) {
|
|
||||||
// logger.error(ex.getMessage());
|
|
||||||
// logger.error("multiverseId: " + multiverseId);
|
|
||||||
// logger.error("cardName: " + cardName);
|
|
||||||
// logger.error("preferredLanguage: " + preferredLanguage);
|
|
||||||
// logger.error("setLinks: " + setLinks.toString());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void run() {
|
|
||||||
// try {
|
|
||||||
// if (cardName.equals("Forest") || cardName.equals("Swamp") || cardName.equals("Mountain") || cardName.equals("Island") || cardName.equals("Plains")) {
|
|
||||||
// setLinks.putAll(getLandVariations(multiverseId, cardName));
|
|
||||||
// } else {
|
|
||||||
// Integer preferredMultiverseId = getLocalizedMultiverseId(preferredLanguage, multiverseId);
|
|
||||||
// setLinks.put(cardName.toLowerCase(Locale.ENGLISH), generateLink(preferredMultiverseId));
|
|
||||||
// }
|
|
||||||
// } catch (IOException | NumberFormatException ex) {
|
|
||||||
// logger.error("Exception when parsing the wizards page: " + ex.getMessage());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
@Override
|
@Override
|
||||||
public int getTotalImages() {
|
public int getTotalImages() {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -729,6 +689,21 @@ public enum WizardCardsImageSource implements CardImageSource {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLanguagesSupport() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCurrentLanguage(CardLanguage cardLanguage) {
|
||||||
|
this.currentLanguage = cardLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CardLanguage getCurrentLanguage() {
|
||||||
|
return currentLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doPause(String httpImageUrl) {
|
public void doPause(String httpImageUrl) {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -111,9 +111,8 @@ public class ComputerPlayer7 extends ComputerPlayer6 {
|
||||||
Game sim = createSimulation(game);
|
Game sim = createSimulation(game);
|
||||||
SimulationNode2.resetCount();
|
SimulationNode2.resetCount();
|
||||||
root = new SimulationNode2(null, sim, maxDepth, playerId);
|
root = new SimulationNode2(null, sim, maxDepth, playerId);
|
||||||
addActionsTimed();
|
addActionsTimed(); // TODO: root can be null again after addActionsTimed O_o need to research (it's a CPU AI problem?)
|
||||||
if (root.children != null
|
if (root != null && root.children != null && !root.children.isEmpty()) {
|
||||||
&& !root.children.isEmpty()) {
|
|
||||||
logger.trace("After add actions timed: root.children.size = " + root.children.size());
|
logger.trace("After add actions timed: root.children.size = " + root.children.size());
|
||||||
root = root.children.get(0);
|
root = root.children.get(0);
|
||||||
// prevent repeating always the same action with no cost
|
// prevent repeating always the same action with no cost
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import org.junit.Assert;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mage.plugins.card.images.CardDownloadData;
|
import org.mage.plugins.card.images.CardDownloadData;
|
||||||
import org.mage.plugins.card.images.DownloadPictures;
|
import org.mage.plugins.card.images.DownloadPicturesService;
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
@ -425,7 +425,7 @@ public class VerifyCardDataTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// tok file's data
|
// tok file's data
|
||||||
ArrayList<CardDownloadData> tokFileTokens = DownloadPictures.getTokenCardUrls();
|
ArrayList<CardDownloadData> tokFileTokens = DownloadPicturesService.getTokenCardUrls();
|
||||||
LinkedHashMap<String, String> tokDataClassesIndex = new LinkedHashMap<>();
|
LinkedHashMap<String, String> tokDataClassesIndex = new LinkedHashMap<>();
|
||||||
LinkedHashMap<String, String> tokDataNamesIndex = new LinkedHashMap<>();
|
LinkedHashMap<String, String> tokDataNamesIndex = new LinkedHashMap<>();
|
||||||
for (CardDownloadData tokData : tokFileTokens) {
|
for (CardDownloadData tokData : tokFileTokens) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue