mirror of
https://github.com/correl/mage.git
synced 2025-03-07 20:53:18 -10:00
Address crash points of JSON tests
This commit is contained in:
parent
e4e78d5509
commit
8a5f2288f9
9 changed files with 125 additions and 87 deletions
|
@ -13,12 +13,14 @@ import org.apache.log4j.Logger;
|
|||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author JayDi85
|
||||
* @author JayDi85 & ZeldaZach
|
||||
*/
|
||||
public class ExportJsonGameplayDataTest {
|
||||
|
||||
|
@ -33,96 +35,103 @@ public class ExportJsonGameplayDataTest {
|
|||
List<Card> cards = new ArrayList<>();
|
||||
Collection<ExpansionSet> sets = Sets.getInstance().values();
|
||||
for (ExpansionSet set : sets) {
|
||||
if (!set.getCode().equals("GRN")) {
|
||||
//continue;
|
||||
}
|
||||
|
||||
for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) {
|
||||
if (cards.size() >= 10) {
|
||||
//break;
|
||||
}
|
||||
cards.add(CardImpl.createCard(setInfo.getCardClass(), new CardSetInfo(setInfo.getName(), set.getCode(),
|
||||
setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo())));
|
||||
}
|
||||
}
|
||||
|
||||
JsonObject res = new JsonObject();
|
||||
JsonObject res = new JsonObject();
|
||||
|
||||
for (Card card : cards) {
|
||||
try {
|
||||
JsonObject resCard = new JsonObject();
|
||||
res.add(card.getName(), resCard);
|
||||
for (Card card : cards) {
|
||||
try {
|
||||
JsonObject resCard = new JsonObject();
|
||||
res.add(card.getName(), resCard);
|
||||
|
||||
JsonArray resAbilities = new JsonArray();
|
||||
resCard.add("abilities", resAbilities);
|
||||
for (Ability ability : card.getAbilities()) {
|
||||
JsonObject resAbility = new JsonObject();
|
||||
resAbilities.add(resAbility);
|
||||
|
||||
// basic
|
||||
resAbility.addProperty("cost", ability.getManaCosts().getText());
|
||||
resAbility.addProperty("name", ability.toString());
|
||||
resAbility.addProperty("class", ability.getClass().getSimpleName());
|
||||
//resAbility.addProperty("rule", ability.getRule());
|
||||
|
||||
// modes
|
||||
JsonArray resModes = new JsonArray();
|
||||
resAbility.add("modes", resModes);
|
||||
for (Mode mode : ability.getModes().values()) {
|
||||
JsonObject resMode = new JsonObject();
|
||||
resModes.add(resMode);
|
||||
JsonArray resAbilities = new JsonArray();
|
||||
resCard.add("abilities", resAbilities);
|
||||
for (Ability ability : card.getAbilities()) {
|
||||
JsonObject resAbility = new JsonObject();
|
||||
resAbilities.add(resAbility);
|
||||
|
||||
// basic
|
||||
//resMode.addProperty("name", mode.toString());
|
||||
resAbility.addProperty("cost", ability.getManaCosts().getText());
|
||||
resAbility.addProperty("name", ability.toString());
|
||||
resAbility.addProperty("class", ability.getClass().getSimpleName());
|
||||
//resAbility.addProperty("rule", ability.getRule());
|
||||
|
||||
// effects
|
||||
JsonArray resEffects = new JsonArray();
|
||||
resMode.add("effects", resEffects);
|
||||
for (Effect effect : mode.getEffects()) {
|
||||
JsonObject resEffect = new JsonObject();
|
||||
resEffects.add(resEffect);
|
||||
// modes
|
||||
JsonArray resModes = new JsonArray();
|
||||
resAbility.add("modes", resModes);
|
||||
for (Mode mode : ability.getModes().values()) {
|
||||
JsonObject resMode = new JsonObject();
|
||||
resModes.add(resMode);
|
||||
|
||||
resEffect.addProperty("class", effect.getClass().getSimpleName());
|
||||
resEffect.addProperty("outcome", effect.getOutcome().toString());
|
||||
resEffect.addProperty("text", effect.getText(mode));
|
||||
// basic
|
||||
//resMode.addProperty("name", mode.toString());
|
||||
|
||||
// effects
|
||||
JsonArray resEffects = new JsonArray();
|
||||
resMode.add("effects", resEffects);
|
||||
for (Effect effect : mode.getEffects()) {
|
||||
JsonObject resEffect = new JsonObject();
|
||||
resEffects.add(resEffect);
|
||||
|
||||
resEffect.addProperty("class", effect.getClass().getSimpleName());
|
||||
resEffect.addProperty("outcome", effect.getOutcome().toString());
|
||||
resEffect.addProperty("text", effect.getText(mode));
|
||||
}
|
||||
if (resEffects.size() == 0) {
|
||||
resMode.remove("effects");
|
||||
}
|
||||
|
||||
// targets
|
||||
JsonArray resTargets = new JsonArray();
|
||||
resMode.add("targets", resTargets);
|
||||
for (Target target : mode.getTargets()) {
|
||||
JsonObject resTarget = new JsonObject();
|
||||
resTargets.add(resTarget);
|
||||
|
||||
resTarget.addProperty("name", target.getTargetName());
|
||||
resTarget.addProperty("class", target.getClass().getSimpleName());
|
||||
resTarget.addProperty("min", target.getMinNumberOfTargets());
|
||||
resTarget.addProperty("max", target.getMaxNumberOfTargets());
|
||||
}
|
||||
if (resTargets.size() == 0) {
|
||||
resMode.remove("targets");
|
||||
}
|
||||
|
||||
if (resMode.get("effects") == null && resMode.get("targets") == null) {
|
||||
resModes.remove(resMode);
|
||||
}
|
||||
}
|
||||
if (resEffects.size() == 0) {
|
||||
resMode.remove("effects");
|
||||
}
|
||||
|
||||
// targets
|
||||
JsonArray resTargets = new JsonArray();
|
||||
resMode.add("targets", resTargets);
|
||||
for (Target target : mode.getTargets()) {
|
||||
JsonObject resTarget = new JsonObject();
|
||||
resTargets.add(resTarget);
|
||||
|
||||
resTarget.addProperty("name", target.getTargetName());
|
||||
resTarget.addProperty("class", target.getClass().getSimpleName());
|
||||
resTarget.addProperty("min", target.getMinNumberOfTargets());
|
||||
resTarget.addProperty("max", target.getMaxNumberOfTargets());
|
||||
}
|
||||
if (resTargets.size() == 0) {
|
||||
resMode.remove("targets");
|
||||
}
|
||||
|
||||
if (resMode.get("effects") == null && resMode.get("targets") == null) {
|
||||
resModes.remove(resMode);
|
||||
if (resModes.size() == 0) {
|
||||
resAbility.remove("modes");
|
||||
}
|
||||
}
|
||||
if (resModes.size() == 0) {
|
||||
resAbility.remove("modes");
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("Inner error for " + card.getName() + ": " + e.getMessage(), e);
|
||||
break;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("Inner error for " + card.getName() + ": " + e.getMessage(), e);
|
||||
break;
|
||||
}
|
||||
|
||||
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
String filePath = System.getProperty("user.dir") + "/json/" + set.getCode() + ".json";
|
||||
File outputFile = new File(filePath);
|
||||
final boolean mkdirs = outputFile.getParentFile().mkdirs();
|
||||
|
||||
try (Writer writer =
|
||||
new BufferedWriter(
|
||||
new OutputStreamWriter(
|
||||
new FileOutputStream(outputFile, false), StandardCharsets.UTF_8
|
||||
)
|
||||
)
|
||||
) {
|
||||
writer.write(gson.toJson(res));
|
||||
System.out.println("Wrote " + set.getCode() + " to file");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Gson gson = new GsonBuilder()
|
||||
.setPrettyPrinting()
|
||||
.create();
|
||||
System.out.println(gson.toJson(res));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -69,6 +69,11 @@ public class CreateTokenTargetEffect extends OneShotEffect {
|
|||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
sb.append("target ").append(mode.getTargets().get(0).getTargetName());
|
||||
sb.append(" creates ");
|
||||
if (amount.toString().equals("1")) {
|
||||
|
|
|
@ -32,7 +32,6 @@ public class DontUntapInControllersNextUntapStepTargetEffect extends ContinuousR
|
|||
* Attention: This effect won't work with targets controlled by different
|
||||
* controllers If this is needed, the validForTurnNum has to be saved per
|
||||
* controller.
|
||||
*
|
||||
*/
|
||||
public DontUntapInControllersNextUntapStepTargetEffect() {
|
||||
this("");
|
||||
|
@ -43,10 +42,9 @@ public class DontUntapInControllersNextUntapStepTargetEffect extends ContinuousR
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param targetName used as target text for the generated rule text
|
||||
* @param targetName used as target text for the generated rule text
|
||||
* @param onlyIfControlledByPlayer the effect only works if the permanent is
|
||||
* controlled by that controller, null = it works for all players
|
||||
* controlled by that controller, null = it works for all players
|
||||
*/
|
||||
public DontUntapInControllersNextUntapStepTargetEffect(String targetName, UUID onlyIfControlledByPlayer) {
|
||||
this(targetName, false, onlyIfControlledByPlayer);
|
||||
|
@ -116,7 +114,7 @@ public class DontUntapInControllersNextUntapStepTargetEffect extends ContinuousR
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (allHandled) {
|
||||
discard();
|
||||
}
|
||||
|
@ -149,8 +147,7 @@ public class DontUntapInControllersNextUntapStepTargetEffect extends ContinuousR
|
|||
} else
|
||||
return targetName + " doesn't untap during its controller's next " + (twoSteps ? "two " : "") + "untap step" + (twoSteps ? "s" : "");
|
||||
} else {
|
||||
return "target " + (mode == null ? "creature" : mode.getTargets().get(0).getTargetName()) + " doesn't untap during its controller's next " + (twoSteps ? "two " : "") + "untap step" + (twoSteps ? "s" : "");
|
||||
return "target " + (mode == null || mode.getTargets().isEmpty() ? "creature" : mode.getTargets().get(0).getTargetName()) + " doesn't untap during its controller's next " + (twoSteps ? "two " : "") + "untap step" + (twoSteps ? "s" : "");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -65,6 +65,11 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect
|
|||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
Target target = mode.getTargets().get(0);
|
||||
sb.append("return ");
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
|
@ -80,4 +85,4 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect
|
|||
sb.append(" under your control");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -51,6 +51,10 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
return "tap all " + filter.toString() + " target " + mode.getTargets().get(0).getTargetName() + " controls";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,10 @@ public class TapTargetEffect extends OneShotEffect {
|
|||
return "tap " + staticText;
|
||||
}
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
Target target = mode.getTargets().get(0);
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
if (target.getMaxNumberOfTargets() == target.getNumberOfTargets()) {
|
||||
|
|
|
@ -65,8 +65,12 @@ public class UntapTargetEffect extends OneShotEffect {
|
|||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
Target target = mode.getTargets().get(0);
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
Target target = mode.getTargets().get(0);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("untap ");
|
||||
if (target.getNumberOfTargets() == 0) {
|
||||
|
@ -84,4 +88,4 @@ public class UntapTargetEffect extends OneShotEffect {
|
|||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -112,6 +112,11 @@ public class GainControlTargetEffect extends ContinuousEffectImpl {
|
|||
if (!staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
|
||||
if (mode.getTargets().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
Target target = mode.getTargets().get(0);
|
||||
StringBuilder sb = new StringBuilder("gain control of ");
|
||||
if (target.getMaxNumberOfTargets() > 1) {
|
||||
|
|
|
@ -80,6 +80,11 @@ public class EchoEffect extends OneShotEffect {
|
|||
@Override
|
||||
public String getText(Mode mode) {
|
||||
StringBuilder sb = new StringBuilder("sacrifice {this} unless you ");
|
||||
|
||||
if (cost == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
String costText = cost.getText();
|
||||
if (costText.toLowerCase(Locale.ENGLISH).startsWith("discard")) {
|
||||
sb.append(costText.substring(0, 1).toLowerCase(Locale.ENGLISH));
|
||||
|
|
Loading…
Add table
Reference in a new issue