package com.hbm.inventory.recipes; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import static com.hbm.inventory.OreDictManager.*; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; public class AmmoPressRecipes extends SerializableRecipe { public static List recipes = new ArrayList(); @Override public void registerDefaults() { OreDictStack lead = new OreDictStack(PB.ingot()); OreDictStack nugget = new OreDictStack(PB.nugget()); OreDictStack flechette = new OreDictStack(PB.bolt()); OreDictStack steel = new OreDictStack(STEEL.ingot()); OreDictStack wSteel = new OreDictStack(WEAPONSTEEL.ingot()); OreDictStack copper = new OreDictStack(CU.ingot()); OreDictStack plastic = new OreDictStack(ANY_PLASTIC.ingot()); OreDictStack uranium = new OreDictStack(U238.ingot()); OreDictStack ferro = new OreDictStack(FERRO.ingot()); OreDictStack nb = new OreDictStack(NB.ingot()); OreDictStack smokeless = new OreDictStack(ANY_SMOKELESS.dust()); OreDictStack he = new OreDictStack(ANY_HIGHEXPLOSIVE.ingot()); OreDictStack wp = new OreDictStack(P_WHITE.ingot()); OreDictStack rp = new OreDictStack(P_RED.dust()); OreDictStack pipe = new OreDictStack(STEEL.pipe()); ComparableStack smokeful = new ComparableStack(Items.gunpowder); ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel); ComparableStack cSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL); ComparableStack cBig = new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE); ComparableStack sSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL_STEEL); ComparableStack sBig = new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE_STEEL); ComparableStack bpShell = new ComparableStack(ModItems.casing, 1, EnumCasingType.SHOTSHELL); ComparableStack pShell = new ComparableStack(ModItems.casing, 1, EnumCasingType.BUCKSHOT); ComparableStack sShell = new ComparableStack(ModItems.casing, 1, EnumCasingType.BUCKSHOT_ADVANCED); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_BP, 16), null, lead.copy(2), null, null, smokeful, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_SP, 8), null, lead, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_FMJ, 8), null, steel, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_JHP, 8), plastic, copper, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_AP, 8), null, wSteel, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_EXPRESS, 8), null, steel, null, null, smokeless.copy(3), null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_BP, 12), null, lead.copy(2), null, null, smokeful, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_SP, 6), null, lead, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_FMJ, 6), null, steel, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_JHP, 6), plastic, copper, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_AP, 6), null, wSteel, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_EXPRESS, 6), null, steel, null, null, smokeless.copy(3), null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P22_SP, 24), null, lead, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P22_FMJ, 24), null, steel, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P22_JHP, 24), plastic, copper, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P22_AP, 24), null, wSteel, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P9_SP, 12), null, lead, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P9_FMJ, 12), null, steel, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P9_JHP, 12), plastic, copper, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P9_AP, 12), null, wSteel, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_SP, 8), null, lead, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_FMJ, 8), null, steel, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_JHP, 8), plastic, copper, null, null, smokeless, null, null, cSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_AP, 8), null, wSteel, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_DU, 8), null, uranium, null, null, smokeless.copy(2), null, null, sSmall, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R556_SP, 16), null, lead.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R556_FMJ, 16), null, steel.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R556_JHP, 16), plastic, copper.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R556_AP, 16), null, wSteel.copy(2), null, null, smokeless.copy(4), null, null, sSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_SP, 12), null, lead.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_FMJ, 12), null, steel.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_JHP, 12), plastic, copper.copy(2), null, null, smokeless.copy(2), null, null, cSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_AP, 12), null, wSteel.copy(2), null, null, smokeless.copy(4), null, null, sSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_DU, 12), null, uranium.copy(2), null, null, smokeless.copy(4), null, null, sSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_HE, 12), he, ferro, null, null, smokeless.copy(4), null, null, sSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_SP, 12), null, lead.copy(2), null, null, smokeless.copy(3), null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_FMJ, 12), null, steel.copy(2), null, null, smokeless.copy(3), null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_JHP, 12), plastic, copper.copy(2), null, null, smokeless.copy(3), null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_AP, 12), null, wSteel.copy(2), null, null, smokeless.copy(6), null, null, sBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_DU, 12), null, uranium.copy(2), null, null, smokeless.copy(6), null, null, sBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_HE, 12), he, ferro, null, null, smokeless.copy(6), null, null, sBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_BP, 6), null, nugget.copy(6), null, null, smokeful, null, null, bpShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_BP_MAGNUM, 6), null, nugget.copy(8), null, null, smokeful, null, null, bpShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_BP_SLUG, 6), null, lead, null, null, smokeful, null, null, bpShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12, 6), null, nugget.copy(6), null, null, smokeless, null, null, pShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_SLUG, 6), null, lead, null, null, smokeless, null, null, pShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_FLECHETTE, 6), null, flechette.copy(12), null, null, smokeless, null, null, pShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_MAGNUM, 6), null, nugget.copy(8), null, null, smokeless, null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_EXPLOSIVE, 6), null, he, null, null, smokeless, null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_PHOSPHORUS, 6), null, wp, null, null, smokeless, null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10, 4), null, nugget.copy(8), null, null, smokeless.copy(2), null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_SHRAPNEL, 4), plastic, nugget.copy(8), null, null, smokeless.copy(2), null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_DU, 4), null, uranium, null, null, smokeless.copy(2), null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_SLUG, 4), null, lead, null, null, smokeless.copy(2), null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_EXPLOSIVE, 4), he, ferro, null, null, smokeless.copy(2), null, null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G26_FLARE, 4), null, rp, null, null, smokeless, null, null, cBig, null)); ComparableStack dyn = new ComparableStack(ModItems.ball_dynamite); OreDictStack coplate = new OreDictStack(CU.plate()); OreDictStack diesel = new OreDictStack(Fluids.DIESEL.getDict(1_000)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G40_HE, 4), null, dyn, null, null, smokeless, null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G40_HEAT, 4), coplate, he, null, null, smokeless, null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G40_DEMO, 4), null, he.copy(2), null, null, smokeless, null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G40_INC, 4), diesel, dyn, null, null, smokeless, null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G40_PHOSPHORUS, 4), wp, he, null, null, smokeless, null, null, cBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_HE, 2), null, dyn, null, null, cBig, null, null, smokeless.copy(3), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_HE, 2), null, dyn, null, null, cBig, null, null, rocket, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_HEAT, 2), coplate, he, null, null, cBig, null, null, smokeless.copy(3), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_HEAT, 2), coplate, he, null, null, cBig, null, null, rocket, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_DEMO, 2), null, he.copy(2), null, null, cBig, null, null, smokeless.copy(3), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_DEMO, 2), null, he.copy(2), null, null, cBig, null, null, rocket, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_INC, 2), diesel, dyn, null, null, cBig, null, null, smokeless.copy(3), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_INC, 2), diesel, dyn, null, null, cBig, null, null, rocket, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_PHOSPHORUS, 2), wp, he, null, null, cBig, null, null, smokeless.copy(3), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.ROCKET_PHOSPHORUS, 2), wp, he, null, null, cBig, null, null, rocket, null)); OreDictStack sPlate = new OreDictStack(STEEL.plate()); ComparableStack napalm = new ComparableStack(ModItems.canister_napalm); OreDictStack gas = new OreDictStack(Fluids.GAS.getDict(1000)); OreDictStack bf = new OreDictStack(Fluids.BALEFIRE.getDict(1000)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.FLAME_DIESEL, 1), null, sPlate, null, null, diesel, null, null, sPlate, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.FLAME_NAPALM, 1), null, sPlate, null, null, napalm, null, null, sPlate, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.FLAME_GAS, 1), null, sPlate, null, null, gas, null, null, sPlate, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.FLAME_BALEFIRE, 1), null, sPlate, null, null, bf, null, null, sPlate, null)); OreDictStack silicon = new OreDictStack(SI.billet()); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CAPACITOR, 4), null, plastic, null, null, silicon.copy(4), null, null, plastic, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CAPACITOR_OVERCHARGE, 4), null, plastic, null, null, silicon.copy(6), null, null, plastic, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CAPACITOR_IR, 4), null, plastic, null, null, nb, null, null, plastic, null)); OreDictStack lPlate = new OreDictStack(PB.plate()); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.TAU_URANIUM, 16), null, lPlate, null, null, uranium, null, null, lPlate , null)); OreDictStack tungsten = new OreDictStack(W.ingot()); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.COIL_TUNGSTEN, 4), null, null, null, null, tungsten, null, null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.COIL_FERROURANIUM, 4), null, null, null, null, ferro, null, null, null , null)); ComparableStack shell = new ComparableStack(ModItems.assembly_nuke); ComparableStack tatb = new ComparableStack(ModItems.ball_tatb); OreDictStack plutonium = new OreDictStack(PU239.nugget()); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_STANDARD, 1), null, plutonium, null, null, shell, null, null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_DEMO, 1), null, plutonium.copy(2), null, null, shell, null, null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH, 1), null, plutonium.copy(4), null, null, shell, null, null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_TOTS, 1), null, plutonium.copy(2), null, null, tatb.copy(2), null, null, sPlate.copy(4) , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIVE, 1), null, he.copy(8), null, null, sBig.copy(2), null, null, sPlate.copy(4), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_BALEFIRE, 1), null, new ComparableStack(ModItems.egg_balefire_shard), null, null, shell, null, null, null , null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_HOOK, 16), null, steel, null, null, pipe, null, null, smokeless, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR, 4), null, he.copy(4), null, null, pipe, null, null, smokeless, null)); } public static HashMap getRecipes() { HashMap recipes = new HashMap(); for(AmmoPressRecipe recipe : AmmoPressRecipes.recipes) { List inputs = new ArrayList(); for(AStack stack : recipe.input) if(stack != null) inputs.add(stack); recipes.put(inputs.toArray(new AStack[0]), recipe.output.copy()); } return recipes; } @Override public String getFileName() { return "hbmAmmoPress.json"; } @Override public String getComment() { return "Input array describes slots from left to right, top to bottom. Make sure the input array is exactly 9 elements long, empty slots are represented by null."; } @Override public Object getRecipeObject() { return recipes; } @Override public void deleteRecipes() { recipes.clear(); } @Override public void readRecipe(JsonElement recipe) { JsonObject obj = (JsonObject) recipe; ItemStack output = this.readItemStack(obj.get("output").getAsJsonArray()); JsonArray inputArray = obj.get("input").getAsJsonArray(); AStack[] input = new AStack[9]; for(int i = 0; i < 9; i++) { JsonElement element = inputArray.get(i); if(element.isJsonNull()) { input[i] = null; } else { input[i] = this.readAStack(element.getAsJsonArray()); } } this.recipes.add(new AmmoPressRecipe(output, input)); } @Override public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { AmmoPressRecipe rec = (AmmoPressRecipe) recipe; writer.name("output"); this.writeItemStack(rec.output, writer); writer.name("input").beginArray(); for(int i = 0; i < rec.input.length; i++) { if(rec.input[i] == null) { writer.nullValue(); } else { this.writeAStack(rec.input[i], writer); } } writer.endArray(); } public static class AmmoPressRecipe { public ItemStack output; public AStack[] input; public AmmoPressRecipe(ItemStack output, AStack... input) { this.output = output; this.input = input; } } }