From b1fd87cae4a040c29f11f5aadabc7c10ac4b87bc Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 25 May 2024 20:53:41 +0200 Subject: [PATCH] recipes, soldering station automation --- changelog | 1 + .../java/com/hbm/crafting/MineralRecipes.java | 2 +- .../com/hbm/inventory/OreDictManager.java | 2 +- .../inventory/recipes/ArcFurnaceRecipes.java | 2 +- .../inventory/recipes/AssemblerRecipes.java | 10 ++++ .../hbm/inventory/recipes/PressRecipes.java | 2 + .../inventory/recipes/SolderingRecipes.java | 25 +++++++++- .../inventory/recipes/anvil/AnvilRecipes.java | 9 ++++ src/main/java/com/hbm/items/ModItems.java | 43 ++++++++++-------- .../com/hbm/items/machine/ItemCircuit.java | 1 + .../java/com/hbm/main/CraftingManager.java | 14 ++++++ .../TileEntityMachineSolderingStation.java | 36 ++++++++++++++- src/main/resources/assets/hbm/lang/de_DE.lang | 17 ++++++- src/main/resources/assets/hbm/lang/en_US.lang | 17 ++++++- .../gui/processing/gui_soldering_station.png | Bin 3303 -> 3180 bytes .../assets/hbm/textures/items/circuit.png | Bin 8490 -> 8579 bytes .../hbm/textures/items/circuit.silicon.png | Bin 0 -> 278 bytes .../hbm/textures/items/nugget_niobium.png | Bin 0 -> 273 bytes 18 files changed, 152 insertions(+), 29 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/circuit.silicon.png create mode 100644 src/main/resources/assets/hbm/textures/items/nugget_niobium.png diff --git a/changelog b/changelog index e77ac647f..ff9332625 100644 --- a/changelog +++ b/changelog @@ -17,6 +17,7 @@ * The small arc furnace is being retired and is no longer craftable. However, it will still function, and it can use any type of electrode without depleting it * Wires now use the autogen system and are oredicted with the "wireFine" prefix (equivalent to GT fine wires, 1/8 of an ingot) * Removed the assembler recipes for wires +* Increased the maximum durability for all stamps ## Fixed * Fixed missing localization for meteorite ores and the new crucible materials diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index eab0811e6..26025c419 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -46,7 +46,6 @@ public class MineralRecipes { add1To9Pair(ModBlocks.block_schrabidate, ModItems.ingot_schrabidate); add1To9Pair(ModBlocks.block_coltan, ModItems.fragment_coltan); add1To9Pair(ModBlocks.block_smore, ModItems.ingot_smore); - add1To9Pair(ModBlocks.block_niobium, ModItems.ingot_niobium); add1To9Pair(ModBlocks.block_semtex, ModItems.ingot_semtex); add1To9Pair(ModBlocks.block_c4, ModItems.ingot_c4); add1To9Pair(ModBlocks.block_polymer, ModItems.ingot_polymer); @@ -60,6 +59,7 @@ public class MineralRecipes { add1To9PairSameMeta(Item.getItemFromBlock(ModBlocks.block_coke), ModItems.coke, i); } + addMineralSet(ModItems.nugget_niobium, ModItems.ingot_niobium, ModBlocks.block_niobium); addMineralSet(ModItems.nugget_bismuth, ModItems.ingot_bismuth, ModBlocks.block_bismuth); addMineralSet(ModItems.nugget_tantalium, ModItems.ingot_tantalium, ModBlocks.block_tantalium); addMineralSet(ModItems.nugget_zirconium, ModItems.ingot_zirconium, ModBlocks.block_zirconium); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 024fac49e..0b5c5b3ef 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -384,7 +384,7 @@ public class OreDictManager { CD .ingot(ingot_cadmium) .dust(powder_cadmium) .block(block_cadmium); TA .nugget(nugget_tantalium) .gem(gem_tantalium) .ingot(ingot_tantalium) .dust(powder_tantalium) .block(block_tantalium); COLTAN .ingot(fragment_coltan) .dust(powder_coltan_ore) .block(block_coltan) .ore(ore_coltan); - NB .nugget(fragment_niobium) .ingot(ingot_niobium) .dustSmall(powder_niobium_tiny) .dust(powder_niobium) .block(block_niobium); + NB .nugget(nugget_niobium, fragment_niobium) .ingot(ingot_niobium) .dustSmall(powder_niobium_tiny) .dust(powder_niobium) .block(block_niobium); BE .nugget(nugget_beryllium) .billet(billet_beryllium) .ingot(ingot_beryllium) .dust(powder_beryllium) .block(block_beryllium) .ore(ore_beryllium); CO .nugget(fragment_cobalt) .nugget(nugget_cobalt) .billet(billet_cobalt) .ingot(ingot_cobalt) .dust(powder_cobalt) .dustSmall(powder_cobalt_tiny) .block(block_cobalt) .ore(ore_cobalt, ore_nether_cobalt); B .nugget(fragment_boron) .ingot(ingot_boron) .dustSmall(powder_boron_tiny) .dust(powder_boron) .block(block_boron); diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index b391fa8e3..db3c9c869 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -151,7 +151,7 @@ public class ArcFurnaceRecipes extends SerializableRecipe { } for(NTMMaterial mat : Mats.orderedList) { if(mat.smeltable == SmeltingBehavior.SMELTABLE) { - recipes.put(new ItemStack(ModItems.scraps, 1, mat.id), ItemScraps.create(new MaterialStack(mat, MaterialShapes.INGOT.q(1)))); + recipes.put(new ItemStack(ModItems.scraps, 1, mat.id), ItemScraps.create(new MaterialStack(mat, MaterialShapes.INGOT.q(1)), true)); } } return recipes; diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 0d92377e3..1b4555128 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -31,6 +31,7 @@ import com.hbm.items.ItemAmmoEnums; import com.hbm.items.ModItems; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemAssemblyTemplate; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.items.weapon.ItemAmmoHIMARS; @@ -361,6 +362,15 @@ public class AssemblerRecipes extends SerializableRecipe { new OreDictStack(DURA.pipe(), 4) }, 200); + makeRecipe(new ComparableStack(ModBlocks.machine_arc_furnace, 1), new AStack[] { + new OreDictStack(ANY_CONCRETE.any(), 12), + new OreDictStack(ANY_PLASTIC.ingot(), 8), + new ComparableStack(ModItems.ingot_firebrick, 16), + new OreDictStack(STEEL.plateCast(), 8), + new ComparableStack(ModBlocks.machine_transformer, 1), + new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG.ordinal()) + }, 200); + makeRecipe(new ComparableStack(ModBlocks.machine_excavator, 1), new AStack[] { new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(STEEL.ingot(), 16), diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index d791a2fc3..06ef2cd13 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -25,6 +25,7 @@ import com.hbm.items.ItemAmmoEnums.Ammo556mm; import com.hbm.items.ItemAmmoEnums.AmmoLunaticSniper; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemStamp; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemStamp.StampType; import com.hbm.util.Tuple.Pair; @@ -96,6 +97,7 @@ public class PressRecipes extends SerializableRecipe { makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_bismuth_raw), ModItems.circuit_bismuth); makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_arsenic_raw), ModItems.circuit_arsenic); makeRecipe(StampType.CIRCUIT, new ComparableStack(ModItems.circuit_tantalium_raw), ModItems.circuit_tantalium); + makeRecipe(StampType.CIRCUIT, new OreDictStack(SI.billet()), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON)); makeRecipe(StampType.C357, new ComparableStack(ModItems.assembly_iron), ModItems.ammo_357.stackFromEnum(24, Ammo357Magnum.IRON)); makeRecipe(StampType.C357, new ComparableStack(ModItems.assembly_steel), ModItems.ammo_357.stackFromEnum(24, Ammo357Magnum.LEAD)); diff --git a/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java index 2ba5be4ce..e747ff959 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolderingRecipes.java @@ -3,6 +3,7 @@ package com.hbm.inventory.recipes; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import static com.hbm.inventory.OreDictManager.*; @@ -53,13 +54,23 @@ public class SolderingRecipes extends SerializableRecipe { new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CAPACITOR.ordinal())}, new AStack[] { new ComparableStack(ModItems.circuit, 8, EnumCircuitType.PCB.ordinal()), - new OreDictStack(RUBBER.ingot())}, + new OreDictStack(RUBBER.ingot(), 2)}, new AStack[] { new OreDictStack(PB.wireFine(), 8)} )); + recipes.add(new SolderingRecipe(new ItemStack(ModItems.circuit, 1, EnumCircuitType.CAPACITOR_BOARD.ordinal()), 200, 300, + new FluidStack(Fluids.ACID, 250), + new AStack[] { + new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CAPACITOR_TANTALIUM.ordinal())}, + new AStack[] { + new ComparableStack(ModItems.circuit, 1, EnumCircuitType.PCB.ordinal())}, + new AStack[] { + new OreDictStack(PB.wireFine(), 3)} + )); + recipes.add(new SolderingRecipe(new ItemStack(ModItems.circuit, 1, EnumCircuitType.BISMOID.ordinal()), 400, 10_000, - new FluidStack(Fluids.RADIOSOLVENT, 1_000), + new FluidStack(Fluids.SOLVENT, 1_000), new AStack[] { new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CHIP_BISMOID.ordinal()), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP.ordinal()), @@ -114,6 +125,9 @@ public class SolderingRecipes extends SerializableRecipe { @Override public void deleteRecipes() { recipes.clear(); + toppings.clear(); + pcb.clear(); + solder.clear(); } @Override @@ -125,6 +139,10 @@ public class SolderingRecipes extends SerializableRecipe { public void writeRecipe(Object obj, JsonWriter writer) throws IOException { } + + public static HashSet toppings = new HashSet(); + public static HashSet pcb = new HashSet(); + public static HashSet solder = new HashSet(); public static class SolderingRecipe { @@ -144,6 +162,9 @@ public class SolderingRecipes extends SerializableRecipe { this.output = output; this.duration = duration; this.consumption = consumption; + for(AStack t : toppings) SolderingRecipes.toppings.add(t); + for(AStack t : pcb) SolderingRecipes.pcb.add(t); + for(AStack t : solder) SolderingRecipes.solder.add(t); } public SolderingRecipe(ItemStack output, int duration, long consumption, AStack[] toppings, AStack[] pcb, AStack[] solder) { diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index a53f11415..615901920 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -22,6 +22,7 @@ import com.hbm.items.ItemAmmoEnums.*; import com.hbm.items.ItemEnums.EnumChunkType; import com.hbm.items.ModItems; import com.hbm.items.food.ItemFlask.EnumInfusion; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -357,6 +358,14 @@ public class AnvilRecipes { new ComparableStack(ModItems.plate_polymer, 8) }, new AnvilOutput(new ItemStack(ModBlocks.machine_boiler))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new OreDictStack(STEEL.plateCast(), 2), + new ComparableStack(ModItems.coil_copper, 4), + new OreDictStack(W.bolt(), 4), + new ComparableStack(ModItems.circuit, 2, EnumCircuitType.VACUUM_TUBE.ordinal()) + }, new AnvilOutput(new ItemStack(ModBlocks.machine_soldering_station))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new OreDictStack(STEEL.plateCast(), 4), diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a13a070ba..3b7cb400f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -309,6 +309,7 @@ public class ModItems { public static Item billet_silicon; public static Item nugget_silicon; public static Item ingot_niobium; + public static Item nugget_niobium; public static Item ingot_osmiridium; public static Item nugget_osmiridium; public static Item plate_lead; @@ -2809,6 +2810,7 @@ public class ModItems { billet_silicon = new Item().setUnlocalizedName("billet_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":billet_silicon"); nugget_silicon = new Item().setUnlocalizedName("nugget_silicon").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_silicon"); ingot_niobium = new Item().setUnlocalizedName("ingot_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_niobium"); + nugget_niobium = new Item().setUnlocalizedName("nugget_niobium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_niobium"); ingot_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("ingot_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_osmiridium"); nugget_osmiridium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_osmiridium"); nugget_schrabidium = new ItemCustomLore().setRarity(EnumRarity.rare).setUnlocalizedName("nugget_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_schrabidium"); @@ -3233,26 +3235,26 @@ public class ModItems { pellet_antimatter = new ItemDrop().setUnlocalizedName("pellet_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":pellet_antimatter"); crystal_xen = new ItemDrop().setUnlocalizedName("crystal_xen").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":crystal_xen"); - stamp_stone_flat = new ItemStamp(10, StampType.FLAT).setUnlocalizedName("stamp_stone_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_flat"); - stamp_stone_plate = new ItemStamp(10, StampType.PLATE).setUnlocalizedName("stamp_stone_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_plate"); - stamp_stone_wire = new ItemStamp(10, StampType.WIRE).setUnlocalizedName("stamp_stone_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_wire"); - stamp_stone_circuit = new ItemStamp(10, StampType.CIRCUIT).setUnlocalizedName("stamp_stone_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_circuit"); - stamp_iron_flat = new ItemStamp(50, StampType.FLAT).setUnlocalizedName("stamp_iron_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_flat"); - stamp_iron_plate = new ItemStamp(50, StampType.PLATE).setUnlocalizedName("stamp_iron_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_plate"); - stamp_iron_wire = new ItemStamp(50, StampType.WIRE).setUnlocalizedName("stamp_iron_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_wire"); - stamp_iron_circuit = new ItemStamp(50, StampType.CIRCUIT).setUnlocalizedName("stamp_iron_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_circuit"); - stamp_steel_flat = new ItemStamp(100, StampType.FLAT).setUnlocalizedName("stamp_steel_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_flat"); - stamp_steel_plate = new ItemStamp(100, StampType.PLATE).setUnlocalizedName("stamp_steel_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_plate"); - stamp_steel_wire = new ItemStamp(100, StampType.WIRE).setUnlocalizedName("stamp_steel_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_wire"); - stamp_steel_circuit = new ItemStamp(100, StampType.CIRCUIT).setUnlocalizedName("stamp_steel_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_circuit"); - stamp_titanium_flat = new ItemStamp(150, StampType.FLAT).setUnlocalizedName("stamp_titanium_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_flat"); - stamp_titanium_plate = new ItemStamp(150, StampType.PLATE).setUnlocalizedName("stamp_titanium_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_plate"); - stamp_titanium_wire = new ItemStamp(150, StampType.WIRE).setUnlocalizedName("stamp_titanium_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_wire"); - stamp_titanium_circuit = new ItemStamp(150, StampType.CIRCUIT).setUnlocalizedName("stamp_titanium_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_circuit"); - stamp_obsidian_flat = new ItemStamp(170, StampType.FLAT).setUnlocalizedName("stamp_obsidian_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_flat"); - stamp_obsidian_plate = new ItemStamp(170, StampType.PLATE).setUnlocalizedName("stamp_obsidian_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_plate"); - stamp_obsidian_wire = new ItemStamp(170, StampType.WIRE).setUnlocalizedName("stamp_obsidian_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_wire"); - stamp_obsidian_circuit = new ItemStamp(170, StampType.CIRCUIT).setUnlocalizedName("stamp_obsidian_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_circuit"); + stamp_stone_flat = new ItemStamp(32, StampType.FLAT).setUnlocalizedName("stamp_stone_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_flat"); + stamp_stone_plate = new ItemStamp(32, StampType.PLATE).setUnlocalizedName("stamp_stone_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_plate"); + stamp_stone_wire = new ItemStamp(32, StampType.WIRE).setUnlocalizedName("stamp_stone_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_wire"); + stamp_stone_circuit = new ItemStamp(32, StampType.CIRCUIT).setUnlocalizedName("stamp_stone_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_circuit"); + stamp_iron_flat = new ItemStamp(64, StampType.FLAT).setUnlocalizedName("stamp_iron_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_flat"); + stamp_iron_plate = new ItemStamp(64, StampType.PLATE).setUnlocalizedName("stamp_iron_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_plate"); + stamp_iron_wire = new ItemStamp(64, StampType.WIRE).setUnlocalizedName("stamp_iron_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_wire"); + stamp_iron_circuit = new ItemStamp(64, StampType.CIRCUIT).setUnlocalizedName("stamp_iron_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_iron_circuit"); + stamp_steel_flat = new ItemStamp(192, StampType.FLAT).setUnlocalizedName("stamp_steel_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_flat"); + stamp_steel_plate = new ItemStamp(192, StampType.PLATE).setUnlocalizedName("stamp_steel_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_plate"); + stamp_steel_wire = new ItemStamp(192, StampType.WIRE).setUnlocalizedName("stamp_steel_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_wire"); + stamp_steel_circuit = new ItemStamp(192, StampType.CIRCUIT).setUnlocalizedName("stamp_steel_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_steel_circuit"); + stamp_titanium_flat = new ItemStamp(256, StampType.FLAT).setUnlocalizedName("stamp_titanium_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_flat"); + stamp_titanium_plate = new ItemStamp(256, StampType.PLATE).setUnlocalizedName("stamp_titanium_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_plate"); + stamp_titanium_wire = new ItemStamp(256, StampType.WIRE).setUnlocalizedName("stamp_titanium_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_wire"); + stamp_titanium_circuit = new ItemStamp(256, StampType.CIRCUIT).setUnlocalizedName("stamp_titanium_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_titanium_circuit"); + stamp_obsidian_flat = new ItemStamp(512, StampType.FLAT).setUnlocalizedName("stamp_obsidian_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_flat"); + stamp_obsidian_plate = new ItemStamp(512, StampType.PLATE).setUnlocalizedName("stamp_obsidian_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_plate"); + stamp_obsidian_wire = new ItemStamp(512, StampType.WIRE).setUnlocalizedName("stamp_obsidian_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_wire"); + stamp_obsidian_circuit = new ItemStamp(512, StampType.CIRCUIT).setUnlocalizedName("stamp_obsidian_circuit").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_obsidian_circuit"); stamp_desh_flat = new ItemStamp(0, StampType.FLAT).setUnlocalizedName("stamp_desh_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_flat"); stamp_desh_plate = new ItemStamp(0, StampType.PLATE).setUnlocalizedName("stamp_desh_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_plate"); stamp_desh_wire = new ItemStamp(0, StampType.WIRE).setUnlocalizedName("stamp_desh_wire").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_desh_wire"); @@ -6025,6 +6027,7 @@ public class ModItems { GameRegistry.registerItem(nugget_arsenic, nugget_arsenic.getUnlocalizedName()); GameRegistry.registerItem(nugget_tantalium, nugget_tantalium.getUnlocalizedName()); GameRegistry.registerItem(nugget_silicon, nugget_silicon.getUnlocalizedName()); + GameRegistry.registerItem(nugget_niobium, nugget_niobium.getUnlocalizedName()); GameRegistry.registerItem(nugget_beryllium, nugget_beryllium.getUnlocalizedName()); GameRegistry.registerItem(nugget_schrabidium, nugget_schrabidium.getUnlocalizedName()); GameRegistry.registerItem(nugget_solinium, nugget_solinium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemCircuit.java b/src/main/java/com/hbm/items/machine/ItemCircuit.java index 8a9f28afd..8b8fcebfd 100644 --- a/src/main/java/com/hbm/items/machine/ItemCircuit.java +++ b/src/main/java/com/hbm/items/machine/ItemCircuit.java @@ -13,6 +13,7 @@ public class ItemCircuit extends ItemEnumMulti { CAPACITOR, CAPACITOR_TANTALIUM, PCB, + SILICON, CHIP, CHIP_BISMOID, ANALOG, diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 28a1b2bbf..937696fc4 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -29,6 +29,7 @@ import com.hbm.items.ItemEnums.EnumPlantType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.machine.ItemBattery; +import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.items.special.ItemPlasticScrap.ScrapType; @@ -123,6 +124,19 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.circuit_gold, 2), new Object[] { ModItems.circuit_targeting_tier4 }); addShapelessAuto(new ItemStack(ModItems.circuit_schrabidium, 2), new Object[] { ModItems.circuit_targeting_tier5 }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), new Object[] { "G", "W", "I", 'G', KEY_ANYPANE, 'W', W.wireFine(), 'I', ModItems.plate_polymer }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), new Object[] { "G", "W", "I", 'G', KEY_ANYPANE, 'W', CARBON.wireFine(), 'I', ModItems.plate_polymer }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), new Object[] { "I", "N", "W", 'I', ModItems.plate_polymer, 'N', NB.nugget(), 'W', AL.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), new Object[] { "I", "N", "W", 'I', ModItems.plate_polymer, 'N', NB.nugget(), 'W', CU.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR_TANTALIUM), new Object[] { "I", "N", "W", 'I', ModItems.plate_polymer, 'N', TA.nugget(), 'W', AL.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR_TANTALIUM), new Object[] { "I", "N", "W", 'I', ModItems.plate_polymer, 'N', TA.nugget(), 'W', CU.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB), new Object[] { "I", "P", 'I', ModItems.plate_polymer, 'P', CU.plate() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB, 4), new Object[] { "I", "P", 'I', ModItems.plate_polymer, 'P', GOLD.plate() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), new Object[] { "I", "S", "W", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'W', CU.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), new Object[] { "I", "S", "W", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'W', GOLD.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), new Object[] { "III", "SNS", "WWW", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'N', ANY_BISMOID.nugget(), 'W', CU.wireFine() }); + addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), new Object[] { "III", "SNS", "WWW", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'N', ANY_BISMOID.nugget(), 'W', GOLD.wireFine() }); + addRecipeAuto(new ItemStack(ModItems.cell_empty, 6), new Object[] { " S ", "G G", " S ", 'S', STEEL.plate(), 'G', KEY_ANYPANE }); addRecipeAuto(new ItemStack(ModItems.cell_deuterium, 8), new Object[] { "DDD", "DTD", "DDD", 'D', ModItems.cell_empty, 'T', ModItems.mike_deut }); addRecipeAuto(new ItemStack(ModItems.particle_empty, 2), new Object[] { "STS", "G G", "STS", 'S', STEEL.plate(), 'T', W.ingot(), 'G', KEY_ANYPANE }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 58711ee02..111e8c028 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -77,7 +77,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp SolderingRecipe recipe = SolderingRecipes.getRecipe(new ItemStack[] {slots[0], slots[1], slots[2], slots[3], slots[4], slots[5]}); long intendedMaxPower; - UpgradeManager.eval(slots, 6, 7); + UpgradeManager.eval(slots, 9, 10); int redLevel = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); int blueLevel = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); @@ -184,6 +184,31 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp this.tank.setFill(tank.getFill() - recipe.fluid.fill); } } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot < 3) { + for(int i = 0; i < 3; i++) if(i != slot && slots[i] != null && slots[i].isItemEqual(stack)) return false; + for(AStack t : SolderingRecipes.toppings) if(t.matchesRecipe(stack, true)) return true; + } else if(slot < 5) { + for(int i = 3; i < 5; i++) if(i != slot && slots[i] != null && slots[i].isItemEqual(stack)) return false; + for(AStack t : SolderingRecipes.pcb) if(t.matchesRecipe(stack, true)) return true; + } else if(slot < 6) { + for(int i = 5; i < 6; i++) if(i != slot && slots[i] != null && slots[i].isItemEqual(stack)) return false; + for(AStack t : SolderingRecipes.solder) if(t.matchesRecipe(stack, true)) return true; + } + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 6; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0, 1, 2, 3, 4, 5, 6 }; + } protected DirPos[] getConPos() { @@ -191,7 +216,14 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp ForgeDirection rot = dir.getRotation(ForgeDirection.UP); return new DirPos[] { - + new DirPos(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir), + new DirPos(xCoord + dir.offsetX + rot.offsetX, yCoord, zCoord + dir.offsetZ + rot.offsetZ, dir), + new DirPos(xCoord - dir.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ, dir.getOpposite()), + new DirPos(xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()), + new DirPos(xCoord - dir.offsetX - rot.offsetX, yCoord, zCoord - dir.offsetZ - rot.offsetZ, rot.getOpposite()), + new DirPos(xCoord + rot.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2, rot), + new DirPos(xCoord - dir.offsetX + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 2, rot), }; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d7dcbd461..4fbb55db8 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -351,7 +351,7 @@ container.launchPadRusted=Startrampe container.launchTable=Große Startrampe container.leadBox=Sicherheitsbehälter container.machineArcWelder=Lichtbogenschweißer -container.machineArcFurnaceLarge=Elektrischer Lichtbogenofen +container.machineArcFurnaceLarge=Lichtbogenofen container.machineBoiler=Ölwärmer container.machineCMB=CMB-Stahl Hochofen container.machineCoal=Verbrennungsgenerator @@ -373,6 +373,7 @@ container.machineRefinery=Ölraffinerie container.machineSelenium=Hochleistungs-Sternmotor container.machineShredder=Brecher container.machineSILEX=SILEX +container.machineSolderingStation=Lötstation container.machineSolidifier=Verfestiger container.machineTurbine=Dampfturbine container.machineTurbofan=Turbofan @@ -1516,6 +1517,18 @@ item.chopper_wing.name=Jagdschrauber Seitentragfläche item.chunk_ore.rare.name=Seltenerdenerz-Brocken item.cigarette.name=FFI-Markenzigarette item.cinnebar.name=Zinnober +item.circuit.advanced.name=Integrierter Schaltkreis, Militärstandard +item.circuit.analog.name=Analoger Schaltkreis +item.circuit.basic.name=Integrierter Schaltkreis +item.circuit.bismoid.name=Vielfältiger Schaltkreis +item.circuit.capacitor.name=Kondensator +item.circuit.capacitor_board.name=Kondensatorboard +item.circuit.capacitor_tantalium.name=Tantalkondensator +item.circuit.chip.name=Mikrochip +item.circuit.chip_bismoid.name=Vielfältiger integrierter Schaltkreis +item.circuit.pcb.name=Leiterplatte +item.circuit.silicon.name=Bedrucker Siliziumwafer +item.circuit.vacuum_tube.name=Vakuumröhre item.circuit_aluminium.name=Einfacher Schaltkreis item.circuit_arsenic.name=Adaptives Chipset item.circuit_arsenic_raw.name=Arsen-Schaltkreisrohling @@ -2576,6 +2589,7 @@ item.nugget_mercury.name=Quecksilbertropfen item.nugget_mox_fuel.name=MOX-Kernbrennstoffnugget item.nugget_neptunium.name=Neptuniumnugget item.nugget_neptunium_fuel.name=Neptuniumkernbrennstoffnugget +item.nugget_niobium.name=Niobnugget item.nugget_osmiridium.name=Osmiridiumnugget item.nugget_plutonium.name=Plutoniumnugget item.nugget_plutonium_fuel.name=Plutoniumkernbrennstoffnugget @@ -4272,6 +4286,7 @@ tile.machine_shredder.name=Brecher tile.machine_silex.name=Laser-Isotopentrenner (SILEX) tile.machine_siren.name=Sirene tile.machine_solar_boiler.name=Solarturmboiler +tile.machine_soldering_station.name=Lötstation tile.machine_solidifier.name=Industrielle Verfestigungsmaschine tile.machine_spp_bottom.name=NPE-Potentialgenerator (Unterteil) tile.machine_spp_top.name=NPE-Potentialgenerator (Oberteil) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1f012fa90..1c4438099 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -744,7 +744,7 @@ container.launchPadRusted=Launch Pad container.launchTable=Large Launch Pad container.leadBox=Containment Box container.machineArcWelder=Arc Welder -container.machineArcFurnaceLarge=Electric Arc Furnace +container.machineArcFurnaceLarge=Arc Furnace container.machineBoiler=Oil Heater container.machineCMB=CMB Steel Furnace container.machineCoal=Combustion Generator @@ -766,6 +766,7 @@ container.machineRefinery=Oil Refinery container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder container.machineSILEX=SILEX +container.machineSolderingStation=Soldering Station container.machineSolidifier=Solidifier container.machineStrandCaster=Strand Caster container.machineTurbine=Steam Turbine @@ -2261,6 +2262,18 @@ item.chopper_wing.name=Hunter Chopper Wing item.chunk_ore.rare.name=Rare Earth Ore Chunk item.cigarette.name=FFI-Brand Cigarette item.cinnebar.name=Cinnabar +item.circuit.advanced.name=Military Grade Circuit Board +item.circuit.analog.name=Analog Circuit Board +item.circuit.basic.name=Integrated Circuit Board +item.circuit.bismoid.name=Versatile Circuit Board +item.circuit.capacitor.name=Capacitor +item.circuit.capacitor_board.name=Capacitor Board +item.circuit.capacitor_tantalium.name=Tantalium Capacitor +item.circuit.chip.name=Microchip +item.circuit.chip_bismoid.name=Versatile Integrated Circuit +item.circuit.pcb.name=Printed Circuit Board +item.circuit.silicon.name=Printed Silicon Wafer +item.circuit.vacuum_tube.name=Vacuum Tube item.circuit_aluminium.name=Basic Circuit item.circuit_arsenic.name=Adaptable Circuit item.circuit_arsenic_raw.name=Adaptable Circuit Assembly @@ -3389,6 +3402,7 @@ item.nugget_mox_fuel.name=Nugget of MOX Fuel item.nugget_mox_fuel.desc=Moxie says: §lTAX EVASION.§r item.nugget_neptunium.name=Neptunium Nugget item.nugget_neptunium_fuel.name=Neptunium Fuel Nugget +item.nugget_niobium.name=Niobium Nugget item.nugget_osmiridium.name=Osmiridium Nugget item.nugget_pb209.name=Lead-209 Nugget item.nugget_plutonium.name=Plutonium Nugget @@ -5335,6 +5349,7 @@ tile.machine_shredder.name=Shredder tile.machine_silex.name=Laser Isotope Separation Chamber (SILEX) tile.machine_siren.name=Siren tile.machine_solar_boiler.name=Solar Tower Boiler +tile.machine_soldering_station.name=Soldering Station tile.machine_solidifier.name=Industrial Solidification Machine tile.machine_solidifier.desc=A universal machine fitted with cooling systems and other$versatile tools for turning fluids solid using various$processes such as freezing and petrochemical polymerization. tile.machine_spp_bottom.name=ZPE Potential Generator (Bottom) diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_soldering_station.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_soldering_station.png index 69c16866bcc9bd32a82a9ac1b654d70441083774..cb30817437b2b3aaf2fa0870d55487dd19a2e66b 100644 GIT binary patch literal 3180 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 literal 3303 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 D&Fb4O diff --git a/src/main/resources/assets/hbm/textures/items/circuit.png b/src/main/resources/assets/hbm/textures/items/circuit.png index 811b8583c2c49ec019b470301da66819fec5611a..d2ac0d1b3356bdf107e30fc7938015117e28d407 100644 GIT binary patch literal 8579 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 diff --git a/src/main/resources/assets/hbm/textures/items/circuit.silicon.png b/src/main/resources/assets/hbm/textures/items/circuit.silicon.png new file mode 100644 index 0000000000000000000000000000000000000000..768ee52734a85f7880985fb2379950a14dde97f4 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfo)`z~Wbf*I2>g|!<$_J3jE XcZyk6I#K&E&|?gqu6{1-oD!MpZk`a%dOT3DTYn_?<>M1sp2Xs`EGCJnS$3xW!s)s zFHa0T-Qqi8=ERAPJ}!+9uf2BX$=_d}n2_{1?ZX!Tzx}?t+-8n>d5LZP_5TcNe*T{R z@a*^VJoD@7l7IZ;UtMRD_+ZM%`R(Cz9{&CA&%;0Oe!`BLO6#z#5wQn=;KSed@on+< z?G0=G{ha&o`u_SIQyv;VxL@C9Z@