package ethanjones.cubes.item.crafting; import ethanjones.cubes.core.id.IDManager; import ethanjones.cubes.core.json.JsonException; import ethanjones.cubes.item.Item; import ethanjones.cubes.item.ItemStack; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; public class RecipeJson { public static void json(JsonArray json) { for (JsonValue value : json) { JsonObject object = value.asObject(); ItemStack output = parseStack(object.get("output")); JsonArray recipe = object.get("recipe").asArray(); if (!(recipe.size() == 9 || recipe.size() == 4 || recipe.size() == 1)) throw new JsonException("Invalid size " + recipe.size()); CraftingInput[] inputs = new CraftingInput[recipe.size()]; for (int i = 0; i < recipe.size(); i++) { JsonValue j = recipe.get(i); inputs[i] = parseInput(j); } CraftingManager.addRecipe(new CraftingRecipe(output, (Object[]) inputs)); } } public static CraftingInput parseInput(JsonValue json) { ItemStack itemStack = parseStack(json); if (itemStack == null) return null; return new ItemStackInput(itemStack); } public static ItemStack parseStack(JsonValue json) { if (json.isString()) { return new ItemStack(getItem(json.asString())); } else if (json.isObject()) { JsonObject obj = json.asObject(); JsonValue id = obj.get("id"); if (id == null) throw new JsonException("No id"); return new ItemStack(getItem(id.asString()), obj.getInt("count", 1), obj.getInt("meta", 0)); } else if (json.isNull()) { return null; } throw new JsonException("Invalid type " + json.toString()); } public static Item getItem(String s) { Item item = IDManager.toItem(s); if (item == null) throw new JsonException("No such item \"" + s + "\""); return item; } }