first working test for universal JSON recipes

This commit is contained in:
Bob 2022-04-27 23:20:37 +02:00
parent b01e260db9
commit 9328cbbd20
3 changed files with 93 additions and 41 deletions

View File

@ -1,31 +1,76 @@
package com.hbm.inventory.recipes; package com.hbm.inventory.recipes;
import java.io.IOException;
import java.util.HashMap; 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.RecipesCommon.ComparableStack;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class FuelPoolRecipes { public class FuelPoolRecipes extends SerializableRecipe {
public static final HashMap<ComparableStack, ItemStack> recipes = new HashMap<ComparableStack, ItemStack>(); public static final HashMap<ComparableStack, ItemStack> recipes = new HashMap<ComparableStack, ItemStack>();
public static final FuelPoolRecipes instance = new FuelPoolRecipes();
public static void register() {
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_natural_uranium, 1, 1)), new ItemStack(ModItems.waste_natural_uranium)); @Override
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_uranium, 1, 1)), new ItemStack(ModItems.waste_uranium)); public void registerDefaults() {
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_thorium, 1, 1)), new ItemStack(ModItems.waste_thorium)); recipes.put(new ComparableStack(ModItems.waste_natural_uranium, 1, 1), new ItemStack(ModItems.waste_natural_uranium));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_mox, 1, 1)), new ItemStack(ModItems.waste_mox)); recipes.put(new ComparableStack(ModItems.waste_uranium, 1, 1), new ItemStack(ModItems.waste_uranium));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plutonium, 1, 1)), new ItemStack(ModItems.waste_plutonium)); recipes.put(new ComparableStack(ModItems.waste_thorium, 1, 1), new ItemStack(ModItems.waste_thorium));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_u233, 1, 1)), new ItemStack(ModItems.waste_u233)); recipes.put(new ComparableStack(ModItems.waste_mox, 1, 1), new ItemStack(ModItems.waste_mox));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_u235, 1, 1)), new ItemStack(ModItems.waste_u235)); recipes.put(new ComparableStack(ModItems.waste_plutonium, 1, 1), new ItemStack(ModItems.waste_plutonium));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_schrabidium, 1, 1)), new ItemStack(ModItems.waste_schrabidium)); recipes.put(new ComparableStack(ModItems.waste_u233, 1, 1), new ItemStack(ModItems.waste_u233));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_u233, 1, 1)), new ItemStack(ModItems.waste_plate_u233)); recipes.put(new ComparableStack(ModItems.waste_u235, 1, 1), new ItemStack(ModItems.waste_u235));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_u235, 1, 1)), new ItemStack(ModItems.waste_plate_u235)); recipes.put(new ComparableStack(ModItems.waste_schrabidium, 1, 1), new ItemStack(ModItems.waste_schrabidium));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_mox, 1, 1)), new ItemStack(ModItems.waste_plate_mox)); recipes.put(new ComparableStack(ModItems.waste_plate_u233, 1, 1), new ItemStack(ModItems.waste_plate_u233));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_pu239, 1, 1)), new ItemStack(ModItems.waste_plate_pu239)); recipes.put(new ComparableStack(ModItems.waste_plate_u235, 1, 1), new ItemStack(ModItems.waste_plate_u235));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_sa326, 1, 1)), new ItemStack(ModItems.waste_plate_sa326)); recipes.put(new ComparableStack(ModItems.waste_plate_mox, 1, 1), new ItemStack(ModItems.waste_plate_mox));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_ra226be, 1, 1)), new ItemStack(ModItems.waste_plate_ra226be)); recipes.put(new ComparableStack(ModItems.waste_plate_pu239, 1, 1), new ItemStack(ModItems.waste_plate_pu239));
recipes.put(new ComparableStack(new ItemStack(ModItems.waste_plate_pu238be, 1, 1)), new ItemStack(ModItems.waste_plate_pu238be)); 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<ComparableStack, ItemStack> entry = (Entry<ComparableStack, ItemStack>) recipe;
ItemStack in = entry.getKey().toStack();
ItemStack out = entry.getValue();
writer.name("input");
this.writeItemStack(in, writer);
writer.name("output");
this.writeItemStack(out, writer);
} }
} }

View File

@ -17,6 +17,7 @@ import com.google.gson.stream.JsonWriter;
import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.recipes.FuelPoolRecipes;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
@ -32,8 +33,8 @@ public abstract class SerializableRecipe {
* INIT * INIT
*/ */
public static void registerAllHanlders() { public static void registerAllHandlers() {
//nyi recipeHandlers.add(new FuelPoolRecipes());
} }
public static void initialize() { public static void initialize() {
@ -49,7 +50,7 @@ public abstract class SerializableRecipe {
for(SerializableRecipe recipe : recipeHandlers) { 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()) { if(recFile.exists() && recFile.isFile()) {
MainRegistry.logger.info("Reading recipe file " + recFile.getName()); MainRegistry.logger.info("Reading recipe file " + recFile.getName());
recipe.readRecipeFile(recFile); recipe.readRecipeFile(recFile);
@ -57,7 +58,7 @@ public abstract class SerializableRecipe {
MainRegistry.logger.info("No recipe file found, registering defaults for " + recipe.getFileName()); MainRegistry.logger.info("No recipe file found, registering defaults for " + recipe.getFileName());
recipe.registerDefaults(); 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()); MainRegistry.logger.info("Writing template file " + recTemplate.getName());
recipe.writeTemplateFile(recTemplate); recipe.writeTemplateFile(recTemplate);
} }
@ -76,10 +77,13 @@ public abstract class SerializableRecipe {
public abstract Object getRecipeObject(); 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 */ /** 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); 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 */ /** 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); * @throws IOException */
public abstract void writeRecipe(Object recipe, JsonWriter writer) throws IOException;
/** Registers the default recipes */ /** Registers the default recipes */
public abstract void registerDefaults(); public abstract void registerDefaults();
/** Deletes all existing recipes, currenly unused */
public abstract void deleteRecipes();
/* /*
* JSON R/W WRAPPERS * JSON R/W WRAPPERS
@ -178,7 +182,7 @@ public abstract class SerializableRecipe {
try { try {
Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString()); Item item = (Item) Item.itemRegistry.getObject(array.get(0).getAsString());
int stacksize = array.size() > 1 ? array.get(1).getAsInt() : 1; 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); return new ItemStack(item, stacksize, meta);
} catch(Exception ex) { } } catch(Exception ex) { }
MainRegistry.logger.error("Error reading recipe array " + array.toString()); 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 { protected static void writeItemStack(ItemStack stack, JsonWriter writer) throws IOException {
writer.beginArray(); writer.beginArray();
writer.setIndent(""); writer.setIndent("");
writer.value(Item.itemRegistry.getNameForObject(stack.getItem())); //item name writer.value(Item.itemRegistry.getNameForObject(stack.getItem())); //item name
if(stack.stackSize != 1) writer.value(stack.stackSize); //stack size if(stack.stackSize != 1 || stack.getItemDamage() != 0) writer.value(stack.stackSize); //stack size
if(stack.getItemDamage() != 0) writer.value(stack.getItemDamage()); //metadata if(stack.getItemDamage() != 0) writer.value(stack.getItemDamage()); //metadata
writer.endArray(); writer.endArray();
writer.setIndent(" "); writer.setIndent(" ");
} }

View File

@ -63,6 +63,7 @@ import com.hbm.inventory.*;
import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.recipes.*; import com.hbm.inventory.recipes.*;
import com.hbm.inventory.recipes.anvil.AnvilRecipes; import com.hbm.inventory.recipes.anvil.AnvilRecipes;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.lib.HbmWorld; import com.hbm.lib.HbmWorld;
import com.hbm.lib.Library; 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(EntityGrenadeBurst.class, "entity_grenade_burst", 115, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityBurningFOEQ.class, "entity_burning_foeq", 116, this, 1000, 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(EntityGrenadeIFGeneric.class, "entity_grenade_ironshod", 117, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFHE.class, "entity_grenade_ironshod", 118, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFHE.class, "entity_grenade_ironshod_he", 118, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFBouncy.class, "entity_grenade_ironshod", 119, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFBouncy.class, "entity_grenade_ironshod_bouncy", 119, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFSticky.class, "entity_grenade_ironshod", 120, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFSticky.class, "entity_grenade_ironshod_sticky", 120, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFImpact.class, "entity_grenade_ironshod", 121, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFImpact.class, "entity_grenade_ironshod_impact", 121, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFIncendiary.class, "entity_grenade_ironshod", 122, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFIncendiary.class, "entity_grenade_ironshod_fire", 122, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFToxic.class, "entity_grenade_ironshod", 123, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFToxic.class, "entity_grenade_ironshod_toxic", 123, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFConcussion.class, "entity_grenade_ironshod", 124, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFConcussion.class, "entity_grenade_ironshod_con", 124, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFBrimstone.class, "entity_grenade_ironshod", 125, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFBrimstone.class, "entity_grenade_ironshod_brim", 125, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFMystery.class, "entity_grenade_ironshod", 126, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFMystery.class, "entity_grenade_ironshod_m", 126, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFSpark.class, "entity_grenade_ironshod", 127, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFSpark.class, "entity_grenade_ironshod_s", 127, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFHopwire.class, "entity_grenade_ironshod", 128, this, 250, 1, true); EntityRegistry.registerModEntity(EntityGrenadeIFHopwire.class, "entity_grenade_ironshod_hopwire", 128, this, 250, 1, true);
EntityRegistry.registerModEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod", 129, 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(EntityFallingNuke.class, "entity_falling_bomb", 130, this, 1000, 1, true);
EntityRegistry.registerModEntity(EntityBulletBase.class, "entity_bullet_mk2", 131, this, 250, 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); EntityRegistry.registerModEntity(EntityMinerRocket.class, "entity_miner_lander", 132, this, 1000, 1, true);
@ -973,7 +974,9 @@ public class MainRegistry {
GasCentrifugeRecipes.register(); GasCentrifugeRecipes.register();
LiquefactionRecipes.register(); LiquefactionRecipes.register();
SolidificationRecipes.register(); SolidificationRecipes.register();
FuelPoolRecipes.register();
SerializableRecipe.registerAllHandlers();
SerializableRecipe.initialize();
TileEntityNukeCustom.registerBombItems(); TileEntityNukeCustom.registerBombItems();
ArmorUtil.register(); ArmorUtil.register();