From 0bdfe286e45b1eeccb56227a1df7a8d01a1ac00f Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 1 Oct 2024 16:56:39 +0200 Subject: [PATCH] shapes --- changelog | 1 + gradle.properties | 2 +- .../java/com/hbm/crafting/MineralRecipes.java | 43 +++--- .../java/com/hbm/hazard/HazardRegistry.java | 6 +- .../com/hbm/inventory/OreDictManager.java | 122 +++++++++--------- src/main/java/com/hbm/inventory/OreNames.java | 34 ----- .../gui/GUIMachineSolderingStation.java | 23 ++++ .../inventory/material/MaterialShapes.java | 56 +++++--- .../java/com/hbm/inventory/material/Mats.java | 40 +++--- .../inventory/recipes/ArcFurnaceRecipes.java | 18 +-- .../inventory/recipes/CrucibleRecipes.java | 17 +-- .../hbm/inventory/recipes/PressRecipes.java | 3 +- .../inventory/recipes/anvil/AnvilRecipes.java | 7 +- .../recipes/anvil/AnvilSmithingMold.java | 4 +- .../java/com/hbm/items/ItemCustomLore.java | 34 ++--- src/main/java/com/hbm/items/ModItems.java | 28 +++- .../TileEntityMachineSolderingStation.java | 21 ++- src/main/resources/assets/hbm/lang/de_DE.lang | 9 ++ src/main/resources/assets/hbm/lang/en_US.lang | 9 ++ .../gui/processing/gui_soldering_station.png | Bin 3180 -> 3363 bytes .../assets/hbm/textures/items/ammo.png | Bin 11221 -> 11146 bytes .../hbm/textures/items/part_barrel_heavy.png | Bin 0 -> 183 bytes .../hbm/textures/items/part_barrel_light.png | Bin 0 -> 176 bytes .../assets/hbm/textures/items/part_grip.png | Bin 0 -> 239 bytes .../hbm/textures/items/part_mechanism.png | Bin 0 -> 359 bytes .../textures/items/part_receiver_heavy.png | Bin 0 -> 226 bytes .../textures/items/part_receiver_light.png | Bin 0 -> 238 bytes .../assets/hbm/textures/items/part_stock.png | Bin 0 -> 213 bytes 28 files changed, 274 insertions(+), 203 deletions(-) delete mode 100644 src/main/java/com/hbm/inventory/OreNames.java create mode 100644 src/main/resources/assets/hbm/textures/items/part_barrel_heavy.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_barrel_light.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_grip.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_mechanism.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_receiver_heavy.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_receiver_light.png create mode 100644 src/main/resources/assets/hbm/textures/items/part_stock.png diff --git a/changelog b/changelog index ce5ce5c44..277ae7279 100644 --- a/changelog +++ b/changelog @@ -9,6 +9,7 @@ * Updated basalt textures * Scaffold blocks can now be placed horizontally * Updated the shredder's textures +* The strand caster will now cast its remaining buffer after 10 seconds of inactivity, even if the buffer is not full enough for a batch of 9 ## Fixed * The conveyor grabber should no longer skip over items when used in long lines diff --git a/gradle.properties b/gradle.properties index d0028d08c..0517f3c81 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ credits=HbMinecraft,\ \ Voxelstice (OpenComputers integration, turbine spinup),\ \ BallOfEnergy1 (OpenComputers integration),\ \ sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ - \ Abel1502 (optimization, crate upgrade recipes),\ + \ Abel1502 (optimization, crate upgrade recipes, strand caster improvements),\ \ SuperCraftAlex (tooltips)\ \ Ice-Arrow (research reactor tweaks),\ \ 245tt (anvil GUI improvements),\ diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index db125cf8c..6ab5ea10b 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -2,6 +2,7 @@ package com.hbm.crafting; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.BlockEnums.EnumStoneType; +import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ItemEnums.EnumCokeType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; @@ -106,31 +107,31 @@ public class MineralRecipes { addBillet(ModItems.billet_cobalt, ModItems.ingot_cobalt, ModItems.nugget_cobalt); addBillet(ModItems.billet_co60, ModItems.ingot_co60, ModItems.nugget_co60); - addBillet(ModItems.billet_sr90, ModItems.ingot_sr90, ModItems.nugget_sr90, SR90.allNuggets()); - addBillet(ModItems.billet_uranium, ModItems.ingot_uranium, ModItems.nugget_uranium, U.allNuggets()); - addBillet(ModItems.billet_u233, ModItems.ingot_u233, ModItems.nugget_u233, U233.allNuggets()); - addBillet(ModItems.billet_u235, ModItems.ingot_u235, ModItems.nugget_u235, U235.allNuggets()); - addBillet(ModItems.billet_u238, ModItems.ingot_u238, ModItems.nugget_u238, U238.allNuggets()); - addBillet(ModItems.billet_th232, ModItems.ingot_th232, ModItems.nugget_th232, TH232.allNuggets()); - addBillet(ModItems.billet_plutonium, ModItems.ingot_plutonium, ModItems.nugget_plutonium, PU.allNuggets()); - addBillet(ModItems.billet_pu238, ModItems.ingot_pu238, ModItems.nugget_pu238, PU238.allNuggets()); - addBillet(ModItems.billet_pu239, ModItems.ingot_pu239, ModItems.nugget_pu239, PU239.allNuggets()); - addBillet(ModItems.billet_pu240, ModItems.ingot_pu240, ModItems.nugget_pu240, PU240.allNuggets()); - addBillet(ModItems.billet_pu241, ModItems.ingot_pu241, ModItems.nugget_pu241, PU241.allNuggets()); + addBillet(ModItems.billet_sr90, ModItems.ingot_sr90, ModItems.nugget_sr90, SR90.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_uranium, ModItems.ingot_uranium, ModItems.nugget_uranium, U.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_u233, ModItems.ingot_u233, ModItems.nugget_u233, U233.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_u235, ModItems.ingot_u235, ModItems.nugget_u235, U235.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_u238, ModItems.ingot_u238, ModItems.nugget_u238, U238.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_th232, ModItems.ingot_th232, ModItems.nugget_th232, TH232.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_plutonium, ModItems.ingot_plutonium, ModItems.nugget_plutonium, PU.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_pu238, ModItems.ingot_pu238, ModItems.nugget_pu238, PU238.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_pu239, ModItems.ingot_pu239, ModItems.nugget_pu239, PU239.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_pu240, ModItems.ingot_pu240, ModItems.nugget_pu240, PU240.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_pu241, ModItems.ingot_pu241, ModItems.nugget_pu241, PU241.all(MaterialShapes.NUGGET)); addBillet(ModItems.billet_pu_mix, ModItems.ingot_pu_mix, ModItems.nugget_pu_mix); - addBillet(ModItems.billet_am241, ModItems.ingot_am241, ModItems.nugget_am241, AM241.allNuggets()); - addBillet(ModItems.billet_am242, ModItems.ingot_am242, ModItems.nugget_am242, AM242.allNuggets()); + addBillet(ModItems.billet_am241, ModItems.ingot_am241, ModItems.nugget_am241, AM241.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_am242, ModItems.ingot_am242, ModItems.nugget_am242, AM242.all(MaterialShapes.NUGGET)); addBillet(ModItems.billet_am_mix, ModItems.ingot_am_mix, ModItems.nugget_am_mix); - addBillet(ModItems.billet_neptunium, ModItems.ingot_neptunium, ModItems.nugget_neptunium, NP237.allNuggets()); - addBillet(ModItems.billet_polonium, ModItems.ingot_polonium, ModItems.nugget_polonium, PO210.allNuggets()); - addBillet(ModItems.billet_technetium, ModItems.ingot_technetium, ModItems.nugget_technetium, TC99.allNuggets()); - addBillet(ModItems.billet_au198, ModItems.ingot_au198, ModItems.nugget_au198, AU198.allNuggets()); - addBillet(ModItems.billet_pb209, ModItems.ingot_pb209, ModItems.nugget_pb209, PB209.allNuggets()); //and so forth - addBillet(ModItems.billet_ra226, ModItems.ingot_ra226, ModItems.nugget_ra226, RA226.allNuggets()); - addBillet(ModItems.billet_actinium, ModItems.ingot_actinium, ModItems.nugget_actinium, AC227.allNuggets()); + addBillet(ModItems.billet_neptunium, ModItems.ingot_neptunium, ModItems.nugget_neptunium, NP237.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_polonium, ModItems.ingot_polonium, ModItems.nugget_polonium, PO210.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_technetium, ModItems.ingot_technetium, ModItems.nugget_technetium, TC99.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_au198, ModItems.ingot_au198, ModItems.nugget_au198, AU198.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_pb209, ModItems.ingot_pb209, ModItems.nugget_pb209, PB209.all(MaterialShapes.NUGGET)); //and so forth + addBillet(ModItems.billet_ra226, ModItems.ingot_ra226, ModItems.nugget_ra226, RA226.all(MaterialShapes.NUGGET)); + addBillet(ModItems.billet_actinium, ModItems.ingot_actinium, ModItems.nugget_actinium, AC227.all(MaterialShapes.NUGGET)); addBillet(ModItems.billet_schrabidium, ModItems.ingot_schrabidium, ModItems.nugget_schrabidium, SA326.nugget()); addBillet(ModItems.billet_solinium, ModItems.ingot_solinium, ModItems.nugget_solinium, SA327.nugget()); - addBillet(ModItems.billet_gh336, ModItems.ingot_gh336, ModItems.nugget_gh336, GH336.allNuggets()); + addBillet(ModItems.billet_gh336, ModItems.ingot_gh336, ModItems.nugget_gh336, GH336.all(MaterialShapes.NUGGET)); addBillet(ModItems.billet_uranium_fuel, ModItems.ingot_uranium_fuel, ModItems.nugget_uranium_fuel); addBillet(ModItems.billet_thorium_fuel, ModItems.ingot_thorium_fuel, ModItems.nugget_thorium_fuel); addBillet(ModItems.billet_plutonium_fuel, ModItems.ingot_plutonium_fuel, ModItems.nugget_plutonium_fuel); diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 0653efe8c..eeb51bcd8 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -498,8 +498,8 @@ public class HazardRegistry { /* * Blacklist */ - for(String ore : TH232.ores()) HazardSystem.blacklist(ore); - for(String ore : U.ores()) HazardSystem.blacklist(ore); + for(String ore : TH232.all(MaterialShapes.ORE)) HazardSystem.blacklist(ore); + for(String ore : U.all(MaterialShapes.ORE)) HazardSystem.blacklist(ore); /* @@ -523,7 +523,7 @@ public class HazardRegistry { }; for(MaterialShapes shape : MaterialShapes.allShapes) { - for(String prefix : shape.prefixes) { + if(!shape.noAutogen) for(String prefix : shape.prefixes) { for(Object[] o : data) { HazardSystem.register(prefix + o[0], new HazardData().setMutex(0b1).addEntry(new HazardEntry(RADIATION, (float) o[1] * shape.q(1) / MaterialShapes.INGOT.q(1)))); } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 973bf8000..ebf747ea7 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -9,7 +9,7 @@ import java.util.List; import static com.hbm.items.ModItems.*; import static com.hbm.blocks.ModBlocks.*; import static com.hbm.inventory.OreDictManager.DictFrame.*; -import static com.hbm.inventory.OreNames.*; +import static com.hbm.inventory.material.MaterialShapes.*; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockOreBasalt.EnumBasaltOreType; @@ -205,6 +205,8 @@ public class OreDictManager { public static final DictFrame CMB = new DictFrame("CMBSteel"); public static final DictFrame DESH = new DictFrame("WorkersAlloy"); public static final DictFrame STAR = new DictFrame("Starmetal"); + public static final DictFrame GUNMETAL = new DictFrame("GunMetal"); + public static final DictFrame WEAPONSTEEL = new DictFrame("WeaponSteel"); public static final DictFrame BIGMT = new DictFrame("Saturnite"); public static final DictFrame FERRO = new DictFrame("Ferrouranium"); public static final DictFrame EUPH = new DictFrame("Euphemium"); @@ -409,6 +411,8 @@ public class OreDictManager { CMB .ingot(ingot_combine_steel) .dust(powder_combine_steel) .plate(plate_combine_steel) .block(block_combine_steel); DESH .nugget(nugget_desh) .ingot(ingot_desh) .dust(powder_desh) .block(block_desh); STAR .ingot(ingot_starmetal) .block(block_starmetal); + GUNMETAL .ingot(ingot_gunmetal); + WEAPONSTEEL .ingot(ingot_weaponsteel); BIGMT .ingot(ingot_saturnite) .plate(plate_saturnite); FERRO .ingot(ingot_ferrouranium); EUPH .nugget(nugget_euphemium) .ingot(ingot_euphemium) .dust(powder_euphemium) .block(block_euphemium); @@ -548,6 +552,14 @@ public class OreDictManager { } if(mat.shapes.contains(MaterialShapes.FRAGMENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.FRAGMENT.name() + name, new ItemStack(ModItems.bedrock_ore_fragment, 1, mat.id)); if(mat.shapes.contains(MaterialShapes.WIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WIRE.name() + name, new ItemStack(ModItems.wire_fine, 1, mat.id)); + + if(mat.shapes.contains(MaterialShapes.LIGHTBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTBARREL.name() + name, new ItemStack(ModItems.part_barrel_light, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.HEAVYBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYBARREL.name() + name, new ItemStack(ModItems.part_barrel_heavy, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.LIGHTRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_light, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.HEAVYRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_heavy, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.MECHANISM)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.MECHANISM.name() + name, new ItemStack(ModItems.part_mechanism, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.STOCK)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.STOCK.name() + name, new ItemStack(ModItems.part_stock, 1, mat.id)); + if(mat.shapes.contains(MaterialShapes.GRIP)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.GRIP.name() + name, new ItemStack(ModItems.part_grip, 1, mat.id)); } for(EnumBedrockOre ore : EnumBedrockOre.values()) { @@ -669,8 +681,8 @@ public class OreDictManager { ANY_RUBBER.addPrefix(INGOT, true); ANY_PLASTIC.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(BLOCK, true); ANY_HARDPLASTIC.addPrefix(INGOT, true); - ANY_RESISTANTALLOY.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(PLATECAST, true).addPrefix(PLATEWELDED, true).addPrefix(HEAVY_COMPONENT, true).addPrefix(BLOCK, true); - ANY_BISMOIDBRONZE.addPrefix(INGOT, true).addPrefix(PLATECAST, true); + ANY_RESISTANTALLOY.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(CASTPLATE, true).addPrefix(WELDEDPLATE, true).addPrefix(HEAVY_COMPONENT, true).addPrefix(BLOCK, true); + ANY_BISMOIDBRONZE.addPrefix(INGOT, true).addPrefix(CASTPLATE, true); ANY_TAR.addPrefix(ANY, false); } @@ -737,44 +749,28 @@ public class OreDictManager { /* * Quick access methods to grab ore names for recipes. */ - public String any() { return ANY + mats[0]; } - public String nugget() { return NUGGET + mats[0]; } - public String tiny() { return TINY + mats[0]; } - public String bolt() { return BOLT + mats[0]; } - public String ingot() { return INGOT + mats[0]; } - public String dustTiny() { return DUSTTINY + mats[0]; } - public String dust() { return DUST + mats[0]; } - public String gem() { return GEM + mats[0]; } - public String crystal() { return CRYSTAL + mats[0]; } - public String plate() { return PLATE + mats[0]; } - public String plateCast() { return PLATECAST + mats[0]; } - public String plateWelded() { return PLATEWELDED + mats[0]; } - public String heavyComp() { return HEAVY_COMPONENT + mats[0]; } - public String wireFine() { return WIRE + mats[0]; } - public String wireDense() { return WIREDENSE + mats[0]; } - public String shell() { return SHELL + mats[0]; } - public String pipe() { return PIPE + mats[0]; } - public String billet() { return BILLET + mats[0]; } - public String block() { return BLOCK + mats[0]; } - public String ore() { return ORE + mats[0]; } - public String fragment() { return FRAGMENT + mats[0]; } - public String[] anys() { return appendToAll(ANY); } - public String[] nuggets() { return appendToAll(NUGGET); } - public String[] tinys() { return appendToAll(TINY); } - public String[] allNuggets() { return appendToAll(NUGGET, TINY); } - public String[] ingots() { return appendToAll(INGOT); } - public String[] dustTinys() { return appendToAll(DUSTTINY); } - public String[] dusts() { return appendToAll(DUST); } - public String[] gems() { return appendToAll(GEM); } - public String[] crystals() { return appendToAll(CRYSTAL); } - public String[] plates() { return appendToAll(PLATE); } - public String[] plateCasts() { return appendToAll(PLATECAST); } - public String[] shells() { return appendToAll(SHELL); } - public String[] pipes() { return appendToAll(PIPE); } - public String[] billets() { return appendToAll(BILLET); } - public String[] blocks() { return appendToAll(BLOCK); } - public String[] ores() { return appendToAll(ORE); } - public String[] fragments() { return appendToAll(FRAGMENT); } + public String any() { return ANY.name() + mats[0]; } + public String nugget() { return NUGGET.name() + mats[0]; } + public String tiny() { return TINY.name() + mats[0]; } + public String bolt() { return BOLT.name() + mats[0]; } + public String ingot() { return INGOT.name() + mats[0]; } + public String dustTiny() { return DUSTTINY.name() + mats[0]; } + public String dust() { return DUST.name() + mats[0]; } + public String gem() { return GEM.name() + mats[0]; } + public String crystal() { return CRYSTAL.name() + mats[0]; } + public String plate() { return PLATE.name() + mats[0]; } + public String plateCast() { return CASTPLATE.name() + mats[0]; } + public String plateWelded() { return WELDEDPLATE.name() + mats[0]; } + public String heavyComp() { return HEAVY_COMPONENT.name() + mats[0]; } + public String wireFine() { return WIRE.name() + mats[0]; } + public String wireDense() { return DENSEWIRE.name() + mats[0]; } + public String shell() { return SHELL.name() + mats[0]; } + public String pipe() { return PIPE.name() + mats[0]; } + public String billet() { return BILLET.name() + mats[0]; } + public String block() { return BLOCK.name() + mats[0]; } + public String ore() { return ORE.name() + mats[0]; } + public String fragment() { return FRAGMENT.name() + mats[0]; } + public String[] all(MaterialShapes shape) { return appendToAll(shape.prefixes); } /** Returns cast (triple) plates if 528 mode is enabled or normal plates if not */ public String plate528() { return GeneralConfig.enable528 ? plateCast() : plate(); } @@ -868,7 +864,7 @@ public class OreDictManager { } public DictFrame plateCast(Object... plate) { hazMult = HazardRegistry.plateCast; - return makeObject(PLATECAST, plate); + return makeObject(CASTPLATE, plate); } public DictFrame billet(Object... billet) { hazMult = HazardRegistry.billet; @@ -888,8 +884,9 @@ public class OreDictManager { return makeObject(ORENETHER, oreNether); } - public DictFrame makeObject(String tag, Object... objects) { + public DictFrame makeObject(MaterialShapes shape, Object... objects) { + String tag = shape.name(); for(Object o : objects) { if(o instanceof Item) registerStack(tag, new ItemStack((Item) o)); if(o instanceof Block) registerStack(tag, new ItemStack((Block) o)); @@ -974,8 +971,9 @@ public class OreDictManager { * @param prefix The prefix of both the input and result of the reregistration * @return */ - public DictGroup addPrefix(String prefix, boolean inputPrefix) { + public DictGroup addPrefix(MaterialShapes shape, boolean inputPrefix) { + String prefix = shape.name(); String group = prefix + groupName; for(String name : names) { @@ -998,24 +996,24 @@ public class OreDictManager { return this; } - public String any() { return ANY + groupName; } - public String nugget() { return NUGGET + groupName; } - public String tiny() { return TINY + groupName; } - public String bolt() { return BOLT + groupName; } - public String ingot() { return INGOT + groupName; } - public String dustTiny() { return DUSTTINY + groupName; } - public String dust() { return DUST + groupName; } - public String gem() { return GEM + groupName; } - public String crystal() { return CRYSTAL + groupName; } - public String plate() { return PLATE + groupName; } - public String plateCast() { return PLATECAST + groupName; } - public String plateWelded() { return PLATEWELDED + groupName; } - public String heavyComp() { return HEAVY_COMPONENT + groupName; } - public String wireFine() { return WIRE + groupName; } - public String wireDense() { return WIREDENSE + groupName; } - public String billet() { return BILLET + groupName; } - public String block() { return BLOCK + groupName; } - public String ore() { return ORE + groupName; } + public String any() { return ANY.name() + groupName; } + public String nugget() { return NUGGET.name() + groupName; } + public String tiny() { return TINY.name() + groupName; } + public String bolt() { return BOLT.name() + groupName; } + public String ingot() { return INGOT.name() + groupName; } + public String dustTiny() { return DUSTTINY .name() + groupName; } + public String dust() { return DUST.name() + groupName; } + public String gem() { return GEM.name() + groupName; } + public String crystal() { return CRYSTAL.name() + groupName; } + public String plate() { return PLATE.name() + groupName; } + public String plateCast() { return CASTPLATE.name() + groupName; } + public String plateWelded() { return WELDEDPLATE.name() + groupName; } + public String heavyComp() { return HEAVY_COMPONENT.name() + groupName; } + public String wireFine() { return WIRE.name() + groupName; } + public String wireDense() { return DENSEWIRE.name() + groupName; } + public String billet() { return BILLET.name() + groupName; } + public String block() { return BLOCK.name() + groupName; } + public String ore() { return ORE.name() + groupName; } } private static void addReRegistration(String original, String additional) { diff --git a/src/main/java/com/hbm/inventory/OreNames.java b/src/main/java/com/hbm/inventory/OreNames.java deleted file mode 100644 index 036d82ead..000000000 --- a/src/main/java/com/hbm/inventory/OreNames.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.hbm.inventory; - -public class OreNames { - - /* - * PREFIXES - */ - public static final String ANY = "any"; - public static final String NUGGET = "nugget"; - public static final String TINY = "tiny"; - public static final String FRAGMENT = "bedrockorefragment"; - public static final String BOLT = "bolt"; - public static final String INGOT = "ingot"; - public static final String DUSTTINY = "dustTiny"; - public static final String DUST = "dust"; - public static final String GEM = "gem"; - public static final String CRYSTAL = "crystal"; - public static final String PLATE = "plate"; - public static final String PLATECAST = "plateTriple"; //cast plates are solid plates made from 3 ingots, turns out that's literally just a GT triple plate - public static final String PLATEWELDED = "plateSextuple"; - public static final String SHELL = "shell"; - public static final String PIPE = "ntmpipe"; - public static final String WIRE = "wireFine"; - public static final String WIREDENSE = "wireDense"; - public static final String BILLET = "billet"; - public static final String BLOCK = "block"; - public static final String ORE = "ore"; - public static final String ORENETHER = "oreNether"; - public static final String HEAVY_COMPONENT = "componentHeavy"; - - public static final String[] prefixes = new String[] { - ANY, NUGGET, TINY, FRAGMENT, BOLT, INGOT, DUSTTINY, DUST, GEM, CRYSTAL, PLATE, PLATECAST, BILLET, BLOCK, ORE, ORENETHER, HEAVY_COMPONENT, WIRE, WIREDENSE - }; -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java b/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java index 1a3a3f363..7e718b9f9 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineSolderingStation.java @@ -4,11 +4,16 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineSolderingStation; import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; import com.hbm.tileentity.machine.TileEntityMachineSolderingStation; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIMachineSolderingStation extends GuiInfoContainer { @@ -32,6 +37,24 @@ public class GUIMachineSolderingStation extends GuiInfoContainer { this.drawElectricityInfo(this, x, y, guiLeft + 152, guiTop + 18, 16, 52, solderer.getPower(), solderer.getMaxPower()); this.drawCustomInfoStat(x, y, guiLeft + 78, guiTop + 67, 8, 8, guiLeft + 78, guiTop + 67, this.getUpgradeInfo(solderer)); + + + this.drawCustomInfoStat(x, y, guiLeft + 5, guiTop + 66, 10, 10, x, y, + "Recipe Collision Prevention: " + (solderer.collisionPrevention ? EnumChatFormatting.GREEN + "ON" : EnumChatFormatting.RED + "OFF"), + "Prevents no-fluid recipes from being processed", + "when fluid is present."); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 5 <= x && guiLeft + 5 + 10 > x && guiTop + 66 < y && guiTop + 66 + 10 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("collision", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, solderer.xCoord, solderer.yCoord, solderer.zCoord)); + } } @Override diff --git a/src/main/java/com/hbm/inventory/material/MaterialShapes.java b/src/main/java/com/hbm/inventory/material/MaterialShapes.java index a7cd59f3d..7e3f12b07 100644 --- a/src/main/java/com/hbm/inventory/material/MaterialShapes.java +++ b/src/main/java/com/hbm/inventory/material/MaterialShapes.java @@ -9,8 +9,13 @@ public class MaterialShapes { public static final List allShapes = new ArrayList(); + public static final MaterialShapes ANY = new MaterialShapes(0).noAutogen(); + public static final MaterialShapes ORE = new MaterialShapes(0, "ore", "oreNether").noAutogen(); + public static final MaterialShapes ORENETHER = new MaterialShapes(0, "oreNether").noAutogen(); + public static final MaterialShapes QUANTUM = new MaterialShapes(1); // 1/72 of an ingot, allows the ingot to be divisible through 2, 4, 6, 8, 9, 12, 24 and 36 - public static final MaterialShapes NUGGET = new MaterialShapes(8, "nugget"); + public static final MaterialShapes NUGGET = new MaterialShapes(8, "nugget", "tiny"); + public static final MaterialShapes TINY = new MaterialShapes(8, "tiny").noAutogen(); public static final MaterialShapes FRAGMENT = new MaterialShapes(8, "bedrockorefragment"); public static final MaterialShapes DUSTTINY = new MaterialShapes(NUGGET.quantity, "dustTiny"); public static final MaterialShapes WIRE = new MaterialShapes(9, "wireFine"); @@ -29,28 +34,37 @@ public class MaterialShapes { public static final MaterialShapes QUART = new MaterialShapes(162); public static final MaterialShapes BLOCK = new MaterialShapes(INGOT.quantity * 9, "block"); public static final MaterialShapes HEAVY_COMPONENT = new MaterialShapes(CASTPLATE.quantity * 256, "componentHeavy"); + + public static final MaterialShapes LIGHTBARREL = new MaterialShapes(INGOT.quantity * 3, "barrelLight"); + public static final MaterialShapes HEAVYBARREL = new MaterialShapes(INGOT.quantity * 6, "barrelHeavy"); + public static final MaterialShapes LIGHTRECEIVER = new MaterialShapes(INGOT.quantity * 4, "receiverLight"); + public static final MaterialShapes HEAVYRECEIVER = new MaterialShapes(INGOT.quantity * 9, "receiverHeavy"); + public static final MaterialShapes MECHANISM = new MaterialShapes(INGOT.quantity * 4, "gunMechanism"); + public static final MaterialShapes STOCK = new MaterialShapes(INGOT.quantity * 4, "stock"); + public static final MaterialShapes GRIP = new MaterialShapes(INGOT.quantity * 2, "grip"); public static void registerCompatShapes() { if(Compat.isModLoaded(Compat.MOD_GT6)) { - new MaterialShapes(BLOCK.q(1), "blockDust"); - new MaterialShapes(BLOCK.q(1), "blockGem"); - new MaterialShapes(BLOCK.q(1), "blockIngot"); - new MaterialShapes(BLOCK.q(1), "blockSolid"); - new MaterialShapes(INGOT.q(9, 8), "crushed"); - new MaterialShapes(INGOT.q(9, 72), "crushedTiny"); - new MaterialShapes(INGOT.q(10, 8), "crushedPurified"); - new MaterialShapes(INGOT.q(10, 72), "crushedPurifiedTiny"); - new MaterialShapes(INGOT.q(11, 8), "crushedCentrifuged"); - new MaterialShapes(INGOT.q(11, 72), "crushedCentrifugedTiny"); - new MaterialShapes(INGOT.q(1, 4), "dustSmall"); - new MaterialShapes(INGOT.q(1, 72), "dustDiv72"); - new MaterialShapes(INGOT.q(10, 9), "dustImpure"); - new MaterialShapes(INGOT.q(11, 9), "dustPure"); - new MaterialShapes(INGOT.q(12, 9), "dustRefined"); + new MaterialShapes(BLOCK.q(1), "blockDust").noAutogen(); + new MaterialShapes(BLOCK.q(1), "blockGem").noAutogen(); + new MaterialShapes(BLOCK.q(1), "blockIngot").noAutogen(); + new MaterialShapes(BLOCK.q(1), "blockSolid").noAutogen(); + new MaterialShapes(INGOT.q(9, 8), "crushed").noAutogen(); + new MaterialShapes(INGOT.q(9, 72), "crushedTiny").noAutogen(); + new MaterialShapes(INGOT.q(10, 8), "crushedPurified").noAutogen(); + new MaterialShapes(INGOT.q(10, 72), "crushedPurifiedTiny").noAutogen(); + new MaterialShapes(INGOT.q(11, 8), "crushedCentrifuged").noAutogen(); + new MaterialShapes(INGOT.q(11, 72), "crushedCentrifugedTiny").noAutogen(); + new MaterialShapes(INGOT.q(1, 4), "dustSmall").noAutogen(); + new MaterialShapes(INGOT.q(1, 72), "dustDiv72").noAutogen(); + new MaterialShapes(INGOT.q(10, 9), "dustImpure").noAutogen(); + new MaterialShapes(INGOT.q(11, 9), "dustPure").noAutogen(); + new MaterialShapes(INGOT.q(12, 9), "dustRefined").noAutogen(); } } + public boolean noAutogen = false; private int quantity; public final String[] prefixes; @@ -65,6 +79,12 @@ public class MaterialShapes { allShapes.add(this); } + /** Disables recipe autogen for special cases like compatibility prefixes (TINY, ORENETHER), technical prefixes (ANY) or prefixes that have to be handled manually (ORE) */ + public MaterialShapes noAutogen() { + this.noAutogen = true; + return this; + } + public int q(int amount) { return this.quantity * amount; } @@ -76,4 +96,8 @@ public class MaterialShapes { public String name() { return (prefixes != null && prefixes.length > 0) ? prefixes[0] : "unknown"; } + + public String make(NTMMaterial mat) { + return this.name() + mat.names[0]; + } } diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 3739f9fd1..dd1bee085 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -131,25 +131,27 @@ public class Mats { public static final NTMMaterial MAT_OSMIRIDIUM = makeSmeltable(7699, OSMIRIDIUM, 0xDBE3EF, 0x7891BE, 0xACBDD9).setShapes(NUGGET, INGOT, CASTPLATE, WELDEDPLATE).m(); //Alloys - public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setShapes(DUSTTINY, BOLT, WIRE, INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setShapes(WIRE, INGOT, DUST, BLOCK).m(); - public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setShapes(WIRE, INGOT, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setShapes(BOLT, INGOT, DUST, PIPE, BLOCK).m(); - public static final NTMMaterial MAT_SATURN = makeSmeltable(_AS + 4, BIGMT, 0x4DA3AF, 0x00000C, 0x4DA3AF).setShapes(INGOT, DUST, PLATE, CASTPLATE, BLOCK).m(); - public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setShapes(INGOT, DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setShapes(INGOT, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setShapes(INGOT).m(); - public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setShapes(INGOT, DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setShapes(INGOT, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setShapes(INGOT, CASTPLATE).m(); - public static final NTMMaterial MAT_ABRONZE = makeSmeltable(_AS + 17, ABRONZE, 0xDB9462, 0x203331, 0x77644D).setShapes(INGOT, CASTPLATE).m(); - public static final NTMMaterial MAT_BSCCO = makeSmeltable(_AS + 18, BSCCO, 0x767BF1, 0x000000, 0x5E62C0).setShapes(INGOT, DENSEWIRE).m(); - public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 8, MAGTUNG, 0x22A2A2, 0x0F0F0F, 0x22A2A2).setShapes(WIRE, INGOT, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK).m(); - public static final NTMMaterial MAT_DNT = makeSmeltable(_AS + 15, DNT, 0x7582B9, 0x16000E, 0x455289).setShapes(INGOT, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST).n(); - public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK).n(); - public static final NTMMaterial MAT_MUD = makeSmeltable(_AS + 14, MUD, 0xBCB5A9, 0x481213, 0x96783B).setShapes(INGOT).n(); + public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setShapes(DUSTTINY, BOLT, WIRE, INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setShapes(WIRE, INGOT, DUST, BLOCK).m(); + public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setShapes(WIRE, INGOT, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setShapes(BOLT, INGOT, DUST, PIPE, BLOCK).m(); + public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setShapes(INGOT, DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setShapes(INGOT, DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setShapes(INGOT).m(); + public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setShapes(INGOT, DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setShapes(INGOT, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setShapes(INGOT, CASTPLATE).m(); + public static final NTMMaterial MAT_ABRONZE = makeSmeltable(_AS + 17, ABRONZE, 0xDB9462, 0x203331, 0x77644D).setShapes(INGOT, CASTPLATE).m(); + public static final NTMMaterial MAT_BSCCO = makeSmeltable(_AS + 18, BSCCO, 0x767BF1, 0x000000, 0x5E62C0).setShapes(INGOT, DENSEWIRE).m(); + public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 8, MAGTUNG, 0x22A2A2, 0x0F0F0F, 0x22A2A2).setShapes(WIRE, INGOT, DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(INGOT, DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK).m(); + public static final NTMMaterial MAT_DNT = makeSmeltable(_AS + 15, DNT, 0x7582B9, 0x16000E, 0x455289).setShapes(INGOT, DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST).n(); + public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK).n(); + public static final NTMMaterial MAT_MUD = makeSmeltable(_AS + 14, MUD, 0xBCB5A9, 0x481213, 0x96783B).setShapes(INGOT).n(); + public static final NTMMaterial MAT_GUNMETAL = makeSmeltable(_AS + 19, GUNMETAL, 0xFFEF3F, 0xAD3600, 0xF9C62C).setShapes(INGOT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); + public static final NTMMaterial MAT_WEAPONSTEEL = makeSmeltable(_AS + 20, WEAPONSTEEL, 0xA0A0A0, 0x000000, 0x808080).setShapes(INGOT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); + public static final NTMMaterial MAT_SATURN = makeSmeltable(_AS + 4, BIGMT, 0x3AC4DA, 0x09282C, 0x30A4B7).setShapes(INGOT, PLATE, CASTPLATE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).m(); //Extension public static final NTMMaterial MAT_RAREEARTH = makeNonSmeltable(_ES + 00, RAREEARTH, 0xC1BDBD, 0x384646, 0x7B7F7F).setShapes(FRAGMENT, INGOT).n(); diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index c32d31a52..800bd9ac6 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -82,14 +82,16 @@ public class ArcFurnaceRecipes extends SerializableRecipe { NTMMaterial convert = material.smeltsInto; if(convert.smeltable == SmeltingBehavior.SMELTABLE) { for(MaterialShapes shape : MaterialShapes.allShapes) { - String name = shape.name() + material.names[0]; - if(!OreDictionary.getOres(name).isEmpty()) { - OreDictStack dict = new OreDictStack(name); - ArcFurnaceRecipe recipe = recipes.get(dict); - if(recipe == null) recipe = new ArcFurnaceRecipe(); - if(recipe.fluidOutput == null) { - recipe.fluid(new MaterialStack(convert, (int) (shape.q(1) * out / in))); - recipes.put(dict, recipe); + if(!shape.noAutogen) { + String name = shape.name() + material.names[0]; + if(!OreDictionary.getOres(name).isEmpty()) { + OreDictStack dict = new OreDictStack(name); + ArcFurnaceRecipe recipe = recipes.get(dict); + if(recipe == null) recipe = new ArcFurnaceRecipe(); + if(recipe.fluidOutput == null) { + recipe.fluid(new MaterialStack(convert, (int) (shape.q(1) * out / in))); + recipes.put(dict, recipe); + } } } } diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index 919efab4f..fe489691e 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -258,14 +258,15 @@ public class CrucibleRecipes extends SerializableRecipe { NTMMaterial convert = material.smeltsInto; if(convert.smeltable == SmeltingBehavior.SMELTABLE || convert.smeltable == SmeltingBehavior.ADDITIVE) for(MaterialShapes shape : MaterialShapes.allShapes) { //TODO: buffer these - - String name = shape.name() + material.names[0]; - List ores = OreDictionary.getOres(name); - - if(!ores.isEmpty()) { - List stacks = new ArrayList(); - stacks.add(ItemScraps.create(new MaterialStack(convert, (int) (shape.q(1) * out / in)), true)); - map.put(new OreDictStack(name), stacks); + if(!shape.noAutogen) { + String name = shape.make(material); + List ores = OreDictionary.getOres(name); + + if(!ores.isEmpty()) { + List stacks = new ArrayList(); + stacks.add(ItemScraps.create(new MaterialStack(convert, (int) (shape.q(1) * out / in)), true)); + map.put(new OreDictStack(name), stacks); + } } } } diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index db090d982..eab661cfc 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -10,7 +10,6 @@ import static com.hbm.inventory.OreDictManager.*; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; -import com.hbm.inventory.OreNames; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; @@ -88,7 +87,7 @@ public class PressRecipes extends SerializableRecipe { for(NTMMaterial mat : Mats.orderedList) { if(mat.shapes.contains(MaterialShapes.WIRE) && mat.shapes.contains(MaterialShapes.INGOT)) { - makeRecipe(StampType.WIRE, new OreDictStack(OreNames.INGOT + mat.names[0]), new ItemStack(ModItems.wire_fine, 8, mat.id)); + makeRecipe(StampType.WIRE, new OreDictStack(MaterialShapes.INGOT.make(mat)), new ItemStack(ModItems.wire_fine, 8, mat.id)); } } 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 8ca863583..2f52054d6 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -6,7 +6,6 @@ import java.util.List; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.inventory.OreDictManager; -import com.hbm.inventory.OreNames; import com.hbm.inventory.OreDictManager.DictFrame; import static com.hbm.inventory.OreDictManager.*; @@ -110,8 +109,8 @@ public class AnvilRecipes { new ItemStack(ModItems.stamp_titanium_flat), new ItemStack(ModItems.stamp_obsidian_flat) })); - smithingRecipes.add(new AnvilSmithingMold(8, new OreDictStack(STEEL.shell()), new OreDictStack(OreNames.SHELL))); - smithingRecipes.add(new AnvilSmithingMold(9, new OreDictStack(STEEL.pipe()), new OreDictStack(OreNames.PIPE))); + smithingRecipes.add(new AnvilSmithingMold(8, new OreDictStack(STEEL.shell()), new OreDictStack(MaterialShapes.SHELL.name()))); + smithingRecipes.add(new AnvilSmithingMold(9, new OreDictStack(STEEL.pipe()), new OreDictStack(MaterialShapes.PIPE.name()))); smithingRecipes.add(new AnvilSmithingMold(10, new OreDictStack(IRON.ingot(), 9), new OreDictStack("ingot", 9))); smithingRecipes.add(new AnvilSmithingMold(11, new OreDictStack(IRON.plate(), 9), new OreDictStack("plate", 9))); smithingRecipes.add(new AnvilSmithingMold(12, new OreDictStack(IRON.block()), new OreDictStack("block"))); @@ -152,7 +151,7 @@ public class AnvilRecipes { for(NTMMaterial mat : Mats.orderedList) { if(mat.shapes.contains(MaterialShapes.WIRE) && mat.shapes.contains(MaterialShapes.INGOT)) { - constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(OreNames.INGOT + mat.names[0]), new AnvilOutput(new ItemStack(ModItems.wire_fine, 8, mat.id))).setTier(4)); + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(MaterialShapes.INGOT.name() + mat.names[0]), new AnvilOutput(new ItemStack(ModItems.wire_fine, 8, mat.id))).setTier(4)); } } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java index 5dd1bef82..11a1693a3 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java @@ -2,10 +2,10 @@ package com.hbm.inventory.recipes.anvil; import java.util.List; -import com.hbm.inventory.OreNames; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ModItems; import com.hbm.util.ItemStackUtil; @@ -34,7 +34,7 @@ public class AnvilSmithingMold extends AnvilSmithingRecipe { for(String name : names) { - for(String otherPrefix : OreNames.prefixes) { + for(MaterialShapes shape : MaterialShapes.allShapes) for(String otherPrefix : shape.prefixes) { if(otherPrefix.length() > matchesPrefix.name.length() && name.startsWith(otherPrefix)) { return false; //ignore if there's a longer prefix that matches (i.e. a more accurate match) } diff --git a/src/main/java/com/hbm/items/ItemCustomLore.java b/src/main/java/com/hbm/items/ItemCustomLore.java index b8598c288..15dab0dd7 100644 --- a/src/main/java/com/hbm/items/ItemCustomLore.java +++ b/src/main/java/com/hbm/items/ItemCustomLore.java @@ -51,23 +51,27 @@ public class ItemCustomLore extends Item { if(this == ModItems.undefined) { - if(player.worldObj.rand.nextInt(10) == 0) { - list.add(EnumChatFormatting.DARK_RED + "UNDEFINED"); - } else { - Random rand = new Random(System.currentTimeMillis() / 500); - - if(setSize == 0) - setSize = Item.itemRegistry.getKeys().size(); - - int r = rand.nextInt(setSize); - - Item item = Item.getItemById(r); - - if(item != null) { - list.add(new ItemStack(item).getDisplayName()); + try { + if(player.worldObj.rand.nextInt(10) == 0) { + list.add(EnumChatFormatting.DARK_RED + "UNDEFINED"); } else { - list.add(EnumChatFormatting.RED + "ERROR #" + r); + Random rand = new Random(System.currentTimeMillis() / 500); + + if(setSize == 0) + setSize = Item.itemRegistry.getKeys().size(); + + int r = rand.nextInt(setSize); + + Item item = Item.getItemById(r); + + if(item != null) { + list.add(new ItemStack(item).getDisplayName()); + } else { + list.add(EnumChatFormatting.RED + "ERROR #" + r); + } } + } catch(Exception ex) { + list.add(EnumChatFormatting.DARK_RED + "UNDEFINED"); } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index fc268d07a..f30ea49fc 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -768,6 +768,13 @@ public class ModItems { public static Item heavy_component; public static Item wire_fine; public static Item wire_dense; + public static Item part_barrel_light; + public static Item part_barrel_heavy; + public static Item part_receiver_light; + public static Item part_receiver_heavy; + public static Item part_mechanism; + public static Item part_stock; + public static Item part_grip; public static Item part_lithium; public static Item part_beryllium; @@ -3198,6 +3205,14 @@ public class ModItems { .aot(Mats.MAT_CARBON, "wire_carbon").aot(Mats.MAT_SCHRABIDIUM, "wire_schrabidium") .aot(Mats.MAT_MAGTUNG, "wire_magnetized_tungsten").setUnlocalizedName("wire_fine").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_fine"); wire_dense = new ItemAutogen(MaterialShapes.DENSEWIRE).setUnlocalizedName("wire_dense").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":wire_dense"); + + part_barrel_light = new ItemAutogen(MaterialShapes.LIGHTBARREL).setUnlocalizedName("part_barrel_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_light"); + part_barrel_heavy = new ItemAutogen(MaterialShapes.HEAVYBARREL).setUnlocalizedName("part_barrel_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_barrel_heavy"); + part_receiver_light = new ItemAutogen(MaterialShapes.LIGHTRECEIVER).setUnlocalizedName("part_receiver_light").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_light"); + part_receiver_heavy = new ItemAutogen(MaterialShapes.HEAVYRECEIVER).setUnlocalizedName("part_receiver_heavy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_receiver_heavy"); + part_mechanism = new ItemAutogen(MaterialShapes.MECHANISM).setUnlocalizedName("part_mechanism").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_mechanism"); + part_stock = new ItemAutogen(MaterialShapes.STOCK).setUnlocalizedName("part_stock").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_stock"); + part_grip = new ItemAutogen(MaterialShapes.GRIP).setUnlocalizedName("part_grip").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_grip"); 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"); @@ -6009,15 +6024,9 @@ public class ModItems { GameRegistry.registerItem(motor_desh, motor_desh.getUnlocalizedName()); GameRegistry.registerItem(motor_bismuth, motor_bismuth.getUnlocalizedName()); GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName()); - //GameRegistry.registerItem(centrifuge_tower, centrifuge_tower.getUnlocalizedName()); - //GameRegistry.registerItem(magnet_dee, magnet_dee.getUnlocalizedName()); GameRegistry.registerItem(magnet_circular, magnet_circular.getUnlocalizedName()); - //GameRegistry.registerItem(cyclotron_tower, cyclotron_tower.getUnlocalizedName()); GameRegistry.registerItem(reactor_core, reactor_core.getUnlocalizedName()); GameRegistry.registerItem(rtg_unit, rtg_unit.getUnlocalizedName()); - //GameRegistry.registerItem(thermo_unit_empty, thermo_unit_empty.getUnlocalizedName()); - //GameRegistry.registerItem(thermo_unit_endo, thermo_unit_endo.getUnlocalizedName()); - //GameRegistry.registerItem(thermo_unit_exo, thermo_unit_exo.getUnlocalizedName()); GameRegistry.registerItem(levitation_unit, levitation_unit.getUnlocalizedName()); GameRegistry.registerItem(pipes_steel, pipes_steel.getUnlocalizedName()); GameRegistry.registerItem(drill_titanium, drill_titanium.getUnlocalizedName()); @@ -6032,6 +6041,13 @@ public class ModItems { GameRegistry.registerItem(parts_legendary, parts_legendary.getUnlocalizedName()); GameRegistry.registerItem(gear_large, gear_large.getUnlocalizedName()); GameRegistry.registerItem(sawblade, sawblade.getUnlocalizedName()); + GameRegistry.registerItem(part_barrel_light, part_barrel_light.getUnlocalizedName()); + GameRegistry.registerItem(part_barrel_heavy, part_barrel_heavy.getUnlocalizedName()); + GameRegistry.registerItem(part_receiver_light, part_receiver_light.getUnlocalizedName()); + GameRegistry.registerItem(part_receiver_heavy, part_receiver_heavy.getUnlocalizedName()); + GameRegistry.registerItem(part_mechanism, part_mechanism.getUnlocalizedName()); + GameRegistry.registerItem(part_stock, part_stock.getUnlocalizedName()); + GameRegistry.registerItem(part_grip, part_grip.getUnlocalizedName()); //Plant Products GameRegistry.registerItem(plant_item, plant_item.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 2fb4a1380..be2d34aa9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.List; import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.container.ContainerMachineSolderingStation; @@ -38,11 +39,12 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { +public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; public long consumption; + public boolean collisionPrevention = false; public int progress; public int processTime = 1; @@ -140,6 +142,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp data.setLong("consumption", consumption); data.setInteger("progress", progress); data.setInteger("processTime", processTime); + data.setBoolean("collisionPrevention", collisionPrevention); if(recipe != null) { data.setInteger("display", Item.getIdFromItem(recipe.output.getItem())); data.setInteger("displayMeta", recipe.output.getItemDamage()); @@ -158,7 +161,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp if(this.tank.getFill() < recipe.fluid.fill) return false; } - if(recipe.fluid == null && this.tank.getFill() > 0) return false; + if(collisionPrevention && recipe.fluid == null && this.tank.getFill() > 0) return false; if(slots[6] != null) { if(slots[6].getItem() != recipe.output.getItem()) return false; @@ -248,6 +251,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp this.consumption = nbt.getLong("consumption"); this.progress = nbt.getInteger("progress"); this.processTime = nbt.getInteger("processTime"); + this.collisionPrevention = nbt.getBoolean("collisionPrevention"); if(nbt.hasKey("display")) { this.display = new ItemStack(Item.getItemById(nbt.getInteger("display")), 1, nbt.getInteger("displayMeta")); @@ -266,6 +270,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp this.maxPower = nbt.getLong("maxPower"); this.progress = nbt.getInteger("progress"); this.processTime = nbt.getInteger("processTime"); + this.collisionPrevention = nbt.getBoolean("collisionPrevention"); tank.readFromNBT(nbt, "t"); } @@ -277,6 +282,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp nbt.setLong("maxPower", maxPower); nbt.setInteger("progress", progress); nbt.setInteger("processTime", processTime); + nbt.setBoolean("collisionPrevention", collisionPrevention); tank.writeToNBT(nbt, "t"); } @@ -370,4 +376,15 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp public FluidTank getTankToPaste() { return tank; } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + this.collisionPrevention = !this.collisionPrevention; + this.markDirty(); + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 89177e7b7..0df5c046d 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -843,6 +843,7 @@ hbmmat.gold=Gold hbmmat.gold198=Gold-198 hbmmat.graphene=Graphen hbmmat.graphite=Graphit +hbmmat.gunmetal=Maschinenmetall hbmmat.hematite=Hämatit hbmmat.iron=Eisen hbmmat.lanthanum=Lanthan @@ -903,6 +904,7 @@ hbmmat.uranium233=Uran-233 hbmmat.uranium235=Uran-235 hbmmat.uranium238=Uran-238 hbmmat.watzmud=Giftiger Schlamm +hbmmat.weaponsteel=Waffenstahl hbmmat.whitephosphorus=Weißer Phosphor hbmmat.workersalloy=Desh hbmmat.wroughtiron=Schmiedeeisen @@ -2774,6 +2776,8 @@ item.page_of_.page6.name=Seite 6 item.page_of_.page7.name=Seite 7 item.page_of_.page8.name=Seite 8 item.pancake.name=Pfannkuchen aus Altmetall, Nägeln und Edelsteinpulver +item.part_barrel_heavy.name=Schwerer %slauf +item.part_barrel_light.name=Leichter %slauf item.part_beryllium.name=Berylliumstaubkiste item.part_carbon.name=Kohlenstoffstaubkiste item.part_copper.name=Kupferstaubkiste @@ -2782,8 +2786,13 @@ item.part_generic.lde.name=Leichtbauteil item.part_generic.piston_electric.name=Electrischer Kolben item.part_generic.piston_hydraulic.name=Hydraulischer Kolben item.part_generic.piston_pneumatic.name=Pneumatischer Kolben +item.part_grip.name=%sgriff item.part_lithium.name=Lithiumstaubkiste +item.part_mechanism.name=%smechanismus item.part_plutonium.name=Plutoniumstaubkiste +item.part_receiver_heavy.name=Schwerer %sverschluss +item.part_receiver_light.name=Leichter %sverschluss +item.part_stock.name=%sschaft item.particle_aelectron.name=Positronenkapsel item.particle_amat.name=Antimaterienkapsel item.particle_aproton.name=Antiprotonenkapsel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index be8bb0358..8c8d24faf 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1565,6 +1565,7 @@ hbmmat.gold=Gold hbmmat.gold198=Gold-198 hbmmat.graphene=Graphene hbmmat.graphite=Graphite +hbmmat.gunmetal=Gunmetal hbmmat.hematite=Hematite hbmmat.iron=Iron hbmmat.lanthanum=Lanthanium @@ -1625,6 +1626,7 @@ hbmmat.uranium233=Uranium-233 hbmmat.uranium235=Uranium-235 hbmmat.uranium238=Uranium-238 hbmmat.watzmud=Poisonous Mud +hbmmat.weaponsteel=Weapon Steel hbmmat.whitephosphorus=White Phosphorus hbmmat.workersalloy=Desh hbmmat.wroughtiron=Wroght Iron @@ -3626,6 +3628,8 @@ item.page_of_.page6.name=Page 6 item.page_of_.page7.name=Page 7 item.page_of_.page8.name=Page 8 item.pancake.name=Pancake made from Scrap Metal, Nails and Gem Dust +item.part_barrel_heavy.name=Heavy %s Barrel +item.part_barrel_light.name=Light %s Barrel item.part_beryllium.name=Box of Beryllium Dust item.part_carbon.name=Box of Carbon Dust item.part_copper.name=Box of Copper Dust @@ -3634,8 +3638,13 @@ item.part_generic.lde.name=Low-Density Element item.part_generic.piston_electric.name=Electric Piston item.part_generic.piston_hydraulic.name=Hydraulic Piston item.part_generic.piston_pneumatic.name=Pneumatic Piston +item.part_grip.name=%s Grip item.part_lithium.name=Box of Lithium Dust +item.part_mechanism.name=%s Mechanism item.part_plutonium.name=Box of Plutonium Dust +item.part_receiver_heavy.name=Heavy %s Receiver +item.part_receiver_light.name=Light %s Receiver +item.part_stock.name=%s Stock item.particle_aelectron.name=Positron Capsule item.particle_amat.name=Antimatter Capsule item.particle_aproton.name=Antiproton Capsule 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 cb30817437b2b3aaf2fa0870d55487dd19a2e66b..b99c7f9822dfe336dfc9e94474c783e3fb3fbb5e 100644 GIT binary patch delta 3041 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 diff --git a/src/main/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index f386e052cf5e2e01ce960224cf8cbee71f96f6bf..cd34dcb95682c9ae92a87a5af3146092ec99c472 100644 GIT binary patch literal 11146 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 literal 11221 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�hlf^^{$&J%E(ty{lqV# zRKSe+KS>SDGp9DaF;2sjgpIEdX<6I@!4*)EK{PVQyz)0Lg3;R9wE(FY?Hm!}?oI~k zUv8eB8jl`{FGkan8x)x`U4T2S9IGcO&ZvqhiiYFjj~{^9u7Gq*};&_TogrWfS) z$rfclWKrjhd;Q=JhoM7n3QEfSckkLOXmoL)j`uI8oeGWX4O}`+q`>0Sy~g4`Jk+GH zQ;|SbyNX?B2nGJjek%m*n2|}P3oqCG|2#Ns`Ocs4G_QBC8Z{IVVitZmUA_4GqUuR{ z^^a%k$-+zECeCMov*xFcLhMFyV0w?qRD0H&GO>Tr3`O zbaq_5hFuiypa=j*;h2l_tWeQB=j#Q%Xf%t&th<1Y#<_6#3%Yx$j`?2`49Qej^(w%v z8ZaiuOOAH9_gVl^JU`5@Pe1Nd zT$`N=!ACvh-fSUi0N!f3@y0%G*J!@KUdy>03@?$y2B+n`X*72L9FluINtB&0=a^BGsC2rm5oFKS+KoPCGky5Ad|&)v-B dl&^opGJCi7<%lmcy?{0|c)I$ztaD0e0su!NKC%D+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/part_barrel_light.png b/src/main/resources/assets/hbm/textures/items/part_barrel_light.png new file mode 100644 index 0000000000000000000000000000000000000000..c407b692ea8134add71afc4899d30f7edfb48b24 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfiS!-t%yY&dJHJ!X*3e$VrSO$aVMW!Z zIrQVb%cXa@A{lG%n_H$Y%dApn&|LaiyXWzb);FQ7Tucw<>}H#CifcOKjeGx1HeCOl l@!*AWdE=bV^WX1WEWSk5hqWox<1Wy}44$rjF6*2UngH#UU*`Y- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/part_mechanism.png b/src/main/resources/assets/hbm/textures/items/part_mechanism.png new file mode 100644 index 0000000000000000000000000000000000000000..734659e1440d4ad1fc8a75bdaa3f5d07bd7bacf7 GIT binary patch literal 359 zcmV-t0hs=YP)a{#Twuh`|j?6 zsN2gk)=p>p9wNlxrD@T}?DD0uY2sU!+{G>>b*cyVzLcGO@Q3Sdw%nQ4HrsanpQLUg W?IgJEo3bg;kqn-$elF{r5}E*Qi&8xR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/part_receiver_light.png b/src/main/resources/assets/hbm/textures/items/part_receiver_light.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2057903fbad535905577bcfdf27301092aeeb6 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfekx((ldg(GG}R>kSMl%?!u~bn(2Ve zd4?kr(hmMY3QJvj1lN|zR=hu&9*})^?_`#ObDhgCOpa52ILBDArL1}Pl%TuU@12f4 kP$;A9UCVsR@V`%fM1Vc3P4O9bpo1AaUHx3vIVCg!07eX3_5c6? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/part_stock.png b/src/main/resources/assets/hbm/textures/items/part_stock.png new file mode 100644 index 0000000000000000000000000000000000000000..a93b55f67a481fdbb33f370ba8f771987913f636 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VftyTM<>=k%$Y>m?M zKYvmUm!>d0*w}68_T`@b;bOnFGbNQ4{hjT|!N}m?ay%q$Uq+UKl0-5CLsYgEP~d2* zW#_%>zwO0-rP*uSrUtFEkGK+bwZi=OuO|ODY1Jpr&fmiz_)IVO!~O*lKzA{Cy85}S Ib4q9e0P##vp#T5? literal 0 HcmV?d00001