From 46f11acb9bf899c025c1f90fc1eb3e45488efe26 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 29 Sep 2022 16:52:05 +0200 Subject: [PATCH] fixed diode lag, proper limit, functional crucible recipes, scraps --- .../com/hbm/blocks/network/CableDiode.java | 19 ++++- .../inventory/material/MatDistribution.java | 30 +++++++ .../java/com/hbm/inventory/material/Mats.java | 1 + .../hbm/inventory/material/NTMMaterial.java | 2 + .../inventory/recipes/CrucibleRecipes.java | 10 ++- src/main/java/com/hbm/items/ModItems.java | 3 + .../java/com/hbm/items/machine/ItemMold.java | 28 ++++++- .../com/hbm/items/machine/ItemScraps.java | 76 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 3 +- .../machine/TileEntityCrucible.java | 35 ++++++++ .../assets/hbm/textures/items/mold_c357.png | Bin 0 -> 352 bytes .../assets/hbm/textures/items/mold_c44.png | Bin 0 -> 368 bytes .../assets/hbm/textures/items/mold_c50.png | Bin 0 -> 364 bytes .../assets/hbm/textures/items/mold_c9.png | Bin 0 -> 353 bytes .../hbm/textures/items/mold_cbuckshot.png | Bin 0 -> 351 bytes .../assets/hbm/textures/items/mold_gem.png | Bin 0 -> 478 bytes .../assets/hbm/textures/items/scraps.png | Bin 0 -> 262 bytes 17 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/hbm/items/machine/ItemScraps.java create mode 100644 src/main/resources/assets/hbm/textures/items/mold_c357.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_c44.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_c50.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_c9.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_cbuckshot.png create mode 100644 src/main/resources/assets/hbm/textures/items/mold_gem.png create mode 100644 src/main/resources/assets/hbm/textures/items/scraps.png diff --git a/src/main/java/com/hbm/blocks/network/CableDiode.java b/src/main/java/com/hbm/blocks/network/CableDiode.java index 25da7bb68..3cec642fc 100644 --- a/src/main/java/com/hbm/blocks/network/CableDiode.java +++ b/src/main/java/com/hbm/blocks/network/CableDiode.java @@ -110,7 +110,7 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl TileEntityDiode diode = (TileEntityDiode) te; List text = new ArrayList(); - text.add("Max.: " + BobMathUtil.getShortNumber(diode.getMaxPower()) + "HE/pulse"); + text.add("Max.: " + BobMathUtil.getShortNumber(diode.getMaxPower()) + "HE/t"); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } @@ -168,6 +168,8 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl private boolean recursionBrake = false; private long subBuffer; + private long contingent = 0; + private long lastTransfer = 0; @Override public long transferPower(long power) { @@ -175,9 +177,17 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl if(recursionBrake) return power; + if(lastTransfer != worldObj.getTotalWorldTime()) { + lastTransfer = worldObj.getTotalWorldTime(); + contingent = getMaxPower(); + } + + if(contingent <= 0) + return power; + //this part turns "maxPower" from a glorified transfer weight into an actual transfer cap - long overShoot = Math.max(0, power - getMaxPower()); - power = Math.min(power, getMaxPower()); + long overShoot = Math.max(0, power - contingent); + power = Math.min(power, contingent); recursionBrake = true; this.subBuffer = power; @@ -186,6 +196,9 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); long ret = this.subBuffer; + long sent = power - ret; + contingent -= sent; + this.subBuffer = 0; recursionBrake = false; diff --git a/src/main/java/com/hbm/inventory/material/MatDistribution.java b/src/main/java/com/hbm/inventory/material/MatDistribution.java index 58c00b1dd..0c22e9780 100644 --- a/src/main/java/com/hbm/inventory/material/MatDistribution.java +++ b/src/main/java/com/hbm/inventory/material/MatDistribution.java @@ -8,6 +8,7 @@ import java.util.List; import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -18,11 +19,40 @@ import net.minecraft.item.ItemStack; public class MatDistribution { public static void register() { + //vanilla crap + registerOre("stone", MAT_STONE, BLOCK.q(1)); + registerOre("cobblestone", MAT_STONE, BLOCK.q(1)); + registerEntry(Blocks.obsidian, MAT_OBSIDIAN, BLOCK.q(1)); registerEntry(Blocks.rail, MAT_IRON, INGOT.q(6, 16)); registerEntry(Blocks.golden_rail, MAT_GOLD, INGOT.q(6), MAT_REDSTONE, DUST.q(1)); registerEntry(Blocks.detector_rail, MAT_IRON, INGOT.q(6), MAT_REDSTONE, DUST.q(1)); registerEntry(Items.minecart, MAT_IRON, INGOT.q(5)); + + //castables + registerEntry(ModItems.blade_titanium, MAT_TITANIUM, INGOT.q(2)); + registerEntry(ModItems.blade_tungsten, MAT_TUNGSTEN, INGOT.q(2)); + registerEntry(ModItems.blades_gold, MAT_GOLD, INGOT.q(4)); + registerEntry(ModItems.blades_aluminium, MAT_ALUMINIUM, INGOT.q(4)); + registerEntry(ModItems.blades_iron, MAT_IRON, INGOT.q(4)); + registerEntry(ModItems.blades_steel, MAT_STEEL, INGOT.q(4)); + registerEntry(ModItems.blades_titanium, MAT_TITANIUM, INGOT.q(4)); + registerEntry(ModItems.blades_advanced_alloy, MAT_ALLOY, INGOT.q(4)); + registerEntry(ModItems.blades_combine_steel, MAT_CMB, INGOT.q(4)); + registerEntry(ModItems.blades_schrabidium, MAT_SCHRABIDIUM, INGOT.q(4)); + registerEntry(ModItems.stamp_stone_flat, MAT_STONE, INGOT.q(3)); + registerEntry(ModItems.stamp_iron_flat, MAT_IRON, INGOT.q(3)); + registerEntry(ModItems.stamp_steel_flat, MAT_STEEL, INGOT.q(3)); + registerEntry(ModItems.stamp_titanium_flat, MAT_TITANIUM, INGOT.q(3)); + registerEntry(ModItems.stamp_obsidian_flat, MAT_OBSIDIAN, INGOT.q(3)); + registerEntry(ModItems.stamp_schrabidium_flat, MAT_SCHRABIDIUM, INGOT.q(3)); + registerEntry(ModItems.hull_small_steel, MAT_STEEL, INGOT.q(2)); + registerEntry(ModItems.hull_small_aluminium, MAT_ALUMINIUM, INGOT.q(2)); + registerEntry(ModItems.hull_big_steel, MAT_STEEL, INGOT.q(6)); + registerEntry(ModItems.hull_big_aluminium, MAT_ALUMINIUM, INGOT.q(6)); + registerEntry(ModItems.hull_big_titanium, MAT_TITANIUM, INGOT.q(6)); + registerEntry(ModItems.pipes_steel, MAT_STEEL, BLOCK.q(3)); + //actual ores registerOre(OreDictManager.COAL.ore(), MAT_IRON, INGOT.q(4), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.IRON.ore(), MAT_IRON, INGOT.q(3), MAT_TITANIUM, INGOT.q(1), MAT_STONE, QUART.q(1)); registerOre(OreDictManager.GOLD.ore(), MAT_GOLD, INGOT.q(3), MAT_LEAD, INGOT.q(1), MAT_STONE, QUART.q(1)); diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 0b32625ff..a73da1d2b 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -24,6 +24,7 @@ import net.minecraft.item.ItemStack; */ public class Mats { + public static List orderedList = new ArrayList(); public static HashMap prefixByName = new HashMap(); public static HashMap matById = new HashMap(); public static HashMap matByName = new HashMap(); diff --git a/src/main/java/com/hbm/inventory/material/NTMMaterial.java b/src/main/java/com/hbm/inventory/material/NTMMaterial.java index 68bb321cf..6883f4384 100644 --- a/src/main/java/com/hbm/inventory/material/NTMMaterial.java +++ b/src/main/java/com/hbm/inventory/material/NTMMaterial.java @@ -14,6 +14,7 @@ public class NTMMaterial { public MaterialShapes[] shapes = new MaterialShapes[0]; public boolean omitItemGen = false; public SmeltingBehavior smeltable = SmeltingBehavior.NOT_SMELTABLE; + public int solidColor = 0xFF4A00; //TODO public int moltenColor = 0xFF4A00; public NTMMaterial(int id, DictFrame dict) { @@ -25,6 +26,7 @@ public class NTMMaterial { Mats.matByName.put(name, this); } + Mats.orderedList.add(this); Mats.matById.put(id, this); } diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index 991c2198f..072faee53 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -15,8 +15,12 @@ public class CrucibleRecipes extends SerializableRecipe { public static HashMap indexMapping = new HashMap(); public static List recipes = new ArrayList(); - - + + /* + * IMPORTANT: crucibles do not have stack size checks for the recipe's result, meaning that they can overflow if the resulting stacks are + * bigger than the input stacks, so make sure that material doesn't "expand". very few things do that IRL when alloying anyway. + */ + @Override public void registerDefaults() { @@ -38,7 +42,7 @@ public class CrucibleRecipes extends SerializableRecipe { public MaterialStack[] output; private int id; private String name; - public int frequency; + public int frequency = 1; public CrucibleRecipe(int id, String name, int frequency) { this.id = id; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index c5038b221..dfc52f442 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -744,6 +744,7 @@ public class ModItems { public static Item mold_base; public static Item mold; + public static Item scraps; public static Item part_lithium; public static Item part_beryllium; @@ -3355,6 +3356,7 @@ public class ModItems { mold_base = new Item().setUnlocalizedName("mold_base").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":mold_base"); mold = new ItemMold().setUnlocalizedName("mold").setCreativeTab(MainRegistry.controlTab); + scraps = new ItemScraps().setUnlocalizedName("scraps").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":scraps"); part_lithium = new Item().setUnlocalizedName("part_lithium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_lithium"); part_beryllium = new Item().setUnlocalizedName("part_beryllium").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":part_beryllium"); @@ -6654,6 +6656,7 @@ public class ModItems { //Molds GameRegistry.registerItem(mold_base, mold_base.getUnlocalizedName()); GameRegistry.registerItem(mold, mold.getUnlocalizedName()); + GameRegistry.registerItem(scraps, scraps.getUnlocalizedName()); //Machine Upgrades GameRegistry.registerItem(upgrade_template, upgrade_template.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemMold.java b/src/main/java/com/hbm/items/machine/ItemMold.java index 883fa1226..cb8337f32 100644 --- a/src/main/java/com/hbm/items/machine/ItemMold.java +++ b/src/main/java/com/hbm/items/machine/ItemMold.java @@ -17,6 +17,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -28,10 +29,15 @@ public class ItemMold extends Item { public List molds = new ArrayList(); //molds in "pretty" order, variable between versions public HashMap moldById = new HashMap(); //molds by their static ID -> stack item damage + public HashMap blockOverrides = new HashMap(); + public ItemMold() { this.setHasSubtypes(true); this.setMaxDamage(0); + + blockOverrides.put(Mats.MAT_STONE, new ItemStack(Blocks.stone)); + blockOverrides.put(Mats.MAT_OBSIDIAN, new ItemStack(Blocks.obsidian)); int S = 0; int L = 1; @@ -41,7 +47,7 @@ public class ItemMold extends Item { registerMold(new MoldShape( 3, S, "plate", MaterialShapes.PLATE)); registerMold(new MoldWire( 4, S, "wire")); - registerMold(new MoldMulti( 5, S, "blade", MaterialShapes.INGOT.q(3), + registerMold(new MoldMulti( 5, S, "blade", MaterialShapes.INGOT.q(2), Mats.MAT_TITANIUM, new ItemStack(ModItems.blade_titanium), Mats.MAT_TUNGSTEN, new ItemStack(ModItems.blade_tungsten))); @@ -74,7 +80,7 @@ public class ItemMold extends Item { registerMold(new MoldShape( 10, L, "ingots", MaterialShapes.INGOT, 9)); registerMold(new MoldShape( 11, L, "plates", MaterialShapes.PLATE, 9)); - registerMold(new MoldShape( 12, L, "block", MaterialShapes.BLOCK)); + registerMold(new MoldBlock( 12, L, "block", MaterialShapes.BLOCK)); registerMold(new MoldSingle( 13, L, "pipes", new ItemStack(ModItems.pipes_steel), Mats.MAT_STEEL, MaterialShapes.BLOCK.q(3))); } @@ -188,6 +194,24 @@ public class ItemMold extends Item { } } + public class MoldBlock extends MoldShape { + + public MoldBlock(int id, int size, String name, MaterialShapes shape) { + super(id, size, name, shape); + } + + @Override + public ItemStack getOutput(NTMMaterial mat) { + + ItemStack override = blockOverrides.get(mat); + + if(override != null) + return override.copy(); + + return super.getOutput(mat); + } + } + public class MoldWire extends Mold { public MoldWire(int id, int size, String name) { diff --git a/src/main/java/com/hbm/items/machine/ItemScraps.java b/src/main/java/com/hbm/items/machine/ItemScraps.java new file mode 100644 index 000000000..6b20eb094 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemScraps.java @@ -0,0 +1,76 @@ +package com.hbm.items.machine; + +import java.util.List; + +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats; +import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.items.ModItems; +import com.hbm.inventory.material.NTMMaterial; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ItemScraps extends Item { + + public ItemScraps() { + this.setHasSubtypes(true); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(NTMMaterial mat : Mats.orderedList) { + list.add(new ItemStack(item, 1, mat.id)); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + MaterialStack contents = getMats(stack); + + if(contents != null) { + list.add(contents.material.names[0] + " " + Mats.formatAmount(contents.amount)); + } + } + + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int layer) { + + NTMMaterial mat = Mats.matById.get(stack.getItemDamage()); + + if(mat != null) { + return mat.moltenColor; + } + + return 0xffffff; + } + + public static MaterialStack getMats(ItemStack stack) { + + if(stack.getItem() != ModItems.scraps) return null; + + NTMMaterial mat = Mats.matById.get(stack.getItemDamage()); + if(mat == null) return null; + + int amount = MaterialShapes.INGOT.q(1); + + if(stack.hasTagCompound()) { + amount = stack.getTagCompound().getInteger("amount"); + } + + return new MaterialStack(mat, amount); + } + + public static ItemStack create(MaterialStack stack) { + ItemStack scrap = new ItemStack(ModItems.scrap, 1, stack.material.id); + scrap.stackTagCompound = new NBTTagCompound(); + scrap.stackTagCompound.setInteger("amount", stack.amount); + return scrap; + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 1c55dc46f..e767c9848 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -199,7 +199,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.sphere_steel, 1), new Object[] { "PIP", "I I", "PIP", 'P', STEEL.plate(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.pedestal_steel, 1), new Object[] { "P P", "P P", "III", 'P', STEEL.plate(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.lemon, 1), new Object[] { " D ", "DSD", " D ", 'D', KEY_YELLOW, 'S', "stone" }); - addRecipeAuto(new ItemStack(ModItems.blade_titanium, 4), new Object[] { "TP", "TP", "TT", 'P', TI.plate(), 'T', TI.ingot() }); + addRecipeAuto(new ItemStack(ModItems.blade_titanium, 2), new Object[] { "TP", "TP", "TT", 'P', TI.plate(), 'T', TI.ingot() }); addRecipeAuto(new ItemStack(ModItems.turbine_titanium, 1), new Object[] { "BBB", "BSB", "BBB", 'B', ModItems.blade_titanium, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.rotor_steel, 3), new Object[] { "CCC", "SSS", "CCC", 'C', ModItems.coil_gold, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.generator_steel, 1), new Object[] { "RRR", "CCC", "SSS", 'C', ModItems.coil_gold_torus, 'S', STEEL.ingot(), 'R', ModItems.rotor_steel }); @@ -209,7 +209,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.shimmer_sledge, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_head }); addRecipeAuto(new ItemStack(ModItems.shimmer_axe, 1), new Object[] { "H", "G", "G", 'G', ModItems.shimmer_handle, 'H', ModItems.shimmer_axe_head }); addRecipeAuto(new ItemStack(ModItems.definitelyfood, 1), new Object[] { "DDD", "SDS", "DDD", 'D', Blocks.dirt, 'S', STEEL.plate() }); - addRecipeAuto(new ItemStack(ModItems.blade_tungsten, 2), new Object[] { "IP", "TP", "TI", 'P', TI.plate(), 'T', TI.ingot(), 'I', W.ingot() }); addRecipeAuto(new ItemStack(ModItems.turbine_tungsten, 1), new Object[] { "BBB", "BSB", "BBB", 'B', ModItems.blade_tungsten, 'S', DURA.ingot() }); addRecipeAuto(new ItemStack(ModItems.ring_starmetal, 1), new Object[] { " S ", "S S", " S ", 'S', STAR.ingot() }); addRecipeAuto(new ItemStack(ModItems.flywheel_beryllium, 1), new Object[] { "BBB", "BTB", "BBB", 'B', BE.block(), 'T', ModItems.bolt_compound }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 0bea94db6..b1180e9c1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -65,6 +65,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro if(!worldObj.isRemote) { tryPullHeat(); + /* collect items */ if(worldObj.getTotalWorldTime() % 5 == 0) { List list = worldObj.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord + 0.5, zCoord - 0.5, xCoord + 1.5, yCoord + 1, zCoord + 1.5)); @@ -90,10 +91,14 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro } } + /* smelt items from buffer */ if(!trySmelt()) { this.progress = 0; } + tryRecipe(); + + /* pour wasste stack */ if(!this.wasteStack.isEmpty()) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); @@ -101,6 +106,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, this.wasteStack, MaterialShapes.NUGGET.q(1), impact); } + /* pour recipe stack */ if(!this.recipeStack.isEmpty()) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); @@ -126,9 +132,11 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, toCast, MaterialShapes.NUGGET.q(1), impact); } + /* clean up stacks */ this.recipeStack.removeIf(o -> o.amount <= 0); this.wasteStack.removeIf(x -> x.amount <= 0); + /* sync */ NBTTagCompound data = new NBTTagCompound(); int[] rec = new int[recipeStack.size() * 2]; int[] was = new int[wasteStack.size() * 2]; @@ -221,6 +229,33 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro return true; } + protected void tryRecipe() { + CrucibleRecipe recipe = this.getLoadedRecipe(); + + if(recipe == null) return; + if(worldObj.getTotalWorldTime() % recipe.frequency > 0) return; + + for(MaterialStack stack : recipe.input) { + if(getQuantaFromType(this.recipeStack, stack.material) < stack.amount) return; + } + + for(MaterialStack stack : this.recipeStack) { + stack.amount -= getQuantaFromType(recipe.input, stack.material); + } + + for(MaterialStack out : recipe.output) { + + for(MaterialStack stack : this.recipeStack) { + if(stack.material == out.material) { + stack.amount += out.amount; + break; + } + } + + this.recipeStack.add(out.copy()); + } + } + protected int getFirstSmeltableSlot() { for(int i = 1; i < 10; i++) { diff --git a/src/main/resources/assets/hbm/textures/items/mold_c357.png b/src/main/resources/assets/hbm/textures/items/mold_c357.png new file mode 100644 index 0000000000000000000000000000000000000000..2086e490bef49cf6f5e64558c68abaa470893cdf GIT binary patch literal 352 zcmV-m0iXVfP)8aq+L!kjrf@gn&SC9T9@#?Sf=1mF~ zdJWW*#u5UXq)`vD)7@=a;=9bwo5{tLnoj>WsD8QExP?%8O_!FU2d8Vl5B?Kvp6gRxf67kn~d4ASeA$T8> zp2OAgn8V4DQ@C8rjRV_>(0`VnTrTE8-fu&^yuO=@Y8&U=#p^SPdi($~ZMDrvAqiyw O00005BloozNvYkim5yxDpCb|yP`xVdb!3Q1zk!dL)rEfB7oQ(A?jSkaa8{N@z{JipHYF!j#^3*3`fzuC z!tv>uw{bR|I0tPfN?uksIh#&;`R+B;>-@ugn5y*RHeO;B4EO=9Y_R&SrJS|^0000< KMNUMnLSTX%Gn@bb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_c9.png b/src/main/resources/assets/hbm/textures/items/mold_c9.png new file mode 100644 index 0000000000000000000000000000000000000000..4921bd05bcde2024281388b2a6da2634006b5aa4 GIT binary patch literal 353 zcmV-n0iOPeP)yV6f`24l`!ybf-bAS2 zO#Y{r zXnc#I$x*FpDHxg@jc-w5&sC^}`*Is77P6T!Sm0a~5uxUD*V>+8h4JlM%P4B_| zc?xeL0Nh=cI6J=p04&~K4~po*8oB3eW)U01 zHBu49KP%iZoRIPz2QSNy-{N)?#X~$}t_Ju4=997^A*gyd00000NkvXXu0mjf+O3xk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_cbuckshot.png b/src/main/resources/assets/hbm/textures/items/mold_cbuckshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a82cdf756d7d503285bd67a08dbe07e94de84fec GIT binary patch literal 351 zcmV-l0igbgP)NZkY zL8+oh&IByrxp9W7{F~=D+5a0ndwG8PHd>Kb!`YPp!C4@-zE2yi$WA#Q#!-|ta}$%D zavv}^F-2LE@oUS-z3tOgL=q^;BK!6(in8|SXv{Ho$rPf*no-A8l53kl*JoFH>RoKM zyFg#BQUI*dxVFJ6ePPh2yxHzZmkY0_%LVrjk6xEct}>9ssWPn6xcYAjW1YT+E`wl< z|AFrTaMSD6R|^cMaB~TFkqWvm@LG2h*Q+$>I>7O;AB+${C)W5qmp-_*;ds~&SorRD x_dtG@)YgBYZyzvteS5zI*Hs{=>>}f6#t(D2w$ov}*BAf*002ovPDHLkV1fpdo238% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mold_gem.png b/src/main/resources/assets/hbm/textures/items/mold_gem.png new file mode 100644 index 0000000000000000000000000000000000000000..7009021415b53d56eee330adeb5ffd9fde3c866a GIT binary patch literal 478 zcmV<40U`d0P)c(TfSQ1lUF*C*fr5UaerC9vw{gXCvEQ_DV zZ8o{8U{j_fPVb*M+WSnF=b9S~1NtXERkIs4QvwFV0Ke7b*LbQ}uiL?IH5m*8()_L5 z;5A)PH(sfDm-($G7mrb?iQA|d;$+78Lx|sM5=;^$OU%t(3EyuY@)C}U2BIKet&{)| zOcITI-45K`=~uJ&oSNg3E;DTTd5&f6lwP$@wxeU{7DPd>+fmsPUsYm26}V6wOaH`Y z@1U)OV3MfpUbn;L^(~%l^ZnZw#!;whbcDL`7)RlM1r?Lx>2p-VZ3(JPHrFX5OrN8z zJ1Ew;zH_<6mvFSDWE_R0`CBpj+QWK{z*bV`tm2!+0Pg7bAAO|DtmJp$;yv5q1L)i7 UpT?u0-v9sr07*qoM6N<$g8io52LJ#7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/scraps.png b/src/main/resources/assets/hbm/textures/items/scraps.png new file mode 100644 index 0000000000000000000000000000000000000000..334bf96fa5484df879c86c97c0117e4881b884aa GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf;3ewY8r z(%7?)=M+D;dH!ePKP59`VL@f3;&&f)4UMIZr3EF8XLqpF=U>|XC^d4ysuf$6mWsF@ zHgK^yZ_F@b{pH1ts~%bKEt#_Dq=|1p=#(G@CGqS1)20M5C>+@umUEj;iHV`-aYd#8 zpPzSGRL@Di`TO4gK5ZHo_CYOoov4{<b56nNZEa~f(jPBsS0rUuir>mdK II;Vst07K(sIsgCw literal 0 HcmV?d00001