in a rush

This commit is contained in:
Bob 2025-05-31 18:04:16 +02:00
parent 891d4d869d
commit 0be198d21f
5 changed files with 176 additions and 57 deletions

View File

@ -8,7 +8,7 @@ public class FluidStack {
public int fill; public int fill;
public int pressure; public int pressure;
public FluidStack(int fill, FluidType type) { @Deprecated public FluidStack(int fill, FluidType type) { // weird ass format
this.fill = fill; this.fill = fill;
this.type = type; this.type = type;
} }

View File

@ -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<GenericRecipe> {
@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)));
}
}

View File

@ -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();
}
}

View File

@ -12,8 +12,6 @@ import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import com.hbm.inventory.FluidStack; import com.hbm.inventory.FluidStack;
import com.hbm.inventory.RecipesCommon.AStack; 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.item.ItemStack;
import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandom;
@ -29,17 +27,19 @@ import net.minecraft.util.WeightedRandom;
* *
* @author hbm * @author hbm
*/ */
public abstract class GenericRecipes extends SerializableRecipe { public abstract class GenericRecipes<T extends GenericRecipe> extends SerializableRecipe {
public static final Random RNG = new Random(); public static final Random RNG = new Random();
public List<GenericRecipe> recipeOrderedList = new ArrayList(); public List<T> recipeOrderedList = new ArrayList();
public HashMap<String, GenericRecipe> recipeNameMap = new HashMap(); public HashMap<String, T> recipeNameMap = new HashMap();
public abstract int inputItemLimit(); public abstract int inputItemLimit();
public abstract int inputFluidLimit(); public abstract int inputFluidLimit();
public abstract int outputItemLimit(); public abstract int outputItemLimit();
public abstract int outputFluidLimit(); public abstract int outputFluidLimit();
public boolean hasDuration() { return true; }
public boolean hasPower() { return true; }
@Override @Override
public Object getRecipeObject() { public Object getRecipeObject() {
@ -52,7 +52,7 @@ public abstract class GenericRecipes extends SerializableRecipe {
this.recipeNameMap.clear(); this.recipeNameMap.clear();
} }
public void register(GenericRecipe recipe) { public void register(T recipe) {
this.recipeOrderedList.add(recipe); this.recipeOrderedList.add(recipe);
this.recipeNameMap.put(recipe.name, recipe); this.recipeNameMap.put(recipe.name, recipe);
} }
@ -60,28 +60,67 @@ public abstract class GenericRecipes extends SerializableRecipe {
@Override @Override
public void readRecipe(JsonElement element) { public void readRecipe(JsonElement element) {
JsonObject obj = (JsonObject) 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.inputItemLimit() > 0 && obj.has("inputItem")) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray());
if(this.inputFluidLimit() > 0) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").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.outputItemLimit() > 0 && obj.has("outputItem")) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray());
if(this.outputFluidLimit() > 0) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").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); readExtraData(element, recipe);
register(recipe); register(recipe);
} }
public GenericRecipe instantiateRecipe(String name, int duration) { return new GenericRecipe(name, duration); } public abstract T instantiateRecipe(String name);
public void readExtraData(JsonElement element, GenericRecipe recipe) { } public void readExtraData(JsonElement element, T recipe) { }
@Override @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) { public IOutput[] readOutputArray(JsonArray array) {
IOutput[] output = new IOutput[array.size()]; IOutput[] output = new IOutput[array.size()];
@ -110,45 +149,6 @@ public abstract class GenericRecipes extends SerializableRecipe {
/////////////// ///////////////
/// CLASSES /// /// 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 static interface IOutput {
public boolean possibleMultiOutput(); public boolean possibleMultiOutput();
public ItemStack collapse(); public ItemStack collapse();
@ -184,16 +184,21 @@ public abstract class GenericRecipes extends SerializableRecipe {
@Override @Override
public void serialize(JsonWriter writer) throws IOException { public void serialize(JsonWriter writer) throws IOException {
boolean standardStack = chance >= 1 && itemWeight == 0; boolean standardStack = chance >= 1 && itemWeight == 0;
if(!standardStack) writer.beginArray();
writer.beginArray();
writer.setIndent("");
if(itemWeight == 0) writer.value("single"); if(itemWeight == 0) writer.value("single");
SerializableRecipe.writeItemStack(stack, writer); SerializableRecipe.writeItemStack(stack, writer);
writer.setIndent("");
if(!standardStack) { if(!standardStack) {
writer.value(chance); writer.value(chance);
if(itemWeight > 0) writer.value(itemWeight); if(itemWeight > 0) writer.value(itemWeight);
writer.endArray();
} }
writer.endArray();
writer.setIndent(" ");
} }
@Override @Override

View File

@ -81,6 +81,9 @@ public abstract class SerializableRecipe {
//AFTER Assembler //AFTER Assembler
recipeHandlers.add(new AnvilRecipes()); recipeHandlers.add(new AnvilRecipes());
recipeHandlers.add(new PedestalRecipes()); recipeHandlers.add(new PedestalRecipes());
//GENERIC
recipeHandlers.add(new ChemicalPlantRecipes());
recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new MatDistribution());
recipeHandlers.add(new CustomMachineRecipes()); recipeHandlers.add(new CustomMachineRecipes());