diff --git a/src/main/java/com/hbm/inventory/FluidStack.java b/src/main/java/com/hbm/inventory/FluidStack.java index 03b001ef4..32c3d5e9b 100644 --- a/src/main/java/com/hbm/inventory/FluidStack.java +++ b/src/main/java/com/hbm/inventory/FluidStack.java @@ -8,7 +8,7 @@ public class FluidStack { public int fill; public int pressure; - public FluidStack(int fill, FluidType type) { + @Deprecated public FluidStack(int fill, FluidType type) { // weird ass format this.fill = fill; this.type = type; } diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java new file mode 100644 index 000000000..f67f6579a --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.recipes; + +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; + +import net.minecraft.item.ItemStack; + +public class ChemicalPlantRecipes extends GenericRecipes { + + @Override public int inputItemLimit() { return 3; } + @Override public int inputFluidLimit() { return 3; } + @Override public int outputItemLimit() { return 3; } + @Override public int outputFluidLimit() { return 3; } + + @Override public String getFileName() { return "hbmChemicalPlant.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + + this.register(new GenericRecipe("chem.biogas").setup(60, 100).setIcon(ModItems.gas_full, Fluids.BIOGAS.getID()) + .setInputItems(new ComparableStack(ModItems.biomass, 16)) + .setInputFluids(new FluidStack(Fluids.AIR, 4000)) + .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + + this.register(new GenericRecipe("chem.test").setup(60, 100) + .setInputItems(new ComparableStack(ModItems.biomass, 16)) + .setInputFluids(new FluidStack(Fluids.AIR, 4000)) + .setOutputItems( + new ChanceOutput(new ItemStack(ModItems.glyphid_meat, 16)), + new ChanceOutput(new ItemStack(ModItems.ingot_asbestos, 1), 0.5F, 0), + new ChanceOutputMulti() {{ + pool.add(new ChanceOutput(new ItemStack(ModItems.billet_co60), 1)); + pool.add(new ChanceOutput(new ItemStack(ModItems.billet_cobalt), 5)); + }}) + .setOutputFluids(new FluidStack(Fluids.BIOGAS, 2000))); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java new file mode 100644 index 000000000..324f1ce4b --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -0,0 +1,69 @@ +package com.hbm.inventory.recipes.loader; + +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutput; +import com.hbm.inventory.recipes.loader.GenericRecipes.ChanceOutputMulti; +import com.hbm.inventory.recipes.loader.GenericRecipes.IOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class GenericRecipe { + + public String name; + public AStack[] inputItem; + public FluidStack[] inputFluid; + public IOutput[] outputItem; + public FluidStack[] outputFluid; + public int duration; + public long power; + public ItemStack icon; + public boolean writeIcon = false; + public boolean customLocalization = false; + + public GenericRecipe(String name) { + this.name = name; + } + + public GenericRecipe setDuration(int duration) { this.duration = duration; return this; } + public GenericRecipe setPower(long power) { this.power = power; return this; } + public GenericRecipe setup(int duration, long power) { return this.setDuration(duration).setPower(power); } + public GenericRecipe setIcon(ItemStack icon) { this.icon = icon; this.writeIcon = true; return this; } + public GenericRecipe setIcon(Item item, int meta) { return this.setIcon(new ItemStack(item, 1, meta)); } + public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } + public GenericRecipe setNamed() { this.customLocalization = true; return this; } + + public GenericRecipe setInputItems(AStack... input) { this.inputItem = input; return this; } + public GenericRecipe setInputFluids(FluidStack... input) { this.inputFluid = input; return this; } + public GenericRecipe setOutputItems(IOutput... output) { this.outputItem = output; return this; } + public GenericRecipe setOutputFluids(FluidStack... output) { this.outputFluid = output; return this; } + + public ItemStack getIcon() { + + if(icon == null) { + if(outputItem != null) { + if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); + if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); + return icon; + } + if(outputFluid != null) { + icon = ItemFluidIcon.make(outputFluid[0]); + } + } + + if(icon == null) icon = new ItemStack(ModItems.nothing); + return icon; + } + + public String getName() { + if(customLocalization) { + return I18nUtil.resolveKey(name); + } + + return this.getIcon().getDisplayName(); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index a415c92f1..2c9ce4596 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -12,8 +12,6 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemFluidIcon; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandom; @@ -29,17 +27,19 @@ import net.minecraft.util.WeightedRandom; * * @author hbm */ -public abstract class GenericRecipes extends SerializableRecipe { +public abstract class GenericRecipes extends SerializableRecipe { public static final Random RNG = new Random(); - public List recipeOrderedList = new ArrayList(); - public HashMap recipeNameMap = new HashMap(); + public List recipeOrderedList = new ArrayList(); + public HashMap recipeNameMap = new HashMap(); public abstract int inputItemLimit(); public abstract int inputFluidLimit(); public abstract int outputItemLimit(); public abstract int outputFluidLimit(); + public boolean hasDuration() { return true; } + public boolean hasPower() { return true; } @Override public Object getRecipeObject() { @@ -52,7 +52,7 @@ public abstract class GenericRecipes extends SerializableRecipe { this.recipeNameMap.clear(); } - public void register(GenericRecipe recipe) { + public void register(T recipe) { this.recipeOrderedList.add(recipe); this.recipeNameMap.put(recipe.name, recipe); } @@ -60,28 +60,67 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public void readRecipe(JsonElement element) { JsonObject obj = (JsonObject) element; - GenericRecipe recipe = instantiateRecipe(obj.get("name").getAsString(), obj.get("duration").getAsInt()); + T recipe = instantiateRecipe(obj.get("name").getAsString()); - if(this.inputItemLimit() > 0) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); - if(this.inputFluidLimit() > 0) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); + if(this.inputItemLimit() > 0 && obj.has("inputItem")) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); + if(this.inputFluidLimit() > 0 && obj.has("inputFluid")) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); - if(this.outputItemLimit() > 0) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); - if(this.outputFluidLimit() > 0) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + if(this.outputItemLimit() > 0 && obj.has("outputItem")) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); + if(this.outputFluidLimit() > 0 && obj.has("outputFluid")) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + + if(this.hasDuration()) recipe.setDuration(obj.get("duration").getAsInt()); + if(this.hasPower()) recipe.setPower(obj.get("power").getAsLong()); + + if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); readExtraData(element, recipe); register(recipe); } - public GenericRecipe instantiateRecipe(String name, int duration) { return new GenericRecipe(name, duration); } - public void readExtraData(JsonElement element, GenericRecipe recipe) { } + public abstract T instantiateRecipe(String name); + public void readExtraData(JsonElement element, T recipe) { } @Override - public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + public void writeRecipe(Object recipeObject, JsonWriter writer) throws IOException { + T recipe = (T) recipeObject; + if(this.inputItemLimit() > 0 && recipe.inputItem != null) { + writer.name("inputItem").beginArray(); + for(AStack stack : recipe.inputItem) this.writeAStack(stack, writer); + writer.endArray(); + } + + if(this.inputFluidLimit() > 0 && recipe.inputFluid != null) { + writer.name("inputFluid").beginArray(); + for(FluidStack stack : recipe.inputFluid) this.writeFluidStack(stack, writer); + writer.endArray(); + } + + if(this.outputItemLimit() > 0 && recipe.outputItem != null) { + writer.name("outputItem").beginArray(); + for(IOutput stack : recipe.outputItem) stack.serialize(writer); + writer.endArray(); + } + + if(this.outputFluidLimit() > 0 && recipe.outputFluid != null) { + writer.name("outputFluid").beginArray(); + for(FluidStack stack : recipe.outputFluid) this.writeFluidStack(stack, writer); + writer.endArray(); + } + + if(this.hasDuration()) writer.name("duration").value(recipe.duration); + if(this.hasPower()) writer.name("power").value(recipe.power); + + if(recipe.writeIcon) { + writer.name("icon"); + this.writeItemStack(recipe.icon, writer); + } + + writeExtraData(recipe, writer); } - public void writeExtraData(Object recipe, JsonWriter writer) { } + public void writeExtraData(T recipe, JsonWriter writer) { } public IOutput[] readOutputArray(JsonArray array) { IOutput[] output = new IOutput[array.size()]; @@ -110,45 +149,6 @@ public abstract class GenericRecipes extends SerializableRecipe { /////////////// /// CLASSES /// /////////////// - - public static class GenericRecipe { - - public String name; - public AStack[] inputItem; - public FluidStack[] inputFluid; - public IOutput[] outputItem; - public FluidStack[] outputFluid; - public int duration; - public ItemStack icon; - - public GenericRecipe(String name, int duration) { - this.name = name; - this.duration = duration; - } - - public GenericRecipe setIcon(ItemStack icon) { - this.icon = icon; - return this; - } - - public ItemStack getIcon() { - - if(icon == null) { - if(outputItem != null) { - if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); - if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); - return icon; - } - if(outputFluid != null) { - icon = ItemFluidIcon.make(outputFluid[0]); - } - } - - if(icon == null) icon = new ItemStack(ModItems.nothing); - return icon; - } - } - public static interface IOutput { public boolean possibleMultiOutput(); public ItemStack collapse(); @@ -184,16 +184,21 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public void serialize(JsonWriter writer) throws IOException { boolean standardStack = chance >= 1 && itemWeight == 0; - if(!standardStack) writer.beginArray(); + + writer.beginArray(); + writer.setIndent(""); if(itemWeight == 0) writer.value("single"); SerializableRecipe.writeItemStack(stack, writer); + writer.setIndent(""); if(!standardStack) { writer.value(chance); if(itemWeight > 0) writer.value(itemWeight); - writer.endArray(); } + + writer.endArray(); + writer.setIndent(" "); } @Override 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 8247bff1a..1ea45adca 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -81,6 +81,9 @@ public abstract class SerializableRecipe { //AFTER Assembler recipeHandlers.add(new AnvilRecipes()); recipeHandlers.add(new PedestalRecipes()); + + //GENERIC + recipeHandlers.add(new ChemicalPlantRecipes()); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes());