Skip to content

Instantly share code, notes, and snippets.

@ZeldaZach
Created January 9, 2019 03:35
Show Gist options
  • Select an option

  • Save ZeldaZach/10388092173753b19332b2f210baa2e4 to your computer and use it in GitHub Desktop.

Select an option

Save ZeldaZach/10388092173753b19332b2f210baa2e4 to your computer and use it in GitHub Desktop.
package org.mage.test.utils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.Effect;
import mage.cards.*;
import mage.target.Target;
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 & ZeldaZach
*/
public class ExportJsonGameplayDataTest {
@Test
public void exportTest() {
Collection<ExpansionSet> sets = Sets.getInstance().values();
for (ExpansionSet set : sets) {
List<Card> cards = new ArrayList<>();
for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) {
cards.add(
CardImpl.createCard(setInfo.getCardClass(),
new CardSetInfo(setInfo.getName(), set.getCode(), setInfo.getCardNumber(),
setInfo.getRarity(), setInfo.getGraphicInfo()))
);
}
JsonObject res = new JsonObject();
for (Card card : cards) {
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);
// 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 (resModes.size() == 0) {
resAbility.remove("modes");
}
}
}
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
String filePath = System.getProperty("user.dir") + "/json/" + set.getCode() + ".json";
File outputFile = new File(filePath);
outputFile.getParentFile().mkdirs();
try (Writer writer =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(outputFile, false), StandardCharsets.UTF_8
)
)
) {
writer.write(gson.toJson(res));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment