From 503fc111771cca302b60b8bdb31df4f21d37ea0e Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 8 Mar 2023 22:22:11 +0100 Subject: [PATCH] reforming recipes, catalytic reformer functionality --- .../handler/guncfg/Gun357MagnumFactory.java | 9 ++- .../inventory/recipes/ReformingRecipes.java | 74 ++++++++++++++++++ .../recipes/loader/SerializableRecipe.java | 1 + .../TileEntityMachineCatalyticReformer.java | 30 ++++++- .../assets/hbm/textures/items/crackpipe.png | Bin 0 -> 344 bytes .../models/machines/catalytic_reformer.png | Bin 5789 -> 7520 bytes 6 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/ReformingRecipes.java create mode 100644 src/main/resources/assets/hbm/textures/items/crackpipe.png diff --git a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java index 9917f8ddb..7dbe79452 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java @@ -12,7 +12,6 @@ import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.lib.HbmCollection; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; import com.hbm.render.util.RenderScreenOverlay.Crosshair; @@ -193,8 +192,12 @@ public class Gun357MagnumFactory { config.name = "bio"; config.manufacturer = EnumGunManufacturer.RYAN; - - config.config = HbmCollection.acp45; + + config.config.add(BulletConfigSyncingUtil.STEEL_REVOLVER); + config.config.add(BulletConfigSyncingUtil.GOLD_REVOLVER); + config.config.add(BulletConfigSyncingUtil.IRON_REVOLVER); + config.config.add(BulletConfigSyncingUtil.LEAD_REVOLVER); + config.config.add(BulletConfigSyncingUtil.DESH_REVOLVER); return config; } diff --git a/src/main/java/com/hbm/inventory/recipes/ReformingRecipes.java b/src/main/java/com/hbm/inventory/recipes/ReformingRecipes.java new file mode 100644 index 000000000..e76473965 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/ReformingRecipes.java @@ -0,0 +1,74 @@ +package com.hbm.inventory.recipes; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.util.Tuple.Triplet; + +public class ReformingRecipes extends SerializableRecipe { + + private static HashMap> recipes = new HashMap(); + + @Override + public void registerDefaults() { + recipes.put(Fluids.NAPHTHA, new Triplet( + new FluidStack(Fluids.REFORMATE, 50), + new FluidStack(Fluids.PETROLEUM, 15), + new FluidStack(Fluids.HYDROGEN, 10) + )); + recipes.put(Fluids.NAPHTHA_CRACK, new Triplet( + new FluidStack(Fluids.REFORMATE, 50), + new FluidStack(Fluids.AROMATICS, 10), + new FluidStack(Fluids.HYDROGEN, 5) + )); + } + + public static Triplet getOutput(FluidType type) { + return recipes.get(type); + } + + @Override + public String getFileName() { + return "hbmReforming.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + FluidType input = Fluids.fromName(obj.get("input").getAsString()); + FluidStack output1 = this.readFluidStack(obj.get("output1").getAsJsonArray()); + FluidStack output2 = this.readFluidStack(obj.get("output2").getAsJsonArray()); + FluidStack output3 = this.readFluidStack(obj.get("output3").getAsJsonArray()); + + recipes.put(input, new Triplet(output1, output2, output3)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry> rec = (Entry>) recipe; + + writer.name("input").value(rec.getKey().getName()); + writer.name("output1"); this.writeFluidStack(rec.getValue().getX(), writer); + writer.name("output2"); this.writeFluidStack(rec.getValue().getY(), writer); + writer.name("output3"); this.writeFluidStack(rec.getValue().getZ(), writer); + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } +} 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 1dc2895a4..55f963a36 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -49,6 +49,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new CrystallizerRecipes()); recipeHandlers.add(new FractionRecipes()); recipeHandlers.add(new CrackingRecipes()); + recipeHandlers.add(new ReformingRecipes()); recipeHandlers.add(new LiquefactionRecipes()); recipeHandlers.add(new SolidificationRecipes()); recipeHandlers.add(new BreederRecipes()); diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index c5b315f82..ee9c6d1ba 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -1,15 +1,18 @@ package com.hbm.tileentity.machine.oil; import com.hbm.blocks.BlockDummyable; +import com.hbm.inventory.FluidStack; import com.hbm.inventory.container.ContainerMachineCatalyticReformer; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineCatalyticReformer; +import com.hbm.inventory.recipes.ReformingRecipes; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.Tuple.Triplet; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -84,7 +87,32 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase im } private void reform() { - //TODO: add recipe handler + + Triplet out = ReformingRecipes.getOutput(tanks[0].getTankType()); + if(out == null) { + tanks[1].setTankType(Fluids.NONE); + tanks[2].setTankType(Fluids.NONE); + tanks[3].setTankType(Fluids.NONE); + return; + } + + tanks[1].setTankType(out.getX().type); + tanks[2].setTankType(out.getY().type); + tanks[3].setTankType(out.getZ().type); + + if(power < 20_000) return; + if(tanks[0].getFill() < 100) return; + + if(tanks[1].getFill() + out.getX().fill > tanks[1].getMaxFill()) return; + if(tanks[2].getFill() + out.getY().fill > tanks[2].getMaxFill()) return; + if(tanks[3].getFill() + out.getZ().fill > tanks[3].getMaxFill()) return; + + tanks[0].setFill(tanks[0].getFill() - 100); + tanks[1].setFill(tanks[1].getFill() + out.getX().fill); + tanks[2].setFill(tanks[2].getFill() + out.getY().fill); + tanks[3].setFill(tanks[3].getFill() + out.getZ().fill); + + power -= 20_000; } private void updateConnections() { diff --git a/src/main/resources/assets/hbm/textures/items/crackpipe.png b/src/main/resources/assets/hbm/textures/items/crackpipe.png new file mode 100644 index 0000000000000000000000000000000000000000..0227e6dfc0c3a3a422cbec0525fec21988b43232 GIT binary patch literal 344 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 HT;u->!yXSn literal 5789 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