started work on assembler recipe handler overhaul

This commit is contained in:
Boblet 2020-08-06 15:18:38 +02:00
parent 752df423fb
commit e7df37f771
3 changed files with 189 additions and 46 deletions

View File

@ -0,0 +1,172 @@
package com.hbm.inventory;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.main.MainRegistry;
public class AssemblerRecipes {
public static File config;
public static File template;
private static final Gson gson = new Gson();
public static HashMap<ComparableStack, Object[]> recipes = new HashMap();
public static HashMap<ComparableStack, Integer> time = new HashMap();
/**
* Pre-Init phase: Finds the recipe config (if exists) and checks if a template is present, if not it generates one.
* @param dir The suggested config folder
*/
public static void preInit(File dir) {
if(dir == null || !dir.isDirectory())
return;
List<File> files = Arrays.asList(dir.listFiles());
boolean needsTemplate = true;
for(File file : files) {
if(file.getName().equals("hbmAssembler.json")) {
config = file;
}
if(file.getName().equals("hbmAssemblerTemplate.json")) {
needsTemplate = false;
}
}
if(needsTemplate)
saveTemplateJSON();
}
public static void loadRecipes() {
if(config == null)
registerDefaults();
else
loadJSONRecipes();
}
private static void registerDefaults() {
}
/*
* recipes : [
* {
* output : [ "item", "hbm:tank_steel", 1, 0 ],
* duration : 100,
* input : [
* [ "dict", "plateSteel", 6 ],
* [ "dict", "plateTitanium", 2 ],
* [ "item", "dye", 1, 15 ],
* ]
* },
* {
* output : [ "item", "hbm:plate_gold", 2, 0 ],
* duration : 20,
* input : [
* [ "dict", "ingotGold", 3 ]
* ]
* }
* ]
*/
private static void loadJSONRecipes() {
try {
JsonObject json = gson.fromJson(new FileReader(config), JsonObject.class);
JsonElement recipes = json.get("recipes");
if(recipes instanceof JsonArray) {
JsonArray recArray = recipes.getAsJsonArray();
//go through the recipes array
for(JsonElement recipe : recArray) {
if(recipe.isJsonObject()) {
JsonObject recObj = recipe.getAsJsonObject();
JsonElement input = recObj.get("input");
JsonElement output = recObj.get("output");
JsonElement duration = recObj.get("duration");
int time = 100;
if(duration.isJsonPrimitive()) {
if(duration.getAsJsonPrimitive().isNumber()) {
time = Math.max(1, duration.getAsJsonPrimitive().getAsInt());
}
}
if(!(input instanceof JsonArray)) {
MainRegistry.logger.error("Error reading recipe, no input found!");
continue;
}
if(!(output instanceof JsonArray)) {
MainRegistry.logger.error("Error reading recipe, no output found!");
continue;
}
Object outp = parseJsonArray(output.getAsJsonArray());
List inp = new ArrayList();
for(JsonElement in : input.getAsJsonArray()) {
if(in.isJsonArray()) {
Object i = parseJsonArray(in.getAsJsonArray());
if(i instanceof ComparableStack || i instanceof OreDictStack)
inp.add(i);
}
}
if(outp instanceof ComparableStack) {
AssemblerRecipes.recipes.put((ComparableStack) outp, inp.toArray());
AssemblerRecipes.time.put((ComparableStack) outp, time);
}
}
}
}
} catch (Exception e) {
//shush
}
}
private static Object parseJsonArray(JsonArray array) {
return null;
}
public static void saveJSONRecipes() {
}
public static void saveTemplateJSON() {
//TODO: pending
}
}

View File

@ -131,5 +131,21 @@ public class RecipesCommon {
return true;
}
}
public static class OreDictStack {
public String name;
public int stacksize;
public OreDictStack(String name) {
this.name = name;
this.stacksize = 1;
}
public OreDictStack(String name, int stacksize) {
this(name);
this.stacksize = stacksize;
}
}
}

View File

@ -151,52 +151,6 @@ public class MainRegistry
public static CreativeTabs consumableTab = new ConsumableTab(CreativeTabs.getNextID(), "tabConsumable");
//Achievements
public static Achievement achCircuit0;
public static Achievement achCircuit1;
public static Achievement achCircuit2;
public static Achievement achCircuit3;
public static Achievement achCircuit4;
public static Achievement achCircuit5;
public static Achievement achJack;
public static Achievement achDalekanium;
public static Achievement achRefinery;
public static Achievement achBattery;
public static Achievement achOil;
public static Achievement achCatapult1;
public static Achievement achCatapult2;
public static Achievement achCatapult3;
public static Achievement achU235;
public static Achievement achPu238;
public static Achievement achPu239;
public static Achievement achNeptunium;
public static Achievement achDesh;
public static Achievement achMeteor;
public static Achievement achGeiger;
public static Achievement achDesignator;
public static Achievement achRemote;
public static Achievement achOverpowered;
public static Achievement achShimSham;
public static Achievement achMatchstick;
public static Achievement achRails;
public static Achievement achFolder;
public static Achievement achPress;
public static Achievement achFWatz;
public static Achievement achTurbofan;
public static Achievement achGadget;
public static Achievement achBoy;
public static Achievement achMan;
public static Achievement achMike;
public static Achievement achTsar;
public static Achievement achFLEIJA;
public static Achievement achPrototype;
public static Achievement achCustom;
public static Achievement achTurret;
public static Achievement achMeteorDeath;
public static Achievement achXenium;
public static Achievement achRadiation;
public static Achievement achSchrabidium;
public static Achievement achEuphemium;
public static Achievement achSacrifice;
public static Achievement achImpossible;
public static Achievement achTOB;
@ -379,6 +333,7 @@ public class MainRegistry
CellularDungeonFactory.init();
Satellite.register();
VersionChecker.checkVersion();
AssemblerRecipes.preInit(PreEvent.getModConfigurationDirectory());
Library.superuser.add("192af5d7-ed0f-48d8-bd89-9d41af8524f8");
Library.superuser.add("5aee1e3d-3767-4987-a222-e7ce1fbdf88e");