diff --git a/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java b/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java index aeb2926d1..43ef32c73 100644 --- a/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/FuelPoolRecipes.java @@ -1,31 +1,76 @@ package com.hbm.inventory.recipes; +import java.io.IOException; import java.util.HashMap; +import java.util.Map.Entry; +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.RecipesCommon.ComparableStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import net.minecraft.item.ItemStack; -public class FuelPoolRecipes { +public class FuelPoolRecipes extends SerializableRecipe { public static final HashMap recipes = new HashMap(); - - public static void register() { - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_natural_uranium, 1, 1)), new ItemStack(ModItems.waste_natural_uranium)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_uranium, 1, 1)), new ItemStack(ModItems.waste_uranium)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_thorium, 1, 1)), new ItemStack(ModItems.waste_thorium)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_mox, 1, 1)), new ItemStack(ModItems.waste_mox)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plutonium, 1, 1)), new ItemStack(ModItems.waste_plutonium)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_u233, 1, 1)), new ItemStack(ModItems.waste_u233)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_u235, 1, 1)), new ItemStack(ModItems.waste_u235)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_schrabidium, 1, 1)), new ItemStack(ModItems.waste_schrabidium)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_u233, 1, 1)), new ItemStack(ModItems.waste_plate_u233)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_u235, 1, 1)), new ItemStack(ModItems.waste_plate_u235)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_mox, 1, 1)), new ItemStack(ModItems.waste_plate_mox)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_pu239, 1, 1)), new ItemStack(ModItems.waste_plate_pu239)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_sa326, 1, 1)), new ItemStack(ModItems.waste_plate_sa326)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_ra226be, 1, 1)), new ItemStack(ModItems.waste_plate_ra226be)); - recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_pu238be, 1, 1)), new ItemStack(ModItems.waste_plate_pu238be)); + public static final FuelPoolRecipes instance = new FuelPoolRecipes(); + + @Override + public void registerDefaults() { + recipes.put(new ComparableStack(ModItems.waste_natural_uranium, 1, 1), new ItemStack(ModItems.waste_natural_uranium)); + recipes.put(new ComparableStack(ModItems.waste_uranium, 1, 1), new ItemStack(ModItems.waste_uranium)); + recipes.put(new ComparableStack(ModItems.waste_thorium, 1, 1), new ItemStack(ModItems.waste_thorium)); + recipes.put(new ComparableStack(ModItems.waste_mox, 1, 1), new ItemStack(ModItems.waste_mox)); + recipes.put(new ComparableStack(ModItems.waste_plutonium, 1, 1), new ItemStack(ModItems.waste_plutonium)); + recipes.put(new ComparableStack(ModItems.waste_u233, 1, 1), new ItemStack(ModItems.waste_u233)); + recipes.put(new ComparableStack(ModItems.waste_u235, 1, 1), new ItemStack(ModItems.waste_u235)); + recipes.put(new ComparableStack(ModItems.waste_schrabidium, 1, 1), new ItemStack(ModItems.waste_schrabidium)); + recipes.put(new ComparableStack(ModItems.waste_plate_u233, 1, 1), new ItemStack(ModItems.waste_plate_u233)); + recipes.put(new ComparableStack(ModItems.waste_plate_u235, 1, 1), new ItemStack(ModItems.waste_plate_u235)); + recipes.put(new ComparableStack(ModItems.waste_plate_mox, 1, 1), new ItemStack(ModItems.waste_plate_mox)); + recipes.put(new ComparableStack(ModItems.waste_plate_pu239, 1, 1), new ItemStack(ModItems.waste_plate_pu239)); + recipes.put(new ComparableStack(ModItems.waste_plate_sa326, 1, 1), new ItemStack(ModItems.waste_plate_sa326)); + recipes.put(new ComparableStack(ModItems.waste_plate_ra226be, 1, 1), new ItemStack(ModItems.waste_plate_ra226be)); + recipes.put(new ComparableStack(ModItems.waste_plate_pu238be, 1, 1), new ItemStack(ModItems.waste_plate_pu238be)); + } + + @Override + public String getFileName() { + return "hbmFuelpool.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonElement input = ((JsonObject)recipe).get("input"); + JsonElement output = ((JsonObject)recipe).get("output"); + ItemStack in = this.readItemStack((JsonArray) input); + ItemStack out = this.readItemStack((JsonArray) output); + recipes.put(new ComparableStack(in), out); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry entry = (Entry) recipe; + ItemStack in = entry.getKey().toStack(); + ItemStack out = entry.getValue(); + + writer.name("input"); + this.writeItemStack(in, writer); + writer.name("output"); + this.writeItemStack(out, writer); } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 2088ec756..11a5fb17c 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -17,6 +17,7 @@ import com.google.gson.stream.JsonWriter; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.recipes.FuelPoolRecipes; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; @@ -32,8 +33,8 @@ public abstract class SerializableRecipe { * INIT */ - public static void registerAllHanlders() { - //nyi + public static void registerAllHandlers() { + recipeHandlers.add(new FuelPoolRecipes()); } public static void initialize() { @@ -49,7 +50,7 @@ public abstract class SerializableRecipe { for(SerializableRecipe recipe : recipeHandlers) { - File recFile = new File(MainRegistry.configDir.getAbsolutePath() + File.separatorChar + recipe.getFileName()); + File recFile = new File(recDir.getAbsolutePath() + File.separatorChar + recipe.getFileName()); if(recFile.exists() && recFile.isFile()) { MainRegistry.logger.info("Reading recipe file " + recFile.getName()); recipe.readRecipeFile(recFile); @@ -57,7 +58,7 @@ public abstract class SerializableRecipe { MainRegistry.logger.info("No recipe file found, registering defaults for " + recipe.getFileName()); recipe.registerDefaults(); - File recTemplate = new File(MainRegistry.configDir.getAbsolutePath() + File.separatorChar + "_" + recipe.getFileName()); + File recTemplate = new File(recDir.getAbsolutePath() + File.separatorChar + "_" + recipe.getFileName()); MainRegistry.logger.info("Writing template file " + recTemplate.getName()); recipe.writeTemplateFile(recTemplate); } @@ -76,10 +77,13 @@ public abstract class SerializableRecipe { public abstract Object getRecipeObject(); /** Will use the supplied JsonElement (usually casts to JsonArray) from the over arching recipe array and adds the recipe to the recipe list object */ public abstract void readRecipe(JsonElement recipe); - /** Is given a single recipe from the recipe list object (a wrapper, Tuple, array, HashMap Entry, etc) and writes it to the current ongoing GSON stream */ - public abstract void writeRecipe(Object recipe, JsonWriter writer); + /** Is given a single recipe from the recipe list object (a wrapper, Tuple, array, HashMap Entry, etc) and writes it to the current ongoing GSON stream + * @throws IOException */ + public abstract void writeRecipe(Object recipe, JsonWriter writer) throws IOException; /** Registers the default recipes */ public abstract void registerDefaults(); + /** Deletes all existing recipes, currenly unused */ + public abstract void deleteRecipes(); /* * JSON R/W WRAPPERS @@ -178,7 +182,7 @@ public abstract class SerializableRecipe { try { Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); int stacksize = array.size() > 1 ? array.get(1).getAsInt() : 1; - int meta = array.size() > 2 ? array.get(2).getAsInt() : 2; + int meta = array.size() > 2 ? array.get(2).getAsInt() : 0; return new ItemStack(item, stacksize, meta); } catch(Exception ex) { } MainRegistry.logger.error("Error reading recipe array " + array.toString()); @@ -188,9 +192,9 @@ public abstract class SerializableRecipe { protected static void writeItemStack(ItemStack stack, JsonWriter writer) throws IOException { writer.beginArray(); writer.setIndent(""); - writer.value(Item.itemRegistry.getNameForObject(stack.getItem())); //item name - if(stack.stackSize != 1) writer.value(stack.stackSize); //stack size - if(stack.getItemDamage() != 0) writer.value(stack.getItemDamage()); //metadata + writer.value(Item.itemRegistry.getNameForObject(stack.getItem())); //item name + if(stack.stackSize != 1 || stack.getItemDamage() != 0) writer.value(stack.stackSize); //stack size + if(stack.getItemDamage() != 0) writer.value(stack.getItemDamage()); //metadata writer.endArray(); writer.setIndent(" "); } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 8bad1e751..8e5d69523 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -63,6 +63,7 @@ import com.hbm.inventory.*; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.*; import com.hbm.inventory.recipes.anvil.AnvilRecipes; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.lib.HbmWorld; import com.hbm.lib.Library; @@ -439,18 +440,18 @@ public class MainRegistry { EntityRegistry.registerModEntity(EntityGrenadeBurst.class, "entity_grenade_burst", 115, this, 250, 1, true); EntityRegistry.registerModEntity(EntityBurningFOEQ.class, "entity_burning_foeq", 116, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFGeneric.class, "entity_grenade_ironshod", 117, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFHE.class, "entity_grenade_ironshod", 118, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFBouncy.class, "entity_grenade_ironshod", 119, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFSticky.class, "entity_grenade_ironshod", 120, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFImpact.class, "entity_grenade_ironshod", 121, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFIncendiary.class, "entity_grenade_ironshod", 122, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFToxic.class, "entity_grenade_ironshod", 123, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFConcussion.class, "entity_grenade_ironshod", 124, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFBrimstone.class, "entity_grenade_ironshod", 125, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFMystery.class, "entity_grenade_ironshod", 126, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFSpark.class, "entity_grenade_ironshod", 127, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFHopwire.class, "entity_grenade_ironshod", 128, this, 250, 1, true); - EntityRegistry.registerModEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod", 129, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFHE.class, "entity_grenade_ironshod_he", 118, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFBouncy.class, "entity_grenade_ironshod_bouncy", 119, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFSticky.class, "entity_grenade_ironshod_sticky", 120, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFImpact.class, "entity_grenade_ironshod_impact", 121, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFIncendiary.class, "entity_grenade_ironshod_fire", 122, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFToxic.class, "entity_grenade_ironshod_toxic", 123, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFConcussion.class, "entity_grenade_ironshod_con", 124, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFBrimstone.class, "entity_grenade_ironshod_brim", 125, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFMystery.class, "entity_grenade_ironshod_m", 126, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFSpark.class, "entity_grenade_ironshod_s", 127, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFHopwire.class, "entity_grenade_ironshod_hopwire", 128, this, 250, 1, true); + EntityRegistry.registerModEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod_null", 129, this, 250, 1, true); EntityRegistry.registerModEntity(EntityFallingNuke.class, "entity_falling_bomb", 130, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityBulletBase.class, "entity_bullet_mk2", 131, this, 250, 1, true); EntityRegistry.registerModEntity(EntityMinerRocket.class, "entity_miner_lander", 132, this, 1000, 1, true); @@ -973,7 +974,9 @@ public class MainRegistry { GasCentrifugeRecipes.register(); LiquefactionRecipes.register(); SolidificationRecipes.register(); - FuelPoolRecipes.register(); + + SerializableRecipe.registerAllHandlers(); + SerializableRecipe.initialize(); TileEntityNukeCustom.registerBombItems(); ArmorUtil.register();