From fa12cfeec162c52bd403b01d49970f015bb2b305 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 15 Dec 2025 11:03:05 +0100 Subject: [PATCH 01/19] ow --- changelog | 64 +---------- .../hbm/handler/nei/VacuumRecipeHandler.java | 4 +- .../inventory/recipes/AnnihilatorRecipes.java | 2 + .../recipes/AssemblyMachineRecipes.java | 24 ++-- .../hbm/inventory/recipes/PrecAssRecipes.java | 7 ++ .../inventory/recipes/RefineryRecipes.java | 43 ------- .../recipes/VacuumRefineryRecipes.java | 108 ++++++++++++++++++ .../recipes/loader/SerializableRecipe.java | 1 + .../oil/TileEntityMachineVacuumDistill.java | 8 +- .../hbm/textures/gui/processing/gui_mixer.png | Bin 3194 -> 3236 bytes 10 files changed, 138 insertions(+), 123 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/recipes/VacuumRefineryRecipes.java diff --git a/changelog b/changelog index 0ed93ec83..a75b72d1f 100644 --- a/changelog +++ b/changelog @@ -1,65 +1,5 @@ -## Added -* Precision assembler - * Can create blueprint folders - * Used extensively in 528 mode - * Replaces recipes for micro chips, controllers and upgrades - * All recipes only have a chance to be completed, broken items yielded otherwise need to be recycled - * Can do precise recipes, but it very unreliable. Many recipes have a high chance of outputting a broken version of the made item - * Broken items can be recycled in the precision assembler, returning some of the ingredients -* Annihilator - * Destroys items and fluids and keeps track of how much has been destroyed - * In 528 mode, destroying quantities of certain items yield unique progression relevant blueprints - ## Changed -* Updated chinese localization -* Changed the way 528 mode works - * May of the old tantalium requirements no longer exist since the assembler rework - * Some important recipes have been moved to the precision assembler - * Many key "milestone" recipes now require 528 mode exclusive blueprints - * 528 exclusive blueprints are obtained from annihilating large quantities of certain items - * AE2 blocks, by default, will detonate when interacted with - * Synergizes with expensive mode, many recycling probabilities of the precision assembler are massively lowered with expensive mode enabled, increasing effective cost massively - * :) -* New fusion reactor and particle accelerator parts now have OpenComputers compat -* Irradiation recipe config now has the `fusionOnly` flag, preventing the recipe from being done in the RBMK irradiation channel -* Removed legacy fusion reactor parts from the creative inventory -* Removed the legacy fusion reactor core components -* If a legacy fusion reactor explodes, it is now destroyed forever and cannot be reassembled -* Legacy fusion reactors no longer disassemble when being mined, rather they drop as one block -* Legacy templates are no longer listed in the creative tab -* Removed the old meltdown achievement -* Eating canned fists now hurts -* Due to repeated incidents regarding canned black holes, the mechanics have changed - * Vortices spawned now have a flag set that prevents them from breaking blocks entirely - * Vortices decay 4x faster than those spawned by singularity items, it should last about 2.5 seconds in total - * It will still very much kill you instantly and destroy your items -* Storage crates can no longer be placed into containment boxes -* Expensive mode now has a new microcrafting item, being made from multiple types of plastic -* Fusion reactor parts now have expensive mode recipes -* Both types of blueprint booklets are now obtainable via precision assembler - * The recipes are lengthy, require a lot of power and have a low chance of succeeding - * Recipes require the divine pufferfish, driver of all innovation - * Where can you get this much pufferfish? Go figure it out -* Chance output stacks no longer do an RNG call to determine if the whole stack is provided or none, rather, each single item of the stack has its own RNG call -* Hiperf bedrock ore processing of heavy metals now yields tantalium -* Bedrock coltan is no longer a dedicated bedrock ore type -* Alt fire is now available for 10ga double barrel shotguns, allowing only a single barrel to be fired at once -* The custom mapping function on RoR torches now supports up to 32 characters instead of 15 -* Drainage pipes, flare stacks and the annihilator now have the default fluid priority of LOW, meaning that excess removal using those no longer requires flow control pumps -* Halved base energy consumption for the solidifier and liquefactor -* Changed cracking tower recipe to use desh instead of polymer, as well as a little bit more niobium in favor of all the clay catalysts it used to have -* Iron and corroded barrels have been deprecated and are no longer obtainable -* Steel barrels and 256k tanks no longer use tar in their recipes (except in expensive mode) -* Solidifying biogas into compressed biomass now yields 4x more, making the biogas route twice as efficient as simply compressing biomass -* Finally removed the long deprecated ambience radiation generator and geothermal generator -* Nerfed the ballistic jackets, as they are comically cheap and made some zombies impossible to kill in early game -* RBMK fuel rod items can now be inserted directly into fuel rods via right click, instead of having to open the GUI -* Containment boxes now use ferrouranium instead of raw U-238 -* Added missing recipes to two legendary weapons +* Changed the recipe change button on the mixer to be bright red with arrows on it (since the "C" looked too much like it meant "clear") ## Fixed -* Fixed gamebreaking issue causing crashes and world corruption where the multi detonator had its tooltip misspelled -* Fixed panzerschreck equip animation not speeding up with the sawed off mod -* Fixed FENSU not keeping its charge when broken -* Removed skeletonizer reloading from `/ntmreload` as it wasn't usable for end users and just caused error messages on servers -* Added more null checks to world generation, hopefully preventing weird one-off crashes +* Fixed atomic clock precision assembler recipe not working \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/nei/VacuumRecipeHandler.java b/src/main/java/com/hbm/handler/nei/VacuumRecipeHandler.java index 527bcc7b5..ff7118dc3 100644 --- a/src/main/java/com/hbm/handler/nei/VacuumRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/VacuumRecipeHandler.java @@ -1,12 +1,12 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; -import com.hbm.inventory.recipes.RefineryRecipes; +import com.hbm.inventory.recipes.VacuumRefineryRecipes; public class VacuumRecipeHandler extends NEIUniversalHandler { public VacuumRecipeHandler() { - super("Vacuum Refinery", ModBlocks.machine_vacuum_distill, RefineryRecipes.getVacuumRecipe()); + super("Vacuum Refinery", ModBlocks.machine_vacuum_distill, VacuumRefineryRecipes.getVacuumRecipe()); } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java index d184a28b8..2a1ae355d 100644 --- a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java @@ -45,6 +45,7 @@ public class AnnihilatorRecipes extends SerializableRecipe { * RUBBER -> FRACKER (ASSEM) * URANIUM -> GASCENT (ASSEM) * FERRO -> RBMK (ASSEM) + * STRONTIUM -> ATOMIC CLOCK (PRECASS) * BISMUTH -> BIS CHIPS (PRECASS) * HARDPLASTIC -> OIL 3.5 (ASSEM) * TCALLOY -> FUSION, WATZ (ASSEM) @@ -67,6 +68,7 @@ public class AnnihilatorRecipes extends SerializableRecipe { recipes.put(ANY_PLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "plastic")))); recipes.put(RUBBER.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "rubber")))); recipes.put(FERRO.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "ferrouranium")))); + recipes.put(SR.dust(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "strontium")))); recipes.put(ANY_HARDPLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "hardplastic")))); recipes.put(ANY_RESISTANTALLOY.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "tcalloy")))); recipes.put(ModItems.powder_chlorophyte, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")))); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 34633620f..74bc229d0 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -602,50 +602,50 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.icfcell").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal())) .inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModBlocks.glass_quartz, 16)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfemitter").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal())) .inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16)) .inputItemsEx(new OreDictStack(W.plateWelded(), 8), new OreDictStack(MAGTUNG.wireDense(), 16)) .inputFluids(new FluidStack(Fluids.XENON, 16_000)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfcapacitor").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal())) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfturbo").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal())) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.wireDense(), 4)) .inputItemsEx(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(DNT.wireDense(), 8), new OreDictStack(SBD.wireDense(), 4)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfcasing").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal())) .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfport").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal())) .inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfcontroller").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_controller, 1)) .inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfscaffold").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0)) .inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfvessel").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1)) .inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfstructural").setup(200, 100).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3)) .inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(STEEL.plateWelded(), 8)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1)) .inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.icfpress").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1)) .inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); // upgrades if(no528) { diff --git a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java index ee47ebc85..6c06125da 100644 --- a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java @@ -65,6 +65,13 @@ public class PrecAssRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.HELIUM4, 4_000)).setPools(POOL_PREFIX_528 + "chip_quantum"), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), 50, GeneralConfig.enableExpensiveMode ? 10 : 50); + registerPair(new GenericRecipe("precass.atomic_clock").setup(200, 2_000L) + .inputItems(new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CHIP), + new OreDictStack(ANY_PLASTIC.ingot(), 4), + new OreDictStack(ZR.wireFine(), 8), + new OreDictStack(SR.dust(), 1)).setPools(POOL_PREFIX_528 + "strontium"), + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK), 50, GeneralConfig.enableExpensiveMode ? 10 : 50); + registerPair(new GenericRecipe("precass.controller").setup(400, 15_000L) .inputItems(new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CHIP), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CAPACITOR), diff --git a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java index edf2d005b..7b913597c 100644 --- a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java @@ -12,7 +12,6 @@ import com.hbm.items.ItemEnums.EnumTarType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.util.ItemStackUtil; -import com.hbm.util.Tuple.Quartet; import com.hbm.util.Tuple.Quintet; import net.minecraft.item.ItemStack; @@ -38,13 +37,7 @@ public class RefineryRecipes { public static final int crackds_frac_aroma = 15; public static final int crackds_frac_unsat = 15; - public static final int vac_frac_heavy = 40; - public static final int vac_frac_reform = 25; - public static final int vac_frac_light = 20; - public static final int vac_frac_sour = 15; - private static Map> refinery = new HashMap(); - private static Map> vacuum = new HashMap(); public static HashMap getRefineryRecipe() { @@ -66,25 +59,6 @@ public class RefineryRecipes { return recipes; } - public static HashMap getVacuumRecipe() { - - HashMap recipes = new HashMap(); - - for(Entry> recipe : vacuum.entrySet()) { - - Quartet fluids = recipe.getValue(); - - recipes.put(ItemFluidIcon.make(recipe.getKey(), 1000, 2), - new ItemStack[] { - ItemFluidIcon.make(fluids.getW().type, fluids.getW().fill * 10), - ItemFluidIcon.make(fluids.getX().type, fluids.getX().fill * 10), - ItemFluidIcon.make(fluids.getY().type, fluids.getY().fill * 10), - ItemFluidIcon.make(fluids.getZ().type, fluids.getZ().fill * 10) }); - } - - return recipes; - } - public static void registerRefinery() { refinery.put(Fluids.HOTOIL, new Quintet( new FluidStack(Fluids.HEAVYOIL, oil_frac_heavy), @@ -114,26 +88,9 @@ public class RefineryRecipes { new FluidStack(Fluids.UNSATURATEDS, crackds_frac_unsat), DictFrame.fromOne(ModItems.oil_tar, EnumTarType.PARAFFIN) )); - - vacuum.put(Fluids.OIL, new Quartet( - new FluidStack(Fluids.HEAVYOIL_VACUUM, vac_frac_heavy), - new FluidStack(Fluids.REFORMATE, vac_frac_reform), - new FluidStack(Fluids.LIGHTOIL_VACUUM, vac_frac_light), - new FluidStack(Fluids.SOURGAS, vac_frac_sour) - )); - vacuum.put(Fluids.OIL_DS, new Quartet( - new FluidStack(Fluids.HEAVYOIL_VACUUM, vac_frac_heavy), - new FluidStack(Fluids.REFORMATE, vac_frac_reform), - new FluidStack(Fluids.LIGHTOIL_VACUUM, vac_frac_light), - new FluidStack(Fluids.REFORMGAS, vac_frac_sour) - )); } public static Quintet getRefinery(FluidType oil) { return refinery.get(oil); } - - public static Quartet getVacuum(FluidType oil) { - return vacuum.get(oil); - } } diff --git a/src/main/java/com/hbm/inventory/recipes/VacuumRefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/VacuumRefineryRecipes.java new file mode 100644 index 000000000..74e8c64d5 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/VacuumRefineryRecipes.java @@ -0,0 +1,108 @@ +package com.hbm.inventory.recipes; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.machine.ItemFluidIcon; + +import net.minecraft.item.ItemStack; + +public class VacuumRefineryRecipes extends SerializableRecipe { + + public static final int vac_frac_heavy = 40; + public static final int vac_frac_reform = 25; + public static final int vac_frac_light = 20; + public static final int vac_frac_sour = 15; + + public static HashMap recipes = new HashMap(); + + @Override + public void registerDefaults() { + + recipes.put(Fluids.OIL, new VacuumRefineryRecipe( + new FluidStack(Fluids.HEAVYOIL_VACUUM, vac_frac_heavy), + new FluidStack(Fluids.REFORMATE, vac_frac_reform), + new FluidStack(Fluids.LIGHTOIL_VACUUM, vac_frac_light), + new FluidStack(Fluids.SOURGAS, vac_frac_sour) + )); + recipes.put(Fluids.OIL_DS, new VacuumRefineryRecipe( + new FluidStack(Fluids.HEAVYOIL_VACUUM, vac_frac_heavy), + new FluidStack(Fluids.REFORMATE, vac_frac_reform), + new FluidStack(Fluids.LIGHTOIL_VACUUM, vac_frac_light), + new FluidStack(Fluids.REFORMGAS, vac_frac_sour) + )); + } + + public static VacuumRefineryRecipe getVacuum(FluidType oil) { + return recipes.get(oil); + } + + @Override public String getFileName() { return "hbmVacRefinery.json"; } + @Override public Object getRecipeObject() { return recipes; } + @Override public void deleteRecipes() { recipes.clear(); } + + @Override public String getComment() { + return "Inputs always assume 100mB, input ammount cannot be changed."; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = recipe.getAsJsonObject(); + + FluidType type = Fluids.fromName(obj.get("input").getAsString()); + FluidStack o0 = this.readFluidStack(obj.get("output0").getAsJsonArray()); + FluidStack o1 = this.readFluidStack(obj.get("output1").getAsJsonArray()); + FluidStack o2 = this.readFluidStack(obj.get("output2").getAsJsonArray()); + FluidStack o3 = this.readFluidStack(obj.get("output3").getAsJsonArray()); + + recipes.put(type, new VacuumRefineryRecipe(o0, o1, o2, o3)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry rec = (Entry) recipe; + + writer.name("input").value(rec.getKey().getName()); + + for(int i = 0; i < 4; i++) { + writer.name("output" + i); + this.writeFluidStack(rec.getValue().outputs[i], writer); + } + } + + public static HashMap getVacuumRecipe() { + + HashMap recipes = new HashMap(); + + for(Entry recipe : VacuumRefineryRecipes.recipes.entrySet()) { + + VacuumRefineryRecipe fluids = recipe.getValue(); + + recipes.put(ItemFluidIcon.make(recipe.getKey(), 1000, 2), + new ItemStack[] { + ItemFluidIcon.make(fluids.outputs[0].type, fluids.outputs[0].fill * 10), + ItemFluidIcon.make(fluids.outputs[1].type, fluids.outputs[1].fill * 10), + ItemFluidIcon.make(fluids.outputs[2].type, fluids.outputs[2].fill * 10), + ItemFluidIcon.make(fluids.outputs[3].type, fluids.outputs[3].fill * 10) }); + } + + return recipes; + } + + public static class VacuumRefineryRecipe { + + public FluidStack[] outputs; + + public VacuumRefineryRecipe(FluidStack f0, FluidStack f1, FluidStack f2, FluidStack f3) { + this.outputs = new FluidStack[] {f0, f1, f2, f3}; + } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 0dd33edd2..5cff196be 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -59,6 +59,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new CrucibleRecipes()); recipeHandlers.add(new CentrifugeRecipes()); recipeHandlers.add(new CrystallizerRecipes()); + recipeHandlers.add(new VacuumRefineryRecipes()); recipeHandlers.add(new FractionRecipes()); recipeHandlers.add(new CrackingRecipes()); recipeHandlers.add(new ReformingRecipes()); diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 3653b2138..97689217e 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -6,7 +6,8 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineVacuumDistill; -import com.hbm.inventory.recipes.RefineryRecipes; +import com.hbm.inventory.recipes.VacuumRefineryRecipes; +import com.hbm.inventory.recipes.VacuumRefineryRecipes.VacuumRefineryRecipe; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; @@ -14,7 +15,6 @@ import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.util.Tuple.Quartet; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -155,13 +155,13 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem } private void refine() { - Quartet refinery = RefineryRecipes.getVacuum(tanks[0].getTankType()); + VacuumRefineryRecipe refinery = VacuumRefineryRecipes.getVacuum(tanks[0].getTankType()); if(refinery == null) { for(int i = 1; i < 5; i++) tanks[i].setTankType(Fluids.NONE); return; } - FluidStack[] stacks = new FluidStack[] {refinery.getW(), refinery.getX(), refinery.getY(), refinery.getZ()}; + FluidStack[] stacks = refinery.outputs; for(int i = 0; i < stacks.length; i++) tanks[i + 1].setTankType(stacks[i].type); if(power < 10_000) return; diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png index a04e3e7a7aa6e466705f4cae7b27c2ba3b8cc458..871440cc4f80f6397e63912c17032efb0948361f 100644 GIT binary patch literal 3236 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 literal 3194 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 Qmm8?o7WU*~Gs=~}1EiZ{`v3p{ From 82f175105cd4b41f9236c8f3e4d345d6817c17f3 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 15 Dec 2025 15:33:10 +0100 Subject: [PATCH 02/19] bap --- changelog | 7 +- gradle.properties | 2 +- .../hbm/inventory/gui/GUIMachineRefinery.java | 16 ++- .../inventory/recipes/RefineryRecipes.java | 113 +++++++++++++----- .../recipes/loader/SerializableRecipe.java | 1 + .../java/com/hbm/items/machine/ItemMold.java | 4 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 1 - .../TileEntityMachineArcFurnaceLarge.java | 5 +- .../oil/TileEntityMachineRefinery.java | 8 +- 10 files changed, 109 insertions(+), 50 deletions(-) diff --git a/changelog b/changelog index a75b72d1f..fafea5825 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,10 @@ ## Changed +* Updated russian localization * Changed the recipe change button on the mixer to be bright red with arrows on it (since the "C" looked too much like it meant "clear") +* The refinery and the vacuum refinery now have working recipe configs +* Recipe autogen for foundry casting now deprioritizes fragments, preventing them from being casted when nuggets of that material are available ## Fixed -* Fixed atomic clock precision assembler recipe not working \ No newline at end of file +* Fixed atomic clock precision assembler recipe not working +* Fixed ICF parts using 528 mode templates in normal mode +* Fixed arc furnace queue slots inserting too many items, causing the output to exceed max stack size \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 812f67c85..191e2b38d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5544 +mod_build_number=5545 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRefinery.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRefinery.java index f30dd2edf..b3aae3272 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineRefinery.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRefinery.java @@ -1,11 +1,9 @@ package com.hbm.inventory.gui; -import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.RefineryRecipes; -import com.hbm.util.Tuple; +import com.hbm.inventory.recipes.RefineryRecipes.RefineryRecipe; import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineRefinery; @@ -83,7 +81,7 @@ public class GUIMachineRefinery extends GuiInfoContainer { // pipes - Tuple.Quintet recipe = RefineryRecipes.getRefinery(inputOil.getTankType()); + RefineryRecipe recipe = RefineryRecipes.getRefinery(inputOil.getTankType()); if(recipe == null) { func_146110_a(guiLeft + 52, guiTop + 63, 247, 1, 33, 48, 350, 256); @@ -93,27 +91,27 @@ public class GUIMachineRefinery extends GuiInfoContainer { } else { // Heavy Oil Products - Color color = new Color(recipe.getV().type.getColor()); + Color color = new Color(recipe.outputs[0].type.getColor()); GL11.glEnable(GL11.GL_BLEND); GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); func_146110_a(guiLeft + 52, guiTop + 63, 247, 1, 33, 48, 350, 256); // Naphtha Oil Products - color = new Color(recipe.getW().type.getColor()); + color = new Color(recipe.outputs[1].type.getColor()); GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); func_146110_a(guiLeft + 52, guiTop + 32, 247, 50, 66, 52, 350, 256); // Light Oil Products - color = new Color(recipe.getX().type.getColor()); + color = new Color(recipe.outputs[2].type.getColor()); GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); func_146110_a(guiLeft + 52, guiTop + 24, 247, 145, 86, 35, 350, 256); // Gaseous Products - color = new Color(recipe.getY().type.getColor()); + color = new Color(recipe.outputs[3].type.getColor()); GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); func_146110_a(guiLeft + 36, guiTop + 16, 211, 119, 122, 25, 350, 256); - + GL11.glDisable(GL11.GL_BLEND); GL11.glColor4f(1F, 1F, 1F, 1F); } diff --git a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java index 7b913597c..411902bb4 100644 --- a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java @@ -1,22 +1,26 @@ package com.hbm.inventory.recipes; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumTarType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.util.ItemStackUtil; -import com.hbm.util.Tuple.Quintet; import net.minecraft.item.ItemStack; -public class RefineryRecipes { +public class RefineryRecipes extends SerializableRecipe { /// fractions in percent /// public static final int oil_frac_heavy = 50; @@ -37,51 +41,32 @@ public class RefineryRecipes { public static final int crackds_frac_aroma = 15; public static final int crackds_frac_unsat = 15; - private static Map> refinery = new HashMap(); - - public static HashMap getRefineryRecipe() { + private static Map recipes = new HashMap(); - HashMap recipes = new HashMap(); - - for(Entry> recipe : refinery.entrySet()) { - - Quintet fluids = recipe.getValue(); - - recipes.put(ItemFluidIcon.make(recipe.getKey(), 1000), - new ItemStack[] { - ItemFluidIcon.make(fluids.getV().type, fluids.getV().fill * 10), - ItemFluidIcon.make(fluids.getW().type, fluids.getW().fill * 10), - ItemFluidIcon.make(fluids.getX().type, fluids.getX().fill * 10), - ItemFluidIcon.make(fluids.getY().type, fluids.getY().fill * 10), - ItemStackUtil.carefulCopy(fluids.getZ()) }); - } - - return recipes; - } - - public static void registerRefinery() { - refinery.put(Fluids.HOTOIL, new Quintet( + @Override + public void registerDefaults() { + recipes.put(Fluids.HOTOIL, new RefineryRecipe( new FluidStack(Fluids.HEAVYOIL, oil_frac_heavy), new FluidStack(Fluids.NAPHTHA, oil_frac_naph), new FluidStack(Fluids.LIGHTOIL, oil_frac_light), new FluidStack(Fluids.PETROLEUM, oil_frac_petro), new ItemStack(ModItems.sulfur) )); - refinery.put(Fluids.HOTCRACKOIL, new Quintet( + recipes.put(Fluids.HOTCRACKOIL, new RefineryRecipe( new FluidStack(Fluids.NAPHTHA_CRACK, crack_frac_naph), new FluidStack(Fluids.LIGHTOIL_CRACK, crack_frac_light), new FluidStack(Fluids.AROMATICS, crack_frac_aroma), new FluidStack(Fluids.UNSATURATEDS, crack_frac_unsat), DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK) )); - refinery.put(Fluids.HOTOIL_DS, new Quintet( + recipes.put(Fluids.HOTOIL_DS, new RefineryRecipe( new FluidStack(Fluids.HEAVYOIL, oilds_frac_heavy), new FluidStack(Fluids.NAPHTHA_DS, oilds_frac_naph), new FluidStack(Fluids.LIGHTOIL_DS, oilds_frac_light), new FluidStack(Fluids.UNSATURATEDS, oilds_frac_unsat), DictFrame.fromOne(ModItems.oil_tar, EnumTarType.PARAFFIN) )); - refinery.put(Fluids.HOTCRACKOIL_DS, new Quintet( + recipes.put(Fluids.HOTCRACKOIL_DS, new RefineryRecipe( new FluidStack(Fluids.NAPHTHA_DS, crackds_frac_naph), new FluidStack(Fluids.LIGHTOIL_DS, crackds_frac_light), new FluidStack(Fluids.AROMATICS, crackds_frac_aroma), @@ -90,7 +75,75 @@ public class RefineryRecipes { )); } - public static Quintet getRefinery(FluidType oil) { - return refinery.get(oil); + public static RefineryRecipe getRefinery(FluidType oil) { + return recipes.get(oil); + } + + @Override public String getFileName() { return "hbmRefinery.json"; } + @Override public Object getRecipeObject() { return recipes; } + @Override public void deleteRecipes() { recipes.clear(); } + + @Override public String getComment() { + return "Inputs always assume 100mB, input ammount cannot be changed."; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = recipe.getAsJsonObject(); + + FluidType type = Fluids.fromName(obj.get("input").getAsString()); + FluidStack o0 = this.readFluidStack(obj.get("output0").getAsJsonArray()); + FluidStack o1 = this.readFluidStack(obj.get("output1").getAsJsonArray()); + FluidStack o2 = this.readFluidStack(obj.get("output2").getAsJsonArray()); + FluidStack o3 = this.readFluidStack(obj.get("output3").getAsJsonArray()); + ItemStack solid = this.readItemStack(obj.get("solid").getAsJsonArray()); + + recipes.put(type, new RefineryRecipe(o0, o1, o2, o3, solid)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry rec = (Entry) recipe; + + writer.name("input").value(rec.getKey().getName()); + + for(int i = 0; i < 4; i++) { + writer.name("output" + i); + this.writeFluidStack(rec.getValue().outputs[i], writer); + } + + writer.name("solid"); + this.writeItemStack(rec.getValue().solid, writer); + } + + public static HashMap getRefineryRecipe() { + + HashMap recipes = new HashMap(); + + for(Entry recipe : RefineryRecipes.recipes.entrySet()) { + + RefineryRecipe fluids = recipe.getValue(); + + recipes.put(ItemFluidIcon.make(recipe.getKey(), 1000), + new ItemStack[] { + ItemFluidIcon.make(fluids.outputs[0].type, fluids.outputs[0].fill * 10), + ItemFluidIcon.make(fluids.outputs[1].type, fluids.outputs[1].fill * 10), + ItemFluidIcon.make(fluids.outputs[2].type, fluids.outputs[2].fill * 10), + ItemFluidIcon.make(fluids.outputs[3].type, fluids.outputs[3].fill * 10), + ItemStackUtil.carefulCopy(fluids.solid) }); + } + + return recipes; + } + + public static class RefineryRecipe { + + public FluidStack[] outputs; + public ItemStack solid; + + public RefineryRecipe(FluidStack f0, FluidStack f1, FluidStack f2, FluidStack f3, ItemStack f4) { + this.outputs = new FluidStack[] {f0, f1, f2, f3}; + this.solid = f4; + } } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 5cff196be..dd7279516 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -59,6 +59,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new CrucibleRecipes()); recipeHandlers.add(new CentrifugeRecipes()); recipeHandlers.add(new CrystallizerRecipes()); + recipeHandlers.add(new RefineryRecipes()); recipeHandlers.add(new VacuumRefineryRecipes()); recipeHandlers.add(new FractionRecipes()); recipeHandlers.add(new CrackingRecipes()); diff --git a/src/main/java/com/hbm/items/machine/ItemMold.java b/src/main/java/com/hbm/items/machine/ItemMold.java index 7d6b0a092..b9b9cc43c 100644 --- a/src/main/java/com/hbm/items/machine/ItemMold.java +++ b/src/main/java/com/hbm/items/machine/ItemMold.java @@ -187,7 +187,9 @@ public class ItemMold extends Item { if(!ores.isEmpty()) { //prioritize NTM items for(ItemStack ore : ores) { - if(Item.itemRegistry.getNameForObject(ore.getItem()).startsWith(RefStrings.MODID)) { + String registry = Item.itemRegistry.getNameForObject(ore.getItem()); + if(registry.startsWith(RefStrings.MODID)) { + if(registry.contains("fragment")) continue; // deprioritize fragments ItemStack copy = ore.copy(); copy.stackSize = this.amount; return copy; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 41e0e1fdf..0137745be 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5544)"; + public static final String VERSION = "1.0.27 BETA (5545)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 16a3e1e4e..8db6b3c17 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -552,7 +552,6 @@ public class MainRegistry { MagicRecipes.register(); LemegetonRecipes.register(); SILEXRecipes.register(); - RefineryRecipes.registerRefinery(); GasCentrifugeRecipes.register(); CustomMachineConfigJSON.initialize(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 3ae1e58a6..a650d536b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -279,11 +279,13 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl if(slots[q] == null) continue; ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(slots[q], this.liquidMode); if(recipe == null) continue; + int max = this.getMaxInputSize(); + int recipeMax = this.liquidMode ? max : slots[q].getMaxStackSize() / recipe.solidOutput.stackSize; + max = Math.min(max, recipeMax); // add to existing stacks for(int i /* ingredient */ = 5; i < 25; i++) { if(slots[i] == null) continue; - int max = this.getMaxInputSize(); if(!slots[q].isItemEqual(slots[i])) continue; int toMove = BobMathUtil.min(slots[i].getMaxStackSize() - slots[i].stackSize, slots[q].stackSize, max - slots[i].stackSize); if(toMove > 0) { @@ -297,7 +299,6 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl // add to empty slot if(slots[q] != null) for(int i /* ingredient */ = 5; i < 25; i++) { if(slots[i] != null) continue; - int max = this.getMaxInputSize(); int toMove = Math.min(max, slots[q].stackSize); slots[i] = slots[q].copy(); slots[i].stackSize = toMove; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index e7ce296c2..770183b46 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -20,13 +20,13 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineRefinery; import com.hbm.inventory.recipes.RefineryRecipes; +import com.hbm.inventory.recipes.RefineryRecipes.RefineryRecipe; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; -import com.hbm.util.Tuple.Quintet; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -266,13 +266,13 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements } private void refine() { - Quintet refinery = RefineryRecipes.getRefinery(tanks[0].getTankType()); + RefineryRecipe refinery = RefineryRecipes.getRefinery(tanks[0].getTankType()); if(refinery == null) { for(int i = 1; i < 5; i++) tanks[i].setTankType(Fluids.NONE); return; } - FluidStack[] stacks = new FluidStack[] {refinery.getV(), refinery.getW(), refinery.getX(), refinery.getY()}; + FluidStack[] stacks = refinery.outputs; for(int i = 0; i < stacks.length; i++) tanks[i + 1].setTankType(stacks[i].type); @@ -294,7 +294,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements if(this.sulfur >= maxSulfur) { this.sulfur -= maxSulfur; - ItemStack out = refinery.getZ(); + ItemStack out = refinery.solid; if(out != null) { From c639be142947402ce259d88751779b89430f6a64 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 16 Dec 2025 15:22:51 +0100 Subject: [PATCH 03/19] 67 mango mustard kendrick still water dubai labubu chocolate tralalero please someone euthanize me --- changelog | 14 +++++----- gradle.properties | 2 +- .../java/com/hbm/inventory/material/Mats.java | 2 +- .../recipes/AssemblyMachineRecipes.java | 27 ++----------------- .../recipes/loader/GenericRecipe.java | 12 ++++++++- .../recipes/loader/GenericRecipes.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 18 ++++++------- 9 files changed, 33 insertions(+), 48 deletions(-) diff --git a/changelog b/changelog index fafea5825..6c9cef3c8 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,10 @@ ## Changed -* Updated russian localization -* Changed the recipe change button on the mixer to be bright red with arrows on it (since the "C" looked too much like it meant "clear") -* The refinery and the vacuum refinery now have working recipe configs -* Recipe autogen for foundry casting now deprioritizes fragments, preventing them from being casted when nuggets of that material are available +* For consistency with the crucible material, all tantalium *items* now go by "tantalum" ## Fixed -* Fixed atomic clock precision assembler recipe not working -* Fixed ICF parts using 528 mode templates in normal mode -* Fixed arc furnace queue slots inserting too many items, causing the output to exceed max stack size \ No newline at end of file +* Fixed MHD turbines requiring a 528 blueprint in normal mode + * The game will now crash when the default pool list has a 528 blueprint entry, preventing this from happening again + * Configured recipes do not have this check, you can use 528 mode templates in normal mode if you really want for some reason +* Fixed ancient misspelling of "ketamine" on the splash screens +* Fixed tantalum fragments not using autogen correctly, becoming unusable +* Fixed 528 mode cracking tower requiring rubber instead of plasic for the blueprint, rendering it unobtainable \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 191e2b38d..1d866b3e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5545 +mod_build_number=5546 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 7ee7b6990..09c243cb5 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -107,7 +107,7 @@ public class Mats { public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setAutogen(FRAGMENT, NUGGET, WIRE, BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK).m(); public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF, 0xB200FF, 0xB200FF).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setAutogen(NUGGET).m(); - public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setAutogen(NUGGET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setAutogen(FRAGMENT, NUGGET, DUST, BLOCK).m(); public static final NTMMaterial MAT_NEODYMIUM = makeSmeltable(6000, ND, 0xE6E6B6, 0x1C1C00, 0x8F8F5F).setAutogen(FRAGMENT, NUGGET, DUSTTINY, INGOT, DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_NIOBIUM = makeSmeltable(4100, NB, 0xB76EC9, 0x2F2D42, 0xD576B1).setAutogen(FRAGMENT, NUGGET, DUSTTINY, DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_BERYLLIUM = makeSmeltable(400, BE, 0xB2B2A6, 0x0F0F03, 0xAE9572).setAutogen(FRAGMENT, NUGGET, DUST, BLOCK).m(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 74bc229d0..7ace5cd11 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -56,11 +56,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { @Override public void registerDefaults() { boolean no528 = !GeneralConfig.enable528; - - // NBTStack test - // this.register(new GenericRecipe("demo1").setup(20, 100).outputItems(BrokenItem.make(ModItems.plate_iron)).inputItems(new OreDictStack(IRON.ingot()))); - // this.register(new GenericRecipe("demo2").setup(20, 100).outputItems(BrokenItem.make(ModItems.plate_gold)).inputItems(new OreDictStack(IRON.ingot()))); - // this.register(new GenericRecipe("demo3").setup(20, 100).outputItems(new ItemStack(Items.iron_ingot)).inputItems(new NBTStack(BrokenItem.make(ModItems.plate_iron)))); // plates and ingots String autoPlate = "autoswitch.plates"; @@ -216,10 +211,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.cap_fritz, 64), new ComparableStack(ModItems.cap_fritz, 64))); this.register(new GenericRecipe("ass.capkorl").setup(10, 100).outputItems(DictFrame.fromOne(ModBlocks.block_cap, EnumCapBlock.KORL)) .inputItems(new ComparableStack(ModItems.cap_korl, 64), new ComparableStack(ModItems.cap_korl, 64))); - /* - this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) - .inputItems()); - */ // machines this.register(new GenericRecipe("ass.shredder").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_shredder, 1)) @@ -276,7 +267,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.crackingtower").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_catalytic_cracker, 1)) .inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(STEEL.shell(), 6), new OreDictStack(DESH.ingot(), 12), new OreDictStack(NB.ingot(), 4)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING), new OreDictStack(ANY_PLASTIC.ingot(), 16), new OreDictStack(NB.ingot(), 4)) - .setPools528(GenericRecipes.POOL_PREFIX_528 + "rubber")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "plastic")); this.register(new GenericRecipe("ass.radiolysis").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_radiolysis, 1)) .inputItems(new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(PB.plate(), 12), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModItems.thermo_element, 8)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.LEAD_PLATING), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 16), new ComparableStack(ModItems.thermo_element, 8))); @@ -579,7 +570,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.fusionmhdt").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.fusion_mhdt, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(CU.plateWelded(), 64), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 64), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.PLASTIC), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 32), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.QUANTUM)) - .setPools(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); + .setPools528(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")); this.register(new GenericRecipe("ass.fusioncoupler").setup(300, 100).outputItems(new ItemStack(ModBlocks.fusion_coupler, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 4), new OreDictStack(CU.plate(), 32), new OreDictStack(BSCCO.wireDense(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new OreDictStack(BSCCO.wireDense(), 16), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER))); @@ -656,10 +647,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.overdrive3").setup(1_200, 100).outputItems(new ItemStack(ModItems.upgrade_overdrive_3, 1)) .inputItems(new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(ANY_BISMOIDBRONZE.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))); } - /* - this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) - .inputItems()); - */ // rancid shit mob spawners this.register(new GenericRecipe("ass.chopper").setup(1_200, 100).outputItems(new ItemStack(ModItems.spawn_chopper, 8)) @@ -785,11 +772,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.bholegrenade").setup(1_200, 100).outputItems(new ItemStack(ModItems.grenade_black_hole, 1)) .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 6), new OreDictStack(OreDictManager.getReflector(), 3), new ComparableStack(ModItems.coil_magnetized_tungsten, 2), new ComparableStack(ModItems.black_hole, 1))); - /* - this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModBlocks., 1)) - .inputItems()); - */ - // turrets this.register(new GenericRecipe("ass.turretchekhov").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_chekhov, 1)) .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1)) @@ -986,11 +968,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.seg_15, 1), new OreDictStack(WEAPONSTEEL.plate(), 32), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 8), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 16), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "controller")); - /* - this.register(new GenericRecipe("ass.").setup(, 100).outputItems(new ItemStack(ModItems., 1)) - .inputItems()); - */ - // weapons this.register(new GenericRecipe("ass.schrabhammer").setup(6_000, 100).outputItems(new ItemStack(ModItems.schrabidium_hammer, 1)) .inputItems( diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 9c84edf0e..4ca05b163 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -59,7 +59,17 @@ public class GenericRecipe { public GenericRecipe setIcon(Item item) { return this.setIcon(new ItemStack(item)); } public GenericRecipe setIcon(Block block) { return this.setIcon(new ItemStack(block)); } public GenericRecipe setNamed() { this.customLocalization = true; return this; } - public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } + + public GenericRecipe setPools(String... pools) { + this.blueprintPools = pools; + for(String pool : pools) { + if(pool.startsWith(GenericRecipes.POOL_PREFIX_528)) throw new IllegalArgumentException("Tried initializing a recipe's default blueprint pool with a 528 blueprint - this is not allowed."); + GenericRecipes.addToPool(pool, this); + } + return this; + } + /** Only for recipe configs - same as regular except the anti 528 check doesn't exist */ + public GenericRecipe setPoolsAllow528(String... pools) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); return this; } public GenericRecipe setPools528(String... pools) { if(GeneralConfig.enable528) { this.blueprintPools = pools; for(String pool : pools) GenericRecipes.addToPool(pool, this); } return this; } public GenericRecipe setGroup(String autoSwitch, GenericRecipes set) { this.autoSwitchGroup = autoSwitch; set.addToGroup(autoSwitch, this); return this; } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 288da9a29..0394807eb 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -118,7 +118,7 @@ public abstract class GenericRecipes extends Serializab if(obj.has("icon")) recipe.setIcon(this.readItemStack(obj.get("icon").getAsJsonArray())); if(obj.has("named") && obj.get("named").getAsBoolean()) recipe.setNamed(); - if(obj.has("blueprintpool")) recipe.setPools(obj.get("blueprintpool").getAsString().split(":")); + if(obj.has("blueprintpool")) recipe.setPoolsAllow528(obj.get("blueprintpool").getAsString().split(":")); if(obj.has("nameWrapper")) recipe.setNameWrapper(obj.get("nameWrapper").getAsString()); if(obj.has("autoSwitchGroup")) recipe.setGroup(obj.get("autoSwitchGroup").getAsString(), this); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 0137745be..e12427a86 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5545)"; + public static final String VERSION = "1.0.27 BETA (5546)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index daa28d1b3..375110439 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1408,7 +1408,7 @@ public class ModEventHandlerClient { case 2: main.splashText = "All answers are popbob!"; break; case 3: main.splashText = "None may enter The Orb!"; break; case 4: main.splashText = "Wacarb was here"; break; - case 5: main.splashText = "SpongeBoy me Bob I am overdosing on keramine agagagagaga"; break; + case 5: main.splashText = "SpongeBoy me Bob I am overdosing on ketamine agagagagaga"; break; case 6: main.splashText = EnumChatFormatting.RED + "I know where you live, " + System.getProperty("user.name"); break; case 7: main.splashText = "Nice toes, now hand them over."; break; case 8: main.splashText = "I smell burnt toast!"; break; diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d653844d7..567bd333d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -615,7 +615,7 @@ chem.CIRCUIT_5=High Performance Circuit Production chem.CO2=Carbon Dioxide Production chem.COALGAS_LEADED=Leaded Coal Gasoline Mixing chem.COLTAN_CLEANING=Coltan Purifying -chem.COLTAN_CRYSTAL=Tantalium Crystallizing +chem.COLTAN_CRYSTAL=Tantalum Crystallizing chem.COLTAN_PAIN=Pandemonium(III)tantalite Production chem.CONCRETE=Concrete Production chem.CONCRETE_ASBESTOS=Asbestos Concrete Production @@ -2474,7 +2474,7 @@ 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.capacitor_tantalium.name=Tantalum Capacitor item.circuit.chip.name=Microchip item.circuit.chip_bismoid.name=Versatile Integrated Circuit item.circuit.chip_quantum.name=Solid State Quantum Processor @@ -2916,7 +2916,7 @@ item.geiger_counter.name=Handheld Geiger Counter item.gem_alexandrite.name=Alexandrite item.gem_rad.name=Radioactive Gem item.gem_sodalite.name=Sodalite -item.gem_tantalium.name=Tantalium Polycrystal +item.gem_tantalium.name=Tantalum Polycrystal item.gem_tantalium.desc='Tantalum' item.gem_tantalium.desc.P11=AKA Tantalum. item.gem_volcanic.name=Volcanic Gem @@ -3216,7 +3216,7 @@ item.ingot_sr90.name=Strontium-90 Ingot item.ingot_starmetal.name=§9Starmetal Ingot§r item.ingot_steel.name=Steel Ingot item.ingot_steel_dusted.name=Dusted Steel Ingot -item.ingot_tantalium.name=Tantalium Ingot +item.ingot_tantalium.name=Tantalum Ingot item.ingot_tantalium.desc='Tantalum' item.ingot_tantalium.desc.P11=AKA Tantalum. item.ingot_tcalloy.name=Technetium Steel Ingot @@ -3688,9 +3688,7 @@ item.nugget_schrabidium_fuel.name=Nugget of Schrabidium Fuel item.nugget_silicon.name=Silicon Nugget item.nugget_solinium.name=Solinium Nugget item.nugget_sr90.name=Strontium-90 Nugget -item.nugget_tantalium.name=Tantalium Nugget -item.nugget_tantalium.desc='Tantalum' -item.nugget_tantalium.desc.P11=AKA Tantalum. +item.nugget_tantalium.name=Tantalum Nugget item.nugget_technetium.name=Technetium-99 Nugget item.nugget_th232.name=Thorium-232 Nugget item.nugget_thorium_fuel.name=Nugget of Thorium Fuel @@ -4067,7 +4065,7 @@ item.powder_sr90_tiny.name=Tiny Pile of Strontium-90 Powder item.powder_steel.name=Steel Powder item.powder_steel_tiny.name=Tiny Pile of Steel Powder item.powder_strontium.name=Strontium Powder -item.powder_tantalium.name=Tantalium Powder +item.powder_tantalium.name=Tantalum Powder item.powder_tantalium.desc='Tantalum' item.powder_tantalium.desc.P11=AKA Tantalum. item.powder_tcalloy.name=Technetium Steel Powder @@ -5185,7 +5183,7 @@ tile.block_solinium.name=Block of Solinium tile.block_starmetal.name=§9Block of Starmetal§r tile.block_steel.name=Block of Steel tile.block_sulfur.name=Block of Sulfur -tile.block_tantalium.name=Block of Tantalium +tile.block_tantalium.name=Block of Tantalum tile.block_tcalloy.name=Block of Technetium Steel tile.block_thorium.name=Block of Thorium-232 tile.block_thorium_fuel.name=Block of Thorium Fuel @@ -5267,7 +5265,7 @@ tile.capacitor_copper.name=Copper Capacitor tile.capacitor_gold.name=Golden Capacitor tile.capacitor_niobium.name=Niobium Capacitor tile.capacitor_schrabidate.name=Schrabidate Capacitor -tile.capacitor_tantalium.name=Tantalium Capacitor +tile.capacitor_tantalium.name=Tantalum Capacitor tile.capacitor.desc=Input: Top$Output: Bottom, via Capacitor Bus tile.charge_c4.name=Demolition Charge tile.charge_dynamite.name=Time Bomb From f82a606b66eacfbfe5e9c06291c482d78ec1b08f Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 16 Dec 2025 16:16:19 +0100 Subject: [PATCH 04/19] shit yourself --- .../java/com/hbm/inventory/recipes/loader/GenericRecipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java index 4ca05b163..eab7c3543 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipe.java @@ -63,7 +63,7 @@ public class GenericRecipe { public GenericRecipe setPools(String... pools) { this.blueprintPools = pools; for(String pool : pools) { - if(pool.startsWith(GenericRecipes.POOL_PREFIX_528)) throw new IllegalArgumentException("Tried initializing a recipe's default blueprint pool with a 528 blueprint - this is not allowed."); + if(!GeneralConfig.enable528 && pool.startsWith(GenericRecipes.POOL_PREFIX_528)) throw new IllegalArgumentException("Tried initializing a recipe's default blueprint pool with a 528 blueprint - this is not allowed."); GenericRecipes.addToPool(pool, this); } return this; From ef2b20d357ce159f7c3861cfecf8169796023a83 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 17 Dec 2025 14:55:50 +0100 Subject: [PATCH 05/19] succumb --- changelog | 14 +- src/main/java/com/hbm/blocks/ModBlocks.java | 41 --- .../hbm/blocks/generic/BlockCoalBurning.java | 78 ------ .../com/hbm/blocks/generic/BlockCoalOil.java | 33 --- .../com/hbm/blocks/generic/BlockOutgas.java | 2 +- .../blocks/generic/BlockToolConversion.java | 1 - .../com/hbm/blocks/machine/MachineITER.java | 1 + .../MachineSchrabidiumTransmutator.java | 133 --------- .../java/com/hbm/config/GeneralConfig.java | 2 +- .../com/hbm/crafting/ConsumableRecipes.java | 2 +- .../hbm/entity/projectile/EntityMeteor.java | 6 +- .../hbm/explosion/ExplosionNukeGeneric.java | 2 - .../com/hbm/inventory/OreDictManager.java | 10 - ...ntainerMachineSchrabidiumTransmutator.java | 88 ------ .../GUIMachineSchrabidiumTransmutator.java | 60 ---- .../inventory/recipes/AssemblerRecipes.java | 54 ---- .../recipes/AssemblyMachineRecipes.java | 3 - .../com/hbm/itempool/ItemPoolsLegacy.java | 4 +- .../java/com/hbm/main/CraftingManager.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 11 + .../java/com/hbm/tileentity/TileMappings.java | 1 - .../tileentity/machine/TileEntityITER.java | 104 +------ .../machine/TileEntityITERStruct.java | 76 +---- ...eEntityMachineSchrabidiumTransmutator.java | 264 ------------------ .../java/com/hbm/world/dungeon/Spaceship.java | 4 +- .../com/hbm/world/dungeon/Spaceship2.java | 2 +- .../world/gen/component/SiloComponent.java | 2 +- .../blocks/fusion_center_side_alt.png | Bin 153 -> 0 bytes .../textures/blocks/fusion_center_top_alt.png | Bin 426 -> 0 bytes .../textures/blocks/fusion_conductor_side.png | Bin 164 -> 0 bytes .../blocks/fusion_conductor_side_welded.png | Bin 469 -> 0 bytes .../textures/blocks/fusion_conductor_top.png | Bin 581 -> 0 bytes .../blocks/fusion_conductor_top_welded.png | Bin 708 -> 0 bytes .../textures/blocks/fusion_motor_side_alt.png | Bin 251 -> 0 bytes .../textures/blocks/fusion_motor_top_alt.png | Bin 608 -> 0 bytes .../hbm/textures/blocks/struct_iter_core.png | Bin 539 -> 0 bytes .../textures/blocks/struct_plasma_core.png | Bin 555 -> 0 bytes .../assets/hbm/textures/blocks/test_ct.1.png | Bin 122 -> 0 bytes .../hbm/textures/blocks/test_ct.1_ct.png | Bin 277 -> 0 bytes .../assets/hbm/textures/blocks/test_ct.png | Bin 122 -> 0 bytes .../assets/hbm/textures/blocks/test_ct_ct.png | Bin 248 -> 0 bytes .../assets/hbm/textures/blocks/test_rail.png | Bin 133 -> 0 bytes .../textures/blocks/transmutator_bottom.png | Bin 437 -> 0 bytes .../hbm/textures/blocks/transmutator_side.png | Bin 542 -> 0 bytes .../hbm/textures/blocks/transmutator_top.png | Bin 404 -> 0 bytes 45 files changed, 36 insertions(+), 964 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockCoalBurning.java delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockCoalOil.java delete mode 100644 src/main/java/com/hbm/blocks/machine/MachineSchrabidiumTransmutator.java delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineSchrabidiumTransmutator.java delete mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineSchrabidiumTransmutator.java delete mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_center_side_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_center_top_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_conductor_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_conductor_side_welded.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_conductor_top.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_conductor_top_welded.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_motor_side_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/fusion_motor_top_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/struct_iter_core.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/struct_plasma_core.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/test_ct.1.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/test_ct.1_ct.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/test_ct.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/test_ct_ct.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/test_rail.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/transmutator_bottom.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/transmutator_side.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/transmutator_top.png diff --git a/changelog b/changelog index 6c9cef3c8..53a3e52b4 100644 --- a/changelog +++ b/changelog @@ -1,10 +1,10 @@ ## Changed -* For consistency with the crucible material, all tantalium *items* now go by "tantalum" +* After not being part of worldgen for a long time, oily coal is finally being removed +* The rare metal blocks that had been unobtainable and unused for the longest time have been removed +* The schrabidium transmutator's grace period is over, it is finally being destroyed +* Most of the legacy fusion reactor components, which were unobtainable and unusable, have been removed + * The block ID economy is looking better than ever ## Fixed -* Fixed MHD turbines requiring a 528 blueprint in normal mode - * The game will now crash when the default pool list has a 528 blueprint entry, preventing this from happening again - * Configured recipes do not have this check, you can use 528 mode templates in normal mode if you really want for some reason -* Fixed ancient misspelling of "ketamine" on the splash screens -* Fixed tantalum fragments not using autogen correctly, becoming unusable -* Fixed 528 mode cracking tower requiring rubber instead of plasic for the blueprint, rendering it unobtainable \ No newline at end of file +* Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases +* Fixed 528 coltan deposit config misspelling \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 786edf0f4..a84634f56 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -154,8 +154,6 @@ public class ModBlocks { public static Block ore_bedrock_oil; public static Block ore_lignite; public static Block ore_asbestos; - @Deprecated public static Block ore_coal_oil; - @Deprecated public static Block ore_coal_oil_burning; public static Block ore_tikite; @@ -252,11 +250,6 @@ public class ModBlocks { public static Block block_slag; public static Block block_australium; - public static Block block_weidanium; - public static Block block_reiium; - public static Block block_unobtainium; - public static Block block_daffergon; - public static Block block_verticium; public static Block block_cap; @@ -750,8 +743,6 @@ public class ModBlocks { public static Block machine_microwave; - //public static Block machine_deuterium; - public static Block machine_battery_potato; public static Block machine_battery; public static Block machine_lithium_battery; @@ -809,7 +800,6 @@ public class ModBlocks { public static Block conveyor; public static Block conveyor_express; - //public static Block conveyor_classic; public static Block conveyor_double; public static Block conveyor_triple; public static Block conveyor_chute; @@ -834,7 +824,6 @@ public class ModBlocks { public static Block pneumatic_tube_paintable; public static Block fan; - public static Block piston_inserter; public static Block chain; @@ -900,9 +889,6 @@ public class ModBlocks { public static Block pwr_controller; public static Block pwr_block; - @Deprecated public static Block fusion_conductor; - @Deprecated public static Block fusion_center; - @Deprecated public static Block fusion_motor; @Deprecated public static Block fusion_heater; @Deprecated public static Block fusion_hatch; @Deprecated public static Block plasma; // only actually used by the old plasma grenade, will die with the grenade rework @@ -946,8 +932,6 @@ public class ModBlocks { public static Block machine_converter_he_rf; public static Block machine_converter_rf_he; - public static Block machine_schrabidium_transmutator; - public static Block machine_diesel; public static Block machine_combustion_engine; @@ -1290,8 +1274,6 @@ public class ModBlocks { ore_beryllium = new BlockGeneric(Material.rock).setBlockName("ore_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_beryllium"); ore_lignite = new BlockOre(Material.rock).setBlockName("ore_lignite").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_lignite"); ore_asbestos = new BlockOutgas(Material.rock, true, 5, true).setBlockName("ore_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_asbestos"); - ore_coal_oil = new BlockCoalOil(Material.rock).setBlockName("ore_coal_oil").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil"); - ore_coal_oil_burning = new BlockCoalBurning(Material.rock).setBlockName("ore_coal_oil_burning").setCreativeTab(MainRegistry.blockTab).setLightLevel(10F/15F).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil_burning"); cluster_iron = new BlockCluster(Material.rock).setBlockName("cluster_iron").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_iron"); cluster_titanium = new BlockCluster(Material.rock).setBlockName("cluster_titanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_titanium"); @@ -1470,11 +1452,6 @@ public class ModBlocks { block_slag = new BlockSlag(Material.rock).setBlockName("block_slag").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeStone).setHardness(2.0F).setBlockTextureName(RefStrings.MODID + ":block_slag"); block_australium = new BlockBeaconable(Material.iron).setBlockName("block_australium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_australium"); - block_weidanium = new BlockBeaconable(Material.iron).setBlockName("block_weidanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - block_reiium = new BlockBeaconable(Material.iron).setBlockName("block_reiium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - block_unobtainium = new BlockBeaconable(Material.iron).setBlockName("block_unobtainium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - block_daffergon = new BlockBeaconable(Material.iron).setBlockName("block_daffergon").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); - block_verticium = new BlockBeaconable(Material.iron).setBlockName("block_verticium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated"); block_cap = new BlockCap().setBlockName("block_cap").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); @@ -2047,9 +2024,6 @@ public class ModBlocks { pwr_controller = new MachinePWRController(Material.iron).setBlockName("pwr_controller").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing_blank"); pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pwr_block"); - fusion_conductor = new BlockToolConversionPillar(Material.iron).addVariant("_welded").setBlockName("fusion_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_conductor"); - fusion_center = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_center_top_alt").setBlockName("fusion_center").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_center_side_alt"); - fusion_motor = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_motor_top_alt").setBlockName("fusion_motor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_motor_side_alt"); fusion_heater = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_heater_top").setBlockName("fusion_heater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_heater_side"); fusion_hatch = new FusionHatch(Material.iron).setBlockName("fusion_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_hatch"); plasma = new BlockPlasma(Material.iron).setBlockName("plasma").setHardness(5.0F).setResistance(6000.0F).setLightLevel(1.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":plasma"); @@ -2322,8 +2296,6 @@ public class ModBlocks { machine_waste_drum = new WasteDrum(Material.iron).setBlockName("machine_waste_drum").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":waste_drum"); machine_storage_drum = new StorageDrum(Material.iron).setBlockName("machine_storage_drum").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_storage_drum"); - machine_schrabidium_transmutator = new MachineSchrabidiumTransmutator(Material.iron).setBlockName("machine_schrabidium_transmutator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab); - machine_siren = new MachineSiren(Material.iron).setBlockName("machine_siren").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_siren"); machine_spp_bottom = new SPPBottom(Material.iron).setBlockName("machine_spp_bottom").setHardness(5.0F).setResistance(10.0F); @@ -2479,10 +2451,6 @@ public class ModBlocks { //Bedrock ores GameRegistry.registerBlock(ore_bedrock_oil, ore_bedrock_oil.getUnlocalizedName()); - //Nice Meme - GameRegistry.registerBlock(ore_coal_oil, ore_coal_oil.getUnlocalizedName()); - GameRegistry.registerBlock(ore_coal_oil_burning, ore_coal_oil_burning.getUnlocalizedName()); - //Nether Ores GameRegistry.registerBlock(ore_nether_coal, ore_nether_coal.getUnlocalizedName()); GameRegistry.registerBlock(ore_nether_smoldering, ore_nether_smoldering.getUnlocalizedName()); @@ -2647,11 +2615,6 @@ public class ModBlocks { GameRegistry.registerBlock(block_bakelite, block_bakelite.getUnlocalizedName()); GameRegistry.registerBlock(block_rubber, block_rubber.getUnlocalizedName()); GameRegistry.registerBlock(block_australium, ItemOreBlock.class, block_australium.getUnlocalizedName()); - GameRegistry.registerBlock(block_weidanium, ItemOreBlock.class, block_weidanium.getUnlocalizedName()); - GameRegistry.registerBlock(block_reiium, ItemOreBlock.class, block_reiium.getUnlocalizedName()); - GameRegistry.registerBlock(block_unobtainium, ItemOreBlock.class, block_unobtainium.getUnlocalizedName()); - GameRegistry.registerBlock(block_daffergon, ItemOreBlock.class, block_daffergon.getUnlocalizedName()); - GameRegistry.registerBlock(block_verticium, ItemOreBlock.class, block_verticium.getUnlocalizedName()); register(block_cap); GameRegistry.registerBlock(block_lanthanium, block_lanthanium.getUnlocalizedName()); GameRegistry.registerBlock(block_ra226, block_ra226.getUnlocalizedName()); @@ -3376,7 +3339,6 @@ public class ModBlocks { register(machine_turbofan); register(machine_turbinegas); register(machine_lpw2); - GameRegistry.registerBlock(machine_schrabidium_transmutator, machine_schrabidium_transmutator.getUnlocalizedName()); GameRegistry.registerBlock(machine_teleporter, machine_teleporter.getUnlocalizedName()); GameRegistry.registerBlock(teleanchor, teleanchor.getUnlocalizedName()); GameRegistry.registerBlock(field_disturber, field_disturber.getUnlocalizedName()); @@ -3439,9 +3401,6 @@ public class ModBlocks { register(pwr_block); //Multiblock Generators - register(fusion_conductor); - GameRegistry.registerBlock(fusion_center, fusion_center.getUnlocalizedName()); - GameRegistry.registerBlock(fusion_motor, fusion_motor.getUnlocalizedName()); GameRegistry.registerBlock(fusion_heater, fusion_heater.getUnlocalizedName()); GameRegistry.registerBlock(fusion_hatch, fusion_hatch.getUnlocalizedName()); GameRegistry.registerBlock(plasma, ItemBlockLore.class, plasma.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCoalBurning.java b/src/main/java/com/hbm/blocks/generic/BlockCoalBurning.java deleted file mode 100644 index 312c9c310..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockCoalBurning.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.hbm.blocks.generic; - -import java.util.Random; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -public class BlockCoalBurning extends BlockOutgas { - - public BlockCoalBurning(Material mat) { - super(mat, false, 1, false); - this.setTickRandomly(true); - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, int x, int y, int z, Random rand) { - super.randomDisplayTick(world, x, y, z, rand); - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - - if(dir == ForgeDirection.DOWN) - continue; - - if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).getMaterial() == Material.air) { - - double ix = x + 0.5F + dir.offsetX + rand.nextDouble() - 0.5D; - double iy = y + 0.5F + dir.offsetY + rand.nextDouble() - 0.5D; - double iz = z + 0.5F + dir.offsetZ + rand.nextDouble() - 0.5D; - - if(dir.offsetX != 0) - ix = x + 0.5F + dir.offsetX * 0.5 + rand.nextDouble() * 0.125 * dir.offsetX; - if(dir.offsetY != 0) - iy = y + 0.5F + dir.offsetY * 0.5 + rand.nextDouble() * 0.125 * dir.offsetY; - if(dir.offsetZ != 0) - iz = z + 0.5F + dir.offsetZ * 0.5 + rand.nextDouble() * 0.125 * dir.offsetZ; - - world.spawnParticle("flame", ix, iy, iz, 0.0, 0.0, 0.0); - world.spawnParticle("smoke", ix, iy, iz, 0.0, 0.0, 0.0); - world.spawnParticle("smoke", ix, iy, iz, 0.0, 0.1, 0.0); - } - } - } - - @Override - public Item getItemDropped(int i, Random rand, int j) { - return null; - } - - public void breakBlock(World world, int x, int y, int z, Block block, int i) { - super.breakBlock(world, x, y, z, block, i); - - world.setBlock(x, y, z, Blocks.fire); - - for(int ix = -2; ix <= 2; ix++) { - for(int iy = -2; iy <= 2; iy++) { - for(int iz = -2; iz <= 2; iz++) { - - if(Math.abs(ix + iy + iz) < 5 && world.getBlock(x + ix, y + iy, z + iz) == Blocks.air) { - world.setBlock(x + ix, y + iy, z + iz, this.getGas()); - } - } - } - } - } - - @Override - public void onEntityWalking(World world, int x, int y, int z, Entity entity) { - entity.setFire(3); - } -} diff --git a/src/main/java/com/hbm/blocks/generic/BlockCoalOil.java b/src/main/java/com/hbm/blocks/generic/BlockCoalOil.java deleted file mode 100644 index cb6f4ea7e..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockCoalOil.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.hbm.blocks.generic; - -import java.util.Random; - -import com.hbm.blocks.ModBlocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.world.World; - -public class BlockCoalOil extends Block { - - public BlockCoalOil(Material mat) { - super(mat); - } - - @Override - public void updateTick(World world, int x, int y, int z, Random rand) { - world.setBlock(x, y, z, ModBlocks.ore_coal_oil_burning); - } - - @Override - public Item getItemDropped(int i, Random rand, int j) { - return Items.coal; - } - - @Override - public int quantityDropped(Random rand) { - return 2 + rand.nextInt(2); - } -} diff --git a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java index 9fe92c1b9..c5361d9b2 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOutgas.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOutgas.java @@ -50,7 +50,7 @@ public class BlockOutgas extends BlockOre { if(this == ModBlocks.ancient_scrap) return ModBlocks.gas_radon_tomb; - if(this == ModBlocks.ore_coal_oil_burning || this == ModBlocks.ore_nether_coal) { + if(this == ModBlocks.ore_nether_coal) { return ModBlocks.gas_monoxide; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java index f018659c3..e3945fbad 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java +++ b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java @@ -152,7 +152,6 @@ public class BlockToolConversion extends BlockMulti implements IToolable, ILookO public static void registerRecipes() { conversions.put(new Pair(ToolType.BOLT, new MetaBlock(ModBlocks.watz_end, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.DURA.bolt(), 4)}, new MetaBlock(ModBlocks.watz_end, 1))); - conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.fusion_conductor, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast())}, new MetaBlock(ModBlocks.fusion_conductor, 1))); conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.fusion_component, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast())}, new MetaBlock(ModBlocks.fusion_component, 1))); conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.icf_component, 1)), new Pair(new AStack[] {new OreDictStack(OreDictManager.ANY_BISMOIDBRONZE.plateCast())}, new MetaBlock(ModBlocks.icf_component, 2))); conversions.put(new Pair(ToolType.BOLT, new MetaBlock(ModBlocks.icf_component, 3)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast()), new OreDictStack(OreDictManager.DURA.bolt(), 4)}, new MetaBlock(ModBlocks.icf_component, 4))); diff --git a/src/main/java/com/hbm/blocks/machine/MachineITER.java b/src/main/java/com/hbm/blocks/machine/MachineITER.java index 3a4aaba1d..02fbb5749 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineITER.java +++ b/src/main/java/com/hbm/blocks/machine/MachineITER.java @@ -18,6 +18,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +@Deprecated public class MachineITER extends BlockDummyable { public MachineITER() { diff --git a/src/main/java/com/hbm/blocks/machine/MachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/blocks/machine/MachineSchrabidiumTransmutator.java deleted file mode 100644 index 04bc79818..000000000 --- a/src/main/java/com/hbm/blocks/machine/MachineSchrabidiumTransmutator.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.hbm.blocks.machine; - -import com.hbm.blocks.ModBlocks; -import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import java.util.Random; - -public class MachineSchrabidiumTransmutator extends BlockContainer { - - private final Random field_149933_a = new Random(); - private static boolean keepInventory; - - @SideOnly(Side.CLIENT) - //private IIcon iconFront; - private IIcon iconTop; - private IIcon iconBottom; - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + (":transmutator_top")); - this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + (":transmutator_bottom")); - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":transmutator_side"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int metadata) { - return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon); - } - - public MachineSchrabidiumTransmutator(Material p_i45386_1_) { - super(p_i45386_1_); - } - - @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(ModBlocks.machine_schrabidium_transmutator); - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { - return true; - } else if(!player.isSneaking()) - { - TileEntityMachineSchrabidiumTransmutator entity = (TileEntityMachineSchrabidiumTransmutator) world.getTileEntity(x, y, z); - if(entity != null) - { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } - return true; - } else { - return false; - } - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityMachineSchrabidiumTransmutator(); - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) - { - if (!keepInventory) - { - TileEntityMachineSchrabidiumTransmutator tileentityfurnace = (TileEntityMachineSchrabidiumTransmutator)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if (tileentityfurnace != null) - { - for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) - { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if (itemstack != null) - { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while (itemstack.stackSize > 0) - { - int j1 = this.field_149933_a.nextInt(21) + 10; - - if (j1 > itemstack.stackSize) - { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if (itemstack.hasTagCompound()) - { - entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } -} diff --git a/src/main/java/com/hbm/config/GeneralConfig.java b/src/main/java/com/hbm/config/GeneralConfig.java index ef9f3dd06..bf32acb72 100644 --- a/src/main/java/com/hbm/config/GeneralConfig.java +++ b/src/main/java/com/hbm/config/GeneralConfig.java @@ -128,7 +128,7 @@ public class GeneralConfig { enable528 = CommonConfig.createConfigBool(config, CATEGORY_528, "enable528Mode", "The central toggle for 528 mode, required TRUE for most subsequent toggles to work.", false); enable528ReasimBoilers = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_forceReasimBoilers", "Keeps the RBMK dial for ReaSim boilers on, preventing use of non-ReaSim boiler columns and forcing the use of steam in-/outlets", true); - enable528ColtanDeposit = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_enableColtanDepsoit", "Enables the coltan deposit. A large amount of coltan will spawn around a single random location in the world.", true); + enable528ColtanDeposit = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_enableColtanDeposit", "Enables the coltan deposit. A large amount of coltan will spawn around a single random location in the world.", true); enable528ColtanSpawn = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_enableColtanSpawning", "Enables coltan ore as a random spawn in the world. Unlike the deposit option, coltan will not just spawn in one central location.", false); enable528BosniaSimulator = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_enableBosniaSimulator", "Enables anti tank mines spawning all over the world.", true); enable528NetherBurn = CommonConfig.createConfigBool(config, CATEGORY_528, "X528_enable528NetherBurn", "Whether players burn in the nether", true); diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 6c3e6f3b3..07500552b 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -187,7 +187,7 @@ public class ConsumableRecipes { //Special Mods CraftingManager.addRecipeAuto(new ItemStack(ModItems.horseshoe_magnet, 1), new Object[] { "L L", "I I", "ILI", 'L', ModItems.lodestone, 'I', IRON.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.hadron_coil_alloy }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_container, 1), new Object[] { "HAH", "ACA", "HAH", 'H', ModItems.heart_piece, 'A', AL.ingot(), 'C', ModItems.coin_creeper }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_booster, 1), new Object[] { "GHG", "MCM", "GHG", 'G', GOLD.ingot(), 'H', ModItems.heart_container, 'M', ModItems.morning_glory, 'C', ModItems.coin_maskman }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_fab, 1), new Object[] { "GHG", "MCM", "GHG", 'G', PO210.billet(), 'H', ModItems.heart_booster, 'M', ANY_COKE.gem(), 'C', ModItems.coin_worm }); diff --git a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java index 155c1e696..89e38718d 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java +++ b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java @@ -30,8 +30,6 @@ public class EntityMeteor extends Entity { this.ignoreFrustumCheck = true; this.isImmuneToFire = true; this.setSize(4F, 4F); - if(worldObj.isRemote) - this.audioFly = MainRegistry.proxy.getLoopedSound("hbm:entity.meteoriteFallingLoop", 0, 0, 0, 1F, 200F, 0.9F + this.rand.nextFloat() * 0.2F, 0); } public List getBlocksInRadius(World world, int x, int y, int z, int radius) { @@ -144,12 +142,14 @@ public class EntityMeteor extends Entity { if(this.audioFly != null) this.audioFly.stopSound(); } else { + + if(this.audioFly == null) this.audioFly = MainRegistry.proxy.getLoopedSound("hbm:entity.meteoriteFallingLoop", 0, 0, 0, 1F, 200F, 0.9F + this.rand.nextFloat() * 0.2F, 10); if(this.audioFly.isPlaying()) { // Update sound this.audioFly.keepAlive(); this.audioFly.updateVolume(1F); - this.audioFly.updatePosition((int) this.posX, (int) this.posY, (int) this.posZ); + this.audioFly.updatePosition((float) this.posX, (float) (this.posY + this.height / 2), (float) this.posZ); } else { // Start playing the sound EntityPlayer player = MainRegistry.proxy.me(); diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java index fa8d40dba..fd1926d2a 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java @@ -440,8 +440,6 @@ public class ExplosionNukeGeneric { if(random.nextInt(5) <= 1) world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); } - if((b == ModBlocks.fusion_conductor || b == ModBlocks.fusion_motor || b == ModBlocks.fusion_heater) && random.nextInt(10) == 0) - world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); } } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index cb9ceba78..d579b6d56 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -259,11 +259,6 @@ public class OreDictManager { * RARE METALS */ public static final DictFrame AUSTRALIUM = new DictFrame("Australium"); - public static final DictFrame REIIUM = new DictFrame("Reiium"); - public static final DictFrame WEIDANIUM = new DictFrame("Weidanium"); - public static final DictFrame UNOBTAINIUM = new DictFrame("Unobtainium"); - public static final DictFrame VERTICIUM = new DictFrame("Verticium"); - public static final DictFrame DAFFERGON = new DictFrame("Daffergon"); /* * RARE EARTHS */ @@ -466,11 +461,6 @@ public class OreDictManager { * RARE METALS */ AUSTRALIUM .nugget(nugget_australium) .billet(billet_australium) .ingot(ingot_australium) .dust(powder_australium) .block(block_australium) .ore(ore_australium); - REIIUM .block(block_reiium); - WEIDANIUM .block(block_weidanium); - UNOBTAINIUM .block(block_unobtainium); - VERTICIUM .block(block_verticium); - DAFFERGON .block(block_daffergon); /* * RARE EARTHS diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/inventory/container/ContainerMachineSchrabidiumTransmutator.java deleted file mode 100644 index 1d93a0b8c..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineSchrabidiumTransmutator.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.inventory.SlotCraftingOutput; -import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerMachineSchrabidiumTransmutator extends Container { - -private TileEntityMachineSchrabidiumTransmutator nukeBoy; - - public ContainerMachineSchrabidiumTransmutator(InventoryPlayer invPlayer, TileEntityMachineSchrabidiumTransmutator tedf) { - - nukeBoy = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 44, 63)); - this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 1, 134, 63)); - this.addSlotToContainer(new Slot(tedf, 2, 26, 18)); - this.addSlotToContainer(new Slot(tedf, 3, 8, 108)); - - for(int i = 0; i < 3; i++) - { - for(int j = 0; j < 9; j++) - { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 56)); - } - } - - for(int i = 0; i < 9; i++) - { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { - ItemStack var3 = null; - Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { - ItemStack var5 = var4.getStack(); - var3 = var5.copy(); - - if (par2 <= 3) { - if (!this.mergeItemStack(var5, 4, this.inventorySlots.size(), true)) - { - return null; - } - } - else if (!this.mergeItemStack(var5, 0, 1, false)) - { - if (!this.mergeItemStack(var5, 3, 4, false)) - if (!this.mergeItemStack(var5, 2, 3, false)) - return null; - } - - if (var5.stackSize == 0) - { - var4.putStack((ItemStack) null); - } - else - { - var4.onSlotChanged(); - } - } - - return var3; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return nukeBoy.isUseableByPlayer(player); - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 1) - { - nukeBoy.power = j; - } - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/inventory/gui/GUIMachineSchrabidiumTransmutator.java deleted file mode 100644 index aa5c186c0..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineSchrabidiumTransmutator.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerMachineSchrabidiumTransmutator; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUIMachineSchrabidiumTransmutator extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_transmutator.png"); - private TileEntityMachineSchrabidiumTransmutator diFurnace; - - public GUIMachineSchrabidiumTransmutator(InventoryPlayer invPlayer, TileEntityMachineSchrabidiumTransmutator tedf) { - super(new ContainerMachineSchrabidiumTransmutator(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 222; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 106 - 88, 16, 88, diFurnace.power, diFurnace.maxPower); - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format(String.valueOf(diFurnace.getPower()) + " HE"), this.xSize / 2 - this.fontRendererObj.getStringWidth(String.valueOf(diFurnace.getPower()) + " HE") / 2, 16, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - if(diFurnace.getPower() > 0) { - int i = (int)diFurnace.getPowerScaled(88); - drawTexturedModalRect(guiLeft + 8, guiTop + 106 - i, 176, 88 - i, 16, i); - } - - if(diFurnace.isProcessing()) - { - int j1 = diFurnace.getProgressScaled(66); - drawTexturedModalRect(guiLeft + 64, guiTop + 55, 176, 88, j1, 66); - } - } -} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 99f5fec56..c6a7bf0cf 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -135,11 +135,6 @@ import net.minecraft.item.ItemStack; makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 8) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 10) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())}, 600); makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300); - makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), !exp ? new OreDictStack(TI.ingot(), 24) : new OreDictStack(TI.heavyComp(), 2), !exp ? new OreDictStack(ALLOY.plate(), 18) : new OreDictStack(ALLOY.heavyComp(), 1), new OreDictStack(STEEL.plateWelded(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED.ordinal()), },500); - makeRecipe(new ComparableStack(ModBlocks.fusion_conductor, 1), new AStack[] {new ComparableStack(ModItems.coil_advanced_alloy, 5), }, 100); - makeRecipe(new ComparableStack(ModBlocks.fusion_center, 1), new AStack[] {new OreDictStack(ANY_HARDPLASTIC.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new OreDictStack(ALLOY.wireFine(), 24), },200); - makeRecipe(new ComparableStack(ModBlocks.fusion_motor, 1), new AStack[] {new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4), },250); - makeRecipe(new ComparableStack(ModBlocks.fusion_heater, 4), new AStack[] {new OreDictStack(W.plateWelded(), 2), new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new ComparableStack(ModItems.magnetron, 2) }, 200); makeRecipe(new ComparableStack(ModBlocks.watz_element, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)},200); makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2), }, 200); makeRecipe(new ComparableStack(ModBlocks.watz_end, 3), new AStack[] {new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2), }, 100); @@ -193,55 +188,6 @@ import net.minecraft.item.ItemStack; makeRecipe(new ComparableStack(ModBlocks.machine_radar, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(ANY_RUBBER.ingot(), 8), new ComparableStack(ModItems.magnetron, 3), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.coil_copper, 12), new ComparableStack(ModItems.crt_display, 4), },300); makeRecipe(new ComparableStack(ModBlocks.machine_radar_large, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 6), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 16), new OreDictStack(ANY_RUBBER.ingot(), 16), new ComparableStack(ModItems.magnetron, 12), new ComparableStack(ModItems.motor_desh, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.coil_copper, 32), new ComparableStack(ModItems.crt_display, 4), },600); makeRecipe(new ComparableStack(ModBlocks.machine_forcefield, 1), new AStack[] {new OreDictStack(ALLOY.plate(), 8), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.coil_gold_torus, 6), new ComparableStack(ModItems.coil_magnetized_tungsten, 12), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.upgrade_radius, 1), new ComparableStack(ModItems.upgrade_health, 1), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), new ComparableStack(ModBlocks.machine_transformer, 1), },1000); - makeRecipe(new ComparableStack(ModItems.mp_thruster_10_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 4), },100); - makeRecipe(new ComparableStack(ModItems.mp_thruster_10_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.coil_tungsten, 1), new OreDictStack(DURA.ingot(), 4), new OreDictStack(STEEL.plate(), 4), },100); - makeRecipe(new ComparableStack(ModItems.mp_thruster_10_xenon, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 4), new OreDictStack(STEEL.pipe(), 12), new ComparableStack(ModItems.arc_electrode, 4), },100); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DESH.ingot(), 4), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_kerosene_dual, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DESH.ingot(), 1), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_kerosene_triple, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 6), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DESH.ingot(), 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DURA.ingot(), 6), new ComparableStack(ModItems.coil_tungsten, 3), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_solid_hexdecuple, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DURA.ingot(), 12), new ComparableStack(ModItems.coil_tungsten, 6), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_hydrogen, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(DESH.ingot(), 4), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_hydrogen_dual, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.tank_steel, 1), new OreDictStack(DESH.ingot(), 1), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_short, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModBlocks.pwr_fuel, 1), new OreDictStack(DESH.ingot(), 8), new OreDictStack(BIGMT.plate(), 12), new OreDictStack(CU.plateCast(), 2), new ComparableStack(ModItems.ingot_uranium_fuel, 4), new ComparableStack(ModItems.pipes_steel, 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.pwr_fuel, 2), new OreDictStack(DESH.ingot(), 16), new OreDictStack(BIGMT.plate(), 24), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_15_balefire_large, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModBlocks.pwr_fuel, 2), new OreDictStack(DESH.ingot(), 24), new OreDictStack(BIGMT.plate(), 32), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.ingot_uranium_fuel, 8), new ComparableStack(ModItems.pipes_steel, 2), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 16), new OreDictStack(STEEL.plate(), 12), new OreDictStack(DESH.ingot(), 8), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene_dual, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 8), new OreDictStack(STEEL.plate(), 6), new OreDictStack(DESH.ingot(), 4), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_kerosene_triple, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new OreDictStack(STEEL.pipe(), 1), new OreDictStack(W.ingot(), 12), new OreDictStack(STEEL.plate(), 8), new OreDictStack(DESH.ingot(), 6), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModItems.coil_tungsten, 8), new OreDictStack(DURA.ingot(), 16), new OreDictStack(STEEL.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_solid_multi, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModItems.coil_tungsten, 12), new OreDictStack(DURA.ingot(), 18), new OreDictStack(STEEL.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_thruster_20_solid_multier, 1), new AStack[] {new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModItems.coil_tungsten, 16), new OreDictStack(DURA.ingot(), 20), new OreDictStack(STEEL.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 2), new ComparableStack(ModBlocks.steel_scaffold, 3), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 3), },100); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 2), new ComparableStack(ModBlocks.steel_scaffold, 3), new OreDictStack(TI.plate(), 12), new OreDictStack(AL.plate(), 3), },100); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_xenon, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 2), new ComparableStack(ModBlocks.steel_scaffold, 3), new OreDictStack(TI.plate(), 12), new OreDictStack(CU.plateCast(), 3), },100); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_long_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 2), new ComparableStack(ModBlocks.steel_scaffold, 6), new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 6), },200); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_long_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 2), new ComparableStack(ModBlocks.steel_scaffold, 6), new OreDictStack(TI.plate(), 24), new OreDictStack(AL.plate(), 6), },200); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_15_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.steel_scaffold, 9), new OreDictStack(TI.plate(), 36), new OreDictStack(STEEL.plate(), 9), },300); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_15_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.steel_scaffold, 9), new OreDictStack(TI.plate(), 36), new OreDictStack(AL.plate(), 9), },300); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_15_hydrogen, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.steel_scaffold, 9), new OreDictStack(TI.plate(), 36), new OreDictStack(IRON.plate(), 9), },300); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.steel_scaffold, 9), new OreDictStack(TI.plate(), 36), new OreDictStack(BIGMT.plate(), 9), },300); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_15_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 2), new ComparableStack(ModBlocks.steel_scaffold, 12), new OreDictStack(TI.plate(), 48), new OreDictStack(STEEL.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_15_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 2), new ComparableStack(ModBlocks.steel_scaffold, 12), new OreDictStack(TI.plate(), 48), new OreDictStack(AL.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_15_hydrogen, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 2), new ComparableStack(ModBlocks.steel_scaffold, 12), new OreDictStack(TI.plate(), 48), new OreDictStack(IRON.plate(), 12), },500); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_10_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModBlocks.steel_scaffold, 9), new OreDictStack(TI.plate(), 36), new OreDictStack(BIGMT.plate(), 9), },500); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_15_20_kerosene, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(TI.plate(), 64), new OreDictStack(STEEL.plate(), 16), },600); - makeRecipe(new ComparableStack(ModItems.mp_fuselage_15_20_solid, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new ComparableStack(ModItems.seg_20, 1), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(TI.plate(), 64), new OreDictStack(AL.plate(), 16), },600); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_he, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), },100); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_incendiary, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(TI.plate(), 4), new OreDictStack(P_RED.dust(), 3), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), },100); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_buster, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(TI.plate(), 4), new ComparableStack(ModBlocks.det_charge, 1), new ComparableStack(ModBlocks.det_cord, 4), new OreDictStack(CU.plateCast(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), },100); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 6), new OreDictStack(PU239.ingot(), 1), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), },200); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_nuclear_large, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(AL.plate(), 4), new OreDictStack(PU239.ingot(), 2), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit,3, EnumCircuitType.ADVANCED), },300); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_taint, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.powder_magic, 12), new ComparableStack(ModItems.bucket_mud, 1), },100); - makeRecipe(new ComparableStack(ModItems.mp_warhead_10_cloud, 1), new AStack[] {new ComparableStack(ModItems.seg_10, 1), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.det_cord, 2), new ComparableStack(ModItems.grenade_pink_cloud, 2), },100); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_he, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_incendiary, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_charge, 2), new OreDictStack(P_RED.dust(), 8), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC), },200); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_nuclear, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 24), new OreDictStack(TI.plate(), 12), new OreDictStack(PU239.ingot(), 3), new ComparableStack(ModBlocks.det_charge, 6), new ComparableStack(ModItems.circuit, 5, EnumCircuitType.ADVANCED), },500); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_n2, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(STEEL.plate(), 8), new OreDictStack(TI.plate(), 20), new ComparableStack(ModBlocks.det_charge, 24), new ComparableStack(Blocks.redstone_block, 12), new OreDictStack(MAGTUNG.dust(), 6), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED), },400); - makeRecipe(new ComparableStack(ModItems.mp_warhead_15_balefire, 1), new AStack[] {new ComparableStack(ModItems.seg_15, 1), new OreDictStack(OreDictManager.getReflector(), 16), new ComparableStack(ModItems.powder_magic, 6), new ComparableStack(ModItems.egg_balefire_shard, 4), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), }, 60); - makeRecipe(new ComparableStack(ModItems.fusion_shield_tungsten, 1), new AStack[] {new OreDictStack(W.block(), 32), new OreDictStack(OreDictManager.getReflector(), 96)}, 600); - makeRecipe(new ComparableStack(ModItems.fusion_shield_desh, 1), new AStack[] {new OreDictStack(DESH.block(), 16), new OreDictStack(CO.block(), 16), new OreDictStack(BIGMT.plate(), 96)}, 600); - makeRecipe(new ComparableStack(ModItems.fusion_shield_chlorophyte, 1), new AStack[] {new OreDictStack(W.block(), 16), new OreDictStack(DURA.block(), 16), new OreDictStack(OreDictManager.getReflector(), 48), new ComparableStack(ModItems.powder_chlorophyte, 48)}, 600); makeRecipe(new ComparableStack(ModItems.missile_soyuz, 1), new AStack[] { new OreDictStack(TI.shell(), 32), diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 7ace5cd11..d399ba1bd 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -535,9 +535,6 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ZR.plateWelded(), 1), new ComparableStack(ModItems.billet_ra226be, 3))); // fusion reactor - this.register(new GenericRecipe("ass.fusionconductor").setup(100, 100).outputItems(new ItemStack(ModBlocks.fusion_conductor, 1)) - .inputItems(new ComparableStack(ModItems.coil_advanced_alloy, 5))); - this.register(new GenericRecipe("ass.fusioncore").setup(600, 100).outputItems(new ItemStack(ModBlocks.struct_torus_core, 1)) .inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(ANY_HARDPLASTIC.ingot(), 32), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BISMOID)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.PLASTIC), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID)) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index a59094921..706fe43b1 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -224,8 +224,8 @@ public class ItemPoolsLegacy { weighted(ModItems.cell_antimatter, 0, 1, 1, 1), weighted(ModItems.powder_neodymium, 0, 1, 1, 1), weighted(ModItems.powder_niobium, 0, 1, 1, 1), - weighted(ModBlocks.fusion_conductor, 0, 2, 4, 5), - weighted(ModBlocks.fusion_heater, 0, 1, 3, 5), + weighted(ModItems.wire_dense, Mats.MAT_ALLOY.id, 2, 4, 5), + weighted(ModItems.wire_dense, Mats.MAT_GOLD.id, 1, 3, 5), weighted(ModBlocks.pwr_fuel, 0, 1, 2, 5), weighted(ModBlocks.block_tungsten, 0, 3, 8, 5), weighted(ModBlocks.red_wire_coated, 0, 4, 8, 5), diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index d45980a8b..4146f92a5 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -766,7 +766,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser }); addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModBlocks.block_dineutronium, 'L', STEEL.shell() }); addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', STEEL.pipe() }); - addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModBlocks.fusion_conductor, 'L', ModItems.crystal_xen }); + addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateWelded(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModBlocks.hadron_coil_alloy, 'L', ModItems.crystal_xen }); addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_steel, 1), new Object[] { "IPI", "I I", "IPI", 'I', STEEL.plate(), 'P', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.barrel_tcalloy, 1), new Object[] { "IPI", "I I", "IPI", 'I', "ingotTcAlloy", 'P', TI.plate() }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 8db6b3c17..7080fc9d2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1457,6 +1457,17 @@ public class MainRegistry { ignoreMappings.add("hbm:tile.struct_plasma_core"); ignoreMappings.add("hbm:tile.machine_amgen"); ignoreMappings.add("hbm:tile.machine_geo"); + ignoreMappings.add("hbm:tile.ore_coal_oil"); + ignoreMappings.add("hbm:tile.ore_coal_oil_burning"); + ignoreMappings.add("hbm:tile.block_weidanium"); + ignoreMappings.add("hbm:tile.block_reiium"); + ignoreMappings.add("hbm:tile.block_unobtainium"); + ignoreMappings.add("hbm:tile.block_daffergon"); + ignoreMappings.add("hbm:tile.block_verticium"); + ignoreMappings.add("hbm:tile.machine_schrabidium_transmutator"); + ignoreMappings.add("hbm:tile.fusion_conductor"); + ignoreMappings.add("hbm:tile.fusion_center"); + ignoreMappings.add("hbm:tile.fusion_motor"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index fe38832fb..dda9eba44 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -95,7 +95,6 @@ public class TileMappings { put(TileEntityCrashedBomb.class, "tileentity_crashed_balefire"); put(TileEntityConverterHeRf.class, "tileentity_converter_herf"); put(TileEntityConverterRfHe.class, "tileentity_converter_rfhe"); - put(TileEntityMachineSchrabidiumTransmutator.class, "tileentity_schrabidium_transmutator"); put(TileEntityMachineDiesel.class, "tileentity_diesel_generator"); put(TileEntityMachineShredder.class, "tileentity_machine_shredder"); put(TileEntityMachineTeleporter.class, "tileentity_teleblock"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 18a936742..84f5e2253 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -6,7 +6,6 @@ import java.util.List; import com.hbm.explosion.ExplosionLarge; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; -import com.hbm.handler.CompatHandler; import com.hbm.handler.threading.PacketThreading; import com.hbm.inventory.container.ContainerITER; import com.hbm.inventory.fluid.FluidType; @@ -33,15 +32,10 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IInfoProviderEC; -import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import li.cil.oc.api.machine.Arguments; -import li.cil.oc.api.machine.Callback; -import li.cil.oc.api.machine.Context; -import li.cil.oc.api.network.SimpleComponent; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -51,8 +45,8 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable, IRORValueProvider, IRORInteractive { +@Deprecated +public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, IFluidCopiable, IRORValueProvider, IRORInteractive { public long power; public static final long maxPower = 10000000; @@ -522,100 +516,6 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece data.setDouble("outputmb", output); } - - @Override - @Optional.Method(modid = "OpenComputers") - public String getComponentName() { - return "ntm_fusion"; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] getEnergyInfo(Context context, Arguments args) { - return new Object[] {getPower(), getMaxPower()}; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] isActive(Context context, Arguments args) { - return new Object[] {isOn}; - } - - @Callback(direct = true, limit = 4) - @Optional.Method(modid = "OpenComputers") - public Object[] setActive(Context context, Arguments args) { - isOn = args.checkBoolean(0); - return new Object[] {}; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] getFluid(Context context, Arguments args) { - return new Object[] { - tanks[0].getFill(), tanks[0].getMaxFill(), - tanks[1].getFill(), tanks[1].getMaxFill(), - plasma.getFill(), plasma.getMaxFill(), plasma.getTankType().getUnlocalizedName() - }; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] getPlasmaTemp(Context context, Arguments args) { - return new Object[] {plasma.getTankType().temperature}; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] getMaxTemp(Context context, Arguments args) { - if (slots[3] != null && (slots[3].getItem() instanceof ItemFusionShield)) - return new Object[] {((ItemFusionShield) slots[3].getItem()).maxTemp}; - return new Object[] {"N/A"}; - } - - @Callback(direct = true) - @Optional.Method(modid = "OpenComputers") - public Object[] getBlanketDamage(Context context, Arguments args) { - if (slots[3] != null && (slots[3].getItem() instanceof ItemFusionShield)) - return new Object[]{ItemFusionShield.getShieldDamage(slots[3]), ((ItemFusionShield)slots[3].getItem()).maxDamage}; - return new Object[] {"N/A", "N/A"}; - } - - @Override - @Optional.Method(modid = "OpenComputers") - public String[] methods() { - return new String[] { - "getEnergyInfo", - "isActive", - "setActive", - "getFluid", - "getPlasmaTemp", - "getMaxTemp", - "getBlanketDamage" - }; - } - - @Override - @Optional.Method(modid = "OpenComputers") - public Object[] invoke(String method, Context context, Arguments args) throws Exception { - switch (method) { - case ("getEnergyInfo"): - return getEnergyInfo(context, args); - case ("isActive"): - return isActive(context, args); - case ("setActive"): - return setActive(context, args); - case ("getFluid"): - return getFluid(context, args); - case ("getPlasmaTemp"): - return getPlasmaTemp(context, args); - case ("getMaxTemp"): - return getMaxTemp(context, args); - case ("getBlanketDamage"): - return getBlanketDamage(context, args); - } - throw new NoSuchMethodException(); - } - @Override public FluidTank getTankToPaste() { return null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITERStruct.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITERStruct.java index 901cc4195..9126601be 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITERStruct.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITERStruct.java @@ -1,17 +1,7 @@ package com.hbm.tileentity.machine; -import com.hbm.blocks.BlockDummyable; -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.machine.MachineITER; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraftforge.common.util.ForgeDirection; - -public class TileEntityITERStruct extends TileEntity { +@Deprecated +public class TileEntityITERStruct { public static final int[][][] layout = new int[][][] { @@ -122,66 +112,4 @@ public class TileEntityITERStruct extends TileEntity { new int[] {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0} } }; - - int age; - - @Override - public void updateEntity() { - - if(worldObj.isRemote) - return; - - age++; - - if(age < 20) - return; - - age = 0; - - for(int y = 0; y < 5; y++) { - for(int x = 0; x < layout[0].length; x++) { - for(int z = 0; z < layout[0][0].length; z++) { - - int ly = y > 2 ? 4 - y : y; - - int width = 7; - - if(x == width && y == 0 && z == width) - continue; - - int b = layout[ly][x][z]; - Block block = worldObj.getBlock(xCoord + x - width, yCoord + y, zCoord + z - width); - int meta = worldObj.getBlockMetadata(xCoord + x - width, yCoord + y, zCoord + z - width); - - switch(b) { - case 1: if(block != ModBlocks.fusion_conductor || meta != 1) { return; } break; - case 2: if(block != ModBlocks.fusion_center) { return; } break; - case 3: if(block != ModBlocks.fusion_motor) { return; } break; - case 4: if(block != ModBlocks.reinforced_glass) { return; } break; - } - } - } - } - - for(int x = -2; x <= 2; x++) - for(int y = 1; y <= 3; y++) - for(int z = -2; z <= 2; z++) - worldObj.setBlockToAir(xCoord + x, yCoord + y, zCoord + z); - - BlockDummyable.safeRem = true; - worldObj.setBlock(xCoord, yCoord + 2, zCoord, ModBlocks.iter, 12, 3); - ((MachineITER)ModBlocks.iter).fillSpace(worldObj, xCoord, yCoord, zCoord, ForgeDirection.UNKNOWN, 0); - BlockDummyable.safeRem = false; - } - - @Override - public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; - } - - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { - return 65536.0D; - } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java deleted file mode 100644 index 206645805..000000000 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ /dev/null @@ -1,264 +0,0 @@ -package com.hbm.tileentity.machine; - -import com.hbm.config.VersatileConfig; -import com.hbm.inventory.OreDictManager; -import com.hbm.inventory.container.ContainerMachineSchrabidiumTransmutator; -import com.hbm.inventory.gui.GUIMachineSchrabidiumTransmutator; -import com.hbm.inventory.recipes.MachineRecipes; -import com.hbm.items.ModItems; -import com.hbm.lib.Library; -import com.hbm.main.MainRegistry; -import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - -import api.hbm.energymk2.IBatteryItem; -import api.hbm.energymk2.IEnergyReceiverMK2; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider { - - public long power = 0; - public int process = 0; - public static final long maxPower = 5000000; - public static final int processSpeed = 6000; - - private AudioWrapper audio; - - private static final int[] slots_io = new int[] { 0, 1, 2, 3 }; - - public TileEntityMachineSchrabidiumTransmutator() { - super(4); - } - - @Override - public String getName() { - return "container.machine_schrabidium_transmutator"; - } - - @Override - public boolean isItemValidForSlot(int i, ItemStack stack) { - switch (i) { - case 0: - if (MachineRecipes.mODE(stack, OreDictManager.U.ingot())) - return true; - break; - case 2: - if (stack.getItem() == ModItems.redcoil_capacitor || stack.getItem() == ModItems.euphemium_capacitor) - return true; - break; - case 3: - if (stack.getItem() instanceof IBatteryItem) - return true; - break; - } - return false; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - - power = nbt.getLong("power"); - process = nbt.getInteger("process"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setLong("power", power); - nbt.setInteger("process", process); - } - - @Override - public int[] getAccessibleSlotsFromSide(int p_94128_1_) { - return slots_io; - } - - @Override - public boolean canExtractItem(int i, ItemStack stack, int j) { - - if(stack.getItem() == ModItems.euphemium_capacitor) return false; - - if(i == 2 && stack.getItem() != null && (stack.getItem() == ModItems.redcoil_capacitor && stack.getItemDamage() == stack.getMaxDamage())) { - return true; - } - - if(i == 1) { - return true; - } - - if(i == 3) { - if(stack.getItem() instanceof IBatteryItem && ((IBatteryItem) stack.getItem()).getCharge(stack) == 0) - return true; - } - - return false; - } - - public long getPowerScaled(long i) { - return (power * i) / maxPower; - } - - public int getProgressScaled(int i) { - return (process * i) / processSpeed; - } - - public boolean canProcess() { - if (power >= 4990000 && slots[0] != null && MachineRecipes.mODE(slots[0], OreDictManager.U.ingot()) && slots[2] != null - && (slots[2].getItem() == ModItems.redcoil_capacitor && slots[2].getItemDamage() < slots[2].getMaxDamage() || slots[2].getItem() == ModItems.euphemium_capacitor) - && (slots[1] == null || (slots[1] != null && slots[1].getItem() == VersatileConfig.getTransmutatorItem() - && slots[1].stackSize < slots[1].getMaxStackSize()))) { - return true; - } - return false; - } - - public boolean isProcessing() { - return process > 0; - } - - public void process() { - process++; - - if (process >= processSpeed) { - - power = 0; - process = 0; - - slots[0].stackSize--; - if (slots[0].stackSize <= 0) { - slots[0] = null; - } - - if (slots[1] == null) { - slots[1] = new ItemStack(VersatileConfig.getTransmutatorItem()); - } else { - slots[1].stackSize++; - } - if (slots[2] != null && slots[2].getItem() == ModItems.redcoil_capacitor) { - slots[2].setItemDamage(slots[2].getItemDamage() + 1); - } - - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "ambient.weather.thunder", 10000.0F, - 0.8F + this.worldObj.rand.nextFloat() * 0.2F); - } - } - - @Override - public void updateEntity() { - - if (!worldObj.isRemote) { - - this.updateConnections(); - - power = Library.chargeTEFromItems(slots, 3, power, maxPower); - - if(canProcess()) { - process(); - } else { - process = 0; - } - - this.networkPackNT(50); - - } else { - - if(process > 0) { - - if(audio == null) { - audio = createAudioLoop(); - audio.startSound(); - } else if(!audio.isPlaying()) { - audio = rebootAudio(audio); - } - audio.updateVolume(getVolume(1F)); - } else { - - if(audio != null) { - audio.stopSound(); - audio = null; - } - } - } - } - - @Override - public void serialize(ByteBuf buf) { - super.serialize(buf); - buf.writeLong(this.power); - buf.writeInt(this.process); - } - - @Override - public void deserialize(ByteBuf buf) { - super.deserialize(buf); - this.power = buf.readLong(); - this.process = buf.readInt(); - } - - @Override - public AudioWrapper createAudioLoop() { - return MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F); - } - - private void updateConnections() { - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - } - - @Override - public void onChunkUnload() { - - if(audio != null) { - audio.stopSound(); - audio = null; - } - } - - @Override - public void invalidate() { - - super.invalidate(); - - if(audio != null) { - audio.stopSound(); - audio = null; - } - } - - @Override - public void setPower(long i) { - power = i; - } - - @Override - public long getPower() { - return power; - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerMachineSchrabidiumTransmutator(player.inventory, this); - } - - @Override - @SideOnly(Side.CLIENT) - public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIMachineSchrabidiumTransmutator(player.inventory, this); - } -} diff --git a/src/main/java/com/hbm/world/dungeon/Spaceship.java b/src/main/java/com/hbm/world/dungeon/Spaceship.java index 4ab3bba36..c07dbc600 100644 --- a/src/main/java/com/hbm/world/dungeon/Spaceship.java +++ b/src/main/java/com/hbm/world/dungeon/Spaceship.java @@ -496,10 +496,10 @@ public class Spaceship extends WorldGenerator world.setBlock(x + 2, y + -2, z + 27, Blocks.air, 0, 3); world.setBlock(x + 3, y + -2, z + 27, Block3, 0, 3); world.setBlock(x + 4, y + -2, z + 27, Block3, 0, 3); - world.setBlock(x + 5, y + -2, z + 27, ModBlocks.fusion_conductor); + world.setBlock(x + 5, y + -2, z + 27, ModBlocks.hadron_coil_alloy); world.setBlock(x + 6, y + -2, z + 27, Blocks.air, 0, 3); world.setBlock(x + 7, y + -2, z + 27, Blocks.air, 0, 3); - world.setBlock(x + 8, y + -2, z + 27, ModBlocks.fusion_conductor); + world.setBlock(x + 8, y + -2, z + 27, ModBlocks.hadron_coil_alloy); world.setBlock(x + 9, y + -2, z + 27, Block3, 0, 3); world.setBlock(x + 10, y + -2, z + 27, Block3, 0, 3); world.setBlock(x + 11, y + -2, z + 27, Blocks.air, 0, 3); diff --git a/src/main/java/com/hbm/world/dungeon/Spaceship2.java b/src/main/java/com/hbm/world/dungeon/Spaceship2.java index d94cb01ae..9ca224e60 100644 --- a/src/main/java/com/hbm/world/dungeon/Spaceship2.java +++ b/src/main/java/com/hbm/world/dungeon/Spaceship2.java @@ -14,7 +14,7 @@ import net.minecraft.world.World; public class Spaceship2 { Block Block1 = ModBlocks.deco_tungsten; - Block Block2 = ModBlocks.fusion_conductor; + Block Block2 = ModBlocks.hadron_coil_alloy; Block Block3 = ModBlocks.deco_steel; Block Block4 = ModBlocks.fusion_heater; Block Block5 = ModBlocks.block_meteor; diff --git a/src/main/java/com/hbm/world/gen/component/SiloComponent.java b/src/main/java/com/hbm/world/gen/component/SiloComponent.java index bfee7327c..b7787dc48 100644 --- a/src/main/java/com/hbm/world/gen/component/SiloComponent.java +++ b/src/main/java/com/hbm/world/gen/component/SiloComponent.java @@ -412,7 +412,7 @@ public class SiloComponent extends Component { placeBlockAtCurrentPosition(world, Blocks.heavy_weighted_pressure_plate, 0, 34, 22, 18, box); placeBlockAtCurrentPosition(world, ModBlocks.capacitor_copper, decoE, 36, 21, 16, box); placeBlockAtCurrentPosition(world, ModBlocks.deco_steel, 0, 36, 21, 17, box); - placeBlockAtCurrentPosition(world, ModBlocks.fusion_conductor, 0, 36, 21, 19, box); + placeBlockAtCurrentPosition(world, ModBlocks.hadron_coil_alloy, 0, 36, 21, 19, box); fillWithMetadataBlocks(world, box, 36, 22, 16, 36, 23, 16, ModBlocks.tape_recorder, decoE); placeBlockAtCurrentPosition(world, ModBlocks.deco_computer, decoModelW, 36, 22, 17, box); fillWithMetadataBlocks(world, box, 36, 21, 18, 36, 23, 18, ModBlocks.tape_recorder, decoE); diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_center_side_alt.png b/src/main/resources/assets/hbm/textures/blocks/fusion_center_side_alt.png deleted file mode 100644 index 677b7bc2f3adb49729e295c3b49dc52124c5cdaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfgtl-#`s)@?SZ(_WX1|+o;P|-bqkhD{{E3X%MWNagQu&X%Q~loCIC?uFUbG^ diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_center_top_alt.png b/src/main/resources/assets/hbm/textures/blocks/fusion_center_top_alt.png deleted file mode 100644 index e96673aa022540d0f439caae25b51d9fe4171540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agBqP)&E6^ zTvBVjg_4l=*%_U`F#EZHr&vhT%Khw%P7IB`mMnBVzD5Ekjm-%p6PVT z`~Cj9r>YENjETKz8UR8FhzQ<$27>{Q$Ab_8lgR{t>-C!YBHZtHM1-oU z063q|pV?Ti*P64cDy!9szVB1_4SYJC{y&N3)9iLTy!VO4d(ZKBq`Vtr{PZB7$b2Ts zzSx|6Dae~>2W{Kpy~lgc;c%cN`kKTXoG01u_c-Tp&Lxoj8MCfrE`OW>%Tg@%2c=D4 Ugu@zUKmY&$07*qoM6N<$g3d$B%>V!Z diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_conductor_side.png b/src/main/resources/assets/hbm/textures/blocks/fusion_conductor_side.png deleted file mode 100644 index 82452e86d314c8ce1aac16694daa05cdcfc5848f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfAq2el-=nI85OB_+s)z`;+l@F)6CzT8loBbWLZ+%ErfI@ChjWgU5+d?Z zpsD~EnHA)mNhy(YE@8O{FdX^>$NsbL)*5DdOEh!~J2n8R< z@#BGYj4_r~&EM8D=q|r>+TvC2BX5@!f_FhxyG&2s&SVlO{)Au zDbu(}5k$JA5Ox)j!q^T%BoS&P7eZkB?)JycrMT=xjuXhh6ua==%=;MiE~eT(>JlX} z=chwDZOzuf&VRkXyd9$VPg1^r9J87)==D=>GvQzLr+E9Qi(bta?4P78N3{vSY&3Z! zK0h4-5G66+2DLa!V$}Ptu7d0E=}R^@H_=*CRaMg>f^!aI440Reytw($L~7k;!fZ5Q z#)K!&Ua?#*QA**x$2mt?mU!M>h;rR#g^76r4SLUwd8q@ za}Mu4d7e`g1>XCH1wbq0-c7rF6(P@aj4|Bb-(!rydyn@XYc0kYoOA3QA2w`S>%hwA zB}Gw?Wf@tPVXZ|(@ZL9ORaG@Wfto?6kkuH|h((05ESnY)I&J;iATR*<^ozFl{((5e z5UGcS{6KvNtNDV9!C8|vm^kOK)?%$~463T)YB(lJVxlCj8H5-?6efo0B7#y1tuGVN_a7X}3DK<7X*gHOCHD53rO;A5xr&W0D9UnH% zyJ?rOU9X=$`VS_0T^w#=9c-uoE=ppy4tBU0oDn54dR@HE<8RezYtB!H4@`anT}`WU T;#UwL00000NkvXXu0mjfWMTx% diff --git a/src/main/resources/assets/hbm/textures/blocks/fusion_conductor_top_welded.png b/src/main/resources/assets/hbm/textures/blocks/fusion_conductor_top_welded.png deleted file mode 100644 index 8257cb294feb5a5e25bc7b9ea778ce00b0f955bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmV;#0z3VQP)8@Ee`dhp`O6mUknirdo zKFR+(NcrvS9}tn1f*2zY`#sXHe&WIR52&o=U5q5(K4%#t=c?4-)qHS{SMT4myE#Kd zP*pmOoXOyb&%XJYySqD#F@z9k)P)eJs){_%nNFvi|9y!(`H~nT9T6eM$f8g>)?$o7 zRq@_amL+vv6GEUYORB0Ogg|#~HSieYY6hyxrMqU?+uI{eQ*2q5q-o02XFXK4^?bj$v7xE}e6jh6!^1!>I&FG4k{Szh^M=XlfT5m>I zEDGi6vmTSd$NXe)Mg8OE!MaCGiETc0V4#~2t q1>A=iV>mfEVLqR?#ZB1%ul7Gl4I&x}zjOTn0000W!AO+Vgf{^SjFkG1gIzUcp#5Ham(nAbtkw7PCi zdA6C7QQ01vic49Pm;@a|FGfkvkUYb)xBSb!hwlo?TXJvbeYSb*wf3v(s;($)50|!E zEA!G8KMV~Ey|8QD2}|YYJwc~dxB~U2$$b?~V|)ACF3);HV?+pnQfe#~W4t8LT4Ri1KA+Px4aOLhQiKrr`T4;)M@k7H1R(@cN+*Jp z5=BukpU+t?m)zdojtZod&F%Q10K zR+c5x=@fvj>+s%_b4G>`kWzAeea&n(qbLeeN+W>Lvk-#GWI|b%^*5zb{5R+`(|E uLllFQzY#*<^Yas}^~Grq^B)dM2*DrZop3VAItWYv00009A25QRUFcWnc`Yw9R2LfX6o4?{=l@IJglItm&@?JiQ3 zNE8sm{@#MS8<6fjjYl&&XT~#Ui^XCQ0i1IT!+?lT*EQB!LI{*)2|!g zN^v|MQQmvLzrP6~;Jv3P3Y1cW5Qs5SmL)MpilWFl5uqpw02Dxs5o;|F9GPf4(A*pgzL1X%G?i`#szFDwEr` zrSE(CzNc;5EV7-i*zI-zG);qe@9(;&&Yz#3v~8Q?G)Y3bj#z8?AI9S`KR-YJti>3w z*U(zu?Z6n5$L{+cAjifS(7z(ydn5&qkB>a9m%Qm0j4^ra^b5uq-tf=tB@+P*!;npq2ni{FKA)+o zip%8!fNGistu^VK=>c_Jmxa?e8R&dIqxE&0>f_^s!{Gp2JunOdqtWQP@!M^S08rO8 d!!YD${s(74C3B75e~|zH002ovPDHLkV1mnI@&y0@ diff --git a/src/main/resources/assets/hbm/textures/blocks/struct_plasma_core.png b/src/main/resources/assets/hbm/textures/blocks/struct_plasma_core.png deleted file mode 100644 index 2748efbfb77ee6b569f45281633a171271dee814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)5SYUIYOFXyFEkN++cHr zsK`Ooq)}%;e!vDS%a-^^VUTO5*r|x2{s(7%spseC0AQ`9>pDb)@p#NI4E%ij48XU| zZ;UZySw`EohzMG1j>jX~ImdRp#e0u)4y6=YYrOaH2mpt}0i_h)dqN0^2udjcG(ZS} zVHnU_1K^zFw!HUu=MVx~Yc`wB8-a*0o6Tt37J#a%c&c6!uqX-uMxzndTDyIsq31$u9?s0iKMEkB$($p`p3g3c(^h@RWC_70;kg{bzP?(z^{*A-`wy{ zO{Y^%r_+0%puZpfuwJhTA*6vt^{5!necuD{IEF;D zzMX2w*JL2lwqNMIf_uge#vG$c_8rZ$SD%~Ld_?=jp$7*9H@GJ};?&t;ucLK6TGEo@-` diff --git a/src/main/resources/assets/hbm/textures/blocks/test_ct.png b/src/main/resources/assets/hbm/textures/blocks/test_ct.png deleted file mode 100644 index 95f7f1d8dbb9af4aed0c6bce166dd22078cc0635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfCGTdkX*k$(&>&B{eJPIO}4z9w`G0o&=c>cQ_cnC$Qd+{=4Zt PP&0$4tDnm{r-UW|g~uU= diff --git a/src/main/resources/assets/hbm/textures/blocks/test_ct_ct.png b/src/main/resources/assets/hbm/textures/blocks/test_ct_ct.png deleted file mode 100644 index 034f720e2e686d4bed3cf812cb35666b9d4f0430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK^4EL1IEF;D zzMX2wb=ZK%b$)Rt*LuZ!)lK*6U&+15s%dpNDCy*+QJQ_6G5x~)mWP}#>wA2@*aazm z-oVgeC{p-{r6KQs#rAD0{7lcTWjv!Q^J8nMm-~$TR}Ay+i8s5?c*3B&R4{`@s?lx1 z@e>CEOb;AjIUo_|I%l$+#ZU1yzQx%L!cJ?79vs`v7B3@Ec=W-%pLev}wTpS#qr8+a uaF{UlKDd(oV#)n=kM>s;FZgOXkI_gf@1d5~A4{Oq89ZJ6T-G@yGywo-yzopr0Ji5Rj{pDw diff --git a/src/main/resources/assets/hbm/textures/blocks/transmutator_bottom.png b/src/main/resources/assets/hbm/textures/blocks/transmutator_bottom.png deleted file mode 100644 index 03e57ddf74f7a2798bc5f46c4715086276c5875c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJK%5{dY+ZNicBm#tOw*ipOgIg%YF*u zg?bt7)z5sBYwvSESYI0JZW?WMomqs_;f^wAN8{F8a~W+|rY&JVqTpegAm?DE{9Uzg dO41#ZdhK^jk3!tHtOSNCgQu&X%Q~loCIBp_rx*YL diff --git a/src/main/resources/assets/hbm/textures/blocks/transmutator_side.png b/src/main/resources/assets/hbm/textures/blocks/transmutator_side.png deleted file mode 100644 index daa0d5a089dc4987421cd42c6b768badf6a67af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0gp*UK~y+TjgmP_15p%(uZoph;a(`Hm5u)( zE0{$j5X2P~D@6kz%oUUPY-?DwoTZN`(r}{z5vPmd81{ znN+-=QTl1V?s=h}s)@dv7DLX+>r$h=(V@86X>WDe+uf>eb$zY3|K`K22=CB8yk0NW z<#K6lglR%`;dV+s*V=-?AkTmi8nykm<)*8Ns)N1LLn|7MMj{cv-+wYF`#o~lCrAB4 zf3ynvIIyHMlF#Q0hr@wD0QZX#xgKx39BVlq5Zw=jLV7Cag1y_T9e~HZ)NF^)mC=GoyS`6KDXP=q1vV2SDMw*I4}}> zGbO@Qpq;5&I}YYM{D*vO6$kFY+6XWw`x)x&XiA|_aFX>85LhA7gcj%k1M(b?$5W{k g*`xyUuVGo%H*x+|@d%;kfdBvi07*qoM6N<$f=Z0+H~;_u diff --git a/src/main/resources/assets/hbm/textures/blocks/transmutator_top.png b/src/main/resources/assets/hbm/textures/blocks/transmutator_top.png deleted file mode 100644 index fef40211654da9e90e11e59256f96e5fce654066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJiogul%jf_&l5KbLo-(sxGS(qh=k4HpU$(yV9!8vo!SQv`qdN@AXmJn6ctW z?fvPgl|5FeNjBRw7U=(D3AkG-YZj;IF<+&O?SW+U#{1&y-j*dFn<@NYY3Ix%uZ}10 zjQfA@J!|)bl-t|n8Q4xU>NK?Xu-@R@(8#c~`>0pL6CMd$w?&eoe9Q&6|8iU@J*%3| z@X>(h&B2P;>5_gQLem(k_iPu9Xnp^GAy324%bSyG^VzK3e_o%pY~d{3-)s#^j7KbA vC0j67aO7Os&J)2f!L}&=V$jkZtL9zWa?Wp|)hS@;F)(<#`njxgN@xNA!o8h1 From de2a11389c4e6209945ada236870f757bb6aba10 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 23 Dec 2025 20:51:55 +0100 Subject: [PATCH 06/19] i like eating lead-sulfur batteries --- .../java/api/hbm/energymk2/IBatteryItem.java | 4 +- .../api/hbm/energymk2/IEnergyProviderMK2.java | 2 +- .../api/hbm/energymk2/IEnergyReceiverMK2.java | 3 + .../java/api/hbm/energymk2/PowerNetMK2.java | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 16 +- .../blocks/network/MachineBatterySocket.java | 51 + .../entity/train/EntityRailCarElectric.java | 2 +- .../hbm/explosion/ExplosionNukeGeneric.java | 1 - .../container/ContainerBatterySocket.java | 61 + .../hbm/inventory/gui/GUIBatterySocket.java | 110 ++ src/main/java/com/hbm/items/ModItems.java | 111 +- .../com/hbm/items/armor/ArmorFSBPowered.java | 4 +- .../com/hbm/items/machine/ItemBattery.java | 4 +- .../hbm/items/machine/ItemBatteryPack.java | 158 +++ .../hbm/items/machine/ItemSelfcharger.java | 4 +- .../com/hbm/items/special/ItemGlitch.java | 4 +- .../hbm/items/tool/ItemSwordAbilityPower.java | 4 +- .../hbm/items/tool/ItemToolAbilityPower.java | 4 +- .../items/weapon/sedna/impl/ItemGunDrill.java | 4 +- src/main/java/com/hbm/lib/Library.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/packet/toserver/AuxButtonPacket.java | 61 +- .../render/item/ItemRenderBatteryPack.java | 28 + .../tileentity/RenderBatterySocket.java | 71 ++ .../hbm/saveddata/AnnihilatorSavedData.java | 2 - .../hbm/tileentity/TileEntityProxyCombo.java | 28 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../tileentity/machine/TileEntityCharger.java | 4 +- .../storage/TileEntityBatterySocket.java | 279 +++++ .../storage/TileEntityMachineBattery.java | 4 - .../network/TileEntityPneumoTube.java | 7 +- .../networkproviders/PneumaticNetwork.java | 4 +- .../com/hbm/util/CompatEnergyControl.java | 2 +- .../assets/hbm/models/machines/battery.obj | 1020 +++++++++++++++++ .../gui/storage/gui_battery_socket.png | Bin 0 -> 3353 bytes .../textures/models/machines/battery_base.png | Bin 0 -> 626 bytes .../textures/models/machines/battery_lead.png | Bin 0 -> 1022 bytes .../models/machines/battery_lithium.png | Bin 0 -> 1042 bytes .../models/machines/battery_quantum.png | Bin 0 -> 1049 bytes .../models/machines/battery_redstone.png | Bin 0 -> 1149 bytes .../models/machines/battery_schrabidium.png | Bin 0 -> 1003 bytes .../models/machines/battery_socket.png | Bin 0 -> 3199 bytes .../models/machines/battery_sodium.png | Bin 0 -> 1074 bytes 44 files changed, 1927 insertions(+), 141 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/MachineBatterySocket.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerBatterySocket.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java create mode 100644 src/main/java/com/hbm/items/machine/ItemBatteryPack.java create mode 100644 src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java create mode 100644 src/main/resources/assets/hbm/models/machines/battery.obj create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_battery_socket.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_base.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_lead.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_lithium.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_quantum.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_redstone.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_schrabidium.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_socket.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/battery_sodium.png diff --git a/src/main/java/api/hbm/energymk2/IBatteryItem.java b/src/main/java/api/hbm/energymk2/IBatteryItem.java index d0d5931b7..a8983f984 100644 --- a/src/main/java/api/hbm/energymk2/IBatteryItem.java +++ b/src/main/java/api/hbm/energymk2/IBatteryItem.java @@ -11,8 +11,8 @@ public interface IBatteryItem { public void dischargeBattery(ItemStack stack, long i); public long getCharge(ItemStack stack); public long getMaxCharge(ItemStack stack); - public long getChargeRate(); - public long getDischargeRate(); + public long getChargeRate(ItemStack stack); + public long getDischargeRate(ItemStack stack); /** Returns a string for the NBT tag name of the long storing power */ public default String getChargeTagName() { diff --git a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java index e8c8cf09b..50f74215c 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java @@ -43,7 +43,7 @@ public interface IEnergyProviderMK2 extends IEnergyHandlerMK2 { if(te instanceof IEnergyReceiverMK2 && te != this) { IEnergyReceiverMK2 rec = (IEnergyReceiverMK2) te; - if(rec.canConnect(dir.getOpposite())) { + if(rec.canConnect(dir.getOpposite()) && rec.allowDirectProvision()) { long provides = Math.min(this.getPower(), this.getProviderSpeed()); long receives = Math.min(rec.getMaxPower() - rec.getPower(), rec.getReceiverSpeed()); long toTransfer = Math.min(provides, receives); diff --git a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java index 8978d64d4..466b8b277 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java @@ -31,6 +31,9 @@ public interface IEnergyReceiverMK2 extends IEnergyHandlerMK2 { public default long getReceiverSpeed() { return this.getMaxPower(); } + + /** Whether a provider can provide power by touching the block (i.e. via proxies), bypassing the need for a network entirely */ + public default boolean allowDirectProvision() { return true; } public default void trySubscribe(World world, DirPos pos) { trySubscribe(world, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } diff --git a/src/main/java/api/hbm/energymk2/PowerNetMK2.java b/src/main/java/api/hbm/energymk2/PowerNetMK2.java index 34e8205f6..768ad9a28 100644 --- a/src/main/java/api/hbm/energymk2/PowerNetMK2.java +++ b/src/main/java/api/hbm/energymk2/PowerNetMK2.java @@ -78,7 +78,7 @@ public class PowerNetMK2 extends NodeNet entry : list) { double weight = (double) entry.getValue() / (double) (priorityDemand); - long toSend = (long) Math.max(toTransfer * weight, 0D); + long toSend = (long) Math.min(Math.max(toTransfer * weight, 0D), entry.getValue()); energyUsed += (toSend - entry.getKey().transferPower(toSend)); //leftovers are subtracted from the intended amount to use up } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a84634f56..a4c4381be 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -740,16 +740,16 @@ public class ModBlocks { public static Block machine_electric_furnace_off; public static Block machine_electric_furnace_on; - public static Block machine_microwave; - public static Block machine_battery_potato; - public static Block machine_battery; - public static Block machine_lithium_battery; - public static Block machine_schrabidium_battery; - public static Block machine_dineutronium_battery; + public static Block machine_battery_socket; + + @Deprecated public static Block machine_battery_potato; + @Deprecated public static Block machine_battery; + @Deprecated public static Block machine_lithium_battery; + @Deprecated public static Block machine_schrabidium_battery; + @Deprecated public static Block machine_dineutronium_battery; public static Block machine_fensu; - public static final int guiID_machine_fensu = 99; public static Block capacitor_bus; public static Block capacitor_copper; @@ -1862,6 +1862,7 @@ public class ModBlocks { machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); + machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3259,6 +3260,7 @@ public class ModBlocks { register(barrel_steel); register(barrel_tcalloy); register(barrel_antimatter); + register(machine_battery_socket); register(machine_battery_potato); register(machine_battery); register(machine_lithium_battery); diff --git a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java new file mode 100644 index 000000000..a1030cd99 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java @@ -0,0 +1,51 @@ +package com.hbm.blocks.network; + +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineBatterySocket extends BlockDummyable implements ITooltipProvider { + + public MachineBatterySocket() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityBatterySocket(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().conductor(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override public int[] getDimensions() { return new int[] {1, 0, 1, 0, 1, 0}; } + @Override public int getOffset() { return 0; } + + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ); + this.makeExtra(world, x + rot.offsetX, y, z + rot.offsetZ); + this.makeExtra(world, x - dir.offsetX + rot.offsetX, y, z - dir.offsetZ + rot.offsetZ); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/entity/train/EntityRailCarElectric.java b/src/main/java/com/hbm/entity/train/EntityRailCarElectric.java index 5e6847d61..cafb1a6a5 100644 --- a/src/main/java/com/hbm/entity/train/EntityRailCarElectric.java +++ b/src/main/java/com/hbm/entity/train/EntityRailCarElectric.java @@ -52,7 +52,7 @@ public abstract class EntityRailCarElectric extends EntityRailCarRidable { if(stack != null && stack.getItem() instanceof IBatteryItem) { IBatteryItem battery = (IBatteryItem) stack.getItem(); int powerNeeded = this.getMaxPower() - this.getPower(); - long powerProvided = Math.min(battery.getDischargeRate(), battery.getCharge(stack)); + long powerProvided = Math.min(battery.getDischargeRate(stack), battery.getCharge(stack)); int powerTransfered = (int) Math.min(powerNeeded, powerProvided); if(powerTransfered > 0) { diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java index fd1926d2a..7301e3721 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java @@ -421,7 +421,6 @@ public class ExplosionNukeGeneric { public static void emp(World world, int x, int y, int z) { if (!world.isRemote) { - Block b = world.getBlock(x,y,z); TileEntity te = world.getTileEntity(x, y, z); if (te != null && te instanceof IEnergyHandlerMK2) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerBatterySocket.java b/src/main/java/com/hbm/inventory/container/ContainerBatterySocket.java new file mode 100644 index 000000000..72ea18661 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerBatterySocket.java @@ -0,0 +1,61 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerBatterySocket extends Container { + + protected TileEntityBatterySocket socket; + + public ContainerBatterySocket(InventoryPlayer invPlayer, TileEntityBatterySocket tedf) { + this.socket = tedf; + + this.addSlotToContainer(new SlotNonRetarded(socket, 0, 35, 35)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 99 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 157)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return socket.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack copy = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + copy = stack.copy(); + + if(index == 0) { + if(!this.mergeItemStack(stack, 1, this.inventorySlots.size(), true)) return null; + } else { + if(!this.mergeItemStack(stack, 0, 1, false)) return null; + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return copy; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java new file mode 100644 index 000000000..f9e0f5585 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java @@ -0,0 +1,110 @@ +package com.hbm.inventory.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerBatterySocket; +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; +import com.hbm.util.BobMathUtil; +import com.hbm.util.i18n.I18nUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.client.Minecraft; +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 GUIBatterySocket extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_battery_socket.png"); + private TileEntityBatterySocket battery; + + public GUIBatterySocket(InventoryPlayer invPlayer, TileEntityBatterySocket tedf) { + super(new ContainerBatterySocket(invPlayer, tedf)); + battery = tedf; + + this.xSize = 176; + this.ySize = 181; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + if(battery.slots[0] != null && battery.slots[0].getItem() instanceof IBatteryItem) { + //this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 52, 52, battery.power, battery.getMaxPower()); + + IBatteryItem item = (IBatteryItem) battery.slots[0].getItem(); + + String deltaText = BobMathUtil.getShortNumber(Math.abs(battery.delta)) + "HE/s"; + + if(battery.delta > 0) deltaText = EnumChatFormatting.GREEN + "+" + deltaText; + else if(battery.delta < 0) deltaText = EnumChatFormatting.RED + "-" + deltaText; + else deltaText = EnumChatFormatting.YELLOW + "+" + deltaText; + + String[] info = { BobMathUtil.getShortNumber(item.getCharge(battery.slots[0])) + "/" + BobMathUtil.getShortNumber(item.getMaxCharge(battery.slots[0])) + "HE", deltaText }; + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 62, guiTop + 69 - 52, 34, 52, mouseX, mouseY, info); + } + + String lang = null; + switch(battery.priority) { + case LOW: lang = "low"; break; + case HIGH: lang = "high"; break; + default: lang = "normal"; break; + } + + List priority = new ArrayList(); + priority.add(I18nUtil.resolveKey("battery.priority." + lang)); + priority.add(I18nUtil.resolveKey("battery.priority.recommended")); + String[] desc = I18nUtil.resolveKeyArray("battery.priority." + lang + ".desc"); + for(String s : desc) priority.add(s); + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 152, guiTop + 35, 16, 16, mouseX, mouseY, priority); + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + NBTTagCompound data = new NBTTagCompound(); + + if(this.checkClick(x, y, 106, 16, 18, 18)) { this.click(); data.setBoolean("low", true); } + if(this.checkClick(x, y, 106, 52, 18, 18)) { this.click(); data.setBoolean("high", true); } + if(this.checkClick(x, y, 125, 35, 16, 16)) { this.click(); data.setBoolean("priority", true); } + + if(!data.hasNoTags()) PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, battery.xCoord, battery.yCoord, battery.zCoord)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.battery.hasCustomInventoryName() ? this.battery.getInventoryName() : I18n.format(this.battery.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(battery.slots[0] != null && battery.slots[0].getItem() instanceof IBatteryItem) { + IBatteryItem item = (IBatteryItem) battery.slots[0].getItem(); + long power = item.getCharge(battery.slots[0]); + long maxPower = item.getMaxCharge(battery.slots[0]); + int p = (int) (power * 52 / maxPower); // won't work then flying too close to the sun (the limits of the LONG data type) + drawTexturedModalRect(guiLeft + 62, guiTop + 69 - p, 176, 52 - p, 34, p); + } + + drawTexturedModalRect(guiLeft + 106, guiTop + 16, 176, 52 + battery.redLow * 18, 18, 18); + drawTexturedModalRect(guiLeft + 106, guiTop + 52, 176, 52 + battery.redHigh * 18, 18, 18); + drawTexturedModalRect(guiLeft + 125, guiTop + 35, 194, 52 + battery.priority.ordinal() * 16 - 16, 16, 16); + } +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index c2893c0e5..06dfd4ad2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1627,33 +1627,34 @@ public class ModItems { public static Item custom_schrab; public static Item custom_fall; - public static Item battery_generic; - public static Item battery_advanced; - public static Item battery_lithium; - public static Item battery_schrabidium; - public static Item battery_spark; - public static Item battery_trixite; + @Deprecated public static Item battery_generic; + @Deprecated public static Item battery_advanced; + @Deprecated public static Item battery_lithium; + @Deprecated public static Item battery_schrabidium; + @Deprecated public static Item battery_spark; + @Deprecated public static Item battery_trixite; + @Deprecated public static Item battery_red_cell; + @Deprecated public static Item battery_red_cell_6; + @Deprecated public static Item battery_red_cell_24; + @Deprecated public static Item battery_advanced_cell; + @Deprecated public static Item battery_advanced_cell_4; + @Deprecated public static Item battery_advanced_cell_12; + @Deprecated public static Item battery_lithium_cell; + @Deprecated public static Item battery_lithium_cell_3; + @Deprecated public static Item battery_lithium_cell_6; + @Deprecated public static Item battery_schrabidium_cell; + @Deprecated public static Item battery_schrabidium_cell_2; + @Deprecated public static Item battery_schrabidium_cell_4; + @Deprecated public static Item battery_spark_cell_6; + @Deprecated public static Item battery_spark_cell_25; + @Deprecated public static Item battery_spark_cell_100; + @Deprecated public static Item battery_spark_cell_1000; + @Deprecated public static Item battery_spark_cell_2500; + @Deprecated public static Item battery_spark_cell_10000; + @Deprecated public static Item battery_spark_cell_power; + + public static Item battery_pack; public static Item battery_creative; - - public static Item battery_red_cell; - public static Item battery_red_cell_6; - public static Item battery_red_cell_24; - public static Item battery_advanced_cell; - public static Item battery_advanced_cell_4; - public static Item battery_advanced_cell_12; - public static Item battery_lithium_cell; - public static Item battery_lithium_cell_3; - public static Item battery_lithium_cell_6; - public static Item battery_schrabidium_cell; - public static Item battery_schrabidium_cell_2; - public static Item battery_schrabidium_cell_4; - public static Item battery_spark_cell_6; - public static Item battery_spark_cell_25; - public static Item battery_spark_cell_100; - public static Item battery_spark_cell_1000; - public static Item battery_spark_cell_2500; - public static Item battery_spark_cell_10000; - public static Item battery_spark_cell_power; public static Item cube_power; public static Item battery_sc_uranium; @@ -3868,33 +3869,34 @@ public class ModItems { custom_schrab = new ItemCustomLore().setUnlocalizedName("custom_schrab").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_schrab"); custom_fall = new ItemCustomLore().setUnlocalizedName("custom_fall").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":custom_fall"); - battery_generic = new ItemBattery(5000, 100, 100).setUnlocalizedName("battery_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_generic_new"); - battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_new"); - battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium"); - battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); - battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark"); - battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_trixite"); + battery_generic = new ItemBattery(5000, 100, 100).setUnlocalizedName("battery_generic").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_generic_new"); + battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_new"); + battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium"); + battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); + battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark"); + battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_trixite"); + battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell"); + battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); + battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); + battery_advanced_cell = new ItemBattery(60000, 500, 500).setUnlocalizedName("battery_advanced_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_cell"); + battery_advanced_cell_4 = new ItemBattery(60000 * 4, 500, 500).setUnlocalizedName("battery_advanced_cell_4").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_cell_4"); + battery_advanced_cell_12 = new ItemBattery(60000 * 12, 500, 500).setUnlocalizedName("battery_advanced_cell_12").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_cell_12"); + battery_lithium_cell = new ItemBattery(750000, 1000, 1000).setUnlocalizedName("battery_lithium_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium_cell"); + battery_lithium_cell_3 = new ItemBattery(750000 * 3, 1000, 1000).setUnlocalizedName("battery_lithium_cell_3").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium_cell_3"); + battery_lithium_cell_6 = new ItemBattery(750000 * 6, 1000, 1000).setUnlocalizedName("battery_lithium_cell_6").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium_cell_6"); + battery_schrabidium_cell = new ItemBattery(3000000, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell"); + battery_schrabidium_cell_2 = new ItemBattery(3000000 * 2, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_2").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_2"); + battery_schrabidium_cell_4 = new ItemBattery(3000000 * 4, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_4").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_4"); + battery_spark_cell_6 = new ItemBattery(100000000L * 6L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_6").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_6"); + battery_spark_cell_25 = new ItemBattery(100000000L * 25L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_25").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_25"); + battery_spark_cell_100 = new ItemBattery(100000000L * 100L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_100").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_100"); + battery_spark_cell_1000 = new ItemBattery(100000000L * 1000L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_1000").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_1000"); + battery_spark_cell_2500 = new ItemBattery(100000000L * 2500L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_2500").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_2500"); + battery_spark_cell_10000 = new ItemBattery(100000000L * 10000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_10000").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_10000"); + battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); + + battery_pack = new ItemBatteryPack().setUnlocalizedName("battery_pack").setTextureName(RefStrings.MODID + ":battery_generic_new"); battery_creative = new Item().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); - - battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell"); - battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); - battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); - battery_advanced_cell = new ItemBattery(60000, 500, 500).setUnlocalizedName("battery_advanced_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell"); - battery_advanced_cell_4 = new ItemBattery(60000 * 4, 500, 500).setUnlocalizedName("battery_advanced_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_4"); - battery_advanced_cell_12 = new ItemBattery(60000 * 12, 500, 500).setUnlocalizedName("battery_advanced_cell_12").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_advanced_cell_12"); - battery_lithium_cell = new ItemBattery(750000, 1000, 1000).setUnlocalizedName("battery_lithium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell"); - battery_lithium_cell_3 = new ItemBattery(750000 * 3, 1000, 1000).setUnlocalizedName("battery_lithium_cell_3").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_3"); - battery_lithium_cell_6 = new ItemBattery(750000 * 6, 1000, 1000).setUnlocalizedName("battery_lithium_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_lithium_cell_6"); - battery_schrabidium_cell = new ItemBattery(3000000, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell"); - battery_schrabidium_cell_2 = new ItemBattery(3000000 * 2, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_2"); - battery_schrabidium_cell_4 = new ItemBattery(3000000 * 4, 5000, 5000).setUnlocalizedName("battery_schrabidium_cell_4").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_schrabidium_cell_4"); - battery_spark_cell_6 = new ItemBattery(100000000L * 6L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_6").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_6"); - battery_spark_cell_25 = new ItemBattery(100000000L * 25L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_25").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_25"); - battery_spark_cell_100 = new ItemBattery(100000000L * 100L, 2000000, 2000000).setUnlocalizedName("battery_spark_cell_100").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_100"); - battery_spark_cell_1000 = new ItemBattery(100000000L * 1000L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_1000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_1000"); - battery_spark_cell_2500 = new ItemBattery(100000000L * 2500L, 20000000, 20000000).setUnlocalizedName("battery_spark_cell_2500").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_2500"); - battery_spark_cell_10000 = new ItemBattery(100000000L * 10000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_10000").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_10000"); - battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); @@ -5700,8 +5702,11 @@ public class ModItems { GameRegistry.registerItem(battery_spark_cell_2500, battery_spark_cell_2500.getUnlocalizedName()); GameRegistry.registerItem(battery_spark_cell_10000, battery_spark_cell_10000.getUnlocalizedName()); GameRegistry.registerItem(battery_spark_cell_power, battery_spark_cell_power.getUnlocalizedName()); - GameRegistry.registerItem(cube_power, cube_power.getUnlocalizedName()); + + GameRegistry.registerItem(battery_pack, battery_pack.getUnlocalizedName()); GameRegistry.registerItem(battery_creative, battery_creative.getUnlocalizedName()); + GameRegistry.registerItem(cube_power, cube_power.getUnlocalizedName()); + GameRegistry.registerItem(battery_potato, battery_potato.getUnlocalizedName()); GameRegistry.registerItem(battery_potatos, battery_potatos.getUnlocalizedName()); GameRegistry.registerItem(battery_sc_uranium, battery_sc_uranium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java b/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java index d5368b5f3..bfc6ba444 100644 --- a/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java +++ b/src/main/java/com/hbm/items/armor/ArmorFSBPowered.java @@ -117,12 +117,12 @@ public class ArmorFSBPowered extends ArmorFSB implements IBatteryItem { } @Override - public long getChargeRate() { + public long getChargeRate(ItemStack stack) { return chargeRate; } @Override - public long getDischargeRate() { + public long getDischargeRate(ItemStack stack) { return 0; } diff --git a/src/main/java/com/hbm/items/machine/ItemBattery.java b/src/main/java/com/hbm/items/machine/ItemBattery.java index fe31ec3b9..fa9fa8cb8 100644 --- a/src/main/java/com/hbm/items/machine/ItemBattery.java +++ b/src/main/java/com/hbm/items/machine/ItemBattery.java @@ -111,12 +111,12 @@ public class ItemBattery extends Item implements IBatteryItem { } @Override - public long getChargeRate() { + public long getChargeRate(ItemStack stack) { return chargeRate; } @Override - public long getDischargeRate() { + public long getDischargeRate(ItemStack stack) { return dischargeRate; } diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java new file mode 100644 index 000000000..ba4f95f75 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java @@ -0,0 +1,158 @@ +package com.hbm.items.machine; + +import java.util.List; + +import com.hbm.interfaces.IOrderedEnum; +import com.hbm.items.ItemEnumMulti; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.util.BobMathUtil; +import com.hbm.util.EnumUtil; + +import api.hbm.energymk2.IBatteryItem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { + + public ItemBatteryPack() { + super(EnumBatteryPack.class, true, false); + this.setMaxStackSize(1); + this.setCreativeTab(MainRegistry.controlTab); + } + + public static enum EnumBatteryPack { + REDSTONE ("battery_redstone", 100L), + LEAD ("battery_lead", 1_000L), + LITHIUM ("battery_lithium", 10_000L), + SODIUM ("battery_sodium", 50_000L), + SCHRABIDIUM ("battery_schrabidium", 250_000L), + QUANTUM ("battery_quantum", 1_000_000L); + + public ResourceLocation texture; + public long capacity; + public long chargeRate; + public long dischargeRate; + + private EnumBatteryPack(String tex, long dischargeRate) { + this(tex, dischargeRate * 20 * 60 * 15, dischargeRate * 10, dischargeRate); + } + + private EnumBatteryPack(String tex, long capacity, long chargeRate, long dischargeRate) { + this.texture = new ResourceLocation(RefStrings.MODID, "textures/models/machines/" + tex + ".png"); + this.capacity = capacity; + this.chargeRate = chargeRate; + this.dischargeRate = dischargeRate; + } + } + + @Override + public void chargeBattery(ItemStack stack, long i) { + if(stack.hasTagCompound()) { + stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") + i); + } else { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", i); + } + } + + @Override + public void setCharge(ItemStack stack, long i) { + if(stack.hasTagCompound()) { + stack.stackTagCompound.setLong("charge", i); + } else { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", i); + } + } + + @Override + public void dischargeBattery(ItemStack stack, long i) { + if(stack.hasTagCompound()) { + stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i); + } else { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", this.getMaxCharge(stack) - i); + } + } + + @Override + public long getCharge(ItemStack stack) { + if(stack.hasTagCompound()) { + return stack.stackTagCompound.getLong("charge"); + } else { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", getMaxCharge(stack)); + return stack.stackTagCompound.getLong("charge"); + } + } + + @Override + public long getMaxCharge(ItemStack stack) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage()); + return pack.capacity; + } + + @Override + public long getChargeRate(ItemStack stack) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage()); + return pack.chargeRate; + } + + @Override + public long getDischargeRate(ItemStack stack) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, stack.getItemDamage()); + return pack.dischargeRate; + } + + @Override public boolean showDurabilityBar(ItemStack stack) { return true; } + @Override public double getDurabilityForDisplay(ItemStack stack) { return 1D - (double) getCharge(stack) / (double) getMaxCharge(stack); } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + long maxCharge = this.getMaxCharge(itemstack); + long chargeRate = this.getChargeRate(itemstack); + long dischargeRate = this.getDischargeRate(itemstack); + long charge = maxCharge; + + if(itemstack.hasTagCompound()) charge = getCharge(itemstack); + + list.add(EnumChatFormatting.GREEN + "Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); + list.add(EnumChatFormatting.YELLOW + "Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t"); + list.add(EnumChatFormatting.YELLOW + "Discharge rate: " + BobMathUtil.getShortNumber(dischargeRate) + "HE/t"); + list.add(EnumChatFormatting.GOLD + "Time for full charge: " + (maxCharge / chargeRate / 20 / 60D) + "min"); + list.add(EnumChatFormatting.GOLD + "Charge lasts for: " + (maxCharge / dischargeRate / 20 / 60D) + "min"); + } + + public static ItemStack makeEmptyBattery(ItemStack stack) { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", 0); + return stack; + } + + public static ItemStack makeFullBattery(ItemStack stack) { + stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setLong("charge", ((ItemBatteryPack) stack.getItem()).getMaxCharge(stack)); + return stack; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + + Enum[] order = theEnum.getEnumConstants(); + if(order[0] instanceof IOrderedEnum) order = ((IOrderedEnum) order[0]).getOrder(); + + for(int i = 0; i < order.length; i++) { + list.add(makeEmptyBattery(new ItemStack(item, 1, order[i].ordinal()))); + list.add(makeFullBattery(new ItemStack(item, 1, order[i].ordinal()))); + } + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemSelfcharger.java b/src/main/java/com/hbm/items/machine/ItemSelfcharger.java index 419f5401d..635df6cb1 100644 --- a/src/main/java/com/hbm/items/machine/ItemSelfcharger.java +++ b/src/main/java/com/hbm/items/machine/ItemSelfcharger.java @@ -43,12 +43,12 @@ public class ItemSelfcharger extends Item implements IBatteryItem { } @Override - public long getChargeRate() { + public long getChargeRate(ItemStack stack) { return 0; } @Override - public long getDischargeRate() { + public long getDischargeRate(ItemStack stack) { return charge; } diff --git a/src/main/java/com/hbm/items/special/ItemGlitch.java b/src/main/java/com/hbm/items/special/ItemGlitch.java index 0031aecdb..024b970d7 100644 --- a/src/main/java/com/hbm/items/special/ItemGlitch.java +++ b/src/main/java/com/hbm/items/special/ItemGlitch.java @@ -243,6 +243,6 @@ public class ItemGlitch extends Item implements IBatteryItem { @Override public void dischargeBattery(ItemStack stack, long i) { } @Override public long getCharge(ItemStack stack) { return 200; } @Override public long getMaxCharge(ItemStack stack) { return 200; } - @Override public long getChargeRate() { return 0; } - @Override public long getDischargeRate() { return 200; } + @Override public long getChargeRate(ItemStack stack) { return 0; } + @Override public long getDischargeRate(ItemStack stack) { return 200; } } diff --git a/src/main/java/com/hbm/items/tool/ItemSwordAbilityPower.java b/src/main/java/com/hbm/items/tool/ItemSwordAbilityPower.java index 943dfd7ab..e3c7f431d 100644 --- a/src/main/java/com/hbm/items/tool/ItemSwordAbilityPower.java +++ b/src/main/java/com/hbm/items/tool/ItemSwordAbilityPower.java @@ -111,12 +111,12 @@ public class ItemSwordAbilityPower extends ItemSwordAbility implements IBatteryI } @Override - public long getChargeRate() { + public long getChargeRate(ItemStack stack) { return chargeRate; } @Override - public long getDischargeRate() { + public long getDischargeRate(ItemStack stack) { return 0; } diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbilityPower.java b/src/main/java/com/hbm/items/tool/ItemToolAbilityPower.java index c0c025d35..73166f49e 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbilityPower.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbilityPower.java @@ -107,12 +107,12 @@ public class ItemToolAbilityPower extends ItemToolAbility implements IBatteryIte } @Override - public long getChargeRate() { + public long getChargeRate(ItemStack stack) { return chargeRate; } @Override - public long getDischargeRate() { + public long getDischargeRate(ItemStack stack) { return 0; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunDrill.java b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunDrill.java index 084ace60b..d32f93802 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunDrill.java +++ b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunDrill.java @@ -133,6 +133,6 @@ public class ItemGunDrill extends ItemGunBaseNT implements IFillableItem, IBatte return 0; } - @Override public long getChargeRate() { return 50_000; } - @Override public long getDischargeRate() { return 0; } + @Override public long getChargeRate(ItemStack stack) { return 50_000; } + @Override public long getDischargeRate(ItemStack stack) { return 0; } } diff --git a/src/main/java/com/hbm/lib/Library.java b/src/main/java/com/hbm/lib/Library.java index 5512310a8..72c4f8f89 100644 --- a/src/main/java/com/hbm/lib/Library.java +++ b/src/main/java/com/hbm/lib/Library.java @@ -244,7 +244,7 @@ public class Library { long batMax = battery.getMaxCharge(slots[index]); long batCharge = battery.getCharge(slots[index]); - long batRate = battery.getChargeRate(); + long batRate = battery.getChargeRate(slots[index]); long toCharge = Math.min(Math.min(power, batRate), batMax - batCharge); power -= toCharge; @@ -264,7 +264,7 @@ public class Library { IBatteryItem battery = (IBatteryItem) slots[index].getItem(); long batCharge = battery.getCharge(slots[index]); - long batRate = battery.getDischargeRate(); + long batRate = battery.getDischargeRate(slots[index]); long toDischarge = Math.min(Math.min((maxPower - power), batRate), batCharge); battery.dischargeBattery(slots[index], toDischarge); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index fa3544020..47bb3e5d9 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -306,6 +306,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFF.class, new RenderForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForceField.class, new RenderMachineForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFENSU.class, new RenderFENSU()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatterySocket.class, new RenderBatterySocket()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineLargeTurbine.class, new RenderBigTurbine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineReactorBreeding.class, new RenderBreeder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolarBoiler.class, new RenderSolarBoiler()); @@ -541,6 +542,7 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday_rusted, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); MinecraftForgeClient.registerItemRenderer(ModItems.missile_shuttle, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ROBIN)); + MinecraftForgeClient.registerItemRenderer(ModItems.battery_pack, new ItemRenderBatteryPack()); //templates MinecraftForgeClient.registerItemRenderer(ModItems.assembly_template, new ItemRenderTemplate()); MinecraftForgeClient.registerItemRenderer(ModItems.chemistry_template, new ItemRenderTemplate()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 8e9d147db..a0f97f3b6 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -270,6 +270,7 @@ public class ResourceManager { public static final IModelCustom watz_pump = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/watz_pump.obj")).asVBO(); //FENSU + public static final IModelCustom battery_socket = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/battery.obj")).asVBO(); public static final IModelCustom fensu = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu.obj")).asVBO(); //Radar @@ -737,6 +738,7 @@ public class ResourceManager { public static final ResourceLocation watz_pump_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/watz_pump.png"); //FENSU + public static final ResourceLocation battery_socket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/battery_socket.png"); public static final ResourceLocation fensu_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu.png"); //Radar diff --git a/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java index 7f41feeb1..7183c202b 100644 --- a/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java +++ b/src/main/java/com/hbm/packet/toserver/AuxButtonPacket.java @@ -2,6 +2,7 @@ package com.hbm.packet.toserver; import com.hbm.config.MobConfig; import com.hbm.entity.mob.EntityDuck; +import com.hbm.interfaces.NotableComments; import com.hbm.items.weapon.ItemCustomMissilePart.PartSize; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.TileEntityTickingBase; @@ -25,6 +26,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; +@NotableComments @Deprecated //use the NBT control packet instead public class AuxButtonPacket implements IMessage { @@ -34,13 +36,9 @@ public class AuxButtonPacket implements IMessage { int value; int id; - public AuxButtonPacket() - { - - } + public AuxButtonPacket() { } - public AuxButtonPacket(int x, int y, int z, int value, int id) - { + public AuxButtonPacket(int x, int y, int z, int value, int id) { this.x = x; this.y = y; this.z = z; @@ -77,58 +75,45 @@ public class AuxButtonPacket implements IMessage { //try { TileEntity te = p.worldObj.getTileEntity(m.x, m.y, m.z); - if (te instanceof TileEntityForceField) { + if(te instanceof TileEntityForceField) { TileEntityForceField field = (TileEntityForceField)te; - field.isOn = !field.isOn; } - if (te instanceof TileEntityMachineMissileAssembly) { + if(te instanceof TileEntityMachineMissileAssembly) { TileEntityMachineMissileAssembly assembly = (TileEntityMachineMissileAssembly)te; - assembly.construct(); } - if (te instanceof TileEntityLaunchTable) { + if(te instanceof TileEntityLaunchTable) { TileEntityLaunchTable launcher = (TileEntityLaunchTable)te; - launcher.padSize = PartSize.values()[m.value]; } - if (te instanceof TileEntityCoreEmitter) { + if(te instanceof TileEntityCoreEmitter) { TileEntityCoreEmitter core = (TileEntityCoreEmitter)te; - - if(m.id == 0) { - core.watts = m.value; - } - if(m.id == 1) { - core.isOn = !core.isOn; - } + if(m.id == 0) core.watts = m.value; + if(m.id == 1) core.isOn = !core.isOn; } - if (te instanceof TileEntityCoreStabilizer) { + if(te instanceof TileEntityCoreStabilizer) { TileEntityCoreStabilizer core = (TileEntityCoreStabilizer)te; - - if(m.id == 0) { - core.watts = m.value; - } + if(m.id == 0) core.watts = m.value; } - if (te instanceof TileEntityBarrel) { + if(te instanceof TileEntityBarrel) { TileEntityBarrel barrel = (TileEntityBarrel)te; - barrel.mode = (short) ((barrel.mode + 1) % barrel.modes); barrel.markDirty(); } - if (te instanceof TileEntityMachineBattery) { + if(te instanceof TileEntityMachineBattery) { TileEntityMachineBattery bat = (TileEntityMachineBattery)te; if(m.id == 0) { bat.redLow = (short) ((bat.redLow + 1) % 4); bat.markDirty(); } - if(m.id == 1) { bat.redHigh = (short) ((bat.redHigh + 1) % 4); bat.markDirty(); @@ -136,26 +121,22 @@ public class AuxButtonPacket implements IMessage { if(m.id == 2) { switch(bat.priority) { - case LOW: bat.priority = ConnectionPriority.NORMAL; break; - case NORMAL: bat.priority = ConnectionPriority.HIGH; break; - case HIGH: bat.priority = ConnectionPriority.LOW; break; + case LOW: bat.priority = ConnectionPriority.NORMAL; break; + case NORMAL: bat.priority = ConnectionPriority.HIGH; break; + case HIGH: bat.priority = ConnectionPriority.LOW; break; } bat.markDirty(); } } - if (te instanceof TileEntitySoyuzLauncher) { + if(te instanceof TileEntitySoyuzLauncher) { TileEntitySoyuzLauncher launcher = (TileEntitySoyuzLauncher)te; - - if(m.id == 0) - launcher.mode = (byte) m.value; - if(m.id == 1) - launcher.startCountdown(); + if(m.id == 0) launcher.mode = (byte) m.value; + if(m.id == 1) launcher.startCountdown(); } - if (te instanceof TileEntityMachineMiningLaser) { + if(te instanceof TileEntityMachineMiningLaser) { TileEntityMachineMiningLaser laser = (TileEntityMachineMiningLaser)te; - laser.isOn = !laser.isOn; } diff --git a/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java b/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java new file mode 100644 index 000000000..bde3cbeac --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java @@ -0,0 +1,28 @@ +package com.hbm.render.item; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.main.ResourceManager; +import com.hbm.util.EnumUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +public class ItemRenderBatteryPack extends ItemRenderBase { + + @Override + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(5, 5, 5); + } + + @Override + public void renderCommonWithStack(ItemStack item) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, item.getItemDamage()); + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().getTextureManager().bindTexture(pack.texture); + ResourceManager.battery_socket.renderPart("Battery"); + GL11.glShadeModel(GL11.GL_FLAT); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java new file mode 100644 index 000000000..66a69928d --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -0,0 +1,71 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.storage.TileEntityBatterySocket; +import com.hbm.util.EnumUtil; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderBatterySocket extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - 10) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glTranslated(-0.5, 0, 0.5); + + TileEntityBatterySocket socket = (TileEntityBatterySocket) tile; + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.battery_socket_tex); + ResourceManager.battery_socket.renderPart("Socket"); + + if(socket.renderPack >= 0) { + EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, socket.renderPack); + bindTexture(pack.texture); + ResourceManager.battery_socket.renderPart("Battery"); + } + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_battery_socket); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -2, 0); + GL11.glScaled(5, 5, 5); + } + public void renderCommon() { + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.battery_socket_tex); + ResourceManager.battery_socket.renderPart("Socket"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java b/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java index 618867431..5304ad557 100644 --- a/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java +++ b/src/main/java/com/hbm/saveddata/AnnihilatorSavedData.java @@ -148,7 +148,6 @@ public class AnnihilatorSavedData extends WorldSavedData { serializeKey(compound, entry.getKey()); compound.setByteArray("amount", entry.getValue().toByteArray()); nbt.appendTag(compound); - System.out.println("Serializing " + entry.getValue().toString() + " of " + entry.getKey()); } } @@ -158,7 +157,6 @@ public class AnnihilatorSavedData extends WorldSavedData { NBTTagCompound compound = (NBTTagCompound) nbt.tagList.get(i); Object key = deserializeKey(compound); if(key != null) this.items.put(key, new BigInteger(compound.getByteArray("amount"))); - System.out.println("Deserializing " + new BigInteger(compound.getByteArray("amount")).toString() + " of " + key); } } catch(Throwable ex) { } // because world data can be dented to all fucking hell and back } diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index dc30ea5b3..3f36eab8d 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -6,6 +6,7 @@ import com.hbm.handler.CompatHandler.OCComponent; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.tank.FluidTank; +import api.hbm.energymk2.IEnergyConductorMK2; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluidmk2.IFluidConnectorMK2; import api.hbm.fluidmk2.IFluidReceiverMK2; @@ -31,11 +32,12 @@ import net.minecraftforge.common.util.ForgeDirection; @Optional.Interface(iface = "com.hbm.handler.CompatHandler.OCComponent", modid = "opencomputers"), @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers") }) -public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, ISidedInventory, IFluidReceiverMK2, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent, IRORValueProvider, IRORInteractive { +public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, IEnergyConductorMK2, ISidedInventory, IFluidReceiverMK2, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent, IRORValueProvider, IRORInteractive { TileEntity tile; boolean inventory; boolean power; + boolean conductor; boolean fluid; boolean heat; public boolean moltenMetal; @@ -56,11 +58,15 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.inventory = true; return this; } - + public TileEntityProxyCombo power() { this.power = true; return this; } + public TileEntityProxyCombo conductor() { + this.conductor = true; + return this; + } public TileEntityProxyCombo moltenMetal() { this.moltenMetal = true; return this; @@ -141,13 +147,21 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public boolean canConnect(ForgeDirection dir) { - if(!power) - return false; - - if(getCoreObject() instanceof IEnergyReceiverMK2) { + if(power && getCoreObject() instanceof IEnergyReceiverMK2) { return ((IEnergyReceiverMK2)getCoreObject()).canConnect(dir); } + if(conductor && getCoreObject() instanceof IEnergyConductorMK2) { + return ((IEnergyConductorMK2)getCoreObject()).canConnect(dir); + } + + return true; + } + + @Override + public boolean allowDirectProvision() { + if(!power) return false; + if(getCoreObject() instanceof IEnergyReceiverMK2) return ((IEnergyReceiverMK2)getCoreObject()).allowDirectProvision(); return true; } @@ -402,6 +416,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.inventory = nbt.getBoolean("inv"); this.power = nbt.getBoolean("power"); + this.conductor = nbt.getBoolean("conductor"); this.fluid = nbt.getBoolean("fluid"); this.moltenMetal = nbt.getBoolean("metal"); this.heat = nbt.getBoolean("heat"); @@ -416,6 +431,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy nbt.setBoolean("inv", inventory); nbt.setBoolean("power", power); + nbt.setBoolean("conductor", conductor); nbt.setBoolean("fluid", fluid); nbt.setBoolean("metal", moltenMetal); nbt.setBoolean("heat", heat); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index dda9eba44..a4cbb8014 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -81,6 +81,7 @@ public class TileMappings { put(TileEntityDecoPoleTop.class, "tileentity_poletop"); put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); put(TileEntityMachineBattery.class, "tileentity_battery"); + put(TileEntityBatterySocket.class, "tileentity_battery_socket"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner"); put(TileEntityRedBarrel.class, "tileentity_barrel"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java index 5cde6c932..887b6643b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -46,7 +46,7 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe if(stack != null && stack.getItem() instanceof IBatteryItem) { IBatteryItem battery = (IBatteryItem) stack.getItem(); - charge += Math.min(battery.getMaxCharge(stack) - battery.getCharge(stack), battery.getChargeRate()); + charge += Math.min(battery.getMaxCharge(stack) - battery.getCharge(stack), battery.getChargeRate(stack)); } } } @@ -129,7 +129,7 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyRe if(stack != null && stack.getItem() instanceof IBatteryItem) { IBatteryItem battery = (IBatteryItem) stack.getItem(); - long toCharge = Math.min(battery.getMaxCharge(stack) - battery.getCharge(stack), battery.getChargeRate()); + long toCharge = Math.min(battery.getMaxCharge(stack) - battery.getCharge(stack), battery.getChargeRate(null)); toCharge = Math.min(toCharge, Math.max(power / 5, 1)); battery.chargeBattery(stack, toCharge); power -= toCharge; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java new file mode 100644 index 000000000..f354405f6 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -0,0 +1,279 @@ +package com.hbm.tileentity.machine.storage; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerBatterySocket; +import com.hbm.inventory.gui.GUIBatterySocket; +import com.hbm.items.ModItems; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.uninos.UniNodespace; +import com.hbm.util.EnumUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IBatteryItem; +import api.hbm.energymk2.IEnergyConductorMK2; +import api.hbm.energymk2.IEnergyProviderMK2; +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.energymk2.Nodespace; +import api.hbm.energymk2.Nodespace.PowerNode; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityBatterySocket extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { + + public long[] log = new long[20]; + public long delta = 0; + public byte lastRedstone = 0; + public long prevPowerState = 0; + + public static final int mode_input = 0; + public static final int mode_buffer = 1; + public static final int mode_output = 2; + public static final int mode_none = 3; + public short redLow = 0; + public short redHigh = 2; + public ConnectionPriority priority = ConnectionPriority.LOW; + + public int renderPack = -1; + + protected PowerNode node; + + public TileEntityBatterySocket() { + super(1); + } + + @Override public String getName() { return "container.batterySocket"; } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { + priority = ConnectionPriority.LOW; + } + + long prevPower = this.getPower(); + + if(this.node == null || this.node.expired) { + + this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { + case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; + case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; + case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; + case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; + } + + byte comp = this.getComparatorPower(); + if(comp != this.lastRedstone) this.markDirty(); + this.lastRedstone = comp; + + long avg = (this.getPower() + prevPower) / 2; + this.delta = avg - this.log[0]; + + for(int i = 1; i < this.log.length; i++) { + this.log[i - 1] = this.log[i]; + } + + this.log[19] = avg; + + prevPowerState = this.getPower(); + + this.networkPackNT(100); + } + } + + @Override + public PowerNode createNode() { + return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); + } + + public byte getComparatorPower() { + double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; + return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + } + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + int renderPack = -1; + if(slots[0] != null && slots[0].getItem() == ModItems.battery_pack) { + renderPack = slots[0].getItemDamage(); + } + + buf.writeInt(renderPack); + buf.writeLong(delta); + buf.writeShort(redLow); + buf.writeShort(redHigh); + buf.writeByte(priority.ordinal()); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + renderPack = buf.readInt(); + delta = buf.readLong(); + redLow = buf.readShort(); + redHigh = buf.readShort(); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.redLow = nbt.getShort("redLow"); + this.redHigh = nbt.getShort("redHigh"); + this.lastRedstone = nbt.getByte("lastRedstone"); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("priority")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setShort("redLow", redLow); + nbt.setShort("redHigh", redHigh); + nbt.setByte("lastRedstone", lastRedstone); + nbt.setByte("priority", (byte) this.priority.ordinal()); + } + + @Override + public boolean canExtractItem(int i, ItemStack stack, int j) { + if(stack.getItem() instanceof IBatteryItem) { + if(i == mode_input && ((IBatteryItem)stack.getItem()).getCharge(stack) == 0) return true; + if(i == mode_output && ((IBatteryItem)stack.getItem()).getCharge(stack) == ((IBatteryItem)stack.getItem()).getMaxCharge(stack)) return true; + } + return false; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack.getItem() instanceof IBatteryItem; + } + + @Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] {0}; } + + @Override + public long getPower() { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; + return ((IBatteryItem) slots[0].getItem()).getCharge(slots[0]); + } + + @Override + public void setPower(long power) { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return; + ((IBatteryItem) slots[0].getItem()).setCharge(slots[0], power); + } + + @Override + public long getMaxPower() { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; + return ((IBatteryItem) slots[0].getItem()).getMaxCharge(slots[0]); + } + + @Override public boolean allowDirectProvision() { return false; } + @Override public ConnectionPriority getPriority() { return this.priority; } + + @Override public long getProviderSpeed() { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; + int mode = this.getRelevantMode(true); + return mode == mode_output || mode == mode_buffer ? ((IBatteryItem) slots[0].getItem()).getDischargeRate(slots[0]) : 0; + } + + @Override public long getReceiverSpeed() { + if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; + int mode = this.getRelevantMode(true); + return mode == mode_input || mode == mode_buffer ? ((IBatteryItem) slots[0].getItem()).getChargeRate(slots[0]) : 0; + } + + public BlockPos[] getPortPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new BlockPos[] { + new BlockPos(xCoord, yCoord, zCoord), + new BlockPos(xCoord - dir.offsetX, yCoord, zCoord - dir.offsetZ), + new BlockPos(xCoord + rot.offsetX, yCoord, zCoord + rot.offsetZ), + new BlockPos(xCoord - dir.offsetX + rot.offsetX, yCoord, zCoord - dir.offsetZ + rot.offsetZ) + }; + } + + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + 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 * 2, yCoord, zCoord + rot.offsetZ * 2, rot), + new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot), + + new DirPos(xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()), + new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()) + }; + } + + private short modeCache = 0; + + public short getRelevantMode(boolean useCache) { + if(useCache) return this.modeCache; + boolean powered = false; + for(BlockPos pos : getPortPos()) if(worldObj.isBlockIndirectlyGettingPowered(pos.getX(), pos.getY(), pos.getZ())) { powered = true; break; } + this.modeCache = powered ? this.redHigh : this.redLow; + return this.modeCache; + } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatterySocket(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatterySocket(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("low")) { + this.redLow++; + if(this.redLow > 3) this.redLow = 0; + } + if(data.hasKey("high")) { + this.redHigh++; + if(this.redHigh > 3) this.redHigh = 0; + } + if(data.hasKey("priority")) { + int ordinal = this.priority.ordinal(); + ordinal++; + if(ordinal > ConnectionPriority.HIGH.ordinal()) ordinal = ConnectionPriority.LOW.ordinal(); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); + } + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index a2984cb93..3c0a726bb 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -245,10 +245,6 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I } } - public void onNodeDestroyedCallback() { - this.node = null; - } - @Override public void invalidate() { super.invalidate(); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java index 03a3879b9..1123bac7a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPneumoTube.java @@ -47,6 +47,7 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP public byte sendOrder = 0; public byte receiveOrder = 0; public int soundDelay = 0; + public int sendCounter = 0; public FluidTank compair; @@ -113,7 +114,7 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP if(sendFrom instanceof IInventory) { PneumaticNetwork net = node.net; - if(net.send((IInventory) sendFrom, this, this.insertionDir.getOpposite(), sendOrder, receiveOrder, getRangeFromPressure(compair.getPressure()))) { + if(net.send((IInventory) sendFrom, this, this.insertionDir.getOpposite(), sendOrder, receiveOrder, getRangeFromPressure(compair.getPressure()), sendCounter)) { this.compair.setFill(this.compair.getFill() - 50); if(this.soundDelay <= 0 && !this.muffled) { @@ -121,6 +122,8 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP this.soundDelay = 20; } } + + this.sendCounter++; } } } @@ -229,6 +232,7 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP this.sendOrder = nbt.getByte("sendOrder"); this.receiveOrder = nbt.getByte("receiveOrder"); + this.sendCounter = nbt.getInteger("sendCounter"); this.whitelist = nbt.getBoolean("whitelist"); this.redstone = nbt.getBoolean("redstone"); @@ -244,6 +248,7 @@ public class TileEntityPneumoTube extends TileEntityMachineBase implements IGUIP nbt.setByte("sendOrder", sendOrder); nbt.setByte("receiveOrder", receiveOrder); + nbt.setInteger("sendCounter", sendCounter); nbt.setBoolean("whitelist", whitelist); nbt.setBoolean("redstone", redstone); diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java index 336fbf86d..c07254103 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java @@ -31,7 +31,6 @@ public class PneumaticNetwork extends NodeNet { public static final byte RECEIVE_RANDOM = 1; public Random rand = new Random(); - public int nextReceiver = 0; protected static final int timeout = 1_000; public static final int ITEMS_PER_TRANSFER = 64; @@ -53,7 +52,7 @@ public class PneumaticNetwork extends NodeNet { receivers.entrySet().removeIf(x -> { return (timestamp - x.getValue().getY() > timeout) || NodeNet.isBadLink(x.getKey()); }); } - public boolean send(IInventory source, TileEntityPneumoTube tube, ForgeDirection accessDir, int sendOrder, int receiveOrder, int maxRange) { + public boolean send(IInventory source, TileEntityPneumoTube tube, ForgeDirection accessDir, int sendOrder, int receiveOrder, int maxRange, int nextReceiver) { // turns out there may be a short time window where the cleanup hasn't happened yet, but chunkloading has already caused tiles to go invalid // so we just run it again here, just to be sure. @@ -76,7 +75,6 @@ public class PneumaticNetwork extends NodeNet { int index = nextReceiver % receivers.size(); Entry> chosenReceiverEntry = null; - nextReceiver++; if(receiveOrder == RECEIVE_ROBIN) chosenReceiverEntry = receiverList.get(index); if(receiveOrder == RECEIVE_RANDOM) chosenReceiverEntry = receiverList.get(rand.nextInt(receiverList.size())); diff --git a/src/main/java/com/hbm/util/CompatEnergyControl.java b/src/main/java/com/hbm/util/CompatEnergyControl.java index 353557637..b74fd9a32 100644 --- a/src/main/java/com/hbm/util/CompatEnergyControl.java +++ b/src/main/java/com/hbm/util/CompatEnergyControl.java @@ -36,7 +36,7 @@ public class CompatEnergyControl { /** Standardized discharge for IBatteryItem, returns the amount that was removed */ public static double dischargeItem(ItemStack stack, double needed) { IBatteryItem battery = (IBatteryItem) stack.getItem(); - long toDischarge = Math.min(battery.getDischargeRate(), Math.min(battery.getCharge(stack), (long) needed)); + long toDischarge = Math.min(battery.getDischargeRate(stack), Math.min(battery.getCharge(stack), (long) needed)); battery.dischargeBattery(stack, toDischarge); return toDischarge; } diff --git a/src/main/resources/assets/hbm/models/machines/battery.obj b/src/main/resources/assets/hbm/models/machines/battery.obj new file mode 100644 index 000000000..c37a7ffbc --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/battery.obj @@ -0,0 +1,1020 @@ +# Blender v2.79 (sub 0) OBJ File: 'battery.blend' +# www.blender.org +o Battery +v 0.687500 1.875000 -0.875000 +v 0.875000 1.875000 -0.687500 +v 0.000000 1.875000 -0.187500 +v -0.875000 1.875000 -0.187500 +v 0.875000 0.125000 -0.187500 +v 0.875000 1.875000 -0.187500 +v 0.687500 1.875000 0.875000 +v 0.875000 1.875000 0.687500 +v 0.875000 0.125000 0.687500 +v 0.687500 0.125000 0.875000 +v 0.000000 1.875000 0.687500 +v 0.187500 1.875000 0.875000 +v 0.875000 1.875000 0.187500 +v 0.687500 1.875000 0.000000 +v 0.687500 0.125000 0.000000 +v 0.875000 0.125000 0.187500 +v 0.187500 0.125000 0.875000 +v 0.000000 0.125000 0.687500 +v 0.000000 0.125000 0.187500 +v 0.187500 0.125000 0.000000 +v 0.187500 1.875000 0.000000 +v 0.000000 1.875000 0.187500 +v 0.687500 0.125000 -0.875000 +v 0.875000 0.125000 -0.687500 +v -0.187500 1.875000 -0.875000 +v 0.000000 0.125000 -0.187500 +v 0.000000 0.125000 -0.687500 +v 0.187500 0.125000 -0.875000 +v 0.187500 1.875000 -0.875000 +v 0.000000 1.875000 -0.687500 +v -0.187500 1.875000 0.875000 +v -0.187500 0.125000 0.875000 +v -0.875000 1.875000 0.687500 +v -0.687500 1.875000 0.875000 +v -0.187500 1.875000 0.000000 +v -0.187500 0.125000 0.000000 +v -0.687500 0.125000 0.875000 +v -0.875000 0.125000 0.687500 +v -0.875000 0.125000 0.187500 +v -0.687500 0.125000 0.000000 +v -0.687500 1.875000 0.000000 +v -0.875000 1.875000 0.187500 +v -0.187500 0.125000 -0.875000 +v -0.875000 0.125000 -0.187500 +v -0.875000 0.125000 -0.687500 +v -0.687500 0.125000 -0.875000 +v -0.687500 1.875000 -0.875000 +v -0.875000 1.875000 -0.687500 +v -0.937500 1.625000 0.687500 +v -0.687500 1.625000 0.937500 +v 0.687500 1.625000 0.937500 +v 0.937500 1.625000 0.687500 +v -0.687500 1.625000 -0.937500 +v -0.937500 1.625000 -0.687500 +v 0.937500 1.625000 -0.687500 +v 0.687500 1.625000 -0.937500 +v 0.687500 1.375000 -0.937500 +v 0.937500 1.375000 -0.687500 +v -0.937500 1.375000 -0.687500 +v -0.687500 1.375000 -0.937500 +v 0.937500 1.375000 0.687500 +v 0.687500 1.375000 0.937500 +v -0.687500 1.375000 0.937500 +v -0.937500 1.375000 0.687500 +v -0.937500 0.625000 0.687500 +v -0.687500 0.625000 0.937500 +v 0.687500 0.625000 0.937500 +v 0.937500 0.625000 0.687500 +v -0.687500 0.625000 -0.937500 +v -0.937500 0.625000 -0.687500 +v 0.937500 0.625000 -0.687500 +v 0.687500 0.625000 -0.937500 +v 0.687500 0.375000 -0.937500 +v 0.937500 0.375000 -0.687500 +v -0.937500 0.375000 -0.687500 +v -0.687500 0.375000 -0.937500 +v 0.937500 0.375000 0.687500 +v 0.687500 0.375000 0.937500 +v -0.687500 0.375000 0.937500 +v -0.937500 0.375000 0.687500 +vt 0.597561 0.617647 +vt 0.731707 0.661765 +vt 0.695122 0.823529 +vt 0.560976 0.617647 +vt 0.597561 0.205882 +vt 0.597561 0.617647 +vt 1.000000 0.205882 +vt 0.963415 0.617647 +vt 0.963415 0.205882 +vt 0.731707 0.044118 +vt 0.695122 0.205882 +vt 0.560976 0.161765 +vt 0.695122 0.205882 +vt 0.560976 0.161765 +vt 0.597561 -0.000000 +vt 0.560976 0.205882 +vt 0.463415 0.617647 +vt 0.463415 0.205882 +vt 0.560976 0.617647 +vt 1.000000 0.617647 +vt 0.963415 0.205882 +vt 1.000000 0.205882 +vt 0.865854 0.617647 +vt 0.829268 0.205882 +vt 0.865854 0.205882 +vt 0.731707 0.617647 +vt 0.731707 0.205882 +vt 0.597561 0.205882 +vt 0.695122 0.205882 +vt 0.731707 0.617647 +vt 0.695122 0.617647 +vt 0.829268 0.617647 +vt 0.731707 0.205882 +vt 0.829268 0.205882 +vt 0.560976 0.205882 +vt 0.597561 0.617647 +vt 0.560976 0.617647 +vt 0.560976 0.161765 +vt 0.597561 0.000000 +vt 0.560976 0.661765 +vt 0.695122 0.617647 +vt 0.731707 0.779412 +vt 0.865854 0.617647 +vt 0.963415 0.205882 +vt 0.963415 0.617647 +vt 0.865854 0.617647 +vt 0.865854 0.205882 +vt 0.731707 0.617647 +vt 0.597561 0.205882 +vt 1.000000 0.205882 +vt 0.963415 0.617647 +vt 0.963415 0.205882 +vt 0.597561 0.617647 +vt 0.560976 0.205882 +vt 0.597561 0.205882 +vt 0.463415 0.617647 +vt 0.463415 0.205882 +vt 0.560976 0.661765 +vt 0.731707 0.779412 +vt 1.000000 0.617647 +vt 1.000000 0.205882 +vt 0.829268 0.205882 +vt 0.865854 0.205882 +vt 0.695122 0.205882 +vt 0.731707 0.617647 +vt 0.695122 0.617647 +vt 0.560976 0.044118 +vt 0.695122 -0.000000 +vt 0.731707 0.161765 +vt 0.865854 0.617647 +vt 0.829268 0.617647 +vt 0.731707 0.205882 +vt 0.829268 0.205882 +vt 0.731707 0.779412 +vt 0.597561 0.823529 +vt 0.560976 0.661765 +vt 0.865854 0.205882 +vt 0.463415 0.882353 +vt 0.414634 0.558824 +vt 0.463415 0.558824 +vt 0.097561 0.500000 +vt 0.365854 0.941176 +vt 0.414634 0.058824 +vt 0.365854 0.441176 +vt 0.048780 0.382353 +vt 0.097561 1.000000 +vt 0.365854 1.000000 +vt 0.097561 0.441176 +vt 0.414634 0.500000 +vt 0.365854 0.500000 +vt 0.414634 0.941176 +vt 0.463415 0.941176 +vt 0.048780 0.941176 +vt 0.097561 0.941176 +vt 0.048780 0.500000 +vt 0.000000 0.558824 +vt 0.000000 0.500000 +vt 0.048780 0.882353 +vt 0.000000 0.882353 +vt 0.463415 0.882353 +vt 0.414634 0.558824 +vt 0.463415 0.558824 +vt 0.097561 0.500000 +vt 0.365854 0.941176 +vt 0.414634 0.058824 +vt 0.365854 0.441176 +vt 0.048780 0.382353 +vt 0.097561 1.000000 +vt 0.365854 1.000000 +vt 0.097561 0.441176 +vt 0.414634 0.500000 +vt 0.365854 0.500000 +vt 0.414634 0.941176 +vt 0.463415 0.941176 +vt 0.048780 0.941176 +vt 0.097561 0.941176 +vt 0.048780 0.500000 +vt 0.000000 0.558824 +vt 0.000000 0.500000 +vt 0.048780 0.882353 +vt 0.000000 0.882353 +vt 0.597561 0.823529 +vt 0.560976 0.779412 +vt 0.560976 0.661765 +vt 0.695122 0.617647 +vt 0.731707 0.779412 +vt 0.560976 0.205882 +vt 1.000000 0.617647 +vt 0.560976 0.044118 +vt 0.597561 -0.000000 +vt 0.695122 -0.000000 +vt 0.731707 0.161765 +vt 0.695122 -0.000000 +vt 0.731707 0.044118 +vt 0.731707 0.161765 +vt 0.560976 0.044118 +vt 0.963415 0.617647 +vt 0.829268 0.617647 +vt 0.695122 0.000000 +vt 0.731707 0.044118 +vt 0.731707 0.161765 +vt 0.560976 0.044118 +vt 0.695122 0.823529 +vt 0.597561 0.823529 +vt 0.560976 0.779412 +vt 0.731707 0.661765 +vt 1.000000 0.617647 +vt 0.560976 0.617647 +vt 0.695122 0.823529 +vt 0.597561 0.823529 +vt 0.560976 0.779412 +vt 0.731707 0.661765 +vt 0.829268 0.617647 +vt 0.731707 0.205882 +vt 0.560976 0.161765 +vt 0.597561 -0.000000 +vt 0.731707 0.044118 +vt 0.731707 0.661765 +vt 0.695122 0.823529 +vt 0.560976 0.779412 +vt 0.414634 0.882353 +vt 0.048780 0.558824 +vt 0.048780 0.058824 +vt 0.097561 -0.000000 +vt 0.365854 -0.000000 +vt 0.414634 0.382353 +vt 0.414634 0.441176 +vt 0.048780 1.000000 +vt 0.414634 0.882353 +vt 0.048780 0.558824 +vt 0.048780 0.058824 +vt 0.097561 -0.000000 +vt 0.365854 -0.000000 +vt 0.414634 0.382353 +vt 0.414634 0.441176 +vt 0.048780 1.000000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +s off +f 8/1/1 14/2/1 22/3/1 +f 35/4/2 26/5/2 3/6/2 +f 20/7/3 3/8/3 26/9/3 +f 20/10/4 16/11/4 10/12/4 +f 24/13/4 15/14/4 26/15/4 +f 10/16/5 12/17/5 17/18/5 +f 10/16/2 8/1/2 7/19/2 +f 12/20/3 18/21/3 17/22/3 +f 22/23/6 20/24/6 19/25/6 +f 14/26/7 16/11/7 15/27/7 +f 16/11/8 8/1/8 9/28/8 +f 27/29/7 25/30/7 30/31/7 +f 29/32/9 23/33/9 28/34/9 +f 15/35/2 6/36/2 14/37/2 +f 27/29/4 36/38/4 44/39/4 +f 14/40/1 2/41/1 29/42/1 +f 42/43/10 38/44/10 33/45/10 +f 30/46/6 28/34/6 27/47/6 +f 1/48/7 24/13/7 23/33/7 +f 24/13/8 6/36/8 5/49/8 +f 40/50/3 4/51/3 44/52/3 +f 11/53/2 32/54/2 18/55/2 +f 32/54/5 34/56/5 37/57/5 +f 35/58/1 30/31/1 47/59/1 +f 34/60/3 38/44/3 37/61/3 +f 42/43/6 40/62/6 39/63/6 +f 19/64/7 35/65/7 22/66/7 +f 37/67/4 39/68/4 36/69/4 +f 48/70/10 44/52/10 4/51/10 +f 47/71/9 43/72/9 46/73/9 +f 41/74/1 33/75/1 31/76/1 +f 48/70/6 46/73/6 45/77/6 +f 60/78/9 56/79/9 57/80/9 +f 52/81/1 56/79/1 54/82/1 +f 60/83/4 58/84/4 62/85/4 +f 64/86/10 54/82/10 59/87/10 +f 58/84/8 52/81/8 61/88/8 +f 58/84/7 56/89/7 55/90/7 +f 54/91/6 60/78/6 59/92/6 +f 64/86/3 50/93/3 49/94/3 +f 52/95/2 62/96/2 61/97/2 +f 62/96/5 50/98/5 63/99/5 +f 76/100/9 72/101/9 73/102/9 +f 68/103/1 72/101/1 70/104/1 +f 76/105/4 74/106/4 78/107/4 +f 80/108/10 70/104/10 75/109/10 +f 74/106/8 68/103/8 77/110/8 +f 74/106/7 72/111/7 71/112/7 +f 70/113/6 76/100/6 75/114/6 +f 80/108/3 66/115/3 65/116/3 +f 68/117/2 78/118/2 77/119/2 +f 78/118/5 66/120/5 79/121/5 +f 22/3/1 11/122/1 12/123/1 +f 12/123/1 7/124/1 8/1/1 +f 8/1/1 13/125/1 14/2/1 +f 14/2/1 21/126/1 22/3/1 +f 22/3/1 12/123/1 8/1/1 +f 35/4/2 36/127/2 26/5/2 +f 20/7/3 21/128/3 3/8/3 +f 10/12/4 17/129/4 18/130/4 +f 18/130/4 19/131/4 20/10/4 +f 20/10/4 15/132/4 16/11/4 +f 16/11/4 9/28/4 10/12/4 +f 10/12/4 18/130/4 20/10/4 +f 26/15/4 27/133/4 28/134/4 +f 28/134/4 23/135/4 24/13/4 +f 24/13/4 5/49/4 15/14/4 +f 15/14/4 20/136/4 26/15/4 +f 26/15/4 28/134/4 24/13/4 +f 10/16/5 7/19/5 12/17/5 +f 10/16/2 9/28/2 8/1/2 +f 12/20/3 11/137/3 18/21/3 +f 22/23/6 21/138/6 20/24/6 +f 14/26/7 13/125/7 16/11/7 +f 16/11/8 13/125/8 8/1/8 +f 27/29/7 43/72/7 25/30/7 +f 29/32/9 1/48/9 23/33/9 +f 15/35/2 5/49/2 6/36/2 +f 44/39/4 45/139/4 46/140/4 +f 46/140/4 43/141/4 27/29/4 +f 27/29/4 26/5/4 36/38/4 +f 36/38/4 40/142/4 44/39/4 +f 44/39/4 46/140/4 27/29/4 +f 29/42/1 30/143/1 3/144/1 +f 3/144/1 21/145/1 14/40/1 +f 14/40/1 6/36/1 2/41/1 +f 2/41/1 1/146/1 29/42/1 +f 29/42/1 3/144/1 14/40/1 +f 42/43/10 39/63/10 38/44/10 +f 30/46/6 29/32/6 28/34/6 +f 1/48/7 2/41/7 24/13/7 +f 24/13/8 2/41/8 6/36/8 +f 40/50/3 41/147/3 4/51/3 +f 11/53/2 31/148/2 32/54/2 +f 32/54/5 31/148/5 34/56/5 +f 47/59/1 48/149/1 4/150/1 +f 4/150/1 41/151/1 35/58/1 +f 35/58/1 3/6/1 30/31/1 +f 30/31/1 25/152/1 47/59/1 +f 47/59/1 4/150/1 35/58/1 +f 34/60/3 33/45/3 38/44/3 +f 42/43/6 41/153/6 40/62/6 +f 19/64/7 36/154/7 35/65/7 +f 36/69/4 19/64/4 18/55/4 +f 18/55/4 32/155/4 37/67/4 +f 37/67/4 38/156/4 39/68/4 +f 39/68/4 40/157/4 36/69/4 +f 36/69/4 18/55/4 37/67/4 +f 48/70/10 45/77/10 44/52/10 +f 47/71/9 25/30/9 43/72/9 +f 31/76/1 11/53/1 22/66/1 +f 22/66/1 35/158/1 41/74/1 +f 41/74/1 42/159/1 33/75/1 +f 33/75/1 34/160/1 31/76/1 +f 31/76/1 22/66/1 41/74/1 +f 48/70/6 47/71/6 46/73/6 +f 60/78/9 53/161/9 56/79/9 +f 54/82/1 49/94/1 50/98/1 +f 50/98/1 51/162/1 52/81/1 +f 52/81/1 55/90/1 56/79/1 +f 56/79/1 53/161/1 54/82/1 +f 54/82/1 50/98/1 52/81/1 +f 62/85/4 63/163/4 64/164/4 +f 64/164/4 59/165/4 60/83/4 +f 60/83/4 57/166/4 58/84/4 +f 58/84/4 61/88/4 62/85/4 +f 62/85/4 64/164/4 60/83/4 +f 64/86/10 49/94/10 54/82/10 +f 58/84/8 55/90/8 52/81/8 +f 58/84/7 57/167/7 56/89/7 +f 54/91/6 53/161/6 60/78/6 +f 64/86/3 63/168/3 50/93/3 +f 52/95/2 51/162/2 62/96/2 +f 62/96/5 51/162/5 50/98/5 +f 76/100/9 69/169/9 72/101/9 +f 70/104/1 65/116/1 66/120/1 +f 66/120/1 67/170/1 68/103/1 +f 68/103/1 71/112/1 72/101/1 +f 72/101/1 69/169/1 70/104/1 +f 70/104/1 66/120/1 68/103/1 +f 78/107/4 79/171/4 80/172/4 +f 80/172/4 75/173/4 76/105/4 +f 76/105/4 73/174/4 74/106/4 +f 74/106/4 77/110/4 78/107/4 +f 78/107/4 80/172/4 76/105/4 +f 80/108/10 65/116/10 70/104/10 +f 74/106/8 71/112/8 68/103/8 +f 74/106/7 73/175/7 72/111/7 +f 70/113/6 69/169/6 76/100/6 +f 80/108/3 79/176/3 66/115/3 +f 68/117/2 67/170/2 78/118/2 +f 78/118/5 67/170/5 66/120/5 +o Socket +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +v -0.875000 0.250000 0.875000 +v 0.875000 0.250000 0.875000 +v -0.875000 0.250000 -0.875000 +v 0.875000 0.250000 -0.875000 +v -1.000000 0.250000 -1.000000 +v -1.000000 0.250000 1.000000 +v 1.000000 0.250000 1.000000 +v 1.000000 0.250000 -1.000000 +v 1.000000 0.750000 -0.250000 +v 1.000000 0.250000 -0.250000 +v 1.000000 0.750000 -0.750000 +v 1.000000 0.250000 -0.750000 +v 0.875000 0.750000 -0.750000 +v 0.875000 0.750000 -0.250000 +v 0.875000 0.250000 -0.250000 +v 0.875000 0.250000 -0.750000 +v -0.875000 0.125000 -0.875000 +v -0.875000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v 0.875000 0.125000 -0.875000 +v 1.000000 0.750000 0.750000 +v 1.000000 0.250000 0.750000 +v 1.000000 0.750000 0.250000 +v 1.000000 0.250000 0.250000 +v 0.875000 0.750000 0.250000 +v 0.875000 0.750000 0.750000 +v 0.875000 0.250000 0.750000 +v 0.875000 0.250000 0.250000 +v -1.000000 0.750000 0.250000 +v -1.000000 0.250000 0.250000 +v -1.000000 0.750000 0.750000 +v -1.000000 0.250000 0.750000 +v -0.875000 0.750000 0.750000 +v -0.875000 0.750000 0.250000 +v -0.875000 0.250000 0.250000 +v -0.875000 0.250000 0.750000 +v -1.000000 0.750000 -0.750000 +v -1.000000 0.250000 -0.750000 +v -1.000000 0.750000 -0.250000 +v -1.000000 0.250000 -0.250000 +v -0.875000 0.750000 -0.250000 +v -0.875000 0.750000 -0.750000 +v -0.875000 0.250000 -0.750000 +v -0.875000 0.250000 -0.250000 +v -0.250000 0.750000 -1.000000 +v -0.250000 0.250000 -1.000000 +v -0.750000 0.750000 -1.000000 +v -0.750000 0.250000 -1.000000 +v -0.750000 0.750000 -0.875000 +v -0.250000 0.750000 -0.875000 +v -0.250000 0.250000 -0.875000 +v -0.750000 0.250000 -0.875000 +v 0.750000 0.750000 -1.000000 +v 0.750000 0.250000 -1.000000 +v 0.250000 0.750000 -1.000000 +v 0.250000 0.250000 -1.000000 +v 0.250000 0.750000 -0.875000 +v 0.750000 0.750000 -0.875000 +v 0.750000 0.250000 -0.875000 +v 0.250000 0.250000 -0.875000 +v 0.250000 0.750000 1.000000 +v 0.250000 0.250000 1.000000 +v 0.750000 0.750000 1.000000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.750000 0.875000 +v 0.250000 0.750000 0.875000 +v 0.250000 0.250000 0.875000 +v 0.750000 0.250000 0.875000 +v -0.750000 0.750000 1.000000 +v -0.750000 0.250000 1.000000 +v -0.250000 0.750000 1.000000 +v -0.250000 0.250000 1.000000 +v -0.250000 0.750000 0.875000 +v -0.750000 0.750000 0.875000 +v -0.750000 0.250000 0.875000 +v -0.250000 0.250000 0.875000 +v 0.562500 1.875000 -0.562500 +v 0.312500 1.875000 -0.562500 +v 0.562500 1.875000 -0.312500 +v 0.312500 1.875000 -0.312500 +v -0.843750 1.937500 0.500000 +v 0.312500 1.875000 0.562500 +v 0.562500 1.875000 0.562500 +v 0.312500 1.875000 0.312500 +v 0.562500 1.875000 0.312500 +v 0.312500 2.000000 0.312500 +v 0.312500 2.000000 0.562500 +v 0.562500 2.000000 0.562500 +v 0.562500 2.000000 0.312500 +v 0.312500 2.000000 -0.562500 +v 0.312500 2.000000 -0.312500 +v 0.562500 2.000000 -0.312500 +v 0.562500 2.000000 -0.562500 +v -0.312500 1.875000 -0.562500 +v -0.562500 1.875000 -0.562500 +v -0.312500 1.875000 -0.312500 +v -0.562500 1.875000 -0.312500 +v -0.562500 1.875000 0.562500 +v -0.312500 1.875000 0.562500 +v -0.562500 1.875000 0.312500 +v -0.312500 1.875000 0.312500 +v -0.562500 2.000000 0.312500 +v -0.562500 2.000000 0.562500 +v -0.312500 2.000000 0.562500 +v -0.312500 2.000000 0.312500 +v -0.562500 2.000000 -0.562500 +v -0.562500 2.000000 -0.312500 +v -0.312500 2.000000 -0.312500 +v -0.312500 2.000000 -0.562500 +v 0.843750 1.937500 0.500000 +v -0.843750 1.937500 0.375000 +v 0.843750 1.937500 0.375000 +v 0.968750 1.812500 0.500000 +v 0.968750 1.812500 0.375000 +v 0.968750 0.750000 0.500000 +v 0.968750 0.750000 0.375000 +v -0.968750 1.811500 0.500000 +v -0.968750 1.811500 0.375000 +v -0.968750 0.749000 0.500000 +v -0.968750 0.749000 0.375000 +v -0.843750 1.937500 -0.375000 +v 0.843750 1.937500 -0.375000 +v -0.843750 1.937500 -0.500000 +v 0.843750 1.937500 -0.500000 +v 0.968750 1.812500 -0.375000 +v 0.968750 1.812500 -0.500000 +v 0.968750 0.750000 -0.375000 +v 0.968750 0.750000 -0.500000 +v -0.968750 1.811500 -0.375000 +v -0.968750 1.811500 -0.500000 +v -0.968750 0.749000 -0.375000 +v -0.968750 0.749000 -0.500000 +v -0.968750 0.749000 -0.500000 +v -0.968750 0.749000 -0.375000 +v -0.968750 1.811500 -0.500000 +v -0.968750 1.811500 -0.375000 +v 0.968750 0.750000 -0.500000 +v 0.968750 0.750000 -0.375000 +v 0.968750 1.812500 -0.500000 +v 0.968750 1.812500 -0.375000 +v 0.843750 1.937500 -0.500000 +v -0.843750 1.937500 -0.500000 +v 0.843750 1.937500 -0.375000 +v -0.843750 1.937500 -0.375000 +v -0.968750 0.749000 0.375000 +v -0.968750 0.749000 0.500000 +v -0.968750 1.811500 0.375000 +v -0.968750 1.811500 0.500000 +v 0.968750 0.750000 0.375000 +v 0.968750 0.750000 0.500000 +v 0.968750 1.812500 0.375000 +v 0.968750 1.812500 0.500000 +v 0.843750 1.937500 0.375000 +v -0.843750 1.937500 0.375000 +v 0.843750 1.937500 0.500000 +v -0.843750 1.937500 0.500000 +vt 0.486486 0.055556 +vt 0.054054 0.500000 +vt 0.054054 0.055556 +vt 0.945946 -0.000000 +vt 0.567568 0.027778 +vt 0.567568 -0.000000 +vt 0.540541 0.500000 +vt 0.486486 0.500000 +vt 0.000000 0.055556 +vt 0.054054 0.555556 +vt 0.486486 0.000000 +vt 0.459459 0.972222 +vt 0.054054 1.000000 +vt 0.081081 0.972222 +vt 0.081081 0.583333 +vt 0.486486 0.555556 +vt 0.459459 0.583333 +vt 0.486486 1.000000 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.945946 0.416667 +vt 0.567568 0.416667 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.567568 0.444444 +vt 0.945946 0.444444 +vt 0.972973 0.416667 +vt 0.945946 0.027778 +vt 0.972973 0.027778 +vt 0.540541 0.027778 +vt 0.540541 0.416667 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.594595 0.444444 +vt 0.702703 0.555556 +vt 0.594595 0.555556 +vt 0.702703 0.583333 +vt 0.594595 0.694444 +vt 0.594595 0.583333 +vt 0.810811 0.555556 +vt 0.486486 0.583333 +vt 0.486486 0.555556 +vt 0.918919 0.500000 +vt 0.864865 0.527778 +vt 0.864865 0.500000 +vt 0.810811 0.527778 +vt 0.864865 0.583333 +vt 0.810811 0.583333 +vt 0.810811 0.527778 +vt 0.864865 0.583333 +vt 0.810811 0.583333 +vt 0.918919 0.500000 +vt 0.864865 0.527778 +vt 0.864865 0.500000 +vt 0.810811 0.500000 +vt 0.756757 0.527778 +vt 0.756757 0.500000 +vt 0.972973 0.500000 +vt 0.918919 0.527778 +vt 0.810811 0.500000 +vt 0.756757 0.527778 +vt 0.756757 0.500000 +vt 0.972973 0.500000 +vt 0.918919 0.527778 +vt 0.918919 0.500000 +vt 0.864865 0.527778 +vt 0.864865 0.500000 +vt 0.810811 0.527778 +vt 0.864865 0.583333 +vt 0.810811 0.583333 +vt 0.810811 0.527778 +vt 0.864865 0.583333 +vt 0.810811 0.583333 +vt 0.918919 0.500000 +vt 0.864865 0.527778 +vt 0.864865 0.500000 +vt 0.810811 0.500000 +vt 0.756757 0.527778 +vt 0.756757 0.500000 +vt 0.972973 0.500000 +vt 0.918919 0.527778 +vt 0.810811 0.500000 +vt 0.756757 0.527778 +vt 0.756757 0.500000 +vt 0.972973 0.500000 +vt 0.918919 0.527778 +vt 0.972973 0.263889 +vt 1.000000 0.638889 +vt 0.972973 0.638889 +vt 1.000000 0.236111 +vt 1.000000 0.263889 +vt 0.972973 0.236111 +vt 1.000000 0.000000 +vt 0.972973 0.666667 +vt 1.000000 0.666667 +vt 0.972973 0.902778 +vt 0.972973 0.263889 +vt 1.000000 0.638889 +vt 0.972973 0.638889 +vt 1.000000 0.236111 +vt 1.000000 0.263889 +vt 0.972973 0.236111 +vt 1.000000 0.000000 +vt 0.972973 0.666667 +vt 1.000000 0.666667 +vt 0.972973 0.902778 +vt 0.810811 0.444444 +vt 0.864865 0.444444 +vt 0.810811 0.444444 +vt 0.864865 0.444444 +vt 0.864865 0.444444 +vt 0.864865 0.444444 +vt 0.972973 0.902778 +vt 1.000000 0.666667 +vt 0.972973 0.666667 +vt 1.000000 0.638889 +vt 0.972973 0.638889 +vt 1.000000 0.000000 +vt 0.972973 0.236111 +vt 1.000000 0.236111 +vt 0.972973 0.263889 +vt 1.000000 0.263889 +vt 0.972973 0.902778 +vt 1.000000 0.666667 +vt 0.972973 0.666667 +vt 1.000000 0.638889 +vt 0.972973 0.638889 +vt 1.000000 0.000000 +vt 0.972973 0.236111 +vt 1.000000 0.236111 +vt 0.972973 0.263889 +vt 1.000000 0.263889 +vt 0.540541 0.055556 +vt 0.000000 0.500000 +vt 0.054054 0.000000 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.702703 0.444444 +vt 0.702703 0.694444 +vt 0.810811 0.583333 +vt 0.972973 0.527778 +vt 0.972973 0.527778 +vt 0.972973 0.527778 +vt 0.972973 0.527778 +vt 0.972973 0.000000 +vt 1.000000 0.902778 +vt 0.972973 0.000000 +vt 1.000000 0.902778 +vt 0.810811 0.444444 +vt 0.810811 0.444444 +vt 1.000000 0.902778 +vt 0.972973 0.000000 +vt 1.000000 0.902778 +vt 0.972973 0.000000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7099 0.7043 0.0000 +vn 0.7099 -0.7043 0.0000 +vn -0.7071 -0.7071 0.0000 +s off +f 83/177/11 82/178/11 81/179/11 +f 88/180/12 103/181/12 86/182/12 +f 83/177/13 92/183/13 84/184/13 +f 82/178/14 90/185/14 81/179/14 +f 84/184/15 91/186/15 82/178/15 +f 81/179/12 89/187/12 83/177/12 +f 87/188/16 90/189/16 85/190/16 +f 85/190/16 91/186/16 86/191/16 +f 86/191/16 92/192/16 88/193/16 +f 88/193/16 89/194/16 87/188/16 +f 94/195/15 95/196/15 93/197/15 +f 97/198/12 99/199/12 98/200/12 +f 103/181/16 101/201/16 102/202/16 +f 95/196/16 98/200/16 93/197/16 +f 96/203/13 97/198/13 95/196/13 +f 93/197/14 99/204/14 94/205/14 +f 85/206/15 101/201/15 87/207/15 +f 87/208/14 104/209/14 88/210/14 +f 86/211/13 102/202/13 85/212/13 +f 106/213/15 107/214/15 105/215/15 +f 109/216/12 111/217/12 110/218/12 +f 107/214/16 110/218/16 105/215/16 +f 108/219/13 109/216/13 107/214/13 +f 105/215/14 111/220/14 106/221/14 +f 114/222/12 115/223/12 113/224/12 +f 117/225/15 119/226/15 118/227/15 +f 115/223/16 118/227/16 113/224/16 +f 116/228/14 117/225/14 115/223/14 +f 113/224/13 119/229/13 114/230/13 +f 122/231/12 123/232/12 121/233/12 +f 125/234/15 127/235/15 126/236/15 +f 123/232/16 126/236/16 121/233/16 +f 124/237/14 125/234/14 123/232/14 +f 121/233/13 127/238/13 122/239/13 +f 130/240/13 131/241/13 129/242/13 +f 133/243/14 135/244/14 134/245/14 +f 131/241/16 134/245/16 129/242/16 +f 132/246/12 133/243/12 131/241/12 +f 129/242/15 135/247/15 130/248/15 +f 138/249/13 139/250/13 137/251/13 +f 141/252/14 143/253/14 142/254/14 +f 139/250/16 142/254/16 137/251/16 +f 140/255/12 141/252/12 139/250/12 +f 137/251/15 143/256/15 138/257/15 +f 146/258/14 147/259/14 145/260/14 +f 149/261/13 151/262/13 150/263/13 +f 147/259/16 150/263/16 145/260/16 +f 148/264/15 149/261/15 147/259/15 +f 145/260/12 151/265/12 146/266/12 +f 154/267/14 155/268/14 153/269/14 +f 157/270/13 159/271/13 158/272/13 +f 155/268/16 158/272/16 153/269/16 +f 156/273/15 157/270/15 155/268/15 +f 153/269/12 159/274/12 154/275/12 +f 162/276/13 177/277/13 161/278/13 +f 176/279/16 174/280/16 175/281/16 +f 172/282/16 170/283/16 171/284/16 +f 168/285/13 173/286/13 169/287/13 +f 167/288/14 171/289/14 166/290/14 +f 169/287/15 172/282/15 167/288/15 +f 166/291/12 170/292/12 168/285/12 +f 163/293/14 175/294/14 164/295/14 +f 161/278/15 176/279/15 163/293/15 +f 164/296/12 174/297/12 162/276/12 +f 179/298/13 193/299/13 178/300/13 +f 192/301/16 190/302/16 191/303/16 +f 188/304/16 186/305/16 187/306/16 +f 184/307/13 189/308/13 185/309/13 +f 183/310/14 187/311/14 182/312/14 +f 185/309/15 188/304/15 183/310/15 +f 182/313/12 186/314/12 184/307/12 +f 180/315/14 191/316/14 181/317/14 +f 178/300/15 192/301/15 180/315/15 +f 181/318/12 190/319/12 179/298/12 +f 194/320/16 195/321/16 165/322/16 +f 194/320/17 198/323/17 196/324/17 +f 197/325/15 200/326/15 198/323/15 +f 195/321/18 201/327/18 165/322/18 +f 202/328/12 203/329/12 201/327/12 +f 206/330/16 207/331/16 205/332/16 +f 206/330/17 210/333/17 208/334/17 +f 209/335/15 212/336/15 210/333/15 +f 207/331/18 213/337/18 205/332/18 +f 214/338/12 215/339/12 213/337/12 +f 169/287/11 166/340/11 168/341/11 +f 185/309/11 182/342/11 184/343/11 +f 180/315/11 179/344/11 178/300/11 +f 163/293/11 162/345/11 161/278/11 +f 218/346/15 219/347/15 220/348/15 +f 220/348/19 226/349/19 228/350/19 +f 221/351/12 224/352/12 223/353/12 +f 223/353/20 227/354/20 225/355/20 +f 226/349/11 227/354/11 228/350/11 +f 230/356/15 231/357/15 232/358/15 +f 232/358/19 238/359/19 240/360/19 +f 233/361/12 236/362/12 235/363/12 +f 235/363/20 239/364/20 237/365/20 +f 238/359/11 239/364/11 240/360/11 +f 83/177/11 84/184/11 82/178/11 +f 88/180/12 104/209/12 103/181/12 +f 83/177/13 89/366/13 92/183/13 +f 82/178/14 91/367/14 90/185/14 +f 84/184/15 92/192/15 91/186/15 +f 81/179/12 90/368/12 89/187/12 +f 87/188/16 89/194/16 90/189/16 +f 85/190/16 90/189/16 91/186/16 +f 86/191/16 91/186/16 92/192/16 +f 88/193/16 92/192/16 89/194/16 +f 94/195/15 96/369/15 95/196/15 +f 97/198/12 100/370/12 99/199/12 +f 103/181/16 104/209/16 101/201/16 +f 95/196/16 97/198/16 98/200/16 +f 96/203/13 100/371/13 97/198/13 +f 93/197/14 98/200/14 99/204/14 +f 85/206/15 102/202/15 101/201/15 +f 87/208/14 101/201/14 104/209/14 +f 86/211/13 103/181/13 102/202/13 +f 106/213/15 108/372/15 107/214/15 +f 109/216/12 112/373/12 111/217/12 +f 107/214/16 109/216/16 110/218/16 +f 108/219/13 112/374/13 109/216/13 +f 105/215/14 110/218/14 111/220/14 +f 114/222/12 116/375/12 115/223/12 +f 117/225/15 120/376/15 119/226/15 +f 115/223/16 117/225/16 118/227/16 +f 116/228/14 120/377/14 117/225/14 +f 113/224/13 118/227/13 119/229/13 +f 122/231/12 124/378/12 123/232/12 +f 125/234/15 128/379/15 127/235/15 +f 123/232/16 125/234/16 126/236/16 +f 124/237/14 128/380/14 125/234/14 +f 121/233/13 126/236/13 127/238/13 +f 130/240/13 132/381/13 131/241/13 +f 133/243/14 136/382/14 135/244/14 +f 131/241/16 133/243/16 134/245/16 +f 132/246/12 136/383/12 133/243/12 +f 129/242/15 134/245/15 135/247/15 +f 138/249/13 140/384/13 139/250/13 +f 141/252/14 144/385/14 143/253/14 +f 139/250/16 141/252/16 142/254/16 +f 140/255/12 144/386/12 141/252/12 +f 137/251/15 142/254/15 143/256/15 +f 146/258/14 148/387/14 147/259/14 +f 149/261/13 152/388/13 151/262/13 +f 147/259/16 149/261/16 150/263/16 +f 148/264/15 152/389/15 149/261/15 +f 145/260/12 150/263/12 151/265/12 +f 154/267/14 156/390/14 155/268/14 +f 157/270/13 160/391/13 159/271/13 +f 155/268/16 157/270/16 158/272/16 +f 156/273/15 160/392/15 157/270/15 +f 153/269/12 158/272/12 159/274/12 +f 162/276/13 174/297/13 177/277/13 +f 176/279/16 177/277/16 174/280/16 +f 172/282/16 173/286/16 170/283/16 +f 168/285/13 170/292/13 173/286/13 +f 167/288/14 172/282/14 171/289/14 +f 169/287/15 173/286/15 172/282/15 +f 166/291/12 171/393/12 170/292/12 +f 163/293/14 176/279/14 175/294/14 +f 161/278/15 177/277/15 176/279/15 +f 164/296/12 175/394/12 174/297/12 +f 179/298/13 190/319/13 193/299/13 +f 192/301/16 193/299/16 190/302/16 +f 188/304/16 189/308/16 186/305/16 +f 184/307/13 186/314/13 189/308/13 +f 183/310/14 188/304/14 187/311/14 +f 185/309/15 189/308/15 188/304/15 +f 182/313/12 187/395/12 186/314/12 +f 180/315/14 192/301/14 191/316/14 +f 178/300/15 193/299/15 192/301/15 +f 181/318/12 191/396/12 190/319/12 +f 194/320/16 196/324/16 195/321/16 +f 194/320/17 197/325/17 198/323/17 +f 197/325/15 199/397/15 200/326/15 +f 195/321/18 202/328/18 201/327/18 +f 202/328/12 204/398/12 203/329/12 +f 206/330/16 208/334/16 207/331/16 +f 206/330/17 209/335/17 210/333/17 +f 209/335/15 211/399/15 212/336/15 +f 207/331/18 214/338/18 213/337/18 +f 214/338/12 216/400/12 215/339/12 +f 169/287/11 167/288/11 166/340/11 +f 185/309/11 183/310/11 182/342/11 +f 180/315/11 181/401/11 179/344/11 +f 163/293/11 164/402/11 162/345/11 +f 218/346/15 217/403/15 219/347/15 +f 220/348/19 219/347/19 226/349/19 +f 221/351/12 222/404/12 224/352/12 +f 223/353/20 224/352/20 227/354/20 +f 226/349/11 225/355/11 227/354/11 +f 230/356/15 229/405/15 231/357/15 +f 232/358/19 231/357/19 238/359/19 +f 233/361/12 234/406/12 236/362/12 +f 235/363/20 236/362/20 239/364/20 +f 238/359/11 237/365/11 239/364/11 diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_socket.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_socket.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0371157299248c9a1ca8017ff013cb81e33bc3 GIT binary patch literal 3353 zcmcgvXH?Tm`ksUq5d;)4f|LtUF(^c75ik@fMj#*x(k_W&0qI3RS`ttY0a>~fDJne_ z3!q>ixC&SxDAfRhfYL8TI!V}{_n!a%?1$a6`)TLPJMYZ<&hyOs%*;6xYeg^>7L*bM z00`qx8(9MYgSs$);D?NpU&&R-@cJ9#&m*7~hPZqO0HIF2k-_=koVg*g>)?t^>tbKK zSKJNlBUn^+Qb$ohx`%dQmg~N*V`o<{WURNQdSYtDH<@062;(-sBD-4;Wbea~zX6g~2Z-+st(JBN zCX*-oD-_RBl9l6Zod@0b!$5nw=3xX??7Gyo;HvY_oKmNzrarORVb2La-Q5Pn8F>R_ zGcll~rl(ico~`A6^X7@!BK4v_#2HNLkP;kR+1%Wm-N)YT4x(w(^uQzf_WswUlk*cR zrVhawcQoi35F}Yiu`W{BpO+%09HNS33z2BA!+{A60Z0~3{OXrH=k3)@jjtW!!(6&D ze{B8i8*#>+G#F)d5+bs+?Y^t#?~Ktc5aA^T6ELcz4y!<3{pUIv3fsr4R~4ODw2S~{^|0o8JM z=GU2-nMe0cg^P@J;RN9bybBql$Ai>6C^MtOTH=;wrfh!NYH3FpUxw$WzlWz+rgNqx zyCU_;ysP(L;PAUSc=iYwSQd{W(0k=dKZfTqY0q+#E3l)D}tb1+ebzx&o zZ8$d#RRouy2~h&HWnSJ^+B>^nrl&FVU>tGah~|^y+alf4Z1NUY#37_=#-4XpC56u* z@=>j+Y=m9%xS{IzQ>5xrV+OrAw>u$dd1i1i6*Xmeuv}V`)_2?7*3vuFAk^|?>CQ}= z3i0DKOSPh}YruJOoLDdh;n^~QhhuZ}%l=y^jR;m#Dz3b6**-jA`nlKF=TByTR;h5! z=O1WSd~D4?;iVh>9z3s5oBKmj8J^Gb4&zswE_D)Ui!tzQ3Ljb9P?fcsW8SM)0H{BB z^v5EpMD1;+H#2VsO@dd1`<;1|K0I)APC~esm-2=!vtpyd7T)zkfHOPm;k(tAjkgG& zNV8(?)ff~2*Un3`n;Dh|Q{K)k20JNww3U0x`N}5XajQC0Pn;jQm|qq-O%5rsIQld$0|x3K z7df{*JR$kmk<}$R;3EMDW-E<_JaNq1L-B2+LZIb%rg^_b3A$&?c5wz8o@%Y**8i9x zMwHduC|I$q=I<=&&pjFH_vq21Bu)WUXOlTd6rzSi=~-=J7a+0Ck~?H9CFFMQ;vQM& zzOx9`>E(JMTm(h41ICN?q-JMjB|o<7pTnHhW-y_+rd_-@;7($_;_{jr8fiPH=$}p` zNwM1rFqGTk${Grvp;{@ zhEBxNTb$q$pFUcUDqc5`V62a=*#5}*T#?YkO>7FL`zOT8!$Al70sQoBOv$&!VK%*R z?L_xy=TG{8aiW<~MMI=Yee|x{%ZocK3?#pk;xzgat?Ax96^MXqPcLkTam{10U1LU$ zlT-p!|d6FfYTGg?PihwOINR&oH}*tgw2UPN=Mf}nH%Rr zD$yd!s%*-80eZqhzZ;c;Pl%5%VbM_r#`z;N?>T7Vo)70&0(;FLrjc1Wp#6UI6XjPwkGXgKYT++0WuDpYC*woP=8n#z;XnzyT=3ZNBn3j67Z^af#o2n-g)Nxz0xR{^6tWq*>Ei|M zcA|Sj`*t4&x+`;c-Kx3e?`b!}hi}ht)1aETKOD6$_&v3Nc3uszd{tK#7OHp2>bCh} z2_ITt&Npsl4U}RQl;ymnh2T_qrLs_djIOT7GJiwRd~b7V0ZW~yOlZ6g`bHp-d zF{O<>F}h#Z`7d61y4kgxrH!`7_$WGMLfp}O)x+Yu6I)kYt*`vnx%Ta(bFQS1qG*n_ z15bYDUHwJ{Fp`?jvaB(X^(ZDV1ffz8$|a~_Mu1^2w7!V|{c}CO2kuEWHa0BYcr|d~ z0B-Vh9L*3guB&cPux`3Zb~~uATd~(bxhSBtBA_AK`+W=~ zUpU{|+*&20+}YsvUH$!s1Y1jK2yxwUH4TkI&emF0y_gbmy&MgfxEpnzzj=B2 zc~NmOUDqIAL9{iN?VDAKP}kJ7tyAb69L%Zp8oJ)CashhWI!ZLxqo~A9S07#3zQI8! zq(%IGI3N@#SouSgA)NMa$K`WQ8Rxf%0Ut@8MjRa2I@;MO;h4j-{v2E%3?T}t9Tbul zmNvs1su76bcmQ-w0FYG#AW`hkjWb+$!N@TU?p~E z%!rF^KhJCEZ^!fRvti)BTD;U=3~@&R4X+V72mT-0uH9I_4DO$!w7>W%8pDbyW9&b) z)Oyjk-v2)QUvvErXuqcaTEt+&N&?wifcDwK@ckcoQrgI}+}sm_^%2Rq?^my0opfTT zHSg2+aCKGcjt1={SoKM?4rcEeWy+6Z>%aaV|HDS<<;d-w%oyFxJzDb%7H>>2sx%}; F{sUAA?~?!k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_base.png b/src/main/resources/assets/hbm/textures/models/machines/battery_base.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b8e6447cbff211b6d26c12bca70eea87a54f8e GIT binary patch literal 626 zcmV-&0*(ENP)^bf=-N`PzCkS3HL{rm=}U)5+>{HFCS50 zuSp&~gR^8>vnB4W8B zF9t<|XiMbm;;#$PmdJ`wBnZ1_?G%N(^ozDc9=Rj}V^`$1@?HY{YD|5ufZZ`NHh11u zWUM+B=i7Egilk*0mMC)NuDv%e{+RZ;RI7K};rW#Eo3=;(_sNAty8QRCF|uOY>xxvW z9Idvt$H)uO?LE!YOj>LS(rL;!V$lQ@StD-OLc}lHwM!mY3lc>#V`PZ~Y(=7oNS8}} zjpKOJijyqM@{vHZmOk_0SsMgJf}ltc*_lnr#IALi*agAFE(j)eK?GxDt;DW%c-96% zksv4%1Vw_NNDveWf+9gsBnXNGL6IOR5=3x6&|k@4iqp?*xbh1?EJQH7c+`X|zY?S* z#$M-s1LC?Nsy$-eIn~7rto*VoGRBce9vHh_JH;!p%LPj|X{&3CyeqMA*KSK>#dS99 z+8~08td-ccP9Rb<%9r9)bmiPZaMgRZ+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_lead.png b/src/main/resources/assets/hbm/textures/models/machines/battery_lead.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3ab948329e7bdd678c98def127a794425155a6 GIT binary patch literal 1022 zcmVUTfYqko731wqs0I5rrwSPj} zH4_XB9m|xJqHdjwhj!=^XX%DStg4Na2)RSKa6bDIJH7MWS@$HQ-1*KvfAa2!@qOcg z)Amj~;qz4J`?oJ%71yasYkWqd(bUln8Db6Kt&m0#1W6c%^Uw6)L*Byr8IaBO&64dm zM%3Y=8x|c0kOl|L;j#IA{Zu*wax%Ru-gL9HY)HyGK8F&9p~u4H!RFLYr86MIo9oAK zX?I`Qcp2>OC;YXV>zkNN?=YK9Rvkl^)$wvZ3-6J-vPk_WqLZkEsPGyI(qQsjl;oAA z4&+_QIa63a_ZzGNBCGJ`+LPo+ZOS;ZYKXe7DO+pXJME;=Xo9-IX*CJQNT+ggASKCx zl%&i$(l+_NUudF=qDbi~z-mWQh=dRjLO?&Wc{E)V_^Ptjkt{?2=ytog-Es@_jBDxA*!CWtpyoHk>~qy15CQufxpa}L%bA@{$L=wbm#&ScwmEVsNL`Ec+KiD@v)QDI zc4Wjl^4;sNh<|x_`(bx!JzZrNf;4TiDbwAnE-M6C)s9^e%vyk~azQSFnI0oQ<>ZN^ zr)&nKt{uBP%vw0o1la~M)1`Fn=jI)`x3^cX1-UNOZXKyhwR^JBB?nTH97suWW27WG zM@o_dDM=2bB;DWNE7=jDs;se3HhFO|Zl}cxD!S=O6o|y%tc(0wAQ$;1K`!!3qFm&c zM7hW>338ENlH?-4YACBgy2vlda*<#EDU%|Px#07*qoM6N<$f*5+{ng9R* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_lithium.png b/src/main/resources/assets/hbm/textures/models/machines/battery_lithium.png new file mode 100644 index 0000000000000000000000000000000000000000..1a93d3c7224369e7cc997f9827994192caff2b98 GIT binary patch literal 1042 zcmV+t1nv8YP)e#3fYwmLG>o{@#VaLbFpM;3*p0=e7m+7F$UnnF@lyMVG@uOk_z3bvwupY3j!^`S#Z9jEt^JC5V3-!Nrqp}Ur(lv4vJ*CQv@+w>IfvQ(3o~i9$n%clH z5anyhp7{-_=jc>cysuPl>RJVBe!u|Tk;wtP=p8olgR{=$wbs8NrKncSL@^O8f2Db0E!UPG)0=G z0;XzfOJ0MNrz?lZm8K~+o6TTj@fsv0c@0vYuBr!aHXAYJ0sA)_Z;@`j&%42Bi9K`{Lrlt5>uokgL@y z8u~r6E+4Ij%f~KlE0;fpG9Oy0=~{fi>M=E2?K*M@m_z=-Z0o2l>&x~u zm(T4x)W(~Q>%>zzM(N@e1=~iDF7tsX$3(Tg5oDLes!844+&H;zU)6#fGGn(&)9Dld zaCLSM0C@lN8vyY6`6=4vW0$sGWbEEPoVPxwE89wtLuc&PwO^gx*!k5{ly-hqE>5Xr z?AA$Lkn5H>>dr4)3v%sAhl2T?yhs@)-vI`=+4)80-yZfAm48?B7ibS3E}=lGy8r+H M07*qoM6N<$g7RSm2mk;8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_quantum.png b/src/main/resources/assets/hbm/textures/models/machines/battery_quantum.png new file mode 100644 index 0000000000000000000000000000000000000000..66e455f240feb38473954915a94c091c105e9e32 GIT binary patch literal 1049 zcmV+!1m^pRP)I+W*mV4@yVIuZ{= zQDmgzJkO`TByWIV#6GOo>uR&v)Z6Uj^Ra{FTOi{&R=j^SVh-{m4Y)n%S&HD6A*drcDrCA zM_N`=G zkc1GpeYk-ucpAB7;J(v4xP7?MelJdgq?9&b%ETb*9<`kXnPpj!rfJ1se!lxukKzoP zxUci`w$r0F1H(X3N*m7O_jP}1f!2}h^}6bE7TYh1qSu9Nf4N*%?3w+L>#D{Em>xCo z55K}NY@Jt`!kCUl>&X3&KayiV70R29MGG>TpW40!C7}VyuetyLczgcdsYkS}QCn<~ z33b((zF9&zC$0bdc`UKg>5oa6hw93MUyxL%t^fRaEU}&QNE0yo>X0>nZzSI!+p)c{ zOf4r7p?*03ScP*UZAkX`6#xLjIf4CeT5sEo?Hz1vE<7FLh72f**j|t}C+S`N6Kmv< zzRXl?FUYbiU&~{(Y`aV)_8>^z{bS!?W7}mav8Y$<+8&8jVx=HWF8n-Hm+iTsN-XLX zyS81X5{vqaUE3~GiA4?4w#!svQG>MYGL=}=AZ@!$B^EVE+b&ayMGexn%T!`fgS723 zmDtutG+S9%vaiu>+{aj TRi{;b00000NkvXXu0mjf?n3y= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_redstone.png b/src/main/resources/assets/hbm/textures/models/machines/battery_redstone.png new file mode 100644 index 0000000000000000000000000000000000000000..e02f7a93711dd6f398bc59397150c85185789060 GIT binary patch literal 1149 zcmV-@1cLjCP)^1cxnF# z{~ht{#TK!pP7}SCTP#vZ>&8qEI_qXKYd$)YnUQ%Q&c|;*=H>0Yon?Lm z9HwXHDBq?6yPrOgL0o50$np)opVM(4GLRGi>7$O>*;!hxR^u}3yllJn_%U%`ZWcOCNuvIklxnp~l4SD43XX57w-H(0 z*}D3b9xN!EFJ~VtQ2tuEp%K*2juA!me&^6m#}Gj|b&O1v*PK7Ddub<8Nut7QP_z;w zQV|u!G6nLg-1PH^htqcI`>+4G20<2afBQXeqxGe~RxSlL030DDY z70HwM;^QWML=;2h;tlyuhM)o9_2N>j&T_d-RVmYIMKThX->#v44jeZqjv|U$MDg`c z6ZHng;;Yq`SXHo^NC0@Uv5H>}if?C4kOsj)MB~3&gCg$}ynM3;KrNZp63Ix3DDb)7 z#8E`?oi+ggjmz2aFrwH!ZN}^1r1{8(wL~&fh6N+Y65uYm=$N=ga7?LE5&?^eWbi=X z;Yx)JOq~aRDSk%O&5_q33`0be;+z7*1jqoGy6vGsFUlD%Rwb+^G6(`RDKPF6jQSTd z;g{1UmM8K6fbk)M(JaBRN1P%%;oY<67$yW`S%OmD!^6CX_qE>`^9hPRK`ukEvACrC zKCC8^J+7NimoSy{aL@OU&kzJY!DP;Z?_H6o`q3sPeUI$*3wd&NlU!r-V0|jr+g2-* z5tCFKEA#(Vf3z@Gk&hou#qD7j#!BOrm+aFSYb=qI_tm!xL_IAsnkEwv6P$;x1LuagT z%ZiQ-0(={P(*Uryx7Sshj#%NNJxDS|Bm(IJ0f589L*rso=g2{jnMPs~{0)oxip8S# z*p36yrA&T~WU$t?b#6S>?ZmyrTBAtoT$@J})jNeK!HsZj2AyVOf)h(|?LqC>?d056 zyS520U!o)wvm$T5@Xzx=mssc8&b8Cqbi^7SoWPZ1j6gqcXqJI&|;Y?FJ@geqDQF6L#!&f@lrRh)oi#`lH1^_W#=iV5FKX P00000NkvXXu0mjfJm)4Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/battery_schrabidium.png b/src/main/resources/assets/hbm/textures/models/machines/battery_schrabidium.png new file mode 100644 index 0000000000000000000000000000000000000000..da4a3637ada88bb5d41879c0d846277d67f29668 GIT binary patch literal 1003 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 literal 0 HcmV?d00001 From a944c28dd44712be602d830a0f4480ce7ad58eb7 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Fri, 26 Dec 2025 00:29:06 +0100 Subject: [PATCH 07/19] Added fluid valve with counter --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 +- .../hbm/blocks/network/FluidCounterValve.java | 68 ++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../network/TileEntityFluidCounterValve.java | 157 ++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../blocks/fluid_counter_valve_off.png | Bin 0 -> 4474 bytes .../blocks/fluid_counter_valve_on.png | Bin 0 -> 4489 bytes 7 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/blocks/network/FluidCounterValve.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a4c4381be..ed97a6af0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -743,7 +743,7 @@ public class ModBlocks { public static Block machine_microwave; public static Block machine_battery_socket; - + @Deprecated public static Block machine_battery_potato; @Deprecated public static Block machine_battery; @Deprecated public static Block machine_lithium_battery; @@ -787,6 +787,7 @@ public class ModBlocks { public static Block pipe_anchor; public static Block fluid_valve; public static Block fluid_switch; + public static Block fluid_counter_valve; public static Block fluid_pump; public static Block machine_drain; public static Block radio_torch_sender; @@ -1920,6 +1921,7 @@ public class ModBlocks { fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_switch = new FluidSwitch(Material.iron).setBlockName("fluid_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + fluid_counter_valve = new FluidCounterValve(Material.iron).setBlockName("fluid_counter_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_pump = new FluidPump(Material.iron).setBlockName("fluid_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_drain = new MachineDrain(Material.iron).setBlockName("machine_drain").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete"); radio_torch_sender = new RadioTorchSender().setBlockName("radio_torch_sender").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3205,6 +3207,7 @@ public class ModBlocks { register(pipe_anchor); register(fluid_duct_gauge); register(fluid_valve); + register(fluid_counter_valve); register(fluid_switch); register(fluid_pump); register(machine_drain); diff --git a/src/main/java/com/hbm/blocks/network/FluidCounterValve.java b/src/main/java/com/hbm/blocks/network/FluidCounterValve.java new file mode 100644 index 000000000..f0a202fbd --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/FluidCounterValve.java @@ -0,0 +1,68 @@ +package com.hbm.blocks.network; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityFluidCounterValve; +import com.hbm.util.i18n.I18nUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +import java.util.ArrayList; +import java.util.List; + +public class FluidCounterValve extends FluidDuctBase implements ILookOverlay, ITooltipProvider { + + @SideOnly(Side.CLIENT) + private IIcon iconOn; + + public FluidCounterValve(Material mat) { + super(mat); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconOn = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_on"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_off"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return metadata == 1 ? iconOn : blockIcon; + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityFluidCounterValve(); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityFluidCounterValve)) + return; + + TileEntityFluidCounterValve duct = (TileEntityFluidCounterValve) te; + + List text = new ArrayList<>(); + text.add("&[" + duct.getType().getColor() + "&]" + duct.getType().getLocalizedName()); + text.add("Counter: " + duct.getCounter()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a4cbb8014..cf5ce3cac 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -443,6 +443,7 @@ public class TileMappings { put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); put(TileEntityPipeExhaustPaintable.class, "tileentity_pipe_exhaust_paintable"); put(TileEntityFluidValve.class, "tileentity_pipe_valve"); + put(TileEntityFluidCounterValve.class, "tileentity_pipe_counter_valve"); put(TileEntityFluidPump.class, "tileentity_pipe_pump"); put(TileEntityPipeAnchor.class, "tileentity_pioe_anchor"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java new file mode 100644 index 000000000..285b49ce0 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java @@ -0,0 +1,157 @@ +package com.hbm.tileentity.network; + +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; +import com.hbm.handler.CompatHandler; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.uninos.UniNodespace; +import cpw.mods.fml.common.Optional; +import io.netty.buffer.ByteBuf; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) +public class TileEntityFluidCounterValve extends TileEntityPipeBaseNT implements SimpleComponent, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { + private long counter; + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + if(node != null && node.net != null && getType() != Fluids.NONE) { + counter += node.net.fluidTracker; + } + + networkPackNT(25); + } + } + + @Override + public boolean shouldCreateNode() { + return this.getBlockMetadata() == 1; + } + + public void updateState() { + this.blockMetadata = -1; // delete cache + + if(this.getBlockMetadata() == 0 && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, this.getType().getNetworkProvider()); + this.node = null; + } + } + + @Override + public boolean shouldRefresh(Block oldBlock, Block newBlock, int oldMeta, int newMeta, World world, int x, int y, int z) { + return oldBlock != newBlock; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + counter = nbt.getLong("counter"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setLong("counter", counter); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeLong(counter); + } + + @Override + public void deserialize(ByteBuf buf) { + this.counter = Math.max(buf.readLong(), 0); + } + + private void setState(int state) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, state, 2); + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.reactorStart", 1.0F, 1.0F); + updateState(); + } + + public long getCounter() { + return counter; + } + + @Optional.Method(modid = "OpenComputers") + public String getComponentName() { + return "ntm_fluid_counter_valve"; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getFluid(Context context, Arguments args) { + return new Object[] {getType().getName()}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getCounter(Context context, Arguments args) { + return new Object[] {counter}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] resetCounter(Context context, Arguments args) { + counter = 0; + markDirty(); + return new Object[] {}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getState(Context context, Arguments args) { + return new Object[] {getBlockMetadata() == 1 ? 1 : 0}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] setState(Context context, Arguments args) { + final int state = args.checkInteger(0); + if(state != 0 && state != 1) { + throw new IllegalArgumentException(); + } + setState(state); + return new Object[] {}; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "value").equals(name)) + return String.valueOf(counter); + if((PREFIX_VALUE + "state").equals(name)) + return String.valueOf(getBlockMetadata() == 1 ? 1 : 0); + return null; + } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "value", + PREFIX_VALUE + "state", + PREFIX_FUNCTION + "reset", + PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "state", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + if(name.equals(PREFIX_FUNCTION + "reset")) { + counter = 0; + markDirty(); + } else if(name.equals(PREFIX_FUNCTION + "setState")) { + setState(IRORInteractive.parseInt(params[0], 0, 1)); + } + return null; + } +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 567bd333d..ba4501b3e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5529,6 +5529,8 @@ tile.fluid_duct_neo.name=Universal Fluid Duct tile.fluid_duct_paintable.name=Paintable Coated Universal Fluid Duct tile.fluid_duct_solid.name=Coated Universal Fluid Duct (Deprecated) tile.fluid_pump.name=Flow Control Pump +tile.fluid_counter_valve.name=Fluid Valve with Counter +tile.fluid_counter_valve.desc=Beware of loops in your fluid network... tile.fluid_switch.name=Redstone Fluid Valve tile.fluid_valve.name=Fluid Valve tile.foam_layer.name=Foam layer diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png b/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png new file mode 100644 index 0000000000000000000000000000000000000000..77c0aa43272211bc25dccddb91684c995a4c196d GIT binary patch literal 4474 zcmeHKYfuzd7H-4ah@yt3QAvcJ=^5tP#qgXF#&uvAAR@%A?diS)E%RcgfdOB{ zNJ$_XQDfAo=%R@gkQfaHqX{G`>Mo+YWHB2Hf|3erYFBZIYgN#=w}*EnRa;bT{xMZO z-F?q@zI)Dh&pp-m4MS>jfFMMGAV`2NMPr2b=lILd2mXf+KB3^PwJbB6Gg2j}!)Z6O z7Jzc44uAqTYeo?FH&#Q!EblPCb3;|JUS6x$ZM)f|+jzY{c#fs(^v+7}q-Be?-WaU0 z`LyqEwit7dAL?xjI2-7d97p@a(u;^I#_Woc`0(@x zUYApKUuDH_-Iv{WCE;d6>{Tx8$$z9ZJzw2jt`(yJ$`*jfUc^#t~bXqkoVCKy|)|c zU#~~~elBl*CbddvyuDs`So>!1i}(7@t(|qR+t+WaptGS-dFamRy{StsSZrDTpJ8uO z{#g0;_9!}ahjHNehiiYR`?UIg)RWKS>eH^~`ukO0C^YYp-}kxS{+`v*6S3{Yj)uV6 zptL<)!tLb7$QN4*g`Y+Zv{&xcT?v%9lzn zH-qC) zIsS>u0~edc0^`r!SgxYI!%}yQS4# zbMnUep6*W7CmYx13=Vl|o1MEt=?4p8&AC}vTiN;*ByG0}DaLLBLbufciw;3z;@l33 zE&v>A0(q=Wjomxjf}t#<##YMogx-+^^4XL!C&(yE&7{i;XcdFS#R_8FBqXo`jzZm5 zi_Jy4)tHBugwOo22tz#(u0V}t>kVj<-3d^sP%0#Ft(z^DV6g%;#>tpTqh{F%1$(aR5*#9MSE-Go+_=pZ&QlC?Xn>1$vJQ^5+fbg9 zGTDnbHHJYuIvStVq1TVm+gu|mKs`im${`X936a$*n&{!;w8fBQB%ojQaAm?RDl!6> zy~s%eZ85NM;S(tsdd%NZoC4rl08G{o_DZ?<)X38X^CQ#{YE{?L%fTx1wLKgDK6beEj1^`z@%V=CmD^?*lTMTiNxT&x-gy#kyrScyERm=Hz}hrllj36p`sQhc340*?pGg-mh+ zinBX2?RJYA<3mDu&oQ$eZYPG~C=JB{NJ>a#q*y{qWSJ5PNkl^xA_*}`Ou*Y2)?E6( z(ER2>V}_SJg>}LCOFcuwJ1PSd4!;e*T3F9kLQ&7AASrq{1s7Ee7*Cv#YuH5RQ?@(+ zyT?emj*hdxQVM2DPRNvE6HbXuDqJd|r8s3Wn{cyP60M}6g;LOy*<^1mnjk zV1r*lCGfCRbV^UdgO-o!cgY&$d*m2`ym7ALYdG?>BW0BfL7oZXFE3=@{<(0_m(%IB zzIXiRz2GglP|(4jrXzHkgiPh1kM0!PzKnlPTU(PWsGjq5MAhPcq-JH}@_V!Qzm~DN zYH5~J(3~h(H{(dktEjQ6X>rI}Yx;M{5rXd8ygB}$^lE!YM|*5i;gJvI&B$LQ zUaj5-4^ry#4L;rPAm!ICz15~T&}uIE;#_dA=Dd489yI4LS^v}dq4|TqHS#IP zm$kE#x^cSq0FmH)^;q8LpKMxrY97Mwo6$QIiy5|$pU zYqDJ&n#X~e>ABngq)j)>ehRFT$KJXt>nRurB~Rwf|MuaP!3DH`+n(LCzFf2GQ506* z_0zkR@|LRn`hY`kecTgRNdDbd9A$d`Tg(6e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png b/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png new file mode 100644 index 0000000000000000000000000000000000000000..14f414cc7cef849796d5ab6e75f21dddb4c87cab GIT binary patch literal 4489 zcmeHKYfuzd7H;t|EMPQ>XmF8sH0laHGu`u^%qYkVFob~#5FhL#_H^HY)_Kw0z<@Dg zlnqA1E`}J48WR=b`XDHkh$t(RM2$f)VVAJ6WI=XCO^g^T(UgLFdw2+yRHdxi{9~$m zy8GPkeD|F1o_nhACTmjM#DLHM1VJX6%;4#Yx&UFV85;+f3`8PV{U5Q%j1qtxqP8y)n|Rx#WHQDY^gLhKbhQB zD7o?BOR>Sz9~dtlQ`}@4gZ(NRirmp(*Z$#D)wi;kuHZ>~?zS!d(RTUrfx6Si=jLoM zT?-jowL9Hg78QcsIkREIM|oi_O(Ea8ljonG`OlCQB%^9 zv*YTagBuQ_{(S{Cfl04RQm(Ewzi-+yeb()+lWU&3eMRK|MnKDA{> zan;sCQ+7{HF5{!G##KhlI+Z1j?&*M43-QF#A@+ zxg!M&73V6$A5MCuxpiTpCEwgR?o#hnO*j>mIX$yAtouP*);sf~dY-BI;&R`rv1Pq; z>)KoQ#6>+)d9tpwmKr)((Tse8PR%JtvG=V=d-L@jY<)d;>BO}QhqH@YL}*NP!WBgH zTD`aA=$C8Tue4~7ty`0R_rVxb4O<#ceIEvk&db2!T5d_yQEsP%q}?_k@j5-Q>JUV~ z*y|yw)qqEBAcJuk#J5kJ5~B=l5HC|&WEM{h$YkR4S&*8alt$&RrnIzp@uC2|R|g54 zfG1I})8XQDUW3@jtAo#iSt>?-5Pr2myxd|%W85r26%vI+hMBxf4k2C?fa+P=u1hh- z4p6{1gE*7tJvym0H#b+3E0?(03@NVFYNawlN)Q-CU|gPyC%u@9n~r^jL$qIYovDnLD?UeY7QB{HegDIM;?@unO|G7!+udT?oQ zk4jSj=gwv+V9Eh5e$H?Tni}%=WU~%mIy5B(4&a1P4$g{?m@>|6u?~3%5@aw=kIxH= zJp#!y_Qzt4h)o#rr87Jb=sv_d0zH_!4-8Qji_Yk#vW4)>MuS+GUq`zshSvEWm2wrZ zsR6)jYB`N5aHSp70;K{|+2l&CQl%zsHuW$nvy0|S`xRbHL770$t(k_l5`A@N}!@46^_GrD4@b*fTDzG0H(FmTFgeP zNQKg_R@<~n9~DjMV%@Bhgv-e|$qXR%xH5bLg5bJntJxqXB(ldAtAph2(7_;1WL(+a z#{+4M6QuH_peC+XsZ?5(Qj2TkxSY^D1}z0F2P;wF#AOnBe>TFh=wLEXSW>7{NZ|8; zx#(h8K=N)j&Fyv=#6n1@;5jsGf!m2DdD2Mo0FufGr4A=_gffjFbTTR^0Z2}OOILPt{lDR5*CpnY*duKpn^ zlXPVO*gXcybUYCjyUF*Z)nf zfXBxv;DTR4x$v-by}RIBc+i?)dp^#HTtoIF$flEpZP4-?Py7lFK?0`=*BIoToim_O z#G5T9(T$*Iri~4(cJxW$XQ7n*`wTLirn}tS8#5d`15_l z_+{t^$nkg+S(4hgEPj2&`S_BWf@c>vN+o|P??5U%tyzAv=jxdq+k304*JUVAg)iM% zR2mV4tlQ>yY0RwMD?cB90^z>#>&bi6+88^jDt&tV#?9C6oj$+2T)(E_g%AEsb5lB7 z!}!*Qw;g@+@6-o|zHzbE`N@y#%dMefZ$9_Zv8|udeo^msBbwr|^;bM?->l#}6Q)%K z*0eG5VrpM0;y=4+PiBOB`pN@-*V+oJEkrZ7ue1~#pSHSX$DiqwU(R|c`ePk8^K91S zB`a5iYy-15X1;7a*uPBe)`e9M&Cfz@}{&rte6`VlT+dme?ZK?iZ y#;t#~_a@dcZ8Lso$?&@*se3P7^50LJ?~m_@WfJGPN}`~qh}o26tX#74)&Bv>9BxJc literal 0 HcmV?d00001 From e601e79ad3bc0758de99c99a21f2279b3286d4d2 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Fri, 26 Dec 2025 15:05:47 +0100 Subject: [PATCH 08/19] Updated changelog --- changelog | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 53a3e52b4..9483965ac 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +## Added +* Fluid valve with counter to control and count fluid that pass through. + ## Changed * After not being part of worldgen for a long time, oily coal is finally being removed * The rare metal blocks that had been unobtainable and unused for the longest time have been removed @@ -7,4 +10,4 @@ ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases -* Fixed 528 coltan deposit config misspelling \ No newline at end of file +* Fixed 528 coltan deposit config misspelling From 5100384e18b86be4c672614e978254ead6ce21a6 Mon Sep 17 00:00:00 2001 From: Goaty1208 <93077779+Goaty1208@users.noreply.github.com> Date: Sat, 27 Dec 2025 23:40:46 +0100 Subject: [PATCH 09/19] mhmhmgmg pizza Fixed translations --- src/main/resources/assets/hbm/lang/en_US.lang | 4 +- src/main/resources/assets/hbm/lang/it_IT.lang | 145 +++++------------- 2 files changed, 37 insertions(+), 112 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 567bd333d..0546f6b45 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -308,7 +308,7 @@ book.starter.page15=Finally, you can create your first §oreal§r source of ener book.starter.title16=Conclusion book.starter.page16=If you've reached this far, you're on track to helping rebuild civilization. You've successfully recreated the advanced machinery of the pre-apocalypse - with nuclear power, petrochemicals, and more. I cannot know §ohow§r you will use these new-found advantages, but it's my personal hope you use them for the good of yourself and others - or at the very least, in self-defense. Au revoir! book.starter.title18=About the Author -book.starter.page18=vær is just a guy who has been trapped in the grey void featured in the Talking Head's §oOnce In A Lifetime§r for too long. He once found a studio door, but to his dismay found out it was a cardboard cut-out. +book.starter.page18=vær is just a guy who has been trapped in the grey void featured in the Talking Heads' §oOnce In A Lifetime§r for too long. He once found a studio door, but to his dismay found out it was a cardboard cut-out. #book.rbmk.cover=HOW 2 RBMK:$The Basics$of Reactor$Construction #book.rbmk.title1=Introduction @@ -339,7 +339,7 @@ book.starter.page18=vær is just a guy who has been trapped in the grey void fea #book.rbmk.page13=Clicking on the parts will select and deselect them. Using the colored buttons, you can quickly select all control rods of that color group. Button 'A' will select all control rods, 'X' will deselect all. #book.rbmk.page14=Entering a number 0-100 in the green box and then hitting the button next to it will set all selected control rods to this position. Button 'AZ-5' will cause all control rods to fully insert. #book.rbmk.title15=Fuel -#book.rbmk.page15=The §lfuel§r's reactivity is based on multiple factors. The main ones are the §lenrichment§r, §lxenon poison§r and the amount of incoming §lneutrons§r. Xenon builds up when the fuel receives few neutrons and burns away during normal operation. The effectivity of neutrons depends on the type, most fuels §lsplit best with slow neutrons§r. +#book.rbmk.page15=The §lfuel§r's reactivity is based on multiple factors. The main ones are the §lenrichment§r, §lxenon poison§r and the amount of incoming §lneutrons§r. Xenon builds up when the fuel receives few neutrons and burns away during normal operation. The effectiveness of neutrons depends on the type, most fuels §lsplit best with slow neutrons§r. #book.rbmk.title16=Meltdown #book.rbmk.page16=§4§lAvoid. diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 15b1138a4..09d271700 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -238,40 +238,40 @@ book.error.page8=§lName:§r "ERROR_DIODE_COLLISION" §lDescription:§r The part book.error.title9=Error 0x09 [BT] book.error.page9=§lName:§r "ERROR_BRANCHING_TURN" §lDescription:§r The particle has reached a turn with multiple exits. §lPotential fix:§r If your turn is a normal one, check if all the required coils are present (i.e. no holes in the coil layer). If the turn is intended to be branched, it requires a schottky particle diode that is correctly configured. -book.rbmk.cover=Il mio primo RBMK:$Basi per$costruire un$reattore +book.rbmk.cover=HOW 2 RBMK:$Aspetti Fondamentali$ della Costruzione $Dei Reattori book.rbmk.title1=Introduzione -book.rbmk.page1=§lRBMK§r è un reattore nucleare completamente modulare. A differenza degli altri reattori, non c'è nessun nucleo o limite di costruzione, piuttosto il comportamento e l'efficienza e data da com'è costruito il reattore e come interagiscono le parti tra loro. +book.rbmk.page1=L'§lRBMK§r è un reattore nucleare modulare. Ciò che lo contraddistingue dagli altri reattori è l'assenza di un vero e proprio "nocciolo" e la mancanza di restrizioni delle dimensioni. L'efficienza ed il comportamento del reattore deriva dunque dalla costruzione e dalle interazioni dei vari componenti. book.rbmk.title2=Calore -book.rbmk.page2=Come il reattore va, tende a generare §lcalore§r. Il calore si diffonderà tra le parti, diminuendo lentamente nel processo di fissione. L'obiettivo è quello di generare più calore possibile senza fondere il reattore, e trasferire esso nelle caldaie per raffreddate il reattore e produrre vapore. -book.rbmk.title3=Barre di combustibile -book.rbmk.page3=Le §lbarre di combustibile§r tendono a catturare il flusso di neutroni, causando al combustibile di reagire, rilasciando neutroni nel processo. I neutroni sono rilasciati in tutte e 4 le principali vie per un massimo di 5 blocchi. Il quantitativo di neutroni rilasciati, dipende dal combustibile usato. -book.rbmk.title4=Barre di regolazione -book.rbmk.page4=Le §lbarre di regolazione§r tendono a ridurre il numero di neutroni durante il passaggio. Quando sono completamente inserite, bloccano il passaggio di neutroni; Quando sono le barre sono parzialmente inserite, ne bloccano la metà di essi. Le barre di controllo sono un metodo per regolare i neutroni e anche per spengere il reattore. -book.rbmk.title5=Barre di regolazione - Usi -book.rbmk.title5.scale=0.9 -book.rbmk.page5=La barra attualmente inserita verrà visualizzata al centro della GUI. I bottoni colorati, alla sinistra della barra di controllo, gli daranno il gruppo di quel colore, e ciò può tornare utile quando si devono selezionare le barre, apparteneti a un certo gruppo, del §lRBMK§r dalla console di comando. I bottoni a destra permettono di inserire manualmente le barre con un incrementi del 25%%. -book.rbmk.title6=Barre di controllo automatiche -book.rbmk.page6=§lLe barre di controllo automatiche§r sono quasi identiche a quelle normali, ma non possono essere aggiustate manualmente, infatti si aggiusteranno da sole in base alla temperatura. Innanzitutto è necessario determinare quale funzione utilizzare, a quale profondità inserirla e a quale temperatura. -book.rbmk.title7=Caldaie -book.rbmk.page7=Le §lcaldaie§r è lu'unica parte attiva per il raffreddamento del reattore. Se il componente è al di sopra della temperature di ebollizione richiesta dal tipo di vapore, consumerà il quantitativo d'acqua necessario per portare la temperatura al di sotto di quella di ebollizione. -book.rbmk.title8=Riflettore di neutroni -book.rbmk.page8=il §lriflettore di neutroni§r bloccherà il passaggio di neutroni, di fatto verranno riflessi indietro, dalla barra di combustibile da cui provenivano. Può tornare molto utile per non sprecare neutroni inutilmente. -book.rbmk.title9=Assorbitore di neutroni -book.rbmk.page9=L'§lassorbitore di neutroni§r blocca i neutroni. I neutroni assorbiti non genereranno calore e saranno distrutti efficientemente. Questa funzionalità è utile per evitare di far reagire i neutroni con gli atomi del combustibile. -book.rbmk.title10=Ritardante in grafite -book.rbmk.page10=Il §lmoderatore in grafite§r converte i neutroni veloci in lenti quando essi ci passano attraverso. Molti conbustibili nucleari tendono a rilasciare neutroni veloci, mentre i neutroni lenti sono quelli necessari per la fissione, quindi l'uso di moderatori è altamente consigliato. -book.rbmk.title11=Colonne strutturali -book.rbmk.page11=Le §lcolonne strutturali§r non fanno nulla ai neutroni e non hanno nessun effetto speciale. E' raccomandato di riempire le parti vuote del reattore con le colonne strutturali, siccome possono trasferire il calore. -book.rbmk.title12=Console di comando -book.rbmk.page12=La §lconsole di comando§r del RBMK permette di controllare il reattore a distanza. Usando il §ldispositivo per connettere la console§r su una parte del RBMK e successivamente alla console, il reattore sarà collegato ad esso. La console di comando può controllare fino ad un massimo di 15x15 (per reattori più grandi dovrai usare più console). -book.rbmk.title13=Usi della console -book.rbmk.page13=Cliccare sulle parti del reattore permette di selezionare o deselezionare essa. Con i bottoni colorati potrai selezionare velocemente tutte le barre di controllo apparteneti a quel gruppo colorato. Il bottone "A" selezionerà tutte le barre di controllo, invece la "X" le deselezionerà. -book.rbmk.page14=Inserendo un numero da 0 a 100 innalzera tutte le barre di controllo selezionate a quella percentuale. Il bottone "AZ-5" inserirà tutte le barre, fino a raggiungere lo 0%%. -book.rbmk.title15=Combustibile nucleare -book.rbmk.page15=La risposta del §lcombustibile nucleare§r dipende da molti fattori. Alcuni dei pricipali sono la §lfortificazione§r, §ll'avvelenamento da xenon§r e il numero di §lneutrons§r in arrivo. Lo xenon tende a formarsi quando il combustibile non ha abbastanza neutroni e durante le normali operazioni, esso brucia. L'efficenza dei neutroni dipende dal combustibile, molti combustibili §lsi scissionano meglio con§r i §lneutroni lenti§r. +book.rbmk.page2=Durante l’operazione del reattore, verrà generato del §lcalore§r. Il calore si propagherà attraverso i componenti del reattore, decrementando nel contempo. L’obiettivo è di produrre la maggior quantità di calore possibile senza fondere il reattore e di spostare tale calore verso dei §lcanali per vapore§r, componente che raffredda il reattore e produce vapore. +book.rbmk.title3=Carburante +book.rbmk.page3=Le §lbarre di carburante§r cattureranno il flusso di neutroni, causando una reazione fissile all’interno della barra che a sua volta rilascerà neutroni. I neutroni vengono irradiati in tutte e quattro le direzioni cardinali con una distanza massima di 5 blocchi. La quantità totale di neutroni rilasciati dipende dal tipo di §lcarburante§r utilizzato. +book.rbmk.title4=Barre di Controllo +book.rbmk.page4=Le §lbarre di controllo§r decrementeranno la quantità di neutroni che vi passa attraverso. Se inserite pienamente, bloccheranno tutti i neutroni, se inserite a metà bloccherà il flusso della metà dei neutroni. Le barre di controllo vengono usate per regolare la reattività o per spegnere il reattore. +book.rbmk.title5=Barre di Controllo +book.rbmk.page5=In mezzo all’interfaccia c’è l’indicatore dell’inserimento attuale delle barre. I pulsanti colorati a sinistra aggiungeranno la barra ad un gruppo, per poter selezionare le barre in gruppo nella §lconsole RBMK§r. I pulsanti a destra permettono di inserire le barre manualmente ad incrementi del 25%. +book.rbmk.title6=Barre Automatiche +book.rbmk.page6=Le §lbarre di controllo automatiche§r funzionano in maniera quasi identica alla loro controparte normale, tuttavia si regoleranno automaticamente e non manualmente in base alla temperatura attuale. Prima va definita la funzione da utilizzare per determinare l’inserimento e la profondità da raggiungere. +book.rbmk.title7=Canali per Vapore +book.rbmk.page7=I §lcanali per vapore§r sono l’unico componente che riduce attivamente la temperatura del reattore. Se la temperatura raggiunge il punto di ebollizione del tipo di vapore selezionato, il canale agirà come un bollitore e tenterà di consumare abbastanza acqua per poter tornare a temperature inferiori, producendo vapore. +book.rbmk.title8=Riflettore Neutronico +book.rbmk.page8=Il §lriflettore neutronico§r bloccherà i neutroni che vi passano attraverso, riflettendoli verso la loro direzione d’arrivo. Sono utili per utilizzare flussi che altrimenti verrebbero sprecati. +book.rbmk.title9=Catturatore di Neutroni +book.rbmk.page9=Il §lcatturatore di neutroni§r assorbisce i neutroni, incredibilmente. I neutroni assorbiti non genereranno calore. Questo è utile per separare barre di carburante che altrimenti sarebbero a contatto. +book.rbmk.title10=Moderatori di Grafite +book.rbmk.page10=I §lmoderatori di grafite§r convertono flussi di di neutroni veloci in flussi lenti. La maggior parte dei carburanti si scindono in neutroni veloci e richiedono flussi lenti per scindersi, rendendo i moderatori fondamentali. +book.rbmk.title11=Colonna Strutturale +book.rbmk.page11=Le §lcolonne strutturali§r non trasferiscono calore né interagiscono con i neutroni. Non ha usi speciali, e può soltanto condurre calore, pertanto conviene utilizzarle per riempire i reattori. +book.rbmk.title12=Console +book.rbmk.page12=La §lconsole RBMK§r permette di controllare il reattore da lontano. Utilizzando l’§laccoppiatore di console RBMK§r su un componente di un RBMK e poi sulla console si può collegare i due dispositivi. La console può gestire solo segmenti di 15x15 componenti, tuttavia è possibile usare più console per controllare reattori più grandi. +book.rbmk.title13=Utilizzare la Console +book.rbmk.page13=Cliccare sulle parti per selezionarle/deselezionarle. Utilizzando i pulsanti colorati si può selezionare il gruppo corrispondente e controllare il gruppo simultaneamente. Il pulsante ‘A’ seleziona ogni barra di controllo, ‘X’ deseleziona tutto. +book.rbmk.page14=Inserendo un numero da 0 a 100 nel riquadro verde e premendo il pulsante adiacente si può impostare il livello di inserimento delle barre. Il pulsante ‘AZ-5’ causa l’inserimento totale di tutte le barre. +book.rbmk.title15=Carburante +book.rbmk.page15=La reattività del §lcarburante§r dipende da diversi fattori e supercazzole. Quelli principali sono l’§larricchimento§r, §lavvelenamento da xeno§r ed il §lflusso di neutroni§r. Lo xeno si accumula quando il carburante riceve pochi neutroni e viene bruciato durante l’operazione normale. L’efficacia dei neutroni dipende dal tipo, la maggior parte dei carburanti si §lscinde in neutroni lenti§r. book.rbmk.title16=Fusione -book.rbmk.page16=§4§lEVITALA. +book.rbmk.page16=§4§lAò, non lo fare, te scongiuro... +#TODO: Riscrivere sta merda book.starter.cover=$Guida su come ricostruore$una società industrializzata book.starter.title1=Introduzione book.starter.page1=Se stai leggendo questo libro, significa che molto probabilmente, in un modo o in un altro, la società è collassata. Governi, paesi e autorità sono concetti del passato - insieme ai servizi della vita civilizzata. Questa guida ti insegnerà a ricostruire la società e tutti la tecnologia e le macchine che ti cambieranno la vita. @@ -280,7 +280,7 @@ book.starter.page2=Mentre è impossibile definire lo stato del mondo in un tempo book.starter.title3=Incudini e presse book.starter.page3=La quintessenza per iniziare a revitalizzare l'industria, è un §lincudine§r e una §lpressa§r. L'incudine ti permette di creare machinnari iniziali come ad esempio l'asseblatore, mentre la pressa ti permette di creare piastre, fili e circuitit che non puoi assemblarli nell'incudine. book.starter.title4=Modelli -book.starter.page4=In ordine per stampare i metalli in forme utili, assemblare macchinari ed eseguire reazioni chimiche, avrai bisogno di creare una §lcartella per modelli macchina§r per creare vari stampi e modelli. +book.starter.page4=Per poter stampare i metalli in forme utili, assemblare macchinari ed eseguire reazioni chimiche, avrai bisogno di creare una §lcartella per modelli macchina§r per creare vari stampi e modelli. book.starter.title5=Scavo book.starter.page5=A seconda di quanto grave sia stato l'evento apocalittico iniziale per le strutture preesistenti del mondo, c'è una buona probabilità che pezzi e macchine possono essere riparati o salvati. Leghe metalliche come l'acciaio, parti come circuiti, e anche materiali fissili da centrali nucleari ti aspettano. Tuttavia, attenzione ad alcune rovine, ci puo essere un eccesso di pericolo come ad esempio un serpente nell'erba; pronto a mandarti K.O. con le radiazioni, trappole, o orrori indescrivibili... book.starter.title6=Primi macchinari @@ -302,92 +302,17 @@ book.starter.page12a=§oIl resto del libro involverà materiali riguardanti le book.starter.page12b=Un alta esposizione alle radiazioni può e ti causera danni corporei. Il primo passo per la prevenzione; è di assicurarsi di limitare l'esposizione ed indossare indumenti protettivi, come la §lTuta hazmat§r, o applicare §lRivestimenti§r sui vestiti o armature; puoi anche prendere il §lRad-X§r per limitare assunzione. Grazie alla medicina moderna, il secondo step può essere rimosso in caso di necessità; per esempio, un §lDecontaminatore del §lplayer§r riduce lentamente le radiazioni assorbite dal tuo corpo. §lRad-Away§r può essere utilizzato anche come profilassi post-esposizione, riduce velocemente ed effettivamente il danno da esposizione da radiazioni. book.starter.title13=Arricchimento dell'uranio book.starter.page13=Ci sono alcuni metodi facili per alimentare un reattore nucleare; ad esempio, l'§luranio naturale§r o il §lcombustibile al torio§r. Tuttavia, se stai cercando per qualcosa di più potente, puoi creare una cascata di arricchimento di due §lcentrifughe a gas§r per produrre §lcombustibile all'uranio§r con uno scarto di §lUranio-238§r. Dovrai trasmutare l'uranio in §lpangaillo§r, poi in §lesafluoruro di §luranio§r. -book.starter.title14=La pila Chicago -book.starter.page14=Alternativamente, puoi generare il §lplutonio di grado reattore§r, un combustibile più potente, dall'uranio naturale usando la §lpila Chicago§r. Sovrapponendo blocchi di grafite e trivellandoli, puoi inserire barre di combustibile da riproduzione per generare plutonio e fonti di neutroni, come il §lRadio-Berillio§r, per iniziare la reazione. Assicurati di testare i tuoi design; potrebbe essere necessario distanziare o limitare la quantità di blocchi per evitare il surriscaldamento. +book.starter.title14=La Chicago Pile +book.starter.page14=Alternativamente, puoi generare il §lplutonio di grado reattore§r, un combustibile più potente, dall'uranio naturale usando la §lChicago Pile§r. Sovrapponendo blocchi di grafite e trivellandoli, puoi inserire barre di combustibile da riproduzione per generare plutonio e fonti di neutroni, come il §lRadio-Berillio§r, per iniziare la reazione. Assicurati di testare i tuoi design; potrebbe essere necessario distanziare o limitare la quantità di blocchi per evitare il surriscaldamento. book.starter.title15=ZIRNOX GCR book.starter.page15=Finalmente, puoi creare la tua prima §overa§r fonte di energia: Il reattore nucleare §lZIRNOX§r. I reattori nucleari richiedono una sistemazione maggiore rispetto alle altre fonti di energia; per primo, avrai bisogno di una buona risorsa d'aqua, come il §lSerbatoio dell'acqua infinito pesante§r. Per rimuovere calore da reattore e per far bollire l'acqua, avrai bisogno di §lmonossido di carbonio§r. Dovrai creare una forte pressione, ma non §otroppa§r. Avrai anche bisogno di 3 turbine a vapore per produrre energia dal vapore prodotto; le §lturbine a vapore§r o le §lturbine a vapore industriali§r saranno ottime. Infine, un §lCondensatore§r o una §ltorre di raffreddamento ausiliaria§r servirà per condensare il vapore rimasto in acqua, dove può essere eliminato o riciclato in un circuito di raffreddamento. book.starter.title16=Conclusione book.starter.page16=Se sei arrivato così lontano, sei sulla strada per la ricostruzione della civilizzazione. Hai ricreato macchinari avanzati pre-apocalittici - con energia nucleare, prodotti petrolchimici e di più. Non posso sapere §ocome§r utilizzerai questi nuovi vantaggi, ma è mia personale speranza che tu li usi per il bene tuo e degli altri - o almeno per legittima difesa. Au revoir! book.starter.title18=Qualcosa sull'autore -book.starter.page18=vær è solo un ragazzo rimasto intrappolato nel vuoto grigio presente nei Talking Head §oUna volta nella vita§r molto a lungo. Una volta trovò la porta di uno studio, ma con suo sgomento scoprì che era un ritaglio di cartone. -book.starter.cover=An Industrialist's$Guide to Rebuilding$Society -book.starter.title1=Introduction -book.starter.page1=If you're reading this, it's highly likely that society, in one way or another, has collapsed entirely. Governments, countries, and authority are a concept of the past - along with all of the amenities of civilized life. As such, this guide will inform you how to change that by recreating the industry and technology of the past for the improvement of your own life. -book.starter.title2=Coal & Mustard Gas -book.starter.page2=Whilst it is impossible to predict the actual state of the world in a post-apocalyptic time, it's not unlikely that war and industry in its current form may not have ended. To protect your own lungs, an effective and cheap way is to urinate on some §lcloth§r to make a §ltrench mask§r, to protect you from coal dust or mustard gas, if you ever encounter either. -book.starter.title3=Anvils & Presses -book.starter.page3=The quintessentials to beginning your industrial revitalization is an §lanvil§r and a §lburner press§r. The anvil will allow you to manually craft together early machinery such as the Assembler, whilst the burner press will let you make plates, wires, and circuits that you cannot hammer together with an anvil. -book.starter.title4=Templates -book.starter.page4=In order to stamp metal into useful shapes, assemble machinery, and perform chemical reactions, you will need to create a §lMachine Template Folder§r to create the various stamps and templates shown to the right. -book.starter.title5=Scavenging -book.starter.page5=Depending on how bad the initial apocalyptic event was to the preexisting structures of the world, there's a likely chance that many useful materials and machines can be salvaged from them directly. Metallic alloys like steel, parts like circuitry, and even fissile material from a nuclear power plant might be awaiting you. Beware certain ruins, however, as there may be an excess of danger lurking there like a snake in the grass; waiting to strike you down with radiation, traps, or indescribable horrors... -book.starter.title6=Early Machinery -book.starter.page6a=Two of the first machines you should assemble are the §lBlast Furnace§r and the §lAssembly Machine§r. The former will allow you to create alloys such as §lsteel§r, §lminecraft-grade copper§r, and §ladvanced alloy§r; you will need to use these metals for the bodies of machines, the wiring of circuits, advanced electromagnets, and more. -book.starter.page6b=The assembler will be used to create practically every other machine described in this guide. You will need a power source, such as a §lCombustion§r §lGenerator§r or §lSolar Boiler§r. -book.starter.page7a=The §lShredder§r, along with a pair of shredder blades, will be very useful for doubling the output of most ores, via shredding into smeltable powders. These powders are also crucial to begin making circuitry for various machines, such as §lEnhanced§r and §lOverclocked§r circuits. -book.starter.page7b=Using your new machinery, you can create the §lChemical Plant§r, used for the synthesis of better circuits, concrete, the processing of petrochemicals, and more. -book.starter.title8=Black Gold -book.starter.page8a=Using an §lOil §lReservoir§r §lDetector§r, you can find underground oil deposits to place a §lPumpjack§r or §lDerrick§r over via surveying an area. Remember that oil deposits will run out over time. -book.starter.page8b=Before the oil can be refined and separated into its constituent parts in an §lOil Refinery§r, you must heat the oil to 300°C in a §lBoiler§r. -book.starter.title9=Petrochemicals -book.starter.page9=Using §lChemical Plants§r, §lFractioning§r §lTowers§r, and §lCatalytic Cracking§r §lTowers§r, you can transform the separated oil into a variety of useful products. For example: §lPolymer§r or §lBakelite§r, durable and flexible plastics; §lDesh§r, an extremely durable and heat-resistant rare earth metal alloy; §lSolid Fuel§r, which can be burnt for energy; or even §lLiquid Fuels§r, such as §lGasoline§r, §lDiesel§r, §lKerosene§r, and more. -book.starter.title10=Advanced Machinery -book.starter.page10=With oil processing under your belt, you can create the §lCentrifuge§r, which will triple ore outputs; the §lOre §lAcidizer§r, which will crystallize ores, increasing the yield; and the §lSILEX + §lFEL§r, two marvels of modern engineering which can separate the isotopes of materials with ease. You will require significantly more energy to power these; which can be obtained with sources such as a §lDiesel Generator§r, an §lIndustrial Generator§r, or even a nuclear reactor. -book.starter.title11=Strata -book.starter.page11=Underneath the ground you walk, there is several naturally-occurring §lStrata§r, or special mineral layers and formations. §lSchist Strata§r are blue, lithium-containing layers filled with uranium, iron, copper, asbestos, and other ores for your own use. §lDepth Rock§r contains large quantities of rarer minerals, such as §lZirconium§r and §lBoron§r, but requires explosives to properly harvest. -book.starter.title12=Radiation -book.starter.page12a=§oThe rest of this book will deal with matters that involve §oradiation. For the safety of you and others, I will give §oadvice on how to mitigate and deal with exposure to it. -book.starter.page12b=Enough exposure to radiation can and will cause bodily harm. The first step is prevention; be sure to limit your exposure, and wear protective gear, such as a §lHazmat Suit§r, or apply §lCladding§r to your clothing or armor; you can also take §lRad-X§r to limit your intake. Thanks to modern medicine, the second step can be removal if necessary; for example, a §lPlayer §lDecontaminator§r will slowly reduce the radiation absorbed by your body. §lRad-Away§r can also be used as a post-exposure prophylaxis, quickly and effectively reversing damage caused to your body by ionizing radiation. -book.starter.title13=Uranium Enrichment -book.starter.page13=There are a few, easy options for fuels to use for a nuclear reactor; for instance, §lNatural Uranium§r or §lThorium Fuel§r. However, if you're looking for something more powerful, you can set up an enrichment cascade of two §lGas Centrifuges§r to produce §lUranium Fuel§r with leftover §lUranium-238§r. You will have to transmute the natural uranium into §lYellowcake§r, then §lUranium §lHexafluoride§r to do so. -book.starter.title14=The Chicago Pile -book.starter.page14=Alternatively, you can breed §lReactor-Grade Plutonium§r, a more powerful fuel, from Natural Uranium using the §lChicago Pile§r. By stacking graphite blocks and drilling into them, you can insert fuel rods to breed into plutonium and neutron source rods, such as §lRadium-Beryllium§r, to begin the reaction. Make sure to test your designs; spacing out or limiting the amount of blocks may be necessary to prevent overheating. -book.starter.title15=ZIRNOX GCR -book.starter.page15=Finally, you can create your first §oreal§r source of energy: the §lZIRNOX§r Nuclear Reactor. Nuclear reactors require more setup then other power sources; first, you will want to have a good source of water, such as the §lHeavy §lInfinite Water Tank§r. To remove heat from the reactor core and boil the water into steam, you will need a sufficient amount of §lCarbon Dioxide§r. You want just enough pressure, but not §otoo§r much. You will also need three steam turbines to utilize the created steam to make energy; the §lSteam §lTurbine§r or §lIndustrial Steam §lTurbine§r will be optimal. Finally, a §lCondensor§r or §lAuxilary Cooling Tower§r is needed to condense the leftover steam into water, where it can be voided or recycled in a cooling loop. -book.starter.title16=Conclusion -book.starter.page16=If you've reached this far, you're on track to helping rebuild civilization. You've successfully recreated the advanced machinery of the pre-apocalypse - with nuclear power, petrochemicals, and more. I cannot know §ohow§r you will use these new-found advantages, but it's my personal hope you use them for the good of yourself and others - or at the very least, in self-defense. Au revoir! -book.starter.title18=About the Author -book.starter.page18=vær is just a guy who has been trapped in the grey void featured in the Talking Head's §oOnce In A Lifetime§r for too long. He once found a studio door, but to his dismay found out it was a cardboard cut-out. - -#book.rbmk.cover=HOW 2 RBMK:$The Basics$of Reactor$Construction -#book.rbmk.title1=Introduction -#book.rbmk.page1=The §lRBMK§r is a fully modular nuclear reactor. Unlike most other reactors, there is no "core", and no size limitations, rather, the behavior and efficiency of the reactor comes from how it is built and how the different pieces interact with each other. -#book.rbmk.title2=Heat -#book.rbmk.page2=As the reactor operates, it will generate §lheat§r. Heat will spread between parts, slowly decreasing in the process. The goal is to produce as much heat as possible without melting the reactor, and to move that heat to a §lsteam channel§r which cools the reactor and produces steam. -#book.rbmk.title3=Fuel Rod -#book.rbmk.page3=The §lfuel rod§r will capture neutron flux, causing the fuel inside the fuel rod to react, giving off neutrons in the process. Neutrons are released in all four cardinal directions with a maximum range of 5 blocks. The amount of neutrons released depends on the §lfuel§r used. -#book.rbmk.title4=Control Rod -#book.rbmk.page4=The §lcontrol rod§r will decrease the amount of neutrons passing though it. Fully inserted, it will block all neutrons, at half insertion, it will only block half. Control rods are used to regulate the reactor's activity and to turn it off. -#book.rbmk.title5=Control Rod - Usage -#book.rbmk.page5=The center of the GUI will display the current rod insertion. The colored buttons on the left will add a control rod to a color group, which is useful to quickly select grouped rods from the §lRBMK console§r. The buttons on the right allow for manual insertion in increments of 25%%. -#book.rbmk.title6=Automatic Control Rod -#book.rbmk.page6=§lAutomatic control rods§r function nearly identical to regular control rods, but they cannot be configured manually, instead they will adjust the rod position based on the current temperature. What function to use and how deep to insert at what temperature has to be defined first. -#book.rbmk.title7=Steam Channel -#book.rbmk.page7=The §lsteam channel§r is the only part that will actively reduce the reactor's heat level. If the component's temperature exceeds the boiling point of the set steam type, it will try to consume as much water and produce as much steam as needed to cool back below the boiling point. -#book.rbmk.title8=Neutron Reflector -#book.rbmk.page8=The §lneutron reflector§r will block neutrons from passing it, instead the neutrons will be reflected back at the fuel rod they came from. This is useful for utilizing neutrons that would otherwise be wasted by simply exiting the reactor. -#book.rbmk.title9=Neutron Absorber -#book.rbmk.page9=The §lneutron absorber§r will simply block neutrons. Neutrons absorbed will not generate heat and be effectively voided. This is useful to prevent fuel rods from reacting that would otherwise be in range. -#book.rbmk.title10=Graphite Moderator -#book.rbmk.page10=The §lgraphite moderator§r will convert fast neutrons passing through it into slow neutrons. Most fuels fission into fast neutrons while needing slow neutrons to split, so using moderators is strongly recommended. -#book.rbmk.title11=Structural Column -#book.rbmk.page11=The §lstructural column§r will not interfere with neutrons, nor does it have special uses. It is recommended to fill the reactor with structural columns where no other parts will be, because structural columns are capable of transporting heat. -#book.rbmk.title12=Console -#book.rbmk.page12=The §lRBMK console§r lets you control the reactor from afar. Using the §lRBMK§r §lconsole linking device§r on an RBMK part and then the console will link the reactor to the console. The console can only manage 15x15 parts, for larger reactors you might want to use multiple consoles. -#book.rbmk.title13=Console Usage -#book.rbmk.page13=Clicking on the parts will select and deselect them. Using the colored buttons, you can quickly select all control rods of that color group. Button 'A' will select all control rods, 'X' will deselect all. -#book.rbmk.page14=Entering a number 0-100 in the green box and then hitting the button next to it will set all selected control rods to this position. Button 'AZ-5' will cause all control rods to fully insert. -#book.rbmk.title15=Fuel -#book.rbmk.page15=The §lfuel§r's reactivity is based on multiple factors. The main ones are the §lenrichment§r, §lxenon poison§r and the amount of incoming §lneutrons§r. Xenon builds up when the fuel receives few neutrons and burns away during normal operation. The effectivity of neutrons depends on the type, most fuels §lsplit best with slow neutrons§r. -#book.rbmk.title16=Meltdown -#book.rbmk.page16=§4§lAvoid. +book.starter.page18=vær è solo un ragazzo rimasto intrappolato nel vuoto grigio del video musicale de §oOnce in a Lifetime§r dei Talking Heads molto a lungo. Una volta trovò la porta di uno studio, ma con suo sgomento scoprì che era un ritaglio di cartone. +#TODO: Rivedere, correggere errori di battitura book_lore.author=Di %s -book_lore.test.name=questo libro non funziona... -book_lore.test.author=io ti ho trollato eheh :3c -book_lore.test.page.0=>ciao anonimi, prima di iniziare vorrei chiarire che non sono gay. >Sii me >Questa notte >18 > Uscendo con il mio migliore amico senza i miei genitori per alcuni giornis >Siamo migliori amici ormai da un anno >Abbiamo bevuto un po', giocato a molti videogiochi e ordinato una pizza >Ci stavamo divertendo molto >A un certo punto della notte, verso le 9:00, fa una cosa davvero divertente battuta che non ricordo ma so che ci ha fatto ridere tantissimo tutti e due > Senza pensarci passo la mano destra tra i suoi capelli neri semiricci e lo chiamo ragazzo simpatico > Lui arrossisce > Mi rendo conto che mi sento agitato >Siamo abbastanza vicini >All'improvviso lui mi bacia e per qualche motivo io lo bacio >Facciamo l'amore >Ci coccoliamo insieme e ci addormentiamo >Svegliarsi nel cuore della notte con la sua testa rannicchiata sul mio petto e zona del collo >È stato bello ma non sono omosessuale. -book_lore.test.page.1=Lo scrivo mentre lui dorme tra le mie braccia. Come posso deludere bene il mio migliore amico? Non voglio essere un [censurato] /b/ -book_lore.author=By %s book_lore.test.name=this book doesn't work... book_lore.test.author=me i trolled you hehe :3c book_lore.test.page.0=>hello anons before i begin let me clarify that i'm not gay. >Be me >This night >18 > At hanging out with my best friend with my parents gone for a few days >We've been best friends for a year now >Been drinking a bit and playing lots of video games and ordered a pizza >We were having a blast >At a certain point in the night like around 9:00 he makes a really funny joke that I don't remember but I know that it made us both laugh really hard > With out thinking I brush my right hand through his semi-curly black hair and call him a funny boy >He blushes >I realize I'm feeling flustered >We're kinda close >All of the sudden he kisses me and for some reason I kiss him back >We make love >Cuddle together and fall asleep >Wake up in the middle of the night with his head snuggled up on my chest and neck area >It feels nice but I'm not a homosexual From 59bccc9be3f09772885926a632d330c2fc830928 Mon Sep 17 00:00:00 2001 From: Wolf Date: Sat, 27 Dec 2025 18:46:01 -0500 Subject: [PATCH 10/19] Why am I being asked for this so often --- src/main/java/com/hbm/main/CraftingManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 4146f92a5..fc5709cfd 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -626,7 +626,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.fluid_barrel_empty, 2), new Object[] { "121", "1G1", "121", '1', STEEL.plate(), '2', AL.plate(), 'G', KEY_ANYPANE }); if(!GeneralConfig.enable528) { - addRecipeAuto(new ItemStack(ModItems.inf_water, 1), new Object[] { "222", "131", "222", '1', Items.water_bucket, '2', AL.plate(), '3', DIAMOND.gem() }); + addRecipeAuto(new ItemStack(ModItems.inf_water, 1), new Object[] { "222", "131", "222", '1', Fluids.WATER.getDict(1_000), '2', AL.plate(), '3', DIAMOND.gem() }); addRecipeAuto(new ItemStack(ModItems.inf_water_mk2, 1), new Object[] { "BPB", "PTP", "BPB", 'B', ModItems.inf_water, 'P', STEEL.pipe(), 'T', STEEL.shell() }); } From e629802bcbbe148d738dd84470fca802a4f60dc7 Mon Sep 17 00:00:00 2001 From: Goaty1208 <93077779+Goaty1208@users.noreply.github.com> Date: Sun, 28 Dec 2025 11:42:38 +0100 Subject: [PATCH 11/19] Cruciblelicious --- src/main/resources/assets/hbm/lang/it_IT.lang | 239 +++++++++--------- 1 file changed, 120 insertions(+), 119 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 09d271700..5461f533f 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -1702,139 +1702,140 @@ hbmpseudofluid.pf6=Plutonium Hexafluoride hbmpseudofluid.mud_heavy=Heavy Sludge Fraction hbmpseudofluid.mud=Poisonous Sludge Gas -hbmmat.actinium227=Actinium-227 -hbmmat.advancedalloy=Advanced Alloy -hbmmat.aluminum=Aluminium -hbmmat.americiumrg=Reactor-Grade Americium -hbmmat.americium241=Americium-241 -hbmmat.americium242=Americium-242 -hbmmat.arsenic=Arsenic -hbmmat.arsenicbronze=Arsenic Bronze -hbmmat.asbestos=Asbestos +#TODO: Translate all this +hbmmat.actinium227=Attinio-227 +hbmmat.advancedalloy=Lega Avanzata +hbmmat.aluminum=Alluminio +hbmmat.americiumrg=Americio da Reattore +hbmmat.americium241=Americio-241 +hbmmat.americium242=Americio-242 +hbmmat.arsenic=Arsenico +hbmmat.arsenicbronze=Bronzo Arsenicale +hbmmat.asbestos=Amianto hbmmat.bakelite=Bakelite -hbmmat.beryllium=Beryllium -hbmmat.bismuth=Bismuth -hbmmat.bismuthbronze=Bismuth Bronze -hbmmat.borax=Borax -hbmmat.boron=Boron -hbmmat.cadmium=Cadmium -hbmmat.calcium=Calcium -hbmmat.carbon=Carbon -hbmmat.cdalloy=Cadmium Steel -hbmmat.cinnabar=Cinnabar -hbmmat.cmbsteel=Combine Steel -hbmmat.coal=Coal -hbmmat.coalcoke=Coal Coke -hbmmat.cobalt=Cobalt -hbmmat.cobalt60=Cobalt-60 +hbmmat.beryllium=Berillio +hbmmat.bismuth=Bismuto +hbmmat.bismuthbronze=Bronzo di Bismuto +hbmmat.borax=Borace +hbmmat.boron=Boro +hbmmat.cadmium=Cadmio +hbmmat.calcium=Calcio +hbmmat.carbon=Carbonio +hbmmat.cdalloy=Acciaio di Cadmio +hbmmat.cinnabar=Cinabro +hbmmat.cmbsteel=Acciaio Combine +hbmmat.coal=Carbone +hbmmat.coalcoke=Coke di Carbone +hbmmat.cobalt=Cobalto +hbmmat.cobalt60=Cobalto-60 hbmmat.coltan=Coltan -hbmmat.copper=Copper +hbmmat.copper=Rame hbmmat.desh=Desh -hbmmat.dineutronium=Dineutronium -hbmmat.durasteel=High-Speed Steel -hbmmat.euphemium=Euphemium -hbmmat.ferrouranium=Ferrouranium -hbmmat.fiberglass=Fiberglass +hbmmat.dineutronium=Dineutronio +hbmmat.durasteel=Acciaio Super Rapido +hbmmat.euphemium=Euphemio +hbmmat.ferrouranium=Ferrouranio +hbmmat.fiberglass=Vetroresina hbmmat.fluorite=Fluorite -hbmmat.flux=Flux -hbmmat.ghiorsium336=Ghiorsium-336 -hbmmat.gold=Gold -hbmmat.gold198=Gold-198 -hbmmat.graphene=Graphene -hbmmat.graphite=Graphite -hbmmat.hematite=Hematite -hbmmat.iron=Iron -hbmmat.lapis=Lapis Lazuli -hbmmat.lead=Lead -hbmmat.lead209=Lead-209 -hbmmat.lignitecoke=Lignite Coke +hbmmat.flux=Flussante +hbmmat.ghiorsium336=Ghiorsio-336 +hbmmat.gold=Oro +hbmmat.gold198=Oro-198 +hbmmat.graphene=Grafene +hbmmat.graphite=Grafite +hbmmat.hematite=Ematite +hbmmat.iron=Ferro +hbmmat.lapis=Lapis Lazulo +hbmmat.lead=Piombo +hbmmat.lead209=Piombo-209 +hbmmat.lignitecoke=Coke di Lignite hbmmat.lignite=Lignite -hbmmat.lithium=Lithium -hbmmat.magnetizedtungsten=Magnetized Tungsten +hbmmat.lithium=Litio +hbmmat.magnetizedtungsten=Tungsteno Magnetizzato hbmmat.malachite=Malachite -hbmmat.meteoriciron=Meteoric Iron -hbmmat.mingrade=Minecraft Grade Copper -hbmmat.neodymium=Neodymium -hbmmat.neptunium237=Neptunium-237 -hbmmat.niobium=Niobium -hbmmat.obsidian=Obsidian -hbmmat.osmiridium=Osmiridium -hbmmat.petcoke=Petroleum Coke -hbmmat.pigiron=Pig Iron -hbmmat.plutonium=Plutonium -hbmmat.plutonium238=Plutonium-238 -hbmmat.plutonium239=Plutonium-239 -hbmmat.plutonium240=Plutonium-240 -hbmmat.plutonium241=Plutonium-241 -hbmmat.plutoniumrg=Reactor-Grade Plutonium -hbmmat.polonium210=Polonium-210 -hbmmat.polymer=Polymer -hbmmat.radium226=Radium-226 -hbmmat.redphosphorus=Red Phosphorus -hbmmat.redstone=Redstone -hbmmat.rubber=Rubber -hbmmat.saltpeter=Niter +hbmmat.meteoriciron=Ferro Meteorico +hbmmat.mingrade=Rame Minecraft-Grade +hbmmat.neodymium=Neodimio +hbmmat.neptunium237=Nettunio-237 +hbmmat.niobium=Niobio +hbmmat.obsidian=Ossidiana +hbmmat.osmiridium=Osmiridio +hbmmat.petcoke=Coke di Petrolio +hbmmat.pigiron=Ferro del Porco +hbmmat.plutonium=Plutonio +hbmmat.plutonium238=Plutonio-238 +hbmmat.plutonium239=Plutonio-239 +hbmmat.plutonium240=Plutonio-240 +hbmmat.plutonium241=Plutonio-241 +hbmmat.plutoniumrg=Plutonio da Reattore +hbmmat.polonium210=Polonio-210 +hbmmat.polymer=Polimero +hbmmat.radium226=Radio-226 +hbmmat.redphosphorus=Fosforo Rosso +hbmmat.redstone=Pietrarossa +hbmmat.rubber=Gomma +hbmmat.saltpeter=Salnitro hbmmat.saturnite=Saturnite -hbmmat.schrabidate=Ferric Schrabidate -hbmmat.schrabidium=Schrabidium -hbmmat.schraranium=Schraranium -hbmmat.silicon=Silicon -hbmmat.slag=Slag -hbmmat.sodium=Sodium -hbmmat.solinium=Solinium +hbmmat.schrabidate=Schrabidio Ferrico +hbmmat.schrabidium=Schrabidio +hbmmat.schraranium=Schraranio +hbmmat.silicon=Silicio +hbmmat.slag=Scorie +hbmmat.sodium=Sodio +hbmmat.solinium=Solinio hbmmat.starmetal=Starmetal -hbmmat.steel=Steel -hbmmat.stone=Stone -hbmmat.sulfur=Sulfur -hbmmat.tantalum=Tantalum -hbmmat.tcalloy=Technetium Steel -hbmmat.technetium99=Technetium-99 -hbmmat.titanium=Titanium -hbmmat.thorium232=Thorium-232 -hbmmat.tungsten=Tungsten -hbmmat.uranium=Uranium -hbmmat.uranium233=Uranium-233 -hbmmat.uranium235=Uranium-235 -hbmmat.uranium238=Uranium-238 -hbmmat.watzmud=Poisonous Mud -hbmmat.whitephosphorus=White Phosphorus +hbmmat.steel=Acciaio +hbmmat.stone=Pietra +hbmmat.sulfur=Zolfo +hbmmat.tantalum=Tantalio +hbmmat.tcalloy=Acciaio di Tecnezio +hbmmat.technetium99=Tecnezio-99 +hbmmat.titanium=Titanio +hbmmat.thorium232=Torio-232 +hbmmat.tungsten=Tungsteno +hbmmat.uranium=Uranio +hbmmat.uranium233=Uranio-233 +hbmmat.uranium235=Uranio-235 +hbmmat.uranium238=Uranio-238 +hbmmat.watzmud=Fango Tossico +hbmmat.whitephosphorus=Fosforo Bianco hbmmat.workersalloy=Desh -hbmmat.wroughtiron=Wroght Iron -hbmmat.zirconium=Zirconium +hbmmat.wroughtiron=Ferro Battuto +hbmmat.zirconium=Zirconio -matshape.block=%s Block -matshape.blocks=%s Blocks -matshape.ingot=%s Ingot -matshape.ingots=%s Ingots -matshape.nugget=%s Nugget -matshape.nuggets=%s Nuggets -matshape.quantum=%s Quantum -matshape.quanta=%s Quanta +matshape.block=%s Blocco +matshape.blocks=%s Blocchi +matshape.ingot=%s Lingotto +matshape.ingots=%s Lingotti +matshape.nugget=%s Pepita +matshape.nuggets=%s Pepite +matshape.quantum=%s Quanto +matshape.quanta=%s Quanti -icffuel.beryllium=Beryllium -icffuel.boron=Boron -icffuel.carbon=Carbon -icffuel.calcium=Calcium -icffuel.chlorine=Chlorine -icffuel.deuterium=Deuterium -icffuel.helium3=Helium-3 -icffuel.helium4=Helium-4 -icffuel.hydrogen=Hydrogen -icffuel.lithium=Lithium -icffuel.oxygen=Oxygen -icffuel.sodium=Sodium -icffuel.tritium=Tritium +icffuel.beryllium=Berillio +icffuel.boron=Boro +icffuel.carbon=Carbonio +icffuel.calcium=Calcio +icffuel.chlorine=Cloro +icffuel.deuterium=Deuterio +icffuel.helium3=Elio-3 +icffuel.helium4=Elio-4 +icffuel.hydrogen=Idrogeno +icffuel.lithium=Litio +icffuel.oxygen=Ossigeno +icffuel.sodium=Sodio +icffuel.tritium=Trizio -info.asbestos=My lungs are burning. -info.coaldust=It's hard to breathe here. -info.coil=Coil Strength -info.templatefolder=Created with %s +info.asbestos=I miei polmoni bruciano. +info.coaldust=È faticoso respirare qua. +info.coil=Potenza Bobina +info.templatefolder=Creato con %s info.template_in=Input: -info.template_in_p=Inputs: +info.template_in_p=Input: info.template_out=Output: -info.template_out_p=Outputs: -info.template_seconds=seconds -info.template_time=Production Time: +info.template_out_p=Output: +info.template_seconds=secondi +info.template_time=Tempo di Produzione: item.acetylene_torch.name=Acetylene Welding Torch item.ajr_boots.name=Steel Ranger Boots From e52f70b340693e4205b2186bc89b0815166a54b0 Mon Sep 17 00:00:00 2001 From: Wolf Date: Mon, 29 Dec 2025 19:09:44 -0500 Subject: [PATCH 12/19] QMAW Page for crude oil --- .../assets/hbm/manual/fluids/crude_oil.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/resources/assets/hbm/manual/fluids/crude_oil.json diff --git a/src/main/resources/assets/hbm/manual/fluids/crude_oil.json b/src/main/resources/assets/hbm/manual/fluids/crude_oil.json new file mode 100644 index 000000000..2e589d60d --- /dev/null +++ b/src/main/resources/assets/hbm/manual/fluids/crude_oil.json @@ -0,0 +1,15 @@ +{ + "name": "Crude Oil", + "icon": ["hbm:item.fluid_icon", 1, 10], + "trigger": [], + "title": { + "en_US": "Crude Oil", + "ru_RU": "сырая нефть", + "zh_CN": "原油" + }, + "content": { + "en_US": "Fluid obtained after extracting [[oil deposits|Oil Collection]]. Used as the base material for all oil products, it must first be [[heated|Boiler]] and [[processed|Oil Refinery]] to obtain products such as:
[[Heavy Oil]]
[[Naphtha]]
[[Light Oil]]
[[Petroleum Gas]]

It is also used to obtain [[Cracked Oil]] and related byproducts through processing with a [[cracking tower|Catalytic Cracking Tower]].

See also:
[[Basic Oil Processing]]
[[Advanced Oil Processing]]", + "ru_RU": "Жидкость, получаемая после добычи [[нефтяных месторождений|Oil Collection]]. Используется в качестве базового сырья для всех нефтепродуктов и перед дальнейшим применением должна быть [[нагретой|Boiler]] и [[переработанной|Oil Refinery]] для получения таких продуктов, как:
[[Тяжёлая нефть|Heavy Oil]]
[[Нафта|Naphtha]]
[[Лёгкая нефть|Light Oil]]
[[Нефтяной газ|Petroleum Gas]]

Также используется для получения [[крекированной нефти|Cracked Oil]] и связанных побочных продуктов при переработке в [[установке крекинга|Catalytic Cracking Tower]].

См. также:
[[Базовая нефтепереработка|Basic Oil Processing]]
[[Продвинутая нефтепереработка|Advanced Oil Processing]]", + "zh_CN": "从[[油田开采|Oil Collection]]中获得的流体。作为所有石油产品的基础原料,在使用前必须先经过[[加热|Boiler]]和[[精炼|Oil Refinery]],以获得以下产品:
[[重油|Heavy Oil]]
[[石脑油|Naphtha]]
[[轻油|Light Oil]]
[[石油气|Petroleum Gas]]

还可以通过[[裂化塔|Catalytic Cracking Tower]]的处理获得[[裂化油|Cracked Oil]]及其相关副产品。

另见:
[[基础石油处理|Basic Oil Processing]]
[[高级石油处理|Advanced Oil Processing]]" + } +} \ No newline at end of file From 5dc1ee440b3a1da516db77caeb7e811513c03db8 Mon Sep 17 00:00:00 2001 From: Wolf Date: Mon, 29 Dec 2025 19:33:08 -0500 Subject: [PATCH 13/19] Forgot to account for all processing methods, need to expand in their own pages --- src/main/resources/assets/hbm/manual/fluids/crude_oil.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/fluids/crude_oil.json b/src/main/resources/assets/hbm/manual/fluids/crude_oil.json index 2e589d60d..dfc1f77ab 100644 --- a/src/main/resources/assets/hbm/manual/fluids/crude_oil.json +++ b/src/main/resources/assets/hbm/manual/fluids/crude_oil.json @@ -8,8 +8,8 @@ "zh_CN": "原油" }, "content": { - "en_US": "Fluid obtained after extracting [[oil deposits|Oil Collection]]. Used as the base material for all oil products, it must first be [[heated|Boiler]] and [[processed|Oil Refinery]] to obtain products such as:
[[Heavy Oil]]
[[Naphtha]]
[[Light Oil]]
[[Petroleum Gas]]

It is also used to obtain [[Cracked Oil]] and related byproducts through processing with a [[cracking tower|Catalytic Cracking Tower]].

See also:
[[Basic Oil Processing]]
[[Advanced Oil Processing]]", - "ru_RU": "Жидкость, получаемая после добычи [[нефтяных месторождений|Oil Collection]]. Используется в качестве базового сырья для всех нефтепродуктов и перед дальнейшим применением должна быть [[нагретой|Boiler]] и [[переработанной|Oil Refinery]] для получения таких продуктов, как:
[[Тяжёлая нефть|Heavy Oil]]
[[Нафта|Naphtha]]
[[Лёгкая нефть|Light Oil]]
[[Нефтяной газ|Petroleum Gas]]

Также используется для получения [[крекированной нефти|Cracked Oil]] и связанных побочных продуктов при переработке в [[установке крекинга|Catalytic Cracking Tower]].

См. также:
[[Базовая нефтепереработка|Basic Oil Processing]]
[[Продвинутая нефтепереработка|Advanced Oil Processing]]", - "zh_CN": "从[[油田开采|Oil Collection]]中获得的流体。作为所有石油产品的基础原料,在使用前必须先经过[[加热|Boiler]]和[[精炼|Oil Refinery]],以获得以下产品:
[[重油|Heavy Oil]]
[[石脑油|Naphtha]]
[[轻油|Light Oil]]
[[石油气|Petroleum Gas]]

还可以通过[[裂化塔|Catalytic Cracking Tower]]的处理获得[[裂化油|Cracked Oil]]及其相关副产品。

另见:
[[基础石油处理|Basic Oil Processing]]
[[高级石油处理|Advanced Oil Processing]]" + "en_US": "Fluid obtained after extracting [[oil deposits|Oil Collection]]. Used as the base material for all oil products, it must first be [[heated|Boiler]] and [[processed|Oil Refinery]] to obtain products such as:
[[Heavy Oil]]
[[Naphtha]]
[[Light Oil]]
[[Petroleum Gas]]

It is also used to obtain [[Cracked Oil]] and related byproducts through processing with a [[cracking tower|Catalytic Cracking Tower]]. Other methods of processing include [[vacuum refining|Vacuum Refinery]], [[radiolysis|Radiolysis]], [[hydrotreating|Hydrotreater]] and [[solidification|Solidification]].

See also:
[[Basic Oil Processing]]
[[Advanced Oil Processing]]
[[Vacuum Oil Processing]]", + "ru_RU": "Жидкость, получаемая после добычи [[нефтяных месторождений|Oil Collection]]. Используется в качестве базового сырья для всех нефтепродуктов и перед применением должна быть [[нагретой|Boiler]] и [[переработанной|Oil Refinery]] для получения таких продуктов, как:
[[Тяжёлая нефть|Heavy Oil]]
[[Нафта|Naphtha]]
[[Лёгкая нефть|Light Oil]]
[[Нефтяной газ|Petroleum Gas]]

Также используется для получения [[крекированной нефти|Cracked Oil]] и связанных побочных продуктов при переработке в [[установке крекинга|Catalytic Cracking Tower]]. Другие методы переработки включают [[вакуумную переработку|Vacuum Refinery]], [[радиолиз|Radiolysis]], [[гидроочистку|Hydrotreater]] и [[твёрдофазную обработку|Solidification]].

См. также:
[[Базовая нефтепереработка|Basic Oil Processing]]
[[Продвинутая нефтепереработка|Advanced Oil Processing]]
[[Вакуумная нефтепереработка|Vacuum Oil Processing]]", + "zh_CN": "从[[油田开采|Oil Collection]]中获得的流体。作为所有石油产品的基础原料,在使用前必须先经过[[加热|Boiler]]和[[精炼|Oil Refinery]],以获得以下产品:
[[重油|Heavy Oil]]
[[石脑油|Naphtha]]
[[轻油|Light Oil]]
[[石油气|Petroleum Gas]]

还可以通过[[裂化塔|Catalytic Cracking Tower]]的处理获得[[裂化油|Cracked Oil]]及其相关副产品。其他处理方式包括[[真空精炼|Vacuum Refinery]]、[[辐解|Radiolysis]]、[[加氢处理|Hydrotreater]]以及[[固化|Solidification]]。

另见:
[[基础石油处理|Basic Oil Processing]]
[[高级石油处理|Advanced Oil Processing]]
[[真空石油处理|Vacuum Oil Processing]]" } } \ No newline at end of file From 89b1cb1de0998ce42e5aa0b093722b484d1be0b8 Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Tue, 30 Dec 2025 17:50:38 -0600 Subject: [PATCH 14/19] allow reading core heat capacity using OC with PWRs. --- .../com/hbm/tileentity/machine/TileEntityPWRController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 1cff1e6e5..3ddd3b986 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -582,7 +582,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getHeat(Context context, Arguments args) { - return new Object[] {coreHeat, hullHeat}; + return new Object[] {coreHeat, hullHeat, coreHeatCapacity, hullHeatCapacityBase}; } @Callback(direct = true) @@ -612,7 +612,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG @Callback(direct = true) @Optional.Method(modid = "OpenComputers") public Object[] getInfo(Context context, Arguments args) { - return new Object[] {coreHeat, hullHeat, flux, rodTarget, rodLevel, amountLoaded, progress, processTime, tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()}; + return new Object[] {coreHeat, hullHeat, coreHeatCapacity, hullHeatCapacityBase, flux, rodTarget, rodLevel, amountLoaded, progress, processTime, tanks[0].getFill(), tanks[0].getMaxFill(), tanks[1].getFill(), tanks[1].getMaxFill()}; } @Callback(direct = true, limit = 4) From 871de4ae473ddf75e4f968eb49d66f818cf565cf Mon Sep 17 00:00:00 2001 From: PewPewCricket Date: Tue, 30 Dec 2025 18:40:08 -0600 Subject: [PATCH 15/19] fix PWRangler crashing with PWRs using heat sinks --- .../hbm/disks/pwrangler/usr/bin/PWRangler.lua | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua index 09fe901aa..d564b9ed4 100644 --- a/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua +++ b/src/main/resources/assets/hbm/disks/pwrangler/usr/bin/PWRangler.lua @@ -22,7 +22,12 @@ local mt = { } setmetatable(const, mt) -const.fullCoreHeatMAX = 9000000 +for address, _ in component.list("ntm_pwr_control") do + pwrController = address +end + +_, _, const.coreHeatCapacity = call(pwrController, "getHeat") +const.fullCoreHeatMAX = const.coreHeatCapacity * 0.9 const.coldCoolantLevelMIN = 10000 const.hotCoolantLevelMAX = 0.5 @@ -88,10 +93,6 @@ buttons[9] = newButton(94, 9, 12, 2, 0x00FF00, 0x00AA00, function() coolantLossE buttons[10] = newButton(107, 8, 5, 3, 0xFF0000, 0xAA0000, function() runSig = false end) -for address, _ in component.list("ntm_pwr_control") do - pwrController = address -end - gpu.setForeground(0xAAAAAA) --Control rods @@ -203,7 +204,7 @@ while (runSig == true) do rodLevel = call(pwrController, "getLevel") coreHeat, _ = call(pwrController, "getHeat") - coreHeat = coreHeat//1000000 + coreHeat = coreHeat // (const.coreHeatCapacity / 10) for _, b in pairs(buttons) do drawButton(b, b.colorUp) @@ -243,7 +244,7 @@ while (runSig == true) do fullCoreHeat, fullHullHeat = call(pwrController, "getHeat") coldCoolantLevel, _, hotCoolantLevel, maxHotCoolantLevel = call(pwrController, "getCoolantInfo") - + coldCoolantOutflow = coldCoolantLevel - prevCoolantFlow hotCoolantOutflow = hotCoolantLevel - prevHotCoolantFlow From f87b37d7e396e1335efc8487f1cb624158429590 Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 31 Dec 2025 15:38:24 +0100 Subject: [PATCH 16/19] well, too bad --- changelog | 6 +- .../com/hbm/inventory/fluid/FluidType.java | 6 + .../java/com/hbm/inventory/fluid/Fluids.java | 11 +- .../inventory/recipes/PedestalRecipes.java | 2 +- .../recipes/loader/GenericRecipes.java | 1 + .../hbm/items/machine/ItemBatteryPack.java | 34 +- .../render/item/ItemRenderBatteryPack.java | 2 +- .../tileentity/RenderBatterySocket.java | 2 +- .../storage/TileEntityBatterySocket.java | 28 + .../java/com/hbm/uninos/UniNodespace.java | 1 + src/main/resources/assets/hbm/lang/de_DE.lang | 14 + src/main/resources/assets/hbm/lang/en_US.lang | 14 + .../assets/hbm/models/machines/battery.obj | 812 ++++++++++-------- .../models/machines/capacitor_base.png | Bin 0 -> 369 bytes .../models/machines/capacitor_bismuth.png | Bin 0 -> 853 bytes .../models/machines/capacitor_copper.png | Bin 0 -> 1414 bytes .../models/machines/capacitor_gold.png | Bin 0 -> 1413 bytes .../models/machines/capacitor_niobium.png | Bin 0 -> 1224 bytes .../models/machines/capacitor_spark.png | Bin 0 -> 898 bytes .../models/machines/capacitor_tantalum.png | Bin 0 -> 1156 bytes 20 files changed, 569 insertions(+), 364 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_base.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_bismuth.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_copper.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_gold.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_niobium.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_spark.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/capacitor_tantalum.png diff --git a/changelog b/changelog index 53a3e52b4..2c8db44ed 100644 --- a/changelog +++ b/changelog @@ -7,4 +7,8 @@ ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases -* Fixed 528 coltan deposit config misspelling \ No newline at end of file +* Fixed 528 coltan deposit config misspelling +* Potentially fixed a performance issue caused by transmission networks not being deleted when they have no active links +* Fixed multi output recipe objects not deserializing right, causing the precision assembler config to not load +* Fixed pedestal recipes not using the correct register option, making custom config files wipe all clay tablets +* Fixed custom fluids breaking when using the `/ntmreload` command \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index f983c90ed..aed5ef93c 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -70,7 +70,12 @@ public class FluidType { this.id = Fluids.registerSelf(this); } + /** For custom fluids */ public FluidType(String name, int color, int p, int f, int r, EnumSymbol symbol, String texName, int tint, int id, String displayName) { + setupCustom(name, color, p, f, r, symbol, texName, tint, id, displayName); + } + + public FluidType setupCustom(String name, int color, int p, int f, int r, EnumSymbol symbol, String texName, int tint, int id, String displayName) { this.stringId = name; this.color = color; this.unlocalized = "hbmfluid." + name.toLowerCase(Locale.US); @@ -85,6 +90,7 @@ public class FluidType { this.id = id; Fluids.register(this, id); + return this; } public FluidType(int forcedId, String name, int color, int p, int f, int r, EnumSymbol symbol) { diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 9d8b6109e..494973163 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -817,7 +817,9 @@ public class Fluids { String texture = obj.get("texture").getAsString(); int temperature = obj.get("temperature").getAsInt(); - FluidType type = new FluidType(name, color, p, f, r, symbol, texture, tint, id, displayName).setTemp(temperature); + FluidType type = fluidMigration.get(name); + if(type == null) type = new FluidType(name, color, p, f, r, symbol, texture, tint, id, displayName).setTemp(temperature); + else type.setupCustom(name, color, p, f, r, symbol, texture, tint, id, displayName).setTemp(temperature); customFluids.add(type); } @@ -881,13 +883,16 @@ public class Fluids { ex.printStackTrace(); } } + + private static HashMap fluidMigration = new HashMap(); // since reloading would create new fluid instances, and those break existing machines public static void reloadFluids(){ File folder = MainRegistry.configHbmDir; File customTypes = new File(folder.getAbsolutePath() + File.separatorChar + "hbmFluidTypes.json"); if(!customTypes.exists()) initDefaultFluids(customTypes); - for(FluidType type : customFluids){ + for(FluidType type : customFluids) { + fluidMigration.put(type.getName(), type); idMapping.remove(type.getID()); registerOrder.remove(type); nameMapping.remove(type.getName()); @@ -895,7 +900,7 @@ public class Fluids { } customFluids.clear(); - for(FluidType type : foreignFluids){ + for(FluidType type : foreignFluids) { idMapping.remove(type.getID()); registerOrder.remove(type); nameMapping.remove(type.getName()); diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index 76dcbcd1a..69a0fab4e 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -172,7 +172,7 @@ public class PedestalRecipes extends SerializableRecipe { rec.recipeSet = obj.get("set").getAsInt(); } - this.recipes.add(rec); + this.register(rec); } @Override diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 0394807eb..6bc4d93e1 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -327,6 +327,7 @@ public abstract class GenericRecipes extends Serializab @Override public void deserialize(JsonArray array) { for(JsonElement element : array) { + if(element.isJsonPrimitive()) continue; // the array we get includes the "multi" tag, which is also the only primitive ChanceOutput output = new ChanceOutput(); output.deserialize(element.getAsJsonArray()); pool.add(output); diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java index ba4f95f75..ffd134962 100644 --- a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java +++ b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java @@ -29,20 +29,34 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { } public static enum EnumBatteryPack { - REDSTONE ("battery_redstone", 100L), - LEAD ("battery_lead", 1_000L), - LITHIUM ("battery_lithium", 10_000L), - SODIUM ("battery_sodium", 50_000L), - SCHRABIDIUM ("battery_schrabidium", 250_000L), - QUANTUM ("battery_quantum", 1_000_000L); + BATTERY_REDSTONE ("battery_redstone", 100L, false), + BATTERY_LEAD ("battery_lead", 1_000L, false), + BATTERY_LITHIUM ("battery_lithium", 10_000L, false), + BATTERY_SODIUM ("battery_sodium", 50_000L, false), + BATTERY_SCHRABIDIUM ("battery_schrabidium", 250_000L, false), + BATTERY_QUANTUM ("battery_quantum", 1_000_000L, 20 * 60 * 60), + + CAPACITOR_COPPER ("capacitor_copper", 1_000L, true), + CAPACITOR_GOLD ("capacitor_gold", 10_000L, true), + CAPACITOR_NIOBIUM ("capacitor_niobium", 100_000L, true), + CAPACITOR_TANTALUM ("capacitor_tantalum", 500_000L, true), + CAPACITOR_BISMUTH ("capacitor_bismuth", 2_500_000L, true), + CAPACITOR_SPARK ("capacitor_spark", 10_000_000L, true); public ResourceLocation texture; public long capacity; public long chargeRate; public long dischargeRate; - private EnumBatteryPack(String tex, long dischargeRate) { - this(tex, dischargeRate * 20 * 60 * 15, dischargeRate * 10, dischargeRate); + private EnumBatteryPack(String tex, long dischargeRate, boolean capacitor) { + this(tex, + capacitor ? (dischargeRate * 20 * 30) : (dischargeRate * 20 * 60 * 15), + capacitor ? dischargeRate : dischargeRate * 10, + dischargeRate); + } + + private EnumBatteryPack(String tex, long dischargeRate, long duration) { + this(tex, dischargeRate * duration, dischargeRate * 10, dischargeRate); } private EnumBatteryPack(String tex, long capacity, long chargeRate, long dischargeRate) { @@ -51,6 +65,8 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { this.chargeRate = chargeRate; this.dischargeRate = dischargeRate; } + + public boolean isCapacitor() { return this.ordinal() > BATTERY_QUANTUM.ordinal(); } } @Override @@ -124,7 +140,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { if(itemstack.hasTagCompound()) charge = getCharge(itemstack); - list.add(EnumChatFormatting.GREEN + "Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE"); + list.add(EnumChatFormatting.GREEN + "Energy stored: " + BobMathUtil.getShortNumber(charge) + "/" + BobMathUtil.getShortNumber(maxCharge) + "HE (" + (charge * 1000 / maxCharge / 10D) + "%)"); list.add(EnumChatFormatting.YELLOW + "Charge rate: " + BobMathUtil.getShortNumber(chargeRate) + "HE/t"); list.add(EnumChatFormatting.YELLOW + "Discharge rate: " + BobMathUtil.getShortNumber(dischargeRate) + "HE/t"); list.add(EnumChatFormatting.GOLD + "Time for full charge: " + (maxCharge / chargeRate / 20 / 60D) + "min"); diff --git a/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java b/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java index bde3cbeac..1351bdb2d 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java +++ b/src/main/java/com/hbm/render/item/ItemRenderBatteryPack.java @@ -22,7 +22,7 @@ public class ItemRenderBatteryPack extends ItemRenderBase { EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, item.getItemDamage()); GL11.glShadeModel(GL11.GL_SMOOTH); Minecraft.getMinecraft().getTextureManager().bindTexture(pack.texture); - ResourceManager.battery_socket.renderPart("Battery"); + ResourceManager.battery_socket.renderPart(pack.isCapacitor() ? "Capacitor" : "Battery"); GL11.glShadeModel(GL11.GL_FLAT); } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java index 66a69928d..20a63dbf1 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBatterySocket.java @@ -41,7 +41,7 @@ public class RenderBatterySocket extends TileEntitySpecialRenderer implements II if(socket.renderPack >= 0) { EnumBatteryPack pack = EnumUtil.grabEnumSafely(EnumBatteryPack.class, socket.renderPack); bindTexture(pack.texture); - ResourceManager.battery_socket.renderPart("Battery"); + ResourceManager.battery_socket.renderPart(pack.isCapacitor() ? "Capacitor" : "Battery"); } GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index f354405f6..6538ea15f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -17,11 +17,14 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.energymk2.Nodespace; import api.hbm.energymk2.Nodespace.PowerNode; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -276,4 +279,29 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); } } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 2, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } } diff --git a/src/main/java/com/hbm/uninos/UniNodespace.java b/src/main/java/com/hbm/uninos/UniNodespace.java index 35daa8856..1007bfddc 100644 --- a/src/main/java/com/hbm/uninos/UniNodespace.java +++ b/src/main/java/com/hbm/uninos/UniNodespace.java @@ -78,6 +78,7 @@ public class UniNodespace { for(NodeNet net : activeNodeNets) net.resetTrackers(); //reset has to be done before everything else for(NodeNet net : activeNodeNets) net.update(); + activeNodeNets.removeIf((net) -> { return net.links.size() <= 0; }); // reap empty networks } /** Goes over each connection point of the given node, tries to find neighbor nodes and to join networks with them */ diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 77b08a69e..b567812b9 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -322,6 +322,7 @@ container.autocrafter=Automatische Werkbank container.barrel=Fass container.bat9000=Big-Ass Tank 9000 container.battery=Energiespeicher +container.batterySocket=Batteriesockel container.bombMulti=Mehrzweckbombe container.casingBag=Hülsentasche container.catalyticReformer=Katalytischer Reformer @@ -1315,6 +1316,18 @@ item.battery_lithium.name=Lithium-Ionen-Batterie item.battery_lithium_cell.name=Lithium-Ionen-Energiezelle item.battery_lithium_cell_3.name=Dreifache Lithium-Ionen-Energiezelle item.battery_lithium_cell_6.name=Sechsfache Lithium-Ionen-Energiezelle +item.battery_pack.battery_lead.name=Bleisäure-Akku +item.battery_pack.battery_lithium.name=Lithium-Ionen-Akku +item.battery_pack.battery_quantum.name=Quantenakku +item.battery_pack.battery_redstone.name=Redstoneakku +item.battery_pack.battery_schrabidium.name=Schrabidiumakku +item.battery_pack.battery_sodium.name=Natrium-Eisen-Akku +item.battery_pack.capacitor_bismuth.name=Bismutkondensator +item.battery_pack.capacitor_copper.name=Kupferkondensator +item.battery_pack.capacitor_gold.name=Goldkondensator +item.battery_pack.capacitor_niobium.name=Niobkondensator +item.battery_pack.capacitor_spark.name=Spark-Kondensator +item.battery_pack.capacitor_tantalum.name=Tantalkondensator item.battery_potato.name=Katoffelbatterie item.battery_potatos.name=PotatOS item.battery_red_cell.name=Redstone-Energiezelle @@ -4458,6 +4471,7 @@ tile.machine_autosaw.suspended=Angehalten tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energiespeicherblock tile.machine_battery_potato.name=Kartoffelbatterieblock +tile.machine_battery_socket.name=Batteriesockel tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Elektrischer Ölwärmer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 567bd333d..765ea3545 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -727,6 +727,7 @@ container.autocrafter=Automatic Crafting Table container.barrel=Barrel container.bat9000=Big-Ass Tank 9000 container.battery=Energy Storage +container.batterySocket=Battery Socket container.bombMulti=Multi Purpose Bomb container.casingBag=Bullet Casing Bag container.catalyticReformer=Catalytic Reformer @@ -2073,6 +2074,18 @@ item.battery_lithium.name=Lithium-Ion Battery item.battery_lithium_cell.name=Lithium-Ion Power Cell item.battery_lithium_cell_3.name=Triple Lithium-Ion Power Cell item.battery_lithium_cell_6.name=Sixfold Lithium-Ion Power Cell +item.battery_pack.battery_lead.name=Lead-Acid Battery +item.battery_pack.battery_lithium.name=Lithium-Ion Battery +item.battery_pack.battery_quantum.name=Quantum Battery +item.battery_pack.battery_redstone.name=Redstone Battery +item.battery_pack.battery_schrabidium.name=Schrabidium Battery +item.battery_pack.battery_sodium.name=Sodium-Iron Battery +item.battery_pack.capacitor_bismuth.name=Bismuth Capacitor +item.battery_pack.capacitor_copper.name=Copper Capacitor +item.battery_pack.capacitor_gold.name=Gold Capacitor +item.battery_pack.capacitor_niobium.name=Niobium Capacitor +item.battery_pack.capacitor_spark.name=Spark Capacitor +item.battery_pack.capacitor_tantalum.name=Tantalum Capacitor item.battery_potato.name=Potato Battery item.battery_potatos.name=PotatOS item.battery_red_cell.name=Redstone Power Cell @@ -5719,6 +5732,7 @@ tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block +tile.machine_battery_socket.name=Battery Socket tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Electric Oil Heater diff --git a/src/main/resources/assets/hbm/models/machines/battery.obj b/src/main/resources/assets/hbm/models/machines/battery.obj index c37a7ffbc..932762be7 100644 --- a/src/main/resources/assets/hbm/models/machines/battery.obj +++ b/src/main/resources/assets/hbm/models/machines/battery.obj @@ -1,5 +1,121 @@ # Blender v2.79 (sub 0) OBJ File: 'battery.blend' # www.blender.org +o Capacitor +v -0.875000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v -0.875000 0.125000 -0.875000 +v 0.875000 0.125000 -0.875000 +v -0.875000 1.875000 -0.875000 +v -0.875000 1.875000 0.875000 +v 0.875000 1.875000 0.875000 +v 0.875000 1.875000 -0.875000 +v -0.750000 0.250000 0.750000 +v 0.750000 0.250000 0.750000 +v -0.750000 0.250000 -0.750000 +v 0.750000 0.250000 -0.750000 +v -0.750000 1.750000 -0.750000 +v -0.750000 1.750000 0.750000 +v 0.750000 1.750000 0.750000 +v 0.750000 1.750000 -0.750000 +v -0.875000 0.125000 0.875000 +v 0.875000 0.125000 0.875000 +v -0.875000 0.125000 -0.875000 +v 0.875000 0.125000 -0.875000 +v -0.875000 1.875000 -0.875000 +v -0.875000 1.875000 0.875000 +v 0.875000 1.875000 0.875000 +v 0.875000 1.875000 -0.875000 +vt 0.269231 0.000000 +vt 0.000000 0.333333 +vt 0.000000 0.000000 +vt 0.000000 0.666667 +vt 0.269231 1.000000 +vt 0.000000 1.000000 +vt 0.269231 0.333333 +vt -0.000000 0.666667 +vt -0.000000 0.333333 +vt 0.538462 0.333333 +vt 0.269231 0.666667 +vt 0.269231 0.333333 +vt 0.538462 0.333333 +vt 0.269231 0.666667 +vt 0.769231 -0.000000 +vt 0.538462 0.285714 +vt 0.538462 -0.000000 +vt 0.538462 0.571429 +vt 0.769231 0.857143 +vt 0.538462 0.857143 +vt 0.769231 0.285714 +vt 0.769231 0.285714 +vt 0.538462 0.571429 +vt 0.538462 0.285714 +vt 1.000000 0.285714 +vt 0.769231 0.571429 +vt 1.000000 0.285714 +vt 0.769231 0.571429 +vt 0.000000 0.333333 +vt 0.269231 0.000000 +vt 0.000000 0.000000 +vt 0.269231 1.000000 +vt 0.000000 0.666667 +vt 0.000000 1.000000 +vt -0.000000 0.666667 +vt 0.269231 0.333333 +vt -0.000000 0.333333 +vt 0.269231 0.666667 +vt 0.538462 0.333333 +vt 0.269231 0.333333 +vt 0.269231 0.666667 +vt 0.538462 0.333333 +vt 0.538462 0.666667 +vt 0.538462 0.666667 +vt 1.000000 0.571429 +vt 1.000000 0.571429 +vt 0.538462 0.666667 +vt 0.538462 0.666667 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +s off +f 3/1/1 2/2/1 1/3/1 +f 7/4/2 5/5/2 6/6/2 +f 1/7/3 5/8/3 3/9/3 +f 3/10/4 8/11/4 4/12/4 +f 2/13/5 6/14/5 1/7/5 +f 4/12/6 7/4/6 2/2/6 +f 11/15/1 10/16/1 9/17/1 +f 15/18/2 13/19/2 14/20/2 +f 12/21/6 15/18/6 10/16/6 +f 9/22/3 13/23/3 11/24/3 +f 11/25/4 16/26/4 12/21/4 +f 10/27/5 14/28/5 9/22/5 +f 18/29/2 19/30/2 17/31/2 +f 21/32/1 23/33/1 22/34/1 +f 21/35/6 17/36/6 19/37/6 +f 24/38/5 19/39/5 20/40/5 +f 22/41/4 18/42/4 17/36/4 +f 23/33/3 20/40/3 18/29/3 +f 3/1/1 4/12/1 2/2/1 +f 7/4/2 8/11/2 5/5/2 +f 1/7/3 6/14/3 5/8/3 +f 3/10/4 5/43/4 8/11/4 +f 2/13/5 7/44/5 6/14/5 +f 4/12/6 8/11/6 7/4/6 +f 11/15/1 12/21/1 10/16/1 +f 15/18/2 16/26/2 13/19/2 +f 12/21/6 16/26/6 15/18/6 +f 9/22/3 14/28/3 13/23/3 +f 11/25/4 13/45/4 16/26/4 +f 10/27/5 15/46/5 14/28/5 +f 18/29/2 20/40/2 19/30/2 +f 21/32/1 24/38/1 23/33/1 +f 21/35/6 22/41/6 17/36/6 +f 24/38/5 21/47/5 19/39/5 +f 22/41/4 23/48/4 18/42/4 +f 23/33/3 24/38/3 20/40/3 o Battery v 0.687500 1.875000 -0.875000 v 0.875000 1.875000 -0.687500 @@ -268,158 +384,158 @@ vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn -1.0000 0.0000 0.0000 s off -f 8/1/1 14/2/1 22/3/1 -f 35/4/2 26/5/2 3/6/2 -f 20/7/3 3/8/3 26/9/3 -f 20/10/4 16/11/4 10/12/4 -f 24/13/4 15/14/4 26/15/4 -f 10/16/5 12/17/5 17/18/5 -f 10/16/2 8/1/2 7/19/2 -f 12/20/3 18/21/3 17/22/3 -f 22/23/6 20/24/6 19/25/6 -f 14/26/7 16/11/7 15/27/7 -f 16/11/8 8/1/8 9/28/8 -f 27/29/7 25/30/7 30/31/7 -f 29/32/9 23/33/9 28/34/9 -f 15/35/2 6/36/2 14/37/2 -f 27/29/4 36/38/4 44/39/4 -f 14/40/1 2/41/1 29/42/1 -f 42/43/10 38/44/10 33/45/10 -f 30/46/6 28/34/6 27/47/6 -f 1/48/7 24/13/7 23/33/7 -f 24/13/8 6/36/8 5/49/8 -f 40/50/3 4/51/3 44/52/3 -f 11/53/2 32/54/2 18/55/2 -f 32/54/5 34/56/5 37/57/5 -f 35/58/1 30/31/1 47/59/1 -f 34/60/3 38/44/3 37/61/3 -f 42/43/6 40/62/6 39/63/6 -f 19/64/7 35/65/7 22/66/7 -f 37/67/4 39/68/4 36/69/4 -f 48/70/10 44/52/10 4/51/10 -f 47/71/9 43/72/9 46/73/9 -f 41/74/1 33/75/1 31/76/1 -f 48/70/6 46/73/6 45/77/6 -f 60/78/9 56/79/9 57/80/9 -f 52/81/1 56/79/1 54/82/1 -f 60/83/4 58/84/4 62/85/4 -f 64/86/10 54/82/10 59/87/10 -f 58/84/8 52/81/8 61/88/8 -f 58/84/7 56/89/7 55/90/7 -f 54/91/6 60/78/6 59/92/6 -f 64/86/3 50/93/3 49/94/3 -f 52/95/2 62/96/2 61/97/2 -f 62/96/5 50/98/5 63/99/5 -f 76/100/9 72/101/9 73/102/9 -f 68/103/1 72/101/1 70/104/1 -f 76/105/4 74/106/4 78/107/4 -f 80/108/10 70/104/10 75/109/10 -f 74/106/8 68/103/8 77/110/8 -f 74/106/7 72/111/7 71/112/7 -f 70/113/6 76/100/6 75/114/6 -f 80/108/3 66/115/3 65/116/3 -f 68/117/2 78/118/2 77/119/2 -f 78/118/5 66/120/5 79/121/5 -f 22/3/1 11/122/1 12/123/1 -f 12/123/1 7/124/1 8/1/1 -f 8/1/1 13/125/1 14/2/1 -f 14/2/1 21/126/1 22/3/1 -f 22/3/1 12/123/1 8/1/1 -f 35/4/2 36/127/2 26/5/2 -f 20/7/3 21/128/3 3/8/3 -f 10/12/4 17/129/4 18/130/4 -f 18/130/4 19/131/4 20/10/4 -f 20/10/4 15/132/4 16/11/4 -f 16/11/4 9/28/4 10/12/4 -f 10/12/4 18/130/4 20/10/4 -f 26/15/4 27/133/4 28/134/4 -f 28/134/4 23/135/4 24/13/4 -f 24/13/4 5/49/4 15/14/4 -f 15/14/4 20/136/4 26/15/4 -f 26/15/4 28/134/4 24/13/4 -f 10/16/5 7/19/5 12/17/5 -f 10/16/2 9/28/2 8/1/2 -f 12/20/3 11/137/3 18/21/3 -f 22/23/6 21/138/6 20/24/6 -f 14/26/7 13/125/7 16/11/7 -f 16/11/8 13/125/8 8/1/8 -f 27/29/7 43/72/7 25/30/7 -f 29/32/9 1/48/9 23/33/9 -f 15/35/2 5/49/2 6/36/2 -f 44/39/4 45/139/4 46/140/4 -f 46/140/4 43/141/4 27/29/4 -f 27/29/4 26/5/4 36/38/4 -f 36/38/4 40/142/4 44/39/4 -f 44/39/4 46/140/4 27/29/4 -f 29/42/1 30/143/1 3/144/1 -f 3/144/1 21/145/1 14/40/1 -f 14/40/1 6/36/1 2/41/1 -f 2/41/1 1/146/1 29/42/1 -f 29/42/1 3/144/1 14/40/1 -f 42/43/10 39/63/10 38/44/10 -f 30/46/6 29/32/6 28/34/6 -f 1/48/7 2/41/7 24/13/7 -f 24/13/8 2/41/8 6/36/8 -f 40/50/3 41/147/3 4/51/3 -f 11/53/2 31/148/2 32/54/2 -f 32/54/5 31/148/5 34/56/5 -f 47/59/1 48/149/1 4/150/1 -f 4/150/1 41/151/1 35/58/1 -f 35/58/1 3/6/1 30/31/1 -f 30/31/1 25/152/1 47/59/1 -f 47/59/1 4/150/1 35/58/1 -f 34/60/3 33/45/3 38/44/3 -f 42/43/6 41/153/6 40/62/6 -f 19/64/7 36/154/7 35/65/7 -f 36/69/4 19/64/4 18/55/4 -f 18/55/4 32/155/4 37/67/4 -f 37/67/4 38/156/4 39/68/4 -f 39/68/4 40/157/4 36/69/4 -f 36/69/4 18/55/4 37/67/4 -f 48/70/10 45/77/10 44/52/10 -f 47/71/9 25/30/9 43/72/9 -f 31/76/1 11/53/1 22/66/1 -f 22/66/1 35/158/1 41/74/1 -f 41/74/1 42/159/1 33/75/1 -f 33/75/1 34/160/1 31/76/1 -f 31/76/1 22/66/1 41/74/1 -f 48/70/6 47/71/6 46/73/6 -f 60/78/9 53/161/9 56/79/9 -f 54/82/1 49/94/1 50/98/1 -f 50/98/1 51/162/1 52/81/1 -f 52/81/1 55/90/1 56/79/1 -f 56/79/1 53/161/1 54/82/1 -f 54/82/1 50/98/1 52/81/1 -f 62/85/4 63/163/4 64/164/4 -f 64/164/4 59/165/4 60/83/4 -f 60/83/4 57/166/4 58/84/4 -f 58/84/4 61/88/4 62/85/4 -f 62/85/4 64/164/4 60/83/4 -f 64/86/10 49/94/10 54/82/10 -f 58/84/8 55/90/8 52/81/8 -f 58/84/7 57/167/7 56/89/7 -f 54/91/6 53/161/6 60/78/6 -f 64/86/3 63/168/3 50/93/3 -f 52/95/2 51/162/2 62/96/2 -f 62/96/5 51/162/5 50/98/5 -f 76/100/9 69/169/9 72/101/9 -f 70/104/1 65/116/1 66/120/1 -f 66/120/1 67/170/1 68/103/1 -f 68/103/1 71/112/1 72/101/1 -f 72/101/1 69/169/1 70/104/1 -f 70/104/1 66/120/1 68/103/1 -f 78/107/4 79/171/4 80/172/4 -f 80/172/4 75/173/4 76/105/4 -f 76/105/4 73/174/4 74/106/4 -f 74/106/4 77/110/4 78/107/4 -f 78/107/4 80/172/4 76/105/4 -f 80/108/10 65/116/10 70/104/10 -f 74/106/8 71/112/8 68/103/8 -f 74/106/7 73/175/7 72/111/7 -f 70/113/6 69/169/6 76/100/6 -f 80/108/3 79/176/3 66/115/3 -f 68/117/2 67/170/2 78/118/2 -f 78/118/5 67/170/5 66/120/5 +f 32/49/7 38/50/7 46/51/7 +f 59/52/8 50/53/8 27/54/8 +f 44/55/9 27/56/9 50/57/9 +f 44/58/10 40/59/10 34/60/10 +f 48/61/10 39/62/10 50/63/10 +f 34/64/11 36/65/11 41/66/11 +f 34/64/8 32/49/8 31/67/8 +f 36/68/9 42/69/9 41/70/9 +f 46/71/12 44/72/12 43/73/12 +f 38/74/13 40/59/13 39/75/13 +f 40/59/14 32/49/14 33/76/14 +f 51/77/13 49/78/13 54/79/13 +f 53/80/15 47/81/15 52/82/15 +f 39/83/8 30/84/8 38/85/8 +f 51/77/10 60/86/10 68/87/10 +f 38/88/7 26/89/7 53/90/7 +f 66/91/16 62/92/16 57/93/16 +f 54/94/12 52/82/12 51/95/12 +f 25/96/13 48/61/13 47/81/13 +f 48/61/14 30/84/14 29/97/14 +f 64/98/9 28/99/9 68/100/9 +f 35/101/8 56/102/8 42/103/8 +f 56/102/11 58/104/11 61/105/11 +f 59/106/7 54/79/7 71/107/7 +f 58/108/9 62/92/9 61/109/9 +f 66/91/12 64/110/12 63/111/12 +f 43/112/13 59/113/13 46/114/13 +f 61/115/10 63/116/10 60/117/10 +f 72/118/16 68/100/16 28/99/16 +f 71/119/15 67/120/15 70/121/15 +f 65/122/7 57/123/7 55/124/7 +f 72/118/12 70/121/12 69/125/12 +f 84/126/15 80/127/15 81/128/15 +f 76/129/7 80/127/7 78/130/7 +f 84/131/10 82/132/10 86/133/10 +f 88/134/16 78/130/16 83/135/16 +f 82/132/14 76/129/14 85/136/14 +f 82/132/13 80/137/13 79/138/13 +f 78/139/12 84/126/12 83/140/12 +f 88/134/9 74/141/9 73/142/9 +f 76/143/8 86/144/8 85/145/8 +f 86/144/11 74/146/11 87/147/11 +f 100/148/15 96/149/15 97/150/15 +f 92/151/7 96/149/7 94/152/7 +f 100/153/10 98/154/10 102/155/10 +f 104/156/16 94/152/16 99/157/16 +f 98/154/14 92/151/14 101/158/14 +f 98/154/13 96/159/13 95/160/13 +f 94/161/12 100/148/12 99/162/12 +f 104/156/9 90/163/9 89/164/9 +f 92/165/8 102/166/8 101/167/8 +f 102/166/11 90/168/11 103/169/11 +f 46/51/7 35/170/7 36/171/7 +f 36/171/7 31/172/7 32/49/7 +f 32/49/7 37/173/7 38/50/7 +f 38/50/7 45/174/7 46/51/7 +f 46/51/7 36/171/7 32/49/7 +f 59/52/8 60/175/8 50/53/8 +f 44/55/9 45/176/9 27/56/9 +f 34/60/10 41/177/10 42/178/10 +f 42/178/10 43/179/10 44/58/10 +f 44/58/10 39/180/10 40/59/10 +f 40/59/10 33/76/10 34/60/10 +f 34/60/10 42/178/10 44/58/10 +f 50/63/10 51/181/10 52/182/10 +f 52/182/10 47/183/10 48/61/10 +f 48/61/10 29/97/10 39/62/10 +f 39/62/10 44/184/10 50/63/10 +f 50/63/10 52/182/10 48/61/10 +f 34/64/11 31/67/11 36/65/11 +f 34/64/8 33/76/8 32/49/8 +f 36/68/9 35/185/9 42/69/9 +f 46/71/12 45/186/12 44/72/12 +f 38/74/13 37/173/13 40/59/13 +f 40/59/14 37/173/14 32/49/14 +f 51/77/13 67/120/13 49/78/13 +f 53/80/15 25/96/15 47/81/15 +f 39/83/8 29/97/8 30/84/8 +f 68/87/10 69/187/10 70/188/10 +f 70/188/10 67/189/10 51/77/10 +f 51/77/10 50/53/10 60/86/10 +f 60/86/10 64/190/10 68/87/10 +f 68/87/10 70/188/10 51/77/10 +f 53/90/7 54/191/7 27/192/7 +f 27/192/7 45/193/7 38/88/7 +f 38/88/7 30/84/7 26/89/7 +f 26/89/7 25/194/7 53/90/7 +f 53/90/7 27/192/7 38/88/7 +f 66/91/16 63/111/16 62/92/16 +f 54/94/12 53/80/12 52/82/12 +f 25/96/13 26/89/13 48/61/13 +f 48/61/14 26/89/14 30/84/14 +f 64/98/9 65/195/9 28/99/9 +f 35/101/8 55/196/8 56/102/8 +f 56/102/11 55/196/11 58/104/11 +f 71/107/7 72/197/7 28/198/7 +f 28/198/7 65/199/7 59/106/7 +f 59/106/7 27/54/7 54/79/7 +f 54/79/7 49/200/7 71/107/7 +f 71/107/7 28/198/7 59/106/7 +f 58/108/9 57/93/9 62/92/9 +f 66/91/12 65/201/12 64/110/12 +f 43/112/13 60/202/13 59/113/13 +f 60/117/10 43/112/10 42/103/10 +f 42/103/10 56/203/10 61/115/10 +f 61/115/10 62/204/10 63/116/10 +f 63/116/10 64/205/10 60/117/10 +f 60/117/10 42/103/10 61/115/10 +f 72/118/16 69/125/16 68/100/16 +f 71/119/15 49/78/15 67/120/15 +f 55/124/7 35/101/7 46/114/7 +f 46/114/7 59/206/7 65/122/7 +f 65/122/7 66/207/7 57/123/7 +f 57/123/7 58/208/7 55/124/7 +f 55/124/7 46/114/7 65/122/7 +f 72/118/12 71/119/12 70/121/12 +f 84/126/15 77/209/15 80/127/15 +f 78/130/7 73/142/7 74/146/7 +f 74/146/7 75/210/7 76/129/7 +f 76/129/7 79/138/7 80/127/7 +f 80/127/7 77/209/7 78/130/7 +f 78/130/7 74/146/7 76/129/7 +f 86/133/10 87/211/10 88/212/10 +f 88/212/10 83/213/10 84/131/10 +f 84/131/10 81/214/10 82/132/10 +f 82/132/10 85/136/10 86/133/10 +f 86/133/10 88/212/10 84/131/10 +f 88/134/16 73/142/16 78/130/16 +f 82/132/14 79/138/14 76/129/14 +f 82/132/13 81/215/13 80/137/13 +f 78/139/12 77/209/12 84/126/12 +f 88/134/9 87/216/9 74/141/9 +f 76/143/8 75/210/8 86/144/8 +f 86/144/11 75/210/11 74/146/11 +f 100/148/15 93/217/15 96/149/15 +f 94/152/7 89/164/7 90/168/7 +f 90/168/7 91/218/7 92/151/7 +f 92/151/7 95/160/7 96/149/7 +f 96/149/7 93/217/7 94/152/7 +f 94/152/7 90/168/7 92/151/7 +f 102/155/10 103/219/10 104/220/10 +f 104/220/10 99/221/10 100/153/10 +f 100/153/10 97/222/10 98/154/10 +f 98/154/10 101/158/10 102/155/10 +f 102/155/10 104/220/10 100/153/10 +f 104/156/16 89/164/16 94/152/16 +f 98/154/14 95/160/14 92/151/14 +f 98/154/13 97/223/13 96/159/13 +f 94/161/12 93/217/12 100/148/12 +f 104/156/9 103/224/9 90/163/9 +f 92/165/8 91/218/8 102/166/8 +f 102/166/11 91/218/11 90/168/11 o Socket v -1.000000 0.000000 1.000000 v 1.000000 0.000000 1.000000 @@ -822,199 +938,199 @@ vn -0.7099 0.7043 0.0000 vn 0.7099 -0.7043 0.0000 vn -0.7071 -0.7071 0.0000 s off -f 83/177/11 82/178/11 81/179/11 -f 88/180/12 103/181/12 86/182/12 -f 83/177/13 92/183/13 84/184/13 -f 82/178/14 90/185/14 81/179/14 -f 84/184/15 91/186/15 82/178/15 -f 81/179/12 89/187/12 83/177/12 -f 87/188/16 90/189/16 85/190/16 -f 85/190/16 91/186/16 86/191/16 -f 86/191/16 92/192/16 88/193/16 -f 88/193/16 89/194/16 87/188/16 -f 94/195/15 95/196/15 93/197/15 -f 97/198/12 99/199/12 98/200/12 -f 103/181/16 101/201/16 102/202/16 -f 95/196/16 98/200/16 93/197/16 -f 96/203/13 97/198/13 95/196/13 -f 93/197/14 99/204/14 94/205/14 -f 85/206/15 101/201/15 87/207/15 -f 87/208/14 104/209/14 88/210/14 -f 86/211/13 102/202/13 85/212/13 -f 106/213/15 107/214/15 105/215/15 -f 109/216/12 111/217/12 110/218/12 -f 107/214/16 110/218/16 105/215/16 -f 108/219/13 109/216/13 107/214/13 -f 105/215/14 111/220/14 106/221/14 -f 114/222/12 115/223/12 113/224/12 -f 117/225/15 119/226/15 118/227/15 -f 115/223/16 118/227/16 113/224/16 -f 116/228/14 117/225/14 115/223/14 -f 113/224/13 119/229/13 114/230/13 -f 122/231/12 123/232/12 121/233/12 -f 125/234/15 127/235/15 126/236/15 -f 123/232/16 126/236/16 121/233/16 -f 124/237/14 125/234/14 123/232/14 -f 121/233/13 127/238/13 122/239/13 -f 130/240/13 131/241/13 129/242/13 -f 133/243/14 135/244/14 134/245/14 -f 131/241/16 134/245/16 129/242/16 -f 132/246/12 133/243/12 131/241/12 -f 129/242/15 135/247/15 130/248/15 -f 138/249/13 139/250/13 137/251/13 -f 141/252/14 143/253/14 142/254/14 -f 139/250/16 142/254/16 137/251/16 -f 140/255/12 141/252/12 139/250/12 -f 137/251/15 143/256/15 138/257/15 -f 146/258/14 147/259/14 145/260/14 -f 149/261/13 151/262/13 150/263/13 -f 147/259/16 150/263/16 145/260/16 -f 148/264/15 149/261/15 147/259/15 -f 145/260/12 151/265/12 146/266/12 -f 154/267/14 155/268/14 153/269/14 -f 157/270/13 159/271/13 158/272/13 -f 155/268/16 158/272/16 153/269/16 -f 156/273/15 157/270/15 155/268/15 -f 153/269/12 159/274/12 154/275/12 -f 162/276/13 177/277/13 161/278/13 -f 176/279/16 174/280/16 175/281/16 -f 172/282/16 170/283/16 171/284/16 -f 168/285/13 173/286/13 169/287/13 -f 167/288/14 171/289/14 166/290/14 -f 169/287/15 172/282/15 167/288/15 -f 166/291/12 170/292/12 168/285/12 -f 163/293/14 175/294/14 164/295/14 -f 161/278/15 176/279/15 163/293/15 -f 164/296/12 174/297/12 162/276/12 -f 179/298/13 193/299/13 178/300/13 -f 192/301/16 190/302/16 191/303/16 -f 188/304/16 186/305/16 187/306/16 -f 184/307/13 189/308/13 185/309/13 -f 183/310/14 187/311/14 182/312/14 -f 185/309/15 188/304/15 183/310/15 -f 182/313/12 186/314/12 184/307/12 -f 180/315/14 191/316/14 181/317/14 -f 178/300/15 192/301/15 180/315/15 -f 181/318/12 190/319/12 179/298/12 -f 194/320/16 195/321/16 165/322/16 -f 194/320/17 198/323/17 196/324/17 -f 197/325/15 200/326/15 198/323/15 -f 195/321/18 201/327/18 165/322/18 -f 202/328/12 203/329/12 201/327/12 -f 206/330/16 207/331/16 205/332/16 -f 206/330/17 210/333/17 208/334/17 -f 209/335/15 212/336/15 210/333/15 -f 207/331/18 213/337/18 205/332/18 -f 214/338/12 215/339/12 213/337/12 -f 169/287/11 166/340/11 168/341/11 -f 185/309/11 182/342/11 184/343/11 -f 180/315/11 179/344/11 178/300/11 -f 163/293/11 162/345/11 161/278/11 -f 218/346/15 219/347/15 220/348/15 -f 220/348/19 226/349/19 228/350/19 -f 221/351/12 224/352/12 223/353/12 -f 223/353/20 227/354/20 225/355/20 -f 226/349/11 227/354/11 228/350/11 -f 230/356/15 231/357/15 232/358/15 -f 232/358/19 238/359/19 240/360/19 -f 233/361/12 236/362/12 235/363/12 -f 235/363/20 239/364/20 237/365/20 -f 238/359/11 239/364/11 240/360/11 -f 83/177/11 84/184/11 82/178/11 -f 88/180/12 104/209/12 103/181/12 -f 83/177/13 89/366/13 92/183/13 -f 82/178/14 91/367/14 90/185/14 -f 84/184/15 92/192/15 91/186/15 -f 81/179/12 90/368/12 89/187/12 -f 87/188/16 89/194/16 90/189/16 -f 85/190/16 90/189/16 91/186/16 -f 86/191/16 91/186/16 92/192/16 -f 88/193/16 92/192/16 89/194/16 -f 94/195/15 96/369/15 95/196/15 -f 97/198/12 100/370/12 99/199/12 -f 103/181/16 104/209/16 101/201/16 -f 95/196/16 97/198/16 98/200/16 -f 96/203/13 100/371/13 97/198/13 -f 93/197/14 98/200/14 99/204/14 -f 85/206/15 102/202/15 101/201/15 -f 87/208/14 101/201/14 104/209/14 -f 86/211/13 103/181/13 102/202/13 -f 106/213/15 108/372/15 107/214/15 -f 109/216/12 112/373/12 111/217/12 -f 107/214/16 109/216/16 110/218/16 -f 108/219/13 112/374/13 109/216/13 -f 105/215/14 110/218/14 111/220/14 -f 114/222/12 116/375/12 115/223/12 -f 117/225/15 120/376/15 119/226/15 -f 115/223/16 117/225/16 118/227/16 -f 116/228/14 120/377/14 117/225/14 -f 113/224/13 118/227/13 119/229/13 -f 122/231/12 124/378/12 123/232/12 -f 125/234/15 128/379/15 127/235/15 -f 123/232/16 125/234/16 126/236/16 -f 124/237/14 128/380/14 125/234/14 -f 121/233/13 126/236/13 127/238/13 -f 130/240/13 132/381/13 131/241/13 -f 133/243/14 136/382/14 135/244/14 -f 131/241/16 133/243/16 134/245/16 -f 132/246/12 136/383/12 133/243/12 -f 129/242/15 134/245/15 135/247/15 -f 138/249/13 140/384/13 139/250/13 -f 141/252/14 144/385/14 143/253/14 -f 139/250/16 141/252/16 142/254/16 -f 140/255/12 144/386/12 141/252/12 -f 137/251/15 142/254/15 143/256/15 -f 146/258/14 148/387/14 147/259/14 -f 149/261/13 152/388/13 151/262/13 -f 147/259/16 149/261/16 150/263/16 -f 148/264/15 152/389/15 149/261/15 -f 145/260/12 150/263/12 151/265/12 -f 154/267/14 156/390/14 155/268/14 -f 157/270/13 160/391/13 159/271/13 -f 155/268/16 157/270/16 158/272/16 -f 156/273/15 160/392/15 157/270/15 -f 153/269/12 158/272/12 159/274/12 -f 162/276/13 174/297/13 177/277/13 -f 176/279/16 177/277/16 174/280/16 -f 172/282/16 173/286/16 170/283/16 -f 168/285/13 170/292/13 173/286/13 -f 167/288/14 172/282/14 171/289/14 -f 169/287/15 173/286/15 172/282/15 -f 166/291/12 171/393/12 170/292/12 -f 163/293/14 176/279/14 175/294/14 -f 161/278/15 177/277/15 176/279/15 -f 164/296/12 175/394/12 174/297/12 -f 179/298/13 190/319/13 193/299/13 -f 192/301/16 193/299/16 190/302/16 -f 188/304/16 189/308/16 186/305/16 -f 184/307/13 186/314/13 189/308/13 -f 183/310/14 188/304/14 187/311/14 -f 185/309/15 189/308/15 188/304/15 -f 182/313/12 187/395/12 186/314/12 -f 180/315/14 192/301/14 191/316/14 -f 178/300/15 193/299/15 192/301/15 -f 181/318/12 191/396/12 190/319/12 -f 194/320/16 196/324/16 195/321/16 -f 194/320/17 197/325/17 198/323/17 -f 197/325/15 199/397/15 200/326/15 -f 195/321/18 202/328/18 201/327/18 -f 202/328/12 204/398/12 203/329/12 -f 206/330/16 208/334/16 207/331/16 -f 206/330/17 209/335/17 210/333/17 -f 209/335/15 211/399/15 212/336/15 -f 207/331/18 214/338/18 213/337/18 -f 214/338/12 216/400/12 215/339/12 -f 169/287/11 167/288/11 166/340/11 -f 185/309/11 183/310/11 182/342/11 -f 180/315/11 181/401/11 179/344/11 -f 163/293/11 164/402/11 162/345/11 -f 218/346/15 217/403/15 219/347/15 -f 220/348/19 219/347/19 226/349/19 -f 221/351/12 222/404/12 224/352/12 -f 223/353/20 224/352/20 227/354/20 -f 226/349/11 225/355/11 227/354/11 -f 230/356/15 229/405/15 231/357/15 -f 232/358/19 231/357/19 238/359/19 -f 233/361/12 234/406/12 236/362/12 -f 235/363/20 236/362/20 239/364/20 -f 238/359/11 237/365/11 239/364/11 +f 107/225/17 106/226/17 105/227/17 +f 112/228/18 127/229/18 110/230/18 +f 107/225/19 116/231/19 108/232/19 +f 106/226/20 114/233/20 105/227/20 +f 108/232/21 115/234/21 106/226/21 +f 105/227/18 113/235/18 107/225/18 +f 111/236/22 114/237/22 109/238/22 +f 109/238/22 115/234/22 110/239/22 +f 110/239/22 116/240/22 112/241/22 +f 112/241/22 113/242/22 111/236/22 +f 118/243/21 119/244/21 117/245/21 +f 121/246/18 123/247/18 122/248/18 +f 127/229/22 125/249/22 126/250/22 +f 119/244/22 122/248/22 117/245/22 +f 120/251/19 121/246/19 119/244/19 +f 117/245/20 123/252/20 118/253/20 +f 109/254/21 125/249/21 111/255/21 +f 111/256/20 128/257/20 112/258/20 +f 110/259/19 126/250/19 109/260/19 +f 130/261/21 131/262/21 129/263/21 +f 133/264/18 135/265/18 134/266/18 +f 131/262/22 134/266/22 129/263/22 +f 132/267/19 133/264/19 131/262/19 +f 129/263/20 135/268/20 130/269/20 +f 138/270/18 139/271/18 137/272/18 +f 141/273/21 143/274/21 142/275/21 +f 139/271/22 142/275/22 137/272/22 +f 140/276/20 141/273/20 139/271/20 +f 137/272/19 143/277/19 138/278/19 +f 146/279/18 147/280/18 145/281/18 +f 149/282/21 151/283/21 150/284/21 +f 147/280/22 150/284/22 145/281/22 +f 148/285/20 149/282/20 147/280/20 +f 145/281/19 151/286/19 146/287/19 +f 154/288/19 155/289/19 153/290/19 +f 157/291/20 159/292/20 158/293/20 +f 155/289/22 158/293/22 153/290/22 +f 156/294/18 157/291/18 155/289/18 +f 153/290/21 159/295/21 154/296/21 +f 162/297/19 163/298/19 161/299/19 +f 165/300/20 167/301/20 166/302/20 +f 163/298/22 166/302/22 161/299/22 +f 164/303/18 165/300/18 163/298/18 +f 161/299/21 167/304/21 162/305/21 +f 170/306/20 171/307/20 169/308/20 +f 173/309/19 175/310/19 174/311/19 +f 171/307/22 174/311/22 169/308/22 +f 172/312/21 173/309/21 171/307/21 +f 169/308/18 175/313/18 170/314/18 +f 178/315/20 179/316/20 177/317/20 +f 181/318/19 183/319/19 182/320/19 +f 179/316/22 182/320/22 177/317/22 +f 180/321/21 181/318/21 179/316/21 +f 177/317/18 183/322/18 178/323/18 +f 186/324/19 201/325/19 185/326/19 +f 200/327/22 198/328/22 199/329/22 +f 196/330/22 194/331/22 195/332/22 +f 192/333/19 197/334/19 193/335/19 +f 191/336/20 195/337/20 190/338/20 +f 193/335/21 196/330/21 191/336/21 +f 190/339/18 194/340/18 192/333/18 +f 187/341/20 199/342/20 188/343/20 +f 185/326/21 200/327/21 187/341/21 +f 188/344/18 198/345/18 186/324/18 +f 203/346/19 217/347/19 202/348/19 +f 216/349/22 214/350/22 215/351/22 +f 212/352/22 210/353/22 211/354/22 +f 208/355/19 213/356/19 209/357/19 +f 207/358/20 211/359/20 206/360/20 +f 209/357/21 212/352/21 207/358/21 +f 206/361/18 210/362/18 208/355/18 +f 204/363/20 215/364/20 205/365/20 +f 202/348/21 216/349/21 204/363/21 +f 205/366/18 214/367/18 203/346/18 +f 218/368/22 219/369/22 189/370/22 +f 218/368/23 222/371/23 220/372/23 +f 221/373/21 224/374/21 222/371/21 +f 219/369/24 225/375/24 189/370/24 +f 226/376/18 227/377/18 225/375/18 +f 230/378/22 231/379/22 229/380/22 +f 230/378/23 234/381/23 232/382/23 +f 233/383/21 236/384/21 234/381/21 +f 231/379/24 237/385/24 229/380/24 +f 238/386/18 239/387/18 237/385/18 +f 193/335/17 190/388/17 192/389/17 +f 209/357/17 206/390/17 208/391/17 +f 204/363/17 203/392/17 202/348/17 +f 187/341/17 186/393/17 185/326/17 +f 242/394/21 243/395/21 244/396/21 +f 244/396/25 250/397/25 252/398/25 +f 245/399/18 248/400/18 247/401/18 +f 247/401/26 251/402/26 249/403/26 +f 250/397/17 251/402/17 252/398/17 +f 254/404/21 255/405/21 256/406/21 +f 256/406/25 262/407/25 264/408/25 +f 257/409/18 260/410/18 259/411/18 +f 259/411/26 263/412/26 261/413/26 +f 262/407/17 263/412/17 264/408/17 +f 107/225/17 108/232/17 106/226/17 +f 112/228/18 128/257/18 127/229/18 +f 107/225/19 113/414/19 116/231/19 +f 106/226/20 115/415/20 114/233/20 +f 108/232/21 116/240/21 115/234/21 +f 105/227/18 114/416/18 113/235/18 +f 111/236/22 113/242/22 114/237/22 +f 109/238/22 114/237/22 115/234/22 +f 110/239/22 115/234/22 116/240/22 +f 112/241/22 116/240/22 113/242/22 +f 118/243/21 120/417/21 119/244/21 +f 121/246/18 124/418/18 123/247/18 +f 127/229/22 128/257/22 125/249/22 +f 119/244/22 121/246/22 122/248/22 +f 120/251/19 124/419/19 121/246/19 +f 117/245/20 122/248/20 123/252/20 +f 109/254/21 126/250/21 125/249/21 +f 111/256/20 125/249/20 128/257/20 +f 110/259/19 127/229/19 126/250/19 +f 130/261/21 132/420/21 131/262/21 +f 133/264/18 136/421/18 135/265/18 +f 131/262/22 133/264/22 134/266/22 +f 132/267/19 136/422/19 133/264/19 +f 129/263/20 134/266/20 135/268/20 +f 138/270/18 140/423/18 139/271/18 +f 141/273/21 144/424/21 143/274/21 +f 139/271/22 141/273/22 142/275/22 +f 140/276/20 144/425/20 141/273/20 +f 137/272/19 142/275/19 143/277/19 +f 146/279/18 148/426/18 147/280/18 +f 149/282/21 152/427/21 151/283/21 +f 147/280/22 149/282/22 150/284/22 +f 148/285/20 152/428/20 149/282/20 +f 145/281/19 150/284/19 151/286/19 +f 154/288/19 156/429/19 155/289/19 +f 157/291/20 160/430/20 159/292/20 +f 155/289/22 157/291/22 158/293/22 +f 156/294/18 160/431/18 157/291/18 +f 153/290/21 158/293/21 159/295/21 +f 162/297/19 164/432/19 163/298/19 +f 165/300/20 168/433/20 167/301/20 +f 163/298/22 165/300/22 166/302/22 +f 164/303/18 168/434/18 165/300/18 +f 161/299/21 166/302/21 167/304/21 +f 170/306/20 172/435/20 171/307/20 +f 173/309/19 176/436/19 175/310/19 +f 171/307/22 173/309/22 174/311/22 +f 172/312/21 176/437/21 173/309/21 +f 169/308/18 174/311/18 175/313/18 +f 178/315/20 180/438/20 179/316/20 +f 181/318/19 184/439/19 183/319/19 +f 179/316/22 181/318/22 182/320/22 +f 180/321/21 184/440/21 181/318/21 +f 177/317/18 182/320/18 183/322/18 +f 186/324/19 198/345/19 201/325/19 +f 200/327/22 201/325/22 198/328/22 +f 196/330/22 197/334/22 194/331/22 +f 192/333/19 194/340/19 197/334/19 +f 191/336/20 196/330/20 195/337/20 +f 193/335/21 197/334/21 196/330/21 +f 190/339/18 195/441/18 194/340/18 +f 187/341/20 200/327/20 199/342/20 +f 185/326/21 201/325/21 200/327/21 +f 188/344/18 199/442/18 198/345/18 +f 203/346/19 214/367/19 217/347/19 +f 216/349/22 217/347/22 214/350/22 +f 212/352/22 213/356/22 210/353/22 +f 208/355/19 210/362/19 213/356/19 +f 207/358/20 212/352/20 211/359/20 +f 209/357/21 213/356/21 212/352/21 +f 206/361/18 211/443/18 210/362/18 +f 204/363/20 216/349/20 215/364/20 +f 202/348/21 217/347/21 216/349/21 +f 205/366/18 215/444/18 214/367/18 +f 218/368/22 220/372/22 219/369/22 +f 218/368/23 221/373/23 222/371/23 +f 221/373/21 223/445/21 224/374/21 +f 219/369/24 226/376/24 225/375/24 +f 226/376/18 228/446/18 227/377/18 +f 230/378/22 232/382/22 231/379/22 +f 230/378/23 233/383/23 234/381/23 +f 233/383/21 235/447/21 236/384/21 +f 231/379/24 238/386/24 237/385/24 +f 238/386/18 240/448/18 239/387/18 +f 193/335/17 191/336/17 190/388/17 +f 209/357/17 207/358/17 206/390/17 +f 204/363/17 205/449/17 203/392/17 +f 187/341/17 188/450/17 186/393/17 +f 242/394/21 241/451/21 243/395/21 +f 244/396/25 243/395/25 250/397/25 +f 245/399/18 246/452/18 248/400/18 +f 247/401/26 248/400/26 251/402/26 +f 250/397/17 249/403/17 251/402/17 +f 254/404/21 253/453/21 255/405/21 +f 256/406/25 255/405/25 262/407/25 +f 257/409/18 258/454/18 260/410/18 +f 259/411/26 260/410/26 263/412/26 +f 262/407/17 261/413/17 263/412/17 diff --git a/src/main/resources/assets/hbm/textures/models/machines/capacitor_base.png b/src/main/resources/assets/hbm/textures/models/machines/capacitor_base.png new file mode 100644 index 0000000000000000000000000000000000000000..50e443456848953a3b5ff7e52d712d670522a7a0 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^89*Gu!3HGrmK2o(DVAa<&kznEsNqQIU|?X>@N{tu zshIQj&cWQn1_BI@S^pfGOFuWh_3m+bTR`i@@1ulE;mVo`&lYscSx@0YT#yT>a3 zeCL-P`_r0GjeYm@`=fno_4VKG%_V3Q+$B5yTJ!z{OR0*95sk5-yHor>HDL5 ma~ukpj&h2q2N2DuWwy*0`cU#AAGuxR)79j95D!~_1SHESQ6tj4ODWW(gm|8T}v z{?GNsa?&kZTF!c{PEFsuNyj>H!D}l^x&ENg&}EAG+E0{}&h0$PD(b43ds|O0o$*io zgEwu-H{X`U#$KO(zxMIZJ6FFxFP?cK(oxBtzreG{FgtX@{|kSL@4D>n;1N|S3hb({ zyHj6KtC!NXQdQwfUFDC`*z|pqj&X5+k&n1KwW-HY`1@qP%O>U0uMhgHogMk0JY?fu z(WNo+TNLVjXBmI}862_ynT~C#*2n!XbMDw>yw+9Q!pC||p?-~@%cd71-@g@2x%|>Q zZvGn`?+?G%mYkI|-Zn4txN`PRt9h^ftCxi@zdXIBrsmkJ#dmJ?w{S)U1d4q6mEt<@ zId56Ey^y-q(Vv&2PK8`uZz^5Hqu^1tdAV41GSAe_3>Qs15*%0?ol()`E&N(tkJbg| zP4WwHe7s_dM^uZ#mHt0{5O?f9|35AI+}gh$5^kFhCYngk(PlOERnEPA@6V=OW&M{4 z9Z>=Y8-6Pk6bZg7o^Y~$_p=G9C$|)D-l|ioz4O7Voi~q3JZn1tAaUo-Gpzo}4~~Y0 zivF2*c#h$gr)vdw-F%Re8d-MEa;oNWOZ96}7pFX*6TN@(g1!8Y_G!y*t)1{c&NKMl zt&`RH?x$B@nzp@+&F|3fo6J)6-GBZZ-01&GA{l7P#1!>|63Xp|6>p@i^?hZ3+;hkD zJ-!y4E8l$o{ov=)WkR`?9cO|9a)dM1?md0hCQ43ei$Xz$7K!9mW~+${Zhf&yUgzqh?PW72Gw>A)9Z2+JviR}{ zOaXm&hIPKXTvhKLmgtjHueFr|L+EZ!!Hcx!!$7}n$TPE8W5UFz-P>^3OBuqQ&CB=Q w@j(Cv0;>f|F24D|U>2Byi2#*Dndi*I%U4a~EBSB(m`@lyUHx3vIVCg!08{^xBLDyZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/capacitor_copper.png b/src/main/resources/assets/hbm/textures/models/machines/capacitor_copper.png new file mode 100644 index 0000000000000000000000000000000000000000..7626bef4adbf64dc57285211b326171130f21983 GIT binary patch literal 1414 zcmV;11$p|3P)i?(5dNqm)i{=^C>}YACNnA0vq+cb9w1MV!mYdXd6B$B z-at(XcTAm`WF})PQ5;Ed+=)Ch#T_UR#~<)+0T9dkW;EgvB$mSBBY?%;r)arcR&a=` ztENvvZZYtY8ivnx+(xstQFRSd77qmL+^sXUu!D#4mRqu-a%VBZ13kS2T4dL$zv0! z*9Sann-n@7v@4SiPN7AogCtCtbYPA>3_3_{@U8)0pX(n$hoj+3*65p!<#`_MGod)3 z8-olA9Y1~hwKaB^(wy}2LZr;A3l)PRTe80 z#R?}+o{-hqh1oa=0A76leD6An4Rda8ZV8@f7_)K^00{AZ=X=Xyg|b}XG8orNdrhB1SL5S@;oh~2ry{q3FcwPo=UMY%$nKC}2l z?dWxo9zp1f5U3G{P;l|(#o#r?Ly58|asB4T!4qv`RH(=F+K?P||L)(;vSKsloSuE^ z@QIpebih;*T!CZU$+dtmm)d?o^T2tXHvvjJM!bG4C4Fmkh>v3=+E1KppG%J8dYeK0DT|hKo8Lcw_f2K9{@x8c(?+8TwA!$Dd;cCu zvOt_H5XbA^NxVRu93hSujj|+J)SGlNwQ7C5-tsP6%Je$O>)*H0sH5Q2_Rdb9S!IxI zh8iV}bTyidEedLT>>1S6X!5+RuQ^iLn+1c^MswjDN_(?mP^g#{gY-qA?VJM&d$VCs z+Wb+wXN^IC;#UOp%VLLb5g}u-j6fKv_N|$?~&dt^v z(WSi~FYWelrwp1MN82l>jCwhcB6;;frpZ2n*y`2LsQ-08(})y-z57spjMo1I=9N8M~z zdU0HJv)Spzan#Lbr5DFlH=BiCoQk0w0l94v5?JWPaYvAPadShEdU10@5PETQ#}xJA zjQ_dD0e)cQprHV&?=1x?Oja+>1l)A9RZLzlt_$3Cvw=YL;`+c@H{16V+61%J%??g4 zP6ub*>>%~xfO+U<2dfunLzH4_y4k_&#ktPSc8Q?%;<)Q(2d@`5wbe5vLf4D?9~O_$ U8W`eNg#Z8m07*qoM6N<$g2vjs=l}o! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/capacitor_gold.png b/src/main/resources/assets/hbm/textures/models/machines/capacitor_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..ab17e66c1abfa6e4a6e193792452741d7c71392f GIT binary patch literal 1413 zcmV;01$z34P)^R_68?pWMBT)Xr9;aUV790cqu5TI}2 zz8UHOa;3@FTFrd`eTM*@Q{?OF`@QF5aUfbZWrd2e0%eXs3#HNw?swOOLj>|XZxyGh z@AsbX7*rHRl;?SyWf`fH%CbaJ6j9(z()B9Q!13t!Rh%~Yd@7&FP6Fn)eEEH~1qF(! z?o7SkyC>K(G!6}nL2_9wfGAaNc7u7AWnD$jLEzn*47Gt-ovRIWputX_-*J$DaFRGS zf&6^Hv$j=X)IoEZbaDzUMja$z!lV;(+(GLgxx&W=e08pW0v%%gBYRBE#)_hdj+s!L zFb*w)LdTC^O)fHzLQ?^sKGm*~jsklJ0l@jAkI2ics~Sz!0Qi->Y#Ezy5CFV+^)p#n zb-icLy|+IkD{~B+aS#BUzx(mgWi(Zd`nJKV7jzDv!loPq0B^2;n*DBF9hh@Y-(`-$ z$U!22I<^%NS|Ie|z0a)QsReWXobTW{FlJC$mZOfKh~4?d>z6+mKU-HoQv>%dj_)FE zG3g*Rf-n^!kRuME;Ntzywa?U5jpnw&^&jRArG!;6G3Wk6`!10R zgATG`j*1|e^ud!m*Tih?`uA}M`hd}PgDpa2(&d+L_0FGPeuMk(=(|AI=s8HuAvh)~ zEu1tp`&%1sZf*dqYs;i_kn9|)ZE6=e4qHPnnoXTUP!vV9rq-xKS(d9}4{%_R7%R5g z+OL264$m)_{ws#zEwgm3Si?kM3Oxq-fPaQwjow*$3T*=Kx!JyQ7Ib!&TzuMKvE1w> zbHSGi+sr}dAQ$TvdFrlqqrUA4ED`WL28-opFOduGd#iu~i{@tgwC8h^jS|}2Y}@X~ z_9rJk?D^WBb^&d$)MkuO$ACFeaB6!#5<6UC)IsVPp{q1CmS;PzxUv_gF_JVvauy># zd?smv_)NK;#z@W*)VDS2s_C{H#D<;N^6p))8oc=WaqF`D$qhTxN}~$2y0G{6%U=+u zK$2kpnF4Wg_>|7YvDl<*>i>^x_56@_)l~cUT$ZohQPou%brhW1-h+paoifNZLyeL~ z#wyLl76r9E_6!=UG;!V4&m5`jZGu5^rTK6UrM=BCC{%2ULF%H=b+9DO}oP%OE-YZ&TUwyS54?F6^;lkh<=0oty2$Ug!*pcDr4x%DqtMW~-Ix)84nw z{^i3Umr>~<_^`)?o5NF+N@n!K3ec7LU;ZZM+t8O+cy*RGA+3fVcwphLFmP89c$E!Gydlq zCoBUa2k8Q+OK&MqVYPa3Cg7%O0hQG?BMm{eCKBSM9_M1+;y{q*Na=*>X{Ou>&5*CkD{MM TSG7C500000NkvXXu0mjf2XVn_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/capacitor_niobium.png b/src/main/resources/assets/hbm/textures/models/machines/capacitor_niobium.png new file mode 100644 index 0000000000000000000000000000000000000000..0e11f3ed497f330a12b31fa6c9afb92d1e1f12c7 GIT binary patch literal 1224 zcmV;(1ULJMP)_jsbXk%w*CmIX})9<&!n{A2yH`@#VSSon(Dq!I5 z!p&~u$rA$tTo20aV5RIo*I!!@AKtB+CBNNf3-7@bPft&IKUOvh`JlMZ$>4+L+NSUO%(HS`H|q~z z;&~p@j!lgF{13MsvzA1gx4(IIcE*~~r7V$Cj;+Z7*9Uo?m-%3}Z5KKjO%jvkgW?<> z9%izHZnqoF-WplQCg_7|CDjL&K|_2{t!N)4IgO8lUOs!BI@!iyh?Q0=b>A%V_n+Sg zorH}aAOLv!WIM6Vp9EMo0$fIuLUPe4F+c!taW$TPAB6!%L5O9;Dorj5rIMv5;W3VW ze8k2oI~*t~7lBd(G#n0bets@YE`m&P(4xo`2R$-Z@M3!pNV=0!AaS+du7nO@9(<-iLX1h)kZPg9MO{gM@341gde6Qp;?L&x1@(B9!+> z?_B*|*F~q(S$O|N^j&!5+`k;QlkE5fb>Fp@qF516JeanWG`YA&$n#Ql<)~q(xtv1#z3+t8ze=@oG z1o$%v3d`R;{}72hz7hXFHGsL97B+dx!iIn#pT7lr54^Y*V&-{X~yxf$ACp5T!=!NaBNKr=prWs{p_J)Fx*)%t#q zf8p=H7A~&Z2riQ|^fGEmEidH(T+s)1BK3*(5u)XdUnEespvDgnc^_2w1r!Z=3u<~U z&idK_3u<&OZu~%M3(4(+nwE=eqz~%%`|y1q2L}i6Ja4Yen*DkESE-M@58_@u;!w9B zor}}CI6gWTr*m=A`WT&y)44dgp>9EqA0YBRsO}3W8f`%(5PvO__nKs${@Q{hM_Z8O zXbX}YZ9xPW1tCU32>dQz{`S)=vGw9Ob+Z?KfObAKnJa?vQ^gGk3gx^8wka#85I*(J(FpyQwtxxWdMI^Xro?+s(gsY8b|zOEHpni~6M3 zIIH7ChM`_;z~*}swtuaDS>$z~reU%2wx!qQR9-gU%;qn9d%L#!c>Z@+rD)d9nmY%K zULKQ`Tzk4+!0W)C%xC+SEQod4#3guB^XQ%V@8?_YQ(MxZB%Y9c|L&iYH4-zuPHCUH zWS<;b&GqWo+@{wb(|668`z9uR*@=9&Y4`n(KKt|G;N!JoDZiFXSa|-6;mY%x)h|LG zT_~8Ae}2nSvE%{i6u@h8h{MC9@{OQSB^$ctItx=0^ zG~bSo3Evu(`{e7_`Kxc9-1xUcb~UT%Yu?HmcRFi$t#1Maq@N3<^JUw8o_^(eOh5ud zWBH8OCvSEawx7~uT+Xi~5#aa$4ON_Np7r&ZXZX%e`!Lq0;Y(frgmL8jJ@LGNudx5R z|EJxioZIFk{}!~4Im_0*`sRZ-ni;$1oV@+(?~CcV;-4n*u`Op6m7g^L|!Xa1L6m=a#e?X_5T?Fz5x zxT_~wIP0I=ueq-zU%%n?1>(H)kd$fXu1*fi&GgfyDjXRp?$7FHFlcC*`^MOGZGl*L8RAotq zd-&At3-ay=c9yopI<4Dcwq`aj-|MvI!v@ka*MMPHy7^$@Qo(|VOct3iDMm2&ZcYI( zp!QzVOWlA7+_ZzznMtfH6PI7s>P*R`2?=5tykMJYD@<);T3K0RYff Bp}YV9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/capacitor_tantalum.png b/src/main/resources/assets/hbm/textures/models/machines/capacitor_tantalum.png new file mode 100644 index 0000000000000000000000000000000000000000..4a8390971894312cd4f3340fb88597b9a7441b78 GIT binary patch literal 1156 zcmV-~1bh35P)QiWUzR45zW`XRdZ3$QldATvy) zOGc!C`WYBl${JM+MF$>Ch_4RRFJ8OR?In}avfB^F+T4jkg?Ck7}d%fQ5`_wpD7U@4(RsjHbmT~88paTC7 z-25_?Ju)Ex|0ZQRSuyJ`^k)xJqqgr1MV|61_3<}4b1Tko#UG;rmx>ug(CH(>Xv>+7Gh??EtvVekmAU%koAj)hgp(v#CR zw7<4sd;2|#9RsT-sNe6y!@~ob9fL$VXjyd9K^q%y;qc%X&5nf?I_Uew1*#nrr4Di& z2Rfb3QeLKm4pIg3tafY?-Nj|iY?sOH-A$}54;_S!6)}jk4wA(Q&+}4cvE$Gs1_993 zLDCr1?RLk$@6Te0>$(f=Fk!o@e_5QIwxQqe!{NcPH1KD&W57BnM>_`Aqe92>=G^p!pn}<2aFa*8XLTXPgc?J39m4_o3Bl zfe>P$Ej#;cAGpEqB`599uz((s>@W`{zZ;P?7^k8R{Nn`~;DYL1iC6 zY{+|%>A5%~Jjmo+9C;6t{irD>C*pfD!o;*9ek)1dA_oQtFAL7a=z$IiJp%{_>7 zak_g@k^@K?>K*-|%~?E67n zFHZCKgG`S>{C<$;aGeAKkk&!yBWMCu9mI7Kat>sv zgSc*Xyd4`WVi0K^#C5atv17q?vvag#z&a>LI|kOIddTXa!bdCt(mJTLkqd&l4*Cnu WmHgSq9Xp2r0000 Date: Fri, 2 Jan 2026 11:20:15 +0100 Subject: [PATCH 17/19] flavor town --- src/main/java/com/hbm/blocks/ModBlocks.java | 22 +- .../com/hbm/blocks/generic/BlockCrate.java | 4 +- .../com/hbm/crafting/ConsumableRecipes.java | 7 +- .../java/com/hbm/crafting/WeaponRecipes.java | 3 +- .../inventory/recipes/AssemblerRecipes.java | 243 ------------------ .../recipes/AssemblyMachineRecipes.java | 70 +++-- .../recipes/ChemicalPlantRecipes.java | 31 +++ .../hbm/items/machine/ItemBatteryPack.java | 2 +- .../com/hbm/items/special/ItemStarterKit.java | 5 +- .../java/com/hbm/main/CraftingManager.java | 19 +- .../machine/TileEntityCrucible.java | 1 + .../machine/TileEntityMachineExcavator.java | 2 + .../machine/TileEntityMachineMiningLaser.java | 8 +- .../java/com/hbm/uninos/UniNodespace.java | 12 +- .../com/hbm/world/dungeon/DesertAtom001.java | 24 -- .../com/hbm/world/dungeon/DesertAtom002.java | 13 - .../com/hbm/world/dungeon/DesertAtom003.java | 6 +- .../java/com/hbm/world/dungeon/Relay.java | 7 +- .../java/com/hbm/world/dungeon/Spaceship.java | 4 +- .../world/gen/component/BunkerComponents.java | 2 +- 20 files changed, 134 insertions(+), 351 deletions(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a4c4381be..a63a8fe91 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -751,12 +751,12 @@ public class ModBlocks { @Deprecated public static Block machine_dineutronium_battery; public static Block machine_fensu; - public static Block capacitor_bus; - public static Block capacitor_copper; - public static Block capacitor_gold; - public static Block capacitor_niobium; - public static Block capacitor_tantalium; - public static Block capacitor_schrabidate; + @Deprecated public static Block capacitor_bus; + public static Block capacitor_copper; // neat for structures + @Deprecated public static Block capacitor_gold; + @Deprecated public static Block capacitor_niobium; + @Deprecated public static Block capacitor_tantalium; + @Deprecated public static Block capacitor_schrabidate; public static Block machine_wood_burner; @@ -1870,12 +1870,12 @@ public class ModBlocks { machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fensu"); - capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L, "copper").setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); - capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName("gold_block"); - capacitor_niobium = new MachineCapacitor(Material.iron, 25_000_000L, "niobium").setBlockName("capacitor_niobium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_niobium"); - capacitor_tantalium = new MachineCapacitor(Material.iron, 150_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_tantalium"); - capacitor_schrabidate = new MachineCapacitor(Material.iron, 50_000_000_000L, "schrabidate").setBlockName("capacitor_schrabidate").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_schrabidate"); + capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName("gold_block"); + capacitor_niobium = new MachineCapacitor(Material.iron, 25_000_000L, "niobium").setBlockName("capacitor_niobium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_niobium"); + capacitor_tantalium = new MachineCapacitor(Material.iron, 150_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_tantalium"); + capacitor_schrabidate = new MachineCapacitor(Material.iron, 50_000_000_000L, "schrabidate").setBlockName("capacitor_schrabidate").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_schrabidate"); machine_wood_burner = new MachineWoodBurner(Material.iron).setBlockName("machine_wood_burner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_diesel = new MachineDiesel().setBlockName("machine_diesel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCrate.java b/src/main/java/com/hbm/blocks/generic/BlockCrate.java index abfebe1d1..6e948d05f 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCrate.java @@ -8,6 +8,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.Spaghetti; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import net.minecraft.block.BlockFalling; import net.minecraft.block.material.Material; @@ -102,8 +103,7 @@ public class BlockCrate extends BlockFalling { BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_diesel), 8); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_rtg_grey), 4); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.red_pylon), 9); - BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_battery), 8); - BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_lithium_battery), 5); + BlockCrate.addToListWithWeight(metalList, new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()), 10); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 8); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_assembly_machine), 10); BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_fluidtank), 7); diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 07500552b..d8fc7090b 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.fluid.Fluids; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.ItemEnums; @@ -181,9 +182,9 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.pads_static, 1), new Object[] { "CDC", "ISI", "CDC", 'C', CU.ingot(), 'D', ModItems.ducttape, 'I', ANY_RUBBER.ingot(), 'S', ModItems.pads_slime }); //Batteries - CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery, 1), new Object[] { "PCP", "PCP", "PCP", 'P', STEEL.plate(), 'C', ModBlocks.capacitor_gold }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk2, 1), new Object[] { "PCP", "PCP", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', ModBlocks.capacitor_niobium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk3, 1), new Object[] { "PCP", "PCP", "PCP", 'P', GOLD.plate(), 'C', ModBlocks.capacitor_tantalium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery, 1), new Object[] { "PCP", "PCP", "PCP", 'P', STEEL.plate(), 'C', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_GOLD.ordinal()) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk2, 1), new Object[] { "PCP", "PCP", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM.ordinal()) }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk3, 1), new Object[] { "PCP", "PCP", "PCP", 'P', GOLD.plate(), 'C', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_TANTALUM.ordinal()) }); //Special Mods CraftingManager.addRecipeAuto(new ItemStack(ModItems.horseshoe_magnet, 1), new Object[] { "L L", "I I", "ILI", 'L', ModItems.lodestone, 'I', IRON.ingot() }); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 96a34b51d..c11304bf5 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -12,6 +12,7 @@ import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ItemAmmoEnums.*; import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ItemEnums.EnumSecretType; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.ModItems; import com.hbm.items.weapon.GunB92Cell; @@ -148,7 +149,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.DRILL_SATURNITE.ordinal()), new Object[] { " IP", "IIM", " IP", 'I', BIGMT.ingot(), 'P', ANY_HARDPLASTIC.ingot(), 'M', WEAPONSTEEL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.ENGINE_DIESEL.ordinal()), new Object[] { "DSD", "PPP", "DSD", 'D', DURA.plate(), 'P', ModItems.piston_selenium, 'S', STEEL.pipe() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.ENGINE_AVIATION.ordinal()), new Object[] { "DSD", "PPP", "DSD", 'D', DURA.plateCast(), 'P', ModItems.piston_selenium, 'S', GUNMETAL.mechanism() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.ENGINE_ELECTRIC.ordinal()), new Object[] { "DSD", "PPP", "DSD", 'D', ANY_PLASTIC.ingot(), 'P', GOLD.wireDense(), 'S', ModBlocks.capacitor_gold }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.ENGINE_ELECTRIC.ordinal()), new Object[] { "DSD", "PPP", "DSD", 'D', ANY_PLASTIC.ingot(), 'P', GOLD.wireDense(), 'S', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_GOLD.ordinal()) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.ENGINE_TURBO.ordinal()), new Object[] { "DSD", "PPP", "DSD", 'D', ANY_BISMOIDBRONZE.plateCast(), 'P', ModItems.piston_selenium, 'S', WEAPONSTEEL.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.MAGNET.ordinal()), new Object[] { "RGR", "GBG", "RGR", 'R', RUBBER.ingot(), 'G', GOLD.wireDense(), 'B', NB.block() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SIFTER.ordinal()), new Object[] { "IGI", "IGI", 'I', DURA.ingot(), 'G', ModBlocks.steel_grate }); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index c6a7bf0cf..6ad7036c3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -115,10 +115,6 @@ import net.minecraft.item.ItemStack; makeRecipe(new ComparableStack(ModBlocks.machine_gascent, 1), new AStack[] {new ComparableStack(ModItems.centrifuge_element, 4), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(DESH.ingot(), 2), new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.coil_tungsten, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED.ordinal()) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_diesel, 1), new AStack[] {new OreDictStack(STEEL.shell(), 1), new ComparableStack(ModItems.piston_selenium, 1), new OreDictStack(STEEL.plateCast(), 1), new ComparableStack(ModItems.coil_copper, 4), }, 60); makeRecipe(new ComparableStack(ModBlocks.machine_rtg_grey, 1), new AStack[] {new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate(), 4), new OreDictStack(MINGRADE.wireFine(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 3), },200); - makeRecipe(new ComparableStack(ModBlocks.machine_battery, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12) },100); - makeRecipe(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new AStack[] {new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12) },100); - makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_battery, 1), new AStack[] {new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12) },200); - makeRecipe(new ComparableStack(ModBlocks.machine_dineutronium_battery, 1), new AStack[] {new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_shredder, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModBlocks.steel_beam, 2), new ComparableStack(Blocks.iron_bars, 2) },200); makeRecipe(new ComparableStack(ModBlocks.machine_well, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 20), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.pipes_steel, 1), new ComparableStack(ModItems.drill_titanium, 1) }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_pumpjack, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.plateWelded(), 8), new ComparableStack(ModItems.pipes_steel, 4), new ComparableStack(ModItems.tank_steel, 4), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.motor_desh) }, 400); @@ -131,10 +127,8 @@ import net.minecraft.item.ItemStack; makeRecipe(new ComparableStack(ModBlocks.machine_fluidtank, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(STEEL.plate(), 6), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_TAR.any(), 4), },150); makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150); makeRecipe(new ComparableStack(ModBlocks.machine_orbus, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1) }, 200); - makeRecipe(new ComparableStack(ModBlocks.machine_mining_laser, 1), new AStack[] {new ComparableStack(ModItems.tank_steel, 3), !exp ? new OreDictStack(STEEL.plate(), 16) : new OreDictStack(STEEL.heavyComp(), 3), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 3), !exp ? new OreDictStack(DURA.ingot(), 4) : new OreDictStack(DESH.heavyComp(), 1), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModBlocks.machine_battery, 3), },400); makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 8) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()) }, 300); makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 10) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())}, 600); - makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300); makeRecipe(new ComparableStack(ModBlocks.watz_element, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(ZR.ingot(), 2), new OreDictStack(BIGMT.ingot(), 2), new OreDictStack(ANY_HARDPLASTIC.ingot(), 4)},200); makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 3), new AStack[] {new OreDictStack(STEEL.plateCast(), 2), new OreDictStack(CU.plateCast(), 4), new OreDictStack(RUBBER.ingot(), 2), }, 200); makeRecipe(new ComparableStack(ModBlocks.watz_end, 3), new AStack[] {new OreDictStack(ANY_RESISTANTALLOY.plateWelded()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plateWelded(), 2), }, 100); @@ -199,17 +193,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE) },600); - makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] { - new OreDictStack(RUBBER.ingot(), 12), - new OreDictStack(TI.shell(), 3), - new ComparableStack(ModItems.thruster_large, 1), - new ComparableStack(ModItems.part_generic, 8, EnumPartType.LDE), - new ComparableStack(ModItems.plate_desh, 4), - new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), - new ComparableStack(ModItems.photo_panel, 24), - new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC), - new ComparableStack(ModBlocks.machine_lithium_battery, 1) - },500); makeRecipe(new ComparableStack(ModItems.sat_head_mapper, 1), new AStack[] { new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.plate_desh, 4), @@ -246,39 +229,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.crystal_xen, 1), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED) },1000); - makeRecipe(new ComparableStack(ModItems.sat_foeq, 1), new AStack[] { - new OreDictStack(TI.shell(), 3), - new ComparableStack(ModItems.plate_desh, 8), - new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.getID()), - new ComparableStack(ModItems.photo_panel, 16), - new ComparableStack(ModItems.thruster_nuclear, 1), - new ComparableStack(ModItems.ingot_uranium_fuel, 6), - new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BASIC), - new ComparableStack(ModItems.magnetron, 3), - new ComparableStack(ModBlocks.machine_lithium_battery, 1) - },1200); - makeRecipe(new ComparableStack(ModItems.sat_miner, 1), new AStack[] { - new OreDictStack(BIGMT.plate(), 24), - new ComparableStack(ModItems.motor_desh, 2), - new ComparableStack(ModItems.drill_titanium, 2), - new ComparableStack(ModItems.circuit, 12, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), - new ComparableStack(ModItems.thruster_small, 1), - new ComparableStack(ModItems.photo_panel, 12), - new ComparableStack(ModItems.centrifuge_element, 4), - new ComparableStack(ModBlocks.machine_lithium_battery, 1) - },600); - makeRecipe(new ComparableStack(ModItems.sat_lunar_miner, 1), new AStack[] { - new ComparableStack(ModItems.ingot_meteorite, 4), - new ComparableStack(ModItems.plate_desh, 4), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.drill_titanium, 2), - new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), - new ComparableStack(ModItems.thruster_small, 1), - new ComparableStack(ModItems.photo_panel, 12), - new ComparableStack(ModBlocks.machine_lithium_battery, 1) - },600); makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new AStack[] { new ComparableStack(ModItems.upgrade_speed_3, 1), @@ -304,19 +254,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID), }, 500); - makeRecipe(new ComparableStack(ModBlocks.machine_fensu, 1), new AStack[] { - new ComparableStack(ModItems.ingot_electronium, 32), - new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), - !exp ? new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64) : new OreDictStack(ANY_RESISTANTALLOY.heavyComp(), 64), - new OreDictStack(DURA.block(), 16), - new OreDictStack(STAR.block(), 64), - new ComparableStack(ModBlocks.machine_transformer_dnt, 8), - new ComparableStack(ModItems.coil_magnetized_tungsten, 24), - new ComparableStack(ModItems.powder_magic, 64), - new ComparableStack(ModItems.plate_dineutronium, 24), - new ComparableStack(ModItems.ingot_u238m2), - new ComparableStack(ModItems.ingot_cft, 128) - }, 1200); makeRecipe(new ComparableStack(ModBlocks.machine_combustion_engine, 1), new AStack[] { new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.ingot(), 12), @@ -463,18 +400,6 @@ import net.minecraft.item.ItemStack; new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4) }, 600); - makeRecipe(new ComparableStack(ModBlocks.machine_cyclotron, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 3), - new OreDictStack(ND.wireDense(), 32), - !exp ? new OreDictStack(STEEL.ingot(), 16) : new OreDictStack(STEEL.heavyComp(), 3), - new OreDictStack(STEEL.plate(), 32), - new OreDictStack(AL.plate(), 32), - new OreDictStack(ANY_PLASTIC.ingot(), 24), - new OreDictStack(RUBBER.ingot(), 24), - new OreDictStack(CU.plateCast(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 600); - makeRecipe(new ComparableStack(ModBlocks.reactor_zirnox, 1), new AStack[] { !exp ? new OreDictStack(STEEL.shell(), 4) : new OreDictStack(STEEL.heavyComp(), 1), new OreDictStack(STEEL.pipe(), 8), @@ -527,113 +452,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.motor, 2), }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_chekhov, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new ComparableStack(ModItems.motor, 3), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), - new OreDictStack(STEEL.pipe(), 3), - new OreDictStack(GUNMETAL.mechanism(), 3), - new ComparableStack(ModBlocks.crate_iron, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_friendly, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new ComparableStack(ModItems.motor, 3), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), - new OreDictStack(STEEL.pipe(), 3), - new OreDictStack(GUNMETAL.mechanism(), 1), - new ComparableStack(ModBlocks.crate_iron, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_jeremy, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.motor_desh, 1), - new OreDictStack(STEEL.shell(), 3), - new OreDictStack(WEAPONSTEEL.mechanism(), 3), - new ComparableStack(ModBlocks.crate_steel, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_tauon, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(ANY_PLASTIC.ingot(), 4), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.motor_desh, 1), - new OreDictStack(CU.ingot(), 32), - new OreDictStack(BIGMT.mechanism(), 3), - new ComparableStack(ModItems.battery_lithium, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_richard, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), - new OreDictStack(ANY_PLASTIC.ingot(), 2), - new OreDictStack(STEEL.shell(), 8), - new OreDictStack(WEAPONSTEEL.mechanism(), 3), - new ComparableStack(ModBlocks.crate_steel, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_howard, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 24), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.motor_desh, 2), - new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), - new OreDictStack(STEEL.pipe(), 10), - new OreDictStack(WEAPONSTEEL.mechanism(), 3), - new ComparableStack(ModBlocks.crate_steel, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_maxwell, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 1), - new OreDictStack(STEEL.ingot(), 24), - new ComparableStack(ModItems.motor, 2), - new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), - new OreDictStack(STEEL.pipe(), 4), - new OreDictStack(BIGMT.mechanism(), 3), - new ComparableStack(ModItems.magnetron, 16), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_fritz, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 16), - new ComparableStack(ModItems.motor, 3), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), - new OreDictStack(STEEL.pipe(), 8), - new OreDictStack(GUNMETAL.mechanism(), 3), - new ComparableStack(ModBlocks.barrel_steel, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_arty, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 128), - new ComparableStack(ModItems.motor_desh, 5), - new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), - new OreDictStack(STEEL.pipe(), 12), - new OreDictStack(WEAPONSTEEL.mechanism(), 16), - new ComparableStack(ModBlocks.machine_radar, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.turret_himars, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 1), - new OreDictStack(STEEL.ingot(), 128), - new OreDictStack(ANY_PLASTIC.ingot(), 64), - new ComparableStack(ModItems.motor_desh, 5), - new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), - new OreDictStack(BIGMT.mechanism(), 8), - new ComparableStack(ModBlocks.machine_radar, 1), - new ComparableStack(ModItems.crt_display, 1) - }, 300); - makeRecipe(new ComparableStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL), new AStack[] { new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), @@ -707,14 +525,6 @@ import net.minecraft.item.ItemStack; new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8), }, 400); - makeRecipe(new ComparableStack(Item.getItemFromBlock(ModBlocks.machine_fel), 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 1), - new OreDictStack(ALLOY.wireDense(), 64), - !exp ? new OreDictStack(STEEL.plateCast(), 12) : new OreDictStack(STEEL.heavyComp(), 1), - new OreDictStack(ANY_PLASTIC.ingot(), 16), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), - new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC) - }, 400); makeRecipe(new ComparableStack(ModBlocks.rbmk_blank, 1), new AStack[] { new ComparableStack(ModBlocks.concrete_asbestos, 4), @@ -851,17 +661,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM), }, 400); - makeRecipe(new ComparableStack(ModBlocks.machine_exposure_chamber, 1), new AStack[] { - !exp ? new OreDictStack(AL.plateCast(), 12) : new OreDictStack(AL.heavyComp(), 1), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), - new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), - new OreDictStack(ALLOY.wireDense(), 32), - new ComparableStack(ModItems.motor_desh, 2), - new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), - new ComparableStack(ModBlocks.capacitor_tantalium, 1), - new ComparableStack(ModBlocks.glass_quartz, 16) - }, 200); - makeRecipe(new ComparableStack(ModBlocks.launch_pad_large, 1), new AStack[] { new OreDictStack(STEEL.plateCast(), 6), @@ -1010,20 +809,6 @@ import net.minecraft.item.ItemStack; addTantalium(new ComparableStack(ModBlocks.turret_fritz, 1), 3); addTantalium(new ComparableStack(ModBlocks.launch_pad, 1), 5); - makeRecipe(new ComparableStack(ModBlocks.machine_cyclotron, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 3), - new ComparableStack(ModBlocks.hadron_coil_neodymium, 8), - new OreDictStack(ALLOY.wireFine(), 64), - new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(STEEL.plate(), 32), - new OreDictStack(AL.plate(), 32), - new OreDictStack(ANY_PLASTIC.ingot(), 24), - new OreDictStack(RUBBER.ingot(), 24), - new OreDictStack(CU.plateCast(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC), - new ComparableStack(ModItems.circuit, 50, EnumCircuitType.CAPACITOR_BOARD) - }, 600); - makeRecipe(new ComparableStack(ModBlocks.rbmk_console, 1), new AStack[] { new OreDictStack(STEEL.ingot(), 16), new OreDictStack(AL.plate(), 32), @@ -1040,34 +825,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC), new ComparableStack(ModItems.circuit, 10, EnumCircuitType.CAPACITOR_BOARD), }, 300); - - makeRecipe(new ComparableStack(ModBlocks.struct_launcher_core, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 3), - new ComparableStack(ModBlocks.steel_scaffold, 10), - new OreDictStack(STEEL.ingot(), 16), - new OreDictStack(ANY_PLASTIC.ingot(), 8), - new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.circuit, 15, EnumCircuitType.CAPACITOR_BOARD), - }, 200); - - makeRecipe(new ComparableStack(ModBlocks.struct_launcher_core_large, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_battery, 5), - new ComparableStack(ModBlocks.steel_scaffold, 10), - new OreDictStack(STEEL.ingot(), 24), - new OreDictStack(ANY_PLASTIC.ingot(), 12), - new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.circuit, 25, EnumCircuitType.CAPACITOR_BOARD), - }, 200); - - makeRecipe(new ComparableStack(ModBlocks.struct_soyuz_core, 1), new AStack[] { - new ComparableStack(ModBlocks.machine_lithium_battery, 5), - new ComparableStack(ModBlocks.steel_scaffold, 24), - new OreDictStack(STEEL.ingot(), 32), - new OreDictStack(ANY_PLASTIC.ingot(), 24), - new ComparableStack(ModItems.circuit, 5, EnumCircuitType.ADVANCED), - new ComparableStack(ModItems.upgrade_power_3, 3), - new ComparableStack(ModItems.circuit, 100, EnumCircuitType.CAPACITOR_BOARD), - }, 200); } makeRecipe(new ComparableStack(ModBlocks.machine_fracking_tower), new AStack[] { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index d399ba1bd..0a30d24dc 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -27,6 +27,7 @@ import com.hbm.items.ItemEnums.EnumExpensiveType; import com.hbm.items.ItemEnums.EnumSecretType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemPACoil.EnumCoilType; @@ -306,7 +307,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plate(), 8), new OreDictStack(ANY_RUBBER.ingot(), 4), new ComparableStack(ModItems.part_generic, 2, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.part_generic, 4, EnumPartType.PISTON_HYDRAULIC.ordinal()), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC))); this.register(new GenericRecipe("ass.fel").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_fel, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ALLOY.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.part_generic, 4, EnumPartType.GLASS_POLARIZED), new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.silex").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_silex, 1)) .inputItems(new ComparableStack(ModBlocks.glass_quartz, 16), new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(DESH.ingot(), 4), new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(STEEL.pipe(), 8)) @@ -339,7 +340,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(STEEL.plate(), 16), new OreDictStack(TI.shell(), 4), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 8), new ComparableStack(ModItems.motor, 3)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(DURA.plate(), 4), new ComparableStack(ModItems.crystal_redstone, 12), new OreDictStack(ANY_PLASTIC.ingot(), 16), new ComparableStack(ModItems.motor_desh, 3))); this.register(new GenericRecipe("ass.teleporter").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_teleporter, 1)) - .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1))); + .inputItems(new OreDictStack(TI.plate(), 12), new OreDictStack(ALLOY.plate(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); this.register(new GenericRecipe("ass.radar").setup(300, 100).outputItems(new ItemStack(ModBlocks.machine_radar, 1)) .inputItems(new OreDictStack(STEEL.plate(), 12), new OreDictStack(ANY_RUBBER.ingot(), 12), new ComparableStack(ModItems.magnetron, 5), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC.ordinal()), new ComparableStack(ModItems.crt_display, 4)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.magnetron, 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.CIRCUIT), new ComparableStack(ModItems.crt_display, 4))); @@ -400,17 +401,30 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.FERRO_PLATING), new ComparableStack(ModItems.motor_desh, 5), new OreDictStack(STEEL.pipe(), 24), new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 16))); // batteries - this.register(new GenericRecipe("ass.battery").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_battery, 1)) - .inputItems(new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12))); - this.register(new GenericRecipe("ass.batterylithium").setup(100, 100).outputItems(new ItemStack(ModBlocks.machine_lithium_battery, 1)) - .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12))); - this.register(new GenericRecipe("ass.batteryschrabidium").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_schrabidium_battery, 1)) - .inputItems(new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12))); - this.register(new GenericRecipe("ass.batterydnt").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_dineutronium_battery, 1)) - .inputItems(new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32))); + this.register(new GenericRecipe("ass.capacitorgold").setup(100, 100).outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_GOLD.ordinal())) + .inputItems(new OreDictStack(STEEL.plate(), 8), + new OreDictStack(GOLD.wireDense(), 16))); + this.register(new GenericRecipe("ass.capacitorniobium").setup(100, 1_000).outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM.ordinal())) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 12), + new OreDictStack(NB.wireDense(), 24))); + this.register(new GenericRecipe("ass.capacitortantalum").setup(100, 10_000).outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_TANTALUM.ordinal())) + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), + new OreDictStack(TA.ingot(), 24))); + this.register(new GenericRecipe("ass.capacitorbismuth").setup(100, 25_000).outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_BISMUTH.ordinal())) + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), + new OreDictStack(BI.ingot(), 24), + new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CHIP_QUANTUM))); + this.register(new GenericRecipe("ass.capacitorspark").setup(100, 100_000).outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_SPARK.ordinal())) + .inputItems(new OreDictStack(CMB.plateCast(), 12), + new ComparableStack(ModItems.powder_spark_mix, 32), + new ComparableStack(ModItems.pellet_charged, 32), + new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_QUANTUM)) + .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 8_000)) + .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 8_000))); + this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), - new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), + new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64), new OreDictStack(DURA.block(), 16), new OreDictStack(STAR.block(), 64), @@ -422,7 +436,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64)) .inputItemsEx(new ComparableStack(ModItems.ingot_electronium, 64), - new ComparableStack(ModBlocks.machine_dineutronium_battery, 16), + new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING), new OreDictStack(STAR.block(), 64), @@ -447,7 +461,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { // accelerators this.register(new GenericRecipe("ass.cyclotron").setup(600, 100).outputItems(new ItemStack(ModBlocks.machine_cyclotron, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 3), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate(), 32), new OreDictStack(AL.plate(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItems(new ComparableStack(ModItems.battery_pack, 3, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(ND.wireDense(), 32), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(STEEL.plate(), 32), new OreDictStack(AL.plate(), 32), new OreDictStack(ANY_PLASTIC.ingot(), 24), new OreDictStack(RUBBER.ingot(), 24), new OreDictStack(CU.plateCast(), 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 32), new OreDictStack(AL.plateWelded(), 16), new OreDictStack(RUBBER.ingot(), 32), new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.beamline").setup(200, 100).outputItems(new ItemStack(ModBlocks.pa_beamline, 1)) .inputItems(new OreDictStack(STEEL.plateCast(), 8), new OreDictStack(CU.plate(), 16), new OreDictStack(GOLD.wireDense(), 4)) @@ -478,7 +492,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.pabscco").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO.ordinal())).inputItems(new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64))); this.register(new GenericRecipe("ass.pachlorophyte").setup(400, 100).outputItems(new ItemStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE.ordinal())).inputItems(new OreDictStack(CU.wireDense(), 64), new OreDictStack(CU.wireDense(), 64), new ComparableStack(ModItems.powder_chlorophyte, 16))); this.register(new GenericRecipe("ass.exposurechamber").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_exposure_chamber, 1)) - .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModBlocks.capacitor_tantalium, 1), new ComparableStack(ModBlocks.glass_quartz, 16)) + .inputItems(new OreDictStack(AL.plateCast(), 12), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_TANTALUM), new ComparableStack(ModBlocks.glass_quartz, 16)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.LEAD_PLATING), new OreDictStack(ANY_HARDPLASTIC.ingot(), 24), new OreDictStack(ALLOY.wireDense(), 32), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.COMPUTER)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")); @@ -771,34 +785,34 @@ public class AssemblyMachineRecipes extends GenericRecipes { // turrets this.register(new GenericRecipe("ass.turretchekhov").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_chekhov, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turretfriendly").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_friendly, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 1), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC), new OreDictStack(STEEL.pipe(), 3), new OreDictStack(GUNMETAL.mechanism(), 1), new ComparableStack(ModBlocks.crate_iron, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turretjeremy").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_jeremy, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turrettauon").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_tauon, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turretrichard").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_richard, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turrethoward").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_howard, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.maxwell").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_maxwell, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.arty").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_arty, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 12), new OreDictStack(WEAPONSTEEL.mechanism(), 16), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "arty")); this.register(new GenericRecipe("ass.himars").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.turret_himars, 1)) - .inputItems(new ComparableStack(ModBlocks.machine_battery, 1), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(STEEL.ingot(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64), new ComparableStack(ModItems.motor_desh, 5), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED), new OreDictStack(BIGMT.mechanism(), 8), new ComparableStack(ModBlocks.machine_radar, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "arty")); this.register(new GenericRecipe("ass.himarssmall").setup(100, 100).outputItems(new ItemStack(ModItems.ammo_himars, 1, ItemAmmoHIMARS.SMALL)) .inputItems(new OreDictStack(STEEL.plate(), 24), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.rocket_fuel, 48), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 48), new ComparableStack(ModItems.circuit, 6, EnumCircuitType.BASIC))); @@ -1023,7 +1037,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.photo_panel, 24), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC), - new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); this.register(new GenericRecipe("ass.satellitemapper").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_mapper, 1)) .inputItems(new OreDictStack(STEEL.shell(), 3), new ComparableStack(ModItems.plate_desh, 4), @@ -1064,7 +1078,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.ingot_uranium_fuel, 6), new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BASIC), new ComparableStack(ModItems.magnetron, 3), - new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); this.register(new GenericRecipe("ass.satelliteasteroidminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_miner, 1)) .inputItems(new OreDictStack(BIGMT.plate(), 24), new ComparableStack(ModItems.motor_desh, 2), @@ -1074,7 +1088,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), new ComparableStack(ModItems.centrifuge_element, 4), - new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); this.register(new GenericRecipe("ass.satellitelunarminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_lunar_miner, 1)) .inputItems(new ComparableStack(ModItems.ingot_meteorite, 4), new ComparableStack(ModItems.plate_desh, 4), @@ -1084,7 +1098,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.thruster_small, 1), new ComparableStack(ModItems.photo_panel, 12), - new ComparableStack(ModBlocks.machine_lithium_battery, 1))); + new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM))); this.register(new GenericRecipe("ass.gerald").setup(6_000, 100).outputItems(new ItemStack(ModItems.sat_gerald, 1)) .inputItems(new OreDictStack(SBD.plateCast(), 64), new OreDictStack(SBD.plateCast(), 64), diff --git a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java index 610a20f5a..0e58f73a3 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemicalPlantRecipes.java @@ -19,6 +19,7 @@ import com.hbm.items.ItemEnums.EnumFuelAdditive; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -155,6 +156,36 @@ public class ChemicalPlantRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.BITUMEN, 1_000)) .outputItems(new ItemStack(ModBlocks.asphalt, 16))); + /// BATTERIES /// + this.register(new GenericRecipe("chem.batterylead").setup(100, 100) + .inputItems(new OreDictStack(STEEL.plate(), 4), + new OreDictStack(PB.ingot(), 4)) + .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 8_000)) + .outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()))); + this.register(new GenericRecipe("chem.batterylithium").setup(100, 1_000) + .inputItems(new OreDictStack(LI.dust(), 12), + new OreDictStack(CO.dust(), 8), + new OreDictStack(ANY_PLASTIC.ingot(), 4)) + .inputFluids(new FluidStack(Fluids.OXYGEN, 2_000)) + .outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM.ordinal()))); + this.register(new GenericRecipe("chem.batterysodium").setup(100, 10_000) + .inputItems(new OreDictStack(NA.dust(), 24), + new OreDictStack(IRON.dust(), 24), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 12)) + .outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_SODIUM.ordinal()))); + this.register(new GenericRecipe("chem.batteryschrabidium").setup(100, 25_000) + .inputItems(new OreDictStack(SA326.dust(), 24), + new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 8)) + .inputFluids(new FluidStack(Fluids.HELIUM4, 8_000)) + .outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_SCHRABIDIUM.ordinal()))); + this.register(new GenericRecipe("chem.batteryquantum").setup(100, 100_000) + .inputItems(new OreDictStack(BSCCO.wireDense(), 24), + new ComparableStack(ModItems.pellet_charged, 32), + new ComparableStack(ModItems.ingot_cft, 16)) + .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 8_000)) + .outputItems(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal())) + .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 8_000))); + /// SOLIDS /// this.register(new GenericRecipe("chem.desh").setup(100, 100) .inputItems(new ComparableStack(ModItems.powder_desh_mix)) diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java index ffd134962..5208f3790 100644 --- a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java +++ b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java @@ -128,7 +128,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { return pack.dischargeRate; } - @Override public boolean showDurabilityBar(ItemStack stack) { return true; } + @Override public boolean showDurabilityBar(ItemStack stack) { return getDurabilityForDisplay(stack) != 0; } @Override public double getDurabilityForDisplay(ItemStack stack) { return 1D - (double) getCharge(stack) / (double) getMaxCharge(stack); } @Override diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 6d7af36a9..018dbefef 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -7,6 +7,7 @@ import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; @@ -191,8 +192,8 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.red_cable, 64)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.red_wire_coated, 16)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.red_pylon, 8)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_battery, 4)); - player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_lithium_battery, 2)); + player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_battery_socket, 4)); + player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_pack, 4, EnumBatteryPack.BATTERY_LEAD.ordinal())); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_converter_he_rf, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_converter_rf_he, 1)); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index fc5709cfd..fc7d40cea 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -30,6 +30,7 @@ import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.machine.ItemArcElectrode.EnumElectrodeType; import com.hbm.items.machine.ItemBattery; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType; @@ -257,13 +258,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.red_pylon_medium_wood_transformer, 1), new Object[] { ModBlocks.red_pylon_medium_wood, ModItems.plate_polymer, ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModBlocks.red_pylon_medium_steel, 2), new Object[] { "CCW", "IIW", " S", 'C', ModItems.coil_copper, 'W', STEEL.pipe(), 'I', ModItems.plate_polymer, 'S', KEY_COBBLESTONE }); addShapelessAuto(new ItemStack(ModBlocks.red_pylon_medium_steel_transformer, 1), new Object[] { ModBlocks.red_pylon_medium_steel, ModItems.plate_polymer, ModItems.coil_copper }); - addRecipeAuto(new ItemStack(ModBlocks.machine_battery_potato, 1), new Object[] { "PCP", "WRW", "PCP", 'P', ItemBattery.getEmptyBattery(ModItems.battery_potato), 'C', CU.ingot(), 'R', REDSTONE.block(), 'W', KEY_PLANKS }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_bus, 1), new Object[] { "PIP", "PIP", "PIP", 'P', ModItems.plate_polymer, 'I', MINGRADE.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_copper, 1), new Object[] { "PPP", "PCP", "WWW", 'P', STEEL.plate(), 'C', CU.block(), 'W', KEY_PLANKS }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_gold, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_PLASTIC.ingot(), 'C', GOLD.block(), 'W', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_niobium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', RUBBER.ingot(), 'C', NB.block(), 'W', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_tantalium, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', TA.block(), 'W', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.capacitor_schrabidate, 1), new Object[] { "PPP", "ICI", "WWW", 'P', STEEL.plate(), 'I', ANY_RESISTANTALLOY.ingot(), 'C', SBD.block(), 'W', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_wood_burner, 1), new Object[] { "PPP", "CFC", "I I" , 'P', STEEL.plate(), 'C', ModItems.coil_copper, 'I', IRON.ingot(), 'F', Blocks.furnace}); addRecipeAuto(new ItemStack(ModBlocks.machine_turbine, 1), new Object[] { "SMS", "PTP", "SMS", 'S', STEEL.ingot(), 'T', ModItems.turbine_titanium, 'M', ModItems.coil_copper, 'P', ANY_PLASTIC.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.machine_converter_he_rf, 1), new Object[] { "RRR", "WWW", "III", 'R', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'W', REDSTONE.dust(), 'I', STEEL.ingot() }); @@ -272,6 +266,11 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.crate_iron, 1), new Object[] { "PPP", "I I", "III", 'P', IRON.plate(), 'I', IRON.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.crate_steel, 1), new Object[] { "PPP", "I I", "III", 'P', STEEL.plate(), 'I', STEEL.ingot() }); + addRecipeAuto(new ItemStack(ModBlocks.machine_battery_socket), new Object[] { "I I", "I I", "IRI", 'I', ModItems.plate_polymer, 'R', ModItems.coil_copper }); + addRecipeAuto(new ItemStack(ModBlocks.machine_battery_socket), new Object[] { "PRP", 'P', STEEL.plate(), 'R', MINGRADE.ingot() }); + addRecipeAuto(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_REDSTONE.ordinal()), new Object[] { "IRI", "PRP", "IRI", 'I', IRON.plate(), 'R', REDSTONE.block(), 'P', ModItems.plate_polymer }); + addRecipeAuto(new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_COPPER.ordinal()), new Object[] { "IRI", "PRP", "IRI", 'I', STEEL.plate(), 'R', CU.block(), 'P', ModItems.plate_polymer }); + GameRegistry.addRecipe(new ContainerUpgradeCraftingHandler(new ItemStack(ModBlocks.crate_desh, 1), new Object[] { " D ", "DSD", " D ", 'D', ModItems.plate_desh, 'S', ModBlocks.crate_steel })); GameRegistry.addRecipe(new ContainerUpgradeCraftingHandler(new ItemStack(ModBlocks.crate_tungsten, 1), new Object[] { "BPB", "PCP", "BPB", 'B', W.block(), 'P', CU.plateCast(), 'C', ModBlocks.crate_steel })); // Note: voids the last few slots when placed, because a safe's inventory is smaller than a crate's one @@ -1044,9 +1043,9 @@ public class CraftingManager { } if(!GeneralConfig.enable528) { - addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core, 1), new Object[] { "SCS", "SIS", "BEB", 'S', ModBlocks.steel_scaffold, 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'B', ModBlocks.struct_launcher, 'E', ModBlocks.machine_battery }); - addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ModBlocks.struct_launcher, 'E', ModBlocks.machine_battery }); - addRecipeAuto(new ItemStack(ModBlocks.struct_soyuz_core, 1), new Object[] { "CUC", "TST", "TBT", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'U', ModItems.upgrade_power_3, 'T', ModBlocks.barrel_steel, 'S', ModBlocks.steel_scaffold, 'B', ModBlocks.machine_lithium_battery }); + addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core, 1), new Object[] { "SCS", "SIS", "BEB", 'S', ModBlocks.steel_scaffold, 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); + addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); + addRecipeAuto(new ItemStack(ModBlocks.struct_soyuz_core, 1), new Object[] { "CUC", "TST", "TBT", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'U', ModItems.upgrade_power_3, 'T', ModBlocks.barrel_steel, 'S', ModBlocks.steel_scaffold, 'B', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.reactor_sensor, 1), new Object[] { "WPW", "CMC", "PPP", 'W', W.wireFine(), 'P', PB.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'M', ModItems.magnetron }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_console, 1), new Object[] { "BBB", "DGD", "DCD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'G', KEY_ANYPANE, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_crane_console, 1), new Object[] { "BCD", "DDD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index c19a88a9d..46e10928f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -122,6 +122,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro if(stack.stackSize == 1) { slots[i] = stack.copy(); item.setDead(); + item.delayBeforeCanPickup = 60; break; } else { slots[i] = stack.copy(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index b15835f7e..7eff4e854 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -662,6 +662,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements if(stack.stackSize <= 0) { item.setDead(); + item.delayBeforeCanPickup = 60; // seems fucking stupid, but prevents frame-perfect dupe exploit continue outer; } } @@ -676,6 +677,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements slots[i] = stack.copy(); item.setDead(); + item.delayBeforeCanPickup = 60; break; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index b9cf87f7f..09393dc0a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -386,6 +386,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen if(nullifier && bad.contains(item.getEntityItem().getItem())) { item.setDead(); + item.delayBeforeCanPickup = 60; continue; } @@ -398,15 +399,18 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen tank.setFill(tank.getMaxFill()); item.setDead(); + item.delayBeforeCanPickup = 60; continue; } ItemStack stack = InventoryUtil.tryAddItemToInventory(slots, 9, 29, item.getEntityItem().copy()); - if(stack == null) + if(stack == null) { item.setDead(); - else + item.delayBeforeCanPickup = 60; + } else { item.setEntityItemStack(stack.copy()); //copy is not necessary but i'm paranoid due to the kerfuffle of the old drill + } } List mobs = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox( diff --git a/src/main/java/com/hbm/uninos/UniNodespace.java b/src/main/java/com/hbm/uninos/UniNodespace.java index 1007bfddc..fbd807cce 100644 --- a/src/main/java/com/hbm/uninos/UniNodespace.java +++ b/src/main/java/com/hbm/uninos/UniNodespace.java @@ -54,6 +54,7 @@ public class UniNodespace { } } + private static int reapTimer = 0; public static void updateNodespace() { for(World world : MinecraftServer.getServer().worldServers) { @@ -72,13 +73,22 @@ public class UniNodespace { } updateNetworks(); + resetReapTimer(); } private static void updateNetworks() { for(NodeNet net : activeNodeNets) net.resetTrackers(); //reset has to be done before everything else for(NodeNet net : activeNodeNets) net.update(); - activeNodeNets.removeIf((net) -> { return net.links.size() <= 0; }); // reap empty networks + + if(reapTimer <= 0) { + activeNodeNets.forEach((net) -> { net.links.removeIf((link) -> { return ((GenNode) link).expired; }); }); + activeNodeNets.removeIf((net) -> { return net.links.size() <= 0; }); // reap empty networks + } + } + + private static void resetReapTimer() { + if(reapTimer <= 0) reapTimer = 5 * 60 * 20; // 5 minutes is more than plenty } /** Goes over each connection point of the given node, tries to find neighbor nodes and to join networks with them */ diff --git a/src/main/java/com/hbm/world/dungeon/DesertAtom001.java b/src/main/java/com/hbm/world/dungeon/DesertAtom001.java index 02d2bee28..4cfcf89e7 100644 --- a/src/main/java/com/hbm/world/dungeon/DesertAtom001.java +++ b/src/main/java/com/hbm/world/dungeon/DesertAtom001.java @@ -22,31 +22,7 @@ public class DesertAtom001 extends WorldGenerator Block Block2 = ModBlocks.yellow_barrel; Block Block3 = ModBlocks.reinforced_sand; Block Block4 = ModBlocks.crashed_balefire; - Block Block5 = ModBlocks.deco_steel; - Block Block6 = ModBlocks.brick_light; Block Block7 = ModBlocks.deco_tungsten; - Block Block8 = ModBlocks.steel_poles; - Block Block9 = ModBlocks.tape_recorder; - Block Block10 = ModBlocks.machine_rtg_furnace_off; - Block Block11 = ModBlocks.reinforced_glass; - Block Block12 = ModBlocks.reinforced_lamp_off; - Block Block13 = ModBlocks.pole_satellite_receiver; - Block Block14 = ModBlocks.pwr_fuel; - Block Block15 = ModBlocks.deco_titanium; - Block Block16 = ModBlocks.block_lead; - Block Block17 = ModBlocks.ore_schrabidium; - Block Block18 = ModBlocks.waste_planks; - Block Block19 = ModBlocks.machine_centrifuge; - Block Block20 = ModBlocks.machine_uf6_tank; - Block Block21 = ModBlocks.machine_puf6_tank; - Block Block22 = ModBlocks.reinforced_brick; - Block Block23 = ModBlocks.waste_earth; - Block Block24 = ModBlocks.deco_lead; - Block Block25 = ModBlocks.red_wire_coated; - Block Block26 = ModBlocks.block_uranium; - Block Block27 = ModBlocks.pole_top; - Block Block28 = ModBlocks.machine_battery; - Block Block29 = ModBlocks.machine_electric_furnace_off; protected Block[] GetValidSpawnBlocks() { diff --git a/src/main/java/com/hbm/world/dungeon/DesertAtom002.java b/src/main/java/com/hbm/world/dungeon/DesertAtom002.java index 47b4e4f20..0ce58ea95 100644 --- a/src/main/java/com/hbm/world/dungeon/DesertAtom002.java +++ b/src/main/java/com/hbm/world/dungeon/DesertAtom002.java @@ -21,7 +21,6 @@ public class DesertAtom002 { Block Block2 = ModBlocks.yellow_barrel; Block Block3 = ModBlocks.reinforced_sand; - Block Block4 = ModBlocks.nuke_man; Block Block5 = ModBlocks.deco_steel; Block Block6 = ModBlocks.brick_light; Block Block7 = ModBlocks.deco_tungsten; @@ -35,18 +34,6 @@ public class DesertAtom002 Block Block15 = ModBlocks.deco_titanium; Block Block16 = ModBlocks.block_lead; Block Block17 = ModBlocks.ore_nether_plutonium; - Block Block18 = ModBlocks.waste_planks; - Block Block19 = ModBlocks.machine_centrifuge; - Block Block20 = ModBlocks.machine_uf6_tank; - Block Block21 = ModBlocks.machine_puf6_tank; - Block Block22 = ModBlocks.reinforced_brick; - Block Block23 = ModBlocks.waste_earth; - Block Block24 = ModBlocks.deco_lead; - Block Block25 = ModBlocks.red_wire_coated; - Block Block26 = ModBlocks.block_uranium; - Block Block27 = ModBlocks.pole_top; - Block Block28 = ModBlocks.machine_battery; - Block Block29 = ModBlocks.machine_electric_furnace_off; public boolean generate_r00(World world, Random rand, int x, int y, int z) { diff --git a/src/main/java/com/hbm/world/dungeon/DesertAtom003.java b/src/main/java/com/hbm/world/dungeon/DesertAtom003.java index eb20e3309..32e135806 100644 --- a/src/main/java/com/hbm/world/dungeon/DesertAtom003.java +++ b/src/main/java/com/hbm/world/dungeon/DesertAtom003.java @@ -48,7 +48,7 @@ public class DesertAtom003 Block Block25 = ModBlocks.red_wire_coated; Block Block26 = ModBlocks.block_uranium; Block Block27 = ModBlocks.pole_top; - Block Block28 = ModBlocks.machine_battery; + Block Block28 = ModBlocks.capacitor_copper; Block Block29 = ModBlocks.machine_electric_furnace_off; public boolean generate_r00(World world, Random rand, int x, int y, int z) @@ -1424,10 +1424,10 @@ public class DesertAtom003 world.setBlock(x + 19, y + 8, z + 9, ModBlocks.fence_metal, 0, 3); world.setBlock(x + 23, y + 8, z + 9, Block25, 0, 3); world.setBlock(x + 24, y + 8, z + 9, Block25, 0, 3); - world.setBlock(x + 25, y + 8, z + 9, Block28, 3, 3); + world.setBlock(x + 25, y + 8, z + 9, Block28, 0, 3); world.setBlock(x + 26, y + 8, z + 9, Block25, 0, 3); world.setBlock(x + 27, y + 8, z + 9, Block25, 0, 3); - world.setBlock(x + 28, y + 8, z + 9, Block28, 3, 3); + world.setBlock(x + 28, y + 8, z + 9, Block28, 0, 3); world.setBlock(x + 29, y + 8, z + 9, Block25, 0, 3); world.setBlock(x + 30, y + 8, z + 9, Block25, 0, 3); world.setBlock(x + 31, y + 8, z + 9, Block29, 3, 3); diff --git a/src/main/java/com/hbm/world/dungeon/Relay.java b/src/main/java/com/hbm/world/dungeon/Relay.java index de4920fc9..cb7347f28 100644 --- a/src/main/java/com/hbm/world/dungeon/Relay.java +++ b/src/main/java/com/hbm/world/dungeon/Relay.java @@ -779,16 +779,15 @@ public class Relay extends WorldGenerator world.setBlock(x + 10, y + 1, z + 9, ModBlocks.fence_metal, 0, 3); world.setBlock(x + 0, y + 1, z + 10, Library.getRandomConcrete(), 0, 3); world.setBlock(x + 4, y + 1, z + 10, Block5, 0, 3); - world.setBlock(x + 7, y + 1, z + 10, ModBlocks.machine_battery, 4, 3); + world.setBlock(x + 7, y + 1, z + 10, ModBlocks.capacitor_copper, 0, 3); world.setBlock(x + 8, y + 1, z + 10, ModBlocks.red_wire_coated, 0, 3); world.setBlock(x + 10, y + 1, z + 10, ModBlocks.fence_metal, 0, 3); world.setBlock(x + 4, y + 1, z + 11, Blocks.brick_block, 0, 3); - world.setBlock(x + 7, y + 1, z + 11, ModBlocks.machine_battery, 4, 3); + world.setBlock(x + 7, y + 1, z + 11, ModBlocks.capacitor_copper, 0, 3); world.setBlock(x + 8, y + 1, z + 11, ModBlocks.red_wire_coated, 0, 3); world.setBlock(x + 10, y + 1, z + 11, ModBlocks.fence_metal, 0, 3); world.setBlock(x + 0, y + 1, z + 12, Library.getRandomConcrete(), 0, 3); - //world.setBlock(x + 4, y + 1, z + 12, Blocks.iron_door, 8, 3); - world.setBlock(x + 7, y + 1, z + 12, ModBlocks.machine_battery, 4, 3); + world.setBlock(x + 7, y + 1, z + 12, ModBlocks.capacitor_copper, 0, 3); world.setBlock(x + 8, y + 1, z + 12, ModBlocks.red_wire_coated, 0, 3); world.setBlock(x + 10, y + 1, z + 12, ModBlocks.fence_metal, 0, 3); world.setBlock(x + 0, y + 1, z + 13, ModBlocks.fence_metal, 0, 3); diff --git a/src/main/java/com/hbm/world/dungeon/Spaceship.java b/src/main/java/com/hbm/world/dungeon/Spaceship.java index c07dbc600..bd831ffc6 100644 --- a/src/main/java/com/hbm/world/dungeon/Spaceship.java +++ b/src/main/java/com/hbm/world/dungeon/Spaceship.java @@ -592,10 +592,10 @@ public class Spaceship extends WorldGenerator world.setBlock(x + 2, y + -2, z + 35, Blocks.air, 0, 3); world.setBlock(x + 3, y + -2, z + 35, Block4, 0, 3); world.setBlock(x + 4, y + -2, z + 35, Block3, 0, 3); - world.setBlock(x + 5, y + -2, z + 35, ModBlocks.machine_battery, 5, 3); + world.setBlock(x + 5, y + -2, z + 35, ModBlocks.capacitor_copper, 0, 3); world.setBlock(x + 6, y + -2, z + 35, Blocks.air, 0, 3); world.setBlock(x + 7, y + -2, z + 35, Blocks.air, 0, 3); - world.setBlock(x + 8, y + -2, z + 35, ModBlocks.machine_battery, 4, 3); + world.setBlock(x + 8, y + -2, z + 35, ModBlocks.capacitor_copper, 0, 3); world.setBlock(x + 9, y + -2, z + 35, Block3, 0, 3); world.setBlock(x + 10, y + -2, z + 35, Block4, 0, 3); world.setBlock(x + 11, y + -2, z + 35, Blocks.air, 0, 3); diff --git a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java index 3ae448a03..9ce9ed900 100644 --- a/src/main/java/com/hbm/world/gen/component/BunkerComponents.java +++ b/src/main/java/com/hbm/world/gen/component/BunkerComponents.java @@ -884,7 +884,7 @@ public class BunkerComponents { fillWithMetadataBlocks(world, box, 1, 3, 1, 1, 3, 5, ModBlocks.concrete_smooth_stairs, stairMetaW); placeBlockAtCurrentPosition(world, ModBlocks.machine_transformer, 0, 1, 2, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.cable_diode, decoMetaN, 1, 2, 2, box); - placeBlockAtCurrentPosition(world, ModBlocks.machine_battery, decoMetaE, 1, 2, 3, box); + placeBlockAtCurrentPosition(world, ModBlocks.capacitor_copper, 0, 1, 2, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.deco_red_copper, 0, 1, 2, 4, box); placeBlockAtCurrentPosition(world, ModBlocks.cable_switch, 0, 1, 2, 5, box); //machine From b20d5f46b2e0c9a780c68d2f4ed15f2caef5aa67 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 3 Jan 2026 12:22:56 +0100 Subject: [PATCH 18/19] more caching because sure --- changelog | 11 ++ .../api/hbm/energymk2/IEnergyProviderMK2.java | 3 +- .../api/hbm/energymk2/IEnergyReceiverMK2.java | 3 +- .../api/hbm/fluidmk2/IFluidReceiverMK2.java | 3 +- .../hbm/fluidmk2/IFluidStandardSenderMK2.java | 3 +- src/main/java/api/hbm/tile/ILoadedTile.java | 48 +++++++++ .../java/com/hbm/blocks/machine/Radiobox.java | 100 ++++++------------ .../com/hbm/commands/CommandReapNetworks.java | 46 ++++++++ .../java/com/hbm/crafting/ToolRecipes.java | 11 +- .../recipes/AssemblyMachineRecipes.java | 4 +- .../hbm/inventory/recipes/MachineRecipes.java | 34 ++---- .../inventory/recipes/anvil/AnvilRecipes.java | 3 - .../com/hbm/itempool/ItemPoolsComponent.java | 5 +- .../com/hbm/itempool/ItemPoolsLegacy.java | 13 +-- .../com/hbm/itempool/ItemPoolsSingle.java | 3 - src/main/java/com/hbm/items/ModItems.java | 8 +- .../hbm/items/machine/ItemBatteryPack.java | 6 +- .../com/hbm/items/special/ItemStarterKit.java | 5 - .../weapon/sedna/factory/LegoClient.java | 2 +- .../sedna/mags/MagazineElectricEngine.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 34 +----- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/uninos/UniNodespace.java | 8 +- src/main/java/com/hbm/util/Tuple.java | 11 ++ 24 files changed, 193 insertions(+), 174 deletions(-) create mode 100644 src/main/java/com/hbm/commands/CommandReapNetworks.java diff --git a/changelog b/changelog index 2c8db44ed..d26d26487 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,20 @@ +## Added +* New battery system + * Energy storage blocks, capacitors and battery items are now deprecated, but can still be used + * There is now new types of battery items, as well as capacitor items + * Instead of energy storage blocks, there is now a battery socket, which allows those new items to be connected to the power grid + * Battery sockets act like cables, they will connect power grids when two cables are plugged into them in different directions + * Self-chargers and creative batteries are still around, as well as spark batteries which are needed for the balefire bomb + ## Changed +* Updated italian localization * After not being part of worldgen for a long time, oily coal is finally being removed * The rare metal blocks that had been unobtainable and unused for the longest time have been removed * The schrabidium transmutator's grace period is over, it is finally being destroyed * Most of the legacy fusion reactor components, which were unobtainable and unusable, have been removed * The block ID economy is looking better than ever +* Infinite water barrels can now be crafted with any water container and not just buckets +* OpenComputers integration for the PWR can now also read the heat capacity stats ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases diff --git a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java index 50f74215c..bb51996e0 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java @@ -2,7 +2,6 @@ package api.hbm.energymk2; import com.hbm.handler.threading.PacketThreading; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.util.Compat; import api.hbm.energymk2.Nodespace.PowerNode; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -25,7 +24,7 @@ public interface IEnergyProviderMK2 extends IEnergyHandlerMK2 { public default void tryProvide(World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IEnergyConductorMK2) { diff --git a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java index 466b8b277..58c9ae1ec 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java @@ -3,7 +3,6 @@ package api.hbm.energymk2; import com.hbm.handler.threading.PacketThreading; import com.hbm.interfaces.NotableComments; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.Nodespace.PowerNode; @@ -39,7 +38,7 @@ public interface IEnergyReceiverMK2 extends IEnergyHandlerMK2 { public default void trySubscribe(World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IEnergyConductorMK2) { diff --git a/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java index 55bdb1372..80d3a5f7b 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java @@ -5,7 +5,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.uninos.GenNode; import com.hbm.uninos.UniNodespace; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; @@ -28,7 +27,7 @@ public interface IFluidReceiverMK2 extends IFluidUserMK2 { public default void trySubscribe(FluidType type, World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IFluidConnectorMK2) { diff --git a/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java index 75791b659..6aa83ec15 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java @@ -6,7 +6,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.uninos.GenNode; import com.hbm.uninos.UniNodespace; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -30,7 +29,7 @@ public interface IFluidStandardSenderMK2 extends IFluidProviderMK2 { public default void tryProvide(FluidType type, int pressure, World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IFluidConnectorMK2) { diff --git a/src/main/java/api/hbm/tile/ILoadedTile.java b/src/main/java/api/hbm/tile/ILoadedTile.java index 33b221bde..9ff84aacd 100644 --- a/src/main/java/api/hbm/tile/ILoadedTile.java +++ b/src/main/java/api/hbm/tile/ILoadedTile.java @@ -1,7 +1,55 @@ package api.hbm.tile; +import java.util.HashMap; +import java.util.Map; + +import com.hbm.util.Compat; +import com.hbm.util.Tuple.Quartet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + /** For anything that should be removed off networks when considered unloaded, only affects providers and receivers, not links. Must not necessarily be a tile. */ public interface ILoadedTile { public boolean isLoaded(); + + // should we gunk this into the API? no, but i don't care + public static class TileAccessCache { + + public static Map cache = new HashMap(); + + public static int NULL_CACHE = 20; + public static int NONNULL_CACHE = 60; + + public TileEntity tile; + public long expiresOn; + + public TileAccessCache(TileEntity tile, long expiresOn) { + this.tile = tile; + this.expiresOn = expiresOn; + } + + public boolean hasExpired(long worldTime) { + if(tile != null && tile.isInvalid()) return true; + if(worldTime >= expiresOn) return true; + if(tile instanceof ILoadedTile && !((ILoadedTile) tile).isLoaded()) return true; + return false; + } + + public static Quartet publicCumRag = new Quartet(0, 0, 0, 0); + public static TileEntity getTileOrCache(World world, int x, int y, int z) { + publicCumRag.mangle(x, y, z, world.provider.dimensionId); + TileAccessCache cache = TileAccessCache.cache.get(publicCumRag); + + if(cache == null || cache.hasExpired(world.getTotalWorldTime())) { + TileEntity tile = Compat.getTileStandard(world, x, y, z); + cache = new TileAccessCache(tile, world.getTotalWorldTime() + (tile == null ? NULL_CACHE : NONNULL_CACHE)); + TileAccessCache.cache.put(publicCumRag.clone(), cache); + return tile; + } else { + return cache.tile; + } + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/Radiobox.java b/src/main/java/com/hbm/blocks/machine/Radiobox.java index b7eea5519..bfec9aa75 100644 --- a/src/main/java/com/hbm/blocks/machine/Radiobox.java +++ b/src/main/java/com/hbm/blocks/machine/Radiobox.java @@ -1,7 +1,6 @@ package com.hbm.blocks.machine; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemBattery; import com.hbm.tileentity.machine.TileEntityRadiobox; import net.minecraft.block.Block; @@ -47,31 +46,17 @@ public class Radiobox extends BlockContainer { public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - if(i == 0) - { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 1) - { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } - if(i == 2) - { - world.setBlockMetadataWithNotify(x, y, z, 3, 2); - } - if(i == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { + if(world.isRemote) { return true; - } else if(!player.isSneaking()) - { + } else if(!player.isSneaking()) { TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z); if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.battery_spark && !box.infinite) { @@ -93,78 +78,53 @@ public class Radiobox extends BlockContainer { return true; } else { - //FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_radiobox, world, x, y, z); - //return true; return false; } } - + @Override - public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) - { + public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_); - float f = 0.0625F; - - this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f); - switch(te) - { + float f = 0.0625F; + + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + switch(te) { case 4: - case 8: - this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f); - break; + case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break; case 2: - case 6: - this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f); - break; + case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break; case 5: - case 9: - this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f); - break; + case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break; case 3: - case 7: - this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f); - break; + case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break; } - } + } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { int te = world.getBlockMetadata(x, y, z); - float f = 0.0625F; - - this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f); - switch(te) - { + float f = 0.0625F; + + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + switch(te) { case 4: - case 8: - this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f); - break; + case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break; case 2: - case 6: - this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f); - break; + case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break; case 5: - case 9: - this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f); - break; + case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break; case 3: - case 7: - this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f); - break; + case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break; } - + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); } - public void breakBlock(World world, int x, int y, int z, Block b, int m) { - + public void breakBlock(World world, int x, int y, int z, Block b, int m) { TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z); + if(box.infinite) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.battery_spark))); - if(box.infinite) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, ItemBattery.getEmptyBattery(ModItems.battery_spark))); - } - - super.breakBlock(world, x, y, z, b, m); - } + super.breakBlock(world, x, y, z, b, m); + } } diff --git a/src/main/java/com/hbm/commands/CommandReapNetworks.java b/src/main/java/com/hbm/commands/CommandReapNetworks.java new file mode 100644 index 000000000..2d746057c --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandReapNetworks.java @@ -0,0 +1,46 @@ +package com.hbm.commands; + +import com.hbm.uninos.GenNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.util.ChatBuilder; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.EnumChatFormatting; + +public class CommandReapNetworks extends CommandBase { + + @Override + public String getCommandName() { + return "ntmreapnetworks"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/ntmreapnetworks"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + + try { + + UniNodespace.activeNodeNets.forEach((net) -> { + net.links.forEach((link) -> { ((GenNode)link).expired = true; }); + net.links.clear(); + net.providerEntries.clear(); + net.receiverEntries.clear(); + }); + UniNodespace.activeNodeNets.clear(); + UniNodespace.worlds.clear(); + + } catch(Exception ex) { + sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); + sender.addChatMessage(ChatBuilder.start("An error has occoured during network reap, consult the log for details.").color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start(ex.getLocalizedMessage()).color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start(ex.getStackTrace()[0].toString()).color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); + throw ex; + } + } +} diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 814607a6c..e3a63d760 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -9,6 +9,7 @@ import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ItemEnums.EnumPlantType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.tool.ItemBlowtorch; import com.hbm.items.tool.ItemModMinecart; @@ -62,10 +63,10 @@ public class ToolRecipes { addShovel( DESH.ingot(), ModItems.desh_shovel); addHoe( DESH.ingot(), ModItems.desh_hoe); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_sword, 1), new Object[] { "RPR", "RPR", " B ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_pickaxe, 1), new Object[] { "RDM", " PB", " P ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_axe, 1), new Object[] { " DP", "RRM", " PB", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_shovel, 1), new Object[] { " P", "RRM", " B", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_sword, 1), new Object[] { "RPR", "RPR", " B ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_pickaxe, 1), new Object[] { "RDM", " PB", " P ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_axe, 1), new Object[] { " DP", "RRM", " PB", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_shovel, 1), new Object[] { " P", "RRM", " B", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.centri_stick, 1), new Object[] { ModItems.centrifuge_element, ModItems.energy_core, KEY_STICK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.smashing_hammer, 1), new Object[] { "STS", "SPS", " P ", 'S', STEEL.block(), 'T', W.block(), 'P', ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.meteorite_sword, 1), new Object[] { " B", "GB ", "SG ", 'B', ModItems.blade_meteorite, 'G', GOLD.plate(), 'S', KEY_STICK }); @@ -136,7 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.mirror_tool), new Object[] { " A ", " IA", "I ", 'A', AL.ingot(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_tool), new Object[] { " A ", " IA", "I ", 'A', PB.ingot(), 'I', IRON.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', MINGRADE.wireFine(), 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', ModItems.battery_generic }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', MINGRADE.wireFine(), 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.analysis_tool), new Object[] { " G", " S ", "S ", 'G', KEY_ANYPANE, 'S', STEEL.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.toolbox), new Object[] { "CCC", "CIC", 'C', CU.plate(), 'I', IRON.ingot() }); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 0a30d24dc..692821491 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -794,7 +794,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turrettauon").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_tauon, 1)) - .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turretrichard").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_richard, 1)) .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) @@ -803,7 +803,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.maxwell").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_maxwell, 1)) - .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel)) diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index ddc9f78db..ecbe59072 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -6,6 +6,7 @@ import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.FluidContainer; import com.hbm.inventory.FluidContainerRegistry; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.util.Tuple.Triplet; import net.minecraft.init.Blocks; @@ -48,32 +49,17 @@ public class MachineRecipes { ArrayList fuels = new ArrayList(); fuels.add(new ItemStack(ModItems.battery_potato)); fuels.add(new ItemStack(ModItems.battery_potatos)); - fuels.add(new ItemStack(ModItems.battery_generic)); - fuels.add(new ItemStack(ModItems.battery_red_cell)); - fuels.add(new ItemStack(ModItems.battery_red_cell_6)); - fuels.add(new ItemStack(ModItems.battery_red_cell_24)); - fuels.add(new ItemStack(ModItems.battery_advanced)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell_4)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell_12)); - fuels.add(new ItemStack(ModItems.battery_lithium)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell_3)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell_6)); - fuels.add(new ItemStack(ModItems.battery_schrabidium)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell_2)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell_4)); - fuels.add(new ItemStack(ModItems.battery_trixite)); - fuels.add(new ItemStack(ModItems.battery_spark)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_6)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_25)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_100)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_1000)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_10000)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_power)); fuels.add(new ItemStack(ModItems.fusion_core)); fuels.add(new ItemStack(ModItems.energy_core)); + for(EnumBatteryPack num : EnumBatteryPack.values()) fuels.add(new ItemStack(ModItems.battery_pack, 1, num.ordinal())); + fuels.add(new ItemStack(ModItems.battery_creative)); + fuels.add(new ItemStack(ModItems.battery_sc_uranium)); + fuels.add(new ItemStack(ModItems.battery_sc_technetium)); + fuels.add(new ItemStack(ModItems.battery_sc_plutonium)); + fuels.add(new ItemStack(ModItems.battery_sc_polonium)); + fuels.add(new ItemStack(ModItems.battery_sc_gold)); + fuels.add(new ItemStack(ModItems.battery_sc_lead)); + fuels.add(new ItemStack(ModItems.battery_sc_americium)); return fuels; } 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 c107df9d5..27d058172 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -740,8 +740,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.scrap, 1)), new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 1)), new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.battery_generic, 1), 0.25F), - new AnvilOutput(new ItemStack(ModItems.battery_advanced, 1), 0.1F), new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.01F) } @@ -753,7 +751,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.scrap, 1)), new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 2)), new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.battery_lithium, 1), 0.25F), new AnvilOutput(new ItemStack(ModItems.battery_sc_uranium, 1), 0.1F), new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.05F) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 4f9b63282..7ba5e59fc 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -9,6 +9,7 @@ import com.hbm.items.ItemEnums.EnumCokeType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.tool.ItemBlowtorch; import net.minecraft.init.Items; @@ -45,7 +46,7 @@ public class ItemPoolsComponent { weighted(ModItems.coil_copper_torus, 0, 1, 2, 3), weighted(ModItems.wire_fine, Mats.MAT_MINGRADE.id, 1, 8, 5), weighted(ModItems.piston_selenium, 0, 1, 1, 3), - weighted(ModItems.battery_advanced_cell, 0, 1, 1, 3), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 3), weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 2, 4), weighted(ModItems.circuit, EnumCircuitType.PCB.ordinal(), 1, 3, 5), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), @@ -81,7 +82,7 @@ public class ItemPoolsComponent { weighted(ModItems.missile_generic, 0, 1, 1, 4), weighted(ModItems.missile_incendiary, 0, 1, 1, 4), weighted(ModItems.gas_mask_m65, 0, 1, 1, 5), - weighted(ModItems.battery_advanced, 0, 1, 1, 5), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 3), weighted(ModItems.designator, 0, 1, 1, 5), weighted(ModItems.thruster_small, 0, 1, 1, 5), weighted(ModItems.thruster_medium, 0, 1, 1, 4), diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index 706fe43b1..76cad0680 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -4,6 +4,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; @@ -52,8 +53,7 @@ public class ItemPoolsLegacy { weighted(ModItems.casing, EnumCasingType.SMALL.ordinal(), 4, 10, 3), weighted(ModItems.casing, EnumCasingType.SHOTSHELL.ordinal(), 4, 10, 3), weighted(ModItems.cordite, 0, 4, 6, 5), - weighted(ModItems.battery_generic, 0, 1, 1, 4), - weighted(ModItems.battery_advanced, 0, 1, 1, 2), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_REDSTONE.ordinal(), 1, 1, 1), weighted(ModItems.scrap, 0, 1, 3, 10), weighted(ModItems.dust, 0, 2, 4, 9), weighted(ModItems.bottle_opener, 0, 1, 1, 2), @@ -79,8 +79,7 @@ public class ItemPoolsLegacy { weighted(ModItems.wire_fine, Mats.MAT_MINGRADE.id, 2, 3, 7), weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 1, 4), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 2), - weighted(ModItems.battery_generic, 0, 1, 1, 4), - weighted(ModItems.battery_advanced, 0, 1, 1, 3), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_REDSTONE.ordinal(), 1, 1, 1), weighted(ModItems.powder_iodine, 0, 1, 1, 1), weighted(ModItems.powder_bromine, 0, 1, 1, 1), weighted(ModBlocks.steel_poles, 0, 1, 4, 8), @@ -116,9 +115,7 @@ public class ItemPoolsLegacy { weighted(ModItems.grenade_smart, 0, 1, 3, 3), weighted(ModItems.grenade_mirv, 0, 1, 1, 2), weighted(ModItems.stealth_boy, 0, 1, 1, 2), - weighted(ModItems.battery_advanced, 0, 1, 1, 3), - weighted(ModItems.battery_advanced_cell, 0, 1, 1, 2), - weighted(ModItems.battery_schrabidium, 0, 1, 1, 1), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LITHIUM.ordinal(), 1, 1, 1), weighted(ModItems.syringe_awesome, 0, 1, 1, 1), weighted(ModItems.fusion_core, 0, 1, 1, 4), weighted(ModItems.bottle_nuka, 0, 1, 3, 6), @@ -215,7 +212,7 @@ public class ItemPoolsLegacy { //spaceship double chests new ItemPool(POOL_SPACESHIP) {{ this.pool = new WeightedRandomChestContent[] { - weighted(ModItems.battery_advanced, 0, 1, 1, 5), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 2), weighted(ModItems.ingot_advanced_alloy, 0, 2, 16, 5), weighted(ModItems.wire_fine, Mats.MAT_ALLOY.id, 8, 32, 5), weighted(ModItems.coil_advanced_alloy, 0, 2, 16, 5), diff --git a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java index 570df9ef6..8950a9e06 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java @@ -42,7 +42,6 @@ public class ItemPoolsSingle { new ItemPool(POOL_VAULT_STANDARD) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 2, 6, 1), - weighted(ModItems.battery_advanced_cell_4, 0, 1, 1, 1), weighted(ModItems.powder_desh_mix, 0, 1, 5, 1), weighted(Items.diamond, 0, 3, 6, 1), weighted(ModItems.ammo_standard, EnumAmmo.NUKE_STANDARD.ordinal(), 1, 1, 1), @@ -59,7 +58,6 @@ public class ItemPoolsSingle { new ItemPool(POOL_VAULT_REINFORCED) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 6, 16, 1), - weighted(ModItems.battery_lithium, 0, 1, 1, 1), weighted(ModItems.powder_power, 0, 1, 5, 1), weighted(ModItems.sat_chip, 0, 1, 1, 1), weighted(Items.diamond, 0, 5, 9, 1), @@ -81,7 +79,6 @@ public class ItemPoolsSingle { weighted(ModItems.gun_carbine, 0, 1, 1, 1), weighted(ModItems.ammo_standard, EnumAmmo.R762_DU.ordinal(), 16, 32, 1), weighted(ModItems.gun_congolake, 0, 1, 1, 1), - weighted(ModItems.battery_schrabidium_cell, 0, 1, 1, 1), weighted(ModItems.circuit, EnumCircuitType.ADVANCED.ordinal(), 6, 12, 1) }; }}; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 06dfd4ad2..bde1c68d2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1631,8 +1631,6 @@ public class ModItems { @Deprecated public static Item battery_advanced; @Deprecated public static Item battery_lithium; @Deprecated public static Item battery_schrabidium; - @Deprecated public static Item battery_spark; - @Deprecated public static Item battery_trixite; @Deprecated public static Item battery_red_cell; @Deprecated public static Item battery_red_cell_6; @Deprecated public static Item battery_red_cell_24; @@ -1656,6 +1654,8 @@ public class ModItems { public static Item battery_pack; public static Item battery_creative; public static Item cube_power; + @Deprecated public static Item battery_spark; + @Deprecated public static Item battery_trixite; public static Item battery_sc_uranium; public static Item battery_sc_technetium; @@ -3873,8 +3873,8 @@ public class ModItems { battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_new"); battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium"); battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); - battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark"); - battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_trixite"); + battery_spark = new Item().setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":battery_spark"); + battery_trixite = new Item().setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":battery_trixite"); battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell"); battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java index 5208f3790..eb780d51a 100644 --- a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java +++ b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.interfaces.IOrderedEnum; import com.hbm.items.ItemEnumMulti; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.util.BobMathUtil; @@ -67,6 +68,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { } public boolean isCapacitor() { return this.ordinal() > BATTERY_QUANTUM.ordinal(); } + public ItemStack stack() { return new ItemStack(ModItems.battery_pack, 1, this.ordinal()); } } @Override @@ -95,7 +97,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i); } else { stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", this.getMaxCharge(stack) - i); + stack.stackTagCompound.setLong("charge", 0); } } @@ -105,7 +107,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { return stack.stackTagCompound.getLong("charge"); } else { stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", getMaxCharge(stack)); + stack.stackTagCompound.setLong("charge", 0); return stack.stackTagCompound.getLong("charge"); } } diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 018dbefef..c193b8c7b 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -181,10 +181,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.piston_selenium, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.canister_full, 16, Fluids.DIESEL.getID())); player.inventory.addItemStackToInventory(new ItemStack(ModItems.canister_full, 16, Fluids.BIOFUEL.getID())); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_advanced_cell_4, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_advanced_cell_4, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_lithium, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_lithium, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_potato, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.screwdriver, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_excavator, 1)); @@ -383,7 +379,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator_range, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator_manual, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_schrabidium_cell_4, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_generic, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_strong, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_burst, 1)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index a2bf670d2..4513341a7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -443,7 +443,7 @@ public class LegoClient { double age = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted - 2 + interp) / (double) bullet.getBulletConfig().expires, 0, 1); GL11.glScaled(age / 2 + 0.5, 1, age / 2 + 0.5); int colorInner = ((int)(r * age) << 16) | ((int)(g * age) << 8) | (int) (b * age); - BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorInner, colorInner, bullet.ticksExisted / 3, (int)(bullet.beamLength / 2 + 1), 0F, 8, 0.0625F); + BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorInner, colorInner, bullet.ticksExisted / 3, (int)(bullet.beamLength / 2 + 1), 0F, 4, 0.025F); GL11.glPopMatrix(); RenderArcFurnace.fullbright(false); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java index 1c8c2c285..ea38a19d9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java @@ -42,7 +42,7 @@ public class MagazineElectricEngine implements IMagazine { @Override public void reloadAction(ItemStack stack, IInventory inventory) { } @Override public SpentCasing getCasing(ItemStack stack, IInventory inventory) { return null; } - @Override public ItemStack getIconForHUD(ItemStack stack, EntityPlayer player) { return new ItemStack(ModItems.battery_generic); } + @Override public ItemStack getIconForHUD(ItemStack stack, EntityPlayer player) { return new ItemStack(ModItems.battery_creative); } @Override public String reportAmmoStateForHUD(ItemStack stack, EntityPlayer player) { return BobMathUtil.getShortNumber(getAmount(stack, player.inventory)) + "/" + BobMathUtil.getShortNumber(this.capacity) + "HE"; } @Override public void setAmountBeforeReload(ItemStack stack, int amount) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_PREV + index, amount); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index fc7d40cea..773bb98bc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -525,18 +525,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.charge_semtex, 1), new Object[] { ModItems.stick_semtex, ModItems.stick_semtex, ModItems.stick_semtex, ModItems.ducttape }); addShapelessAuto(new ItemStack(ModBlocks.charge_c4, 1), new Object[] { ModItems.stick_c4, ModItems.stick_c4, ModItems.stick_c4, ModItems.ducttape }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_generic), new Object[] { " A ", "PRP", "PRP", 'A', AL.wireFine(), 'P', AL.plate(), 'R', REDSTONE.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PSP", "PLP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "sulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PLP", "PSP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "sulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PSP", "PLP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "dustSulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PLP", "PSP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "dustSulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium), new Object[] { "A A", "PSP", "PLP", 'A', GOLD.wireFine(), 'P', TI.plate(), 'S', LI.dust(), 'L', CO.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium), new Object[] { "A A", "PLP", "PSP", 'A', GOLD.wireFine(), 'P', TI.plate(), 'S', LI.dust(), 'L', CO.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium), new Object[] { " A ", "PNP", "PSP", 'A', SA326.wireFine(), 'P', SA326.plate(), 'S', SA326.dust(), 'N', NP237.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium), new Object[] { " A ", "PSP", "PNP", 'A', SA326.wireFine(), 'P', SA326.plate(), 'S', SA326.dust(), 'N', NP237.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark), new Object[] { "P", "S", "S", 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_trixite), new Object[] { " A ", "PSP", "PTP", 'A', AL.wireFine(), 'P', AL.plate(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_trixite), new Object[] { " A ", "PTP", "PSP", 'A', AL.wireFine(), 'P', AL.plate(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); addRecipeAuto(ItemBattery.getFullBattery(ModItems.energy_core), new Object[] { "PCW", "TRD", "PCW", 'P', ALLOY.plate(), 'C', ModItems.coil_advanced_alloy, 'W', ALLOY.wireFine(), 'R', ModItems.cell_tritium, 'D', ModItems.cell_deuterium, 'T', W.ingot() }); addRecipeAuto(ItemBattery.getFullBattery(ModItems.energy_core), new Object[] { "PCW", "TDR", "PCW", 'P', ALLOY.plate(), 'C', ModItems.coil_advanced_alloy, 'W', ALLOY.wireFine(), 'R', ModItems.cell_tritium, 'D', ModItems.cell_deuterium, 'T', W.ingot() }); addRecipeAuto(new ItemStack(ModItems.hev_battery, 4), new Object[] { " W ", "IEI", "ICI", 'W', GOLD.wireFine(), 'I', ModItems.plate_polymer, 'E', REDSTONE.dust(), 'C', CO.dust() }); @@ -544,26 +532,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.hev_battery, 1), new Object[] { ModBlocks.hev_battery }); addShapelessAuto(new ItemStack(ModBlocks.hev_battery, 1), new Object[] { ModItems.hev_battery }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell), new Object[] { "WBW", "PBP", "WBW", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_generic) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell), new Object[] { "WBW", "PBP", "WBW", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell), new Object[] { "WBW", "PBP", "WBW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell), new Object[] { "WBW", "PBP", "WBW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell_6), new Object[] { "BBB", "WPW", "BBB", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_red_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_4), new Object[] { "BWB", "WPW", "BWB", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_3), new Object[] { "WPW", "BBB", "WPW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_2), new Object[] { "WPW", "BWB", "WPW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell_24), new Object[] { "BWB", "WPW", "BWB", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_red_cell_6) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_12), new Object[] { "WPW", "BBB", "WPW", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_4) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_6), new Object[] { "WPW", "BWB", "WPW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_3) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_4), new Object[] { "WPW", "BWB", "WPW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_2) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_6), new Object[] { "BW", "PW", "BW", 'W', MAGTUNG.wireFine(), 'P', ModItems.powder_spark_mix, 'B', ItemBattery.getEmptyBattery(ModItems.battery_spark) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_25), new Object[] { "W W", "SCS", "PSP", 'W', MAGTUNG.wireFine(), 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_6) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100), new Object[] { "W W", "BPB", "SSS", 'W', MAGTUNG.wireFine(), 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix, 'B', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_25) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_1000), new Object[] { "PCP", "CSC", "PCP", 'S', ModItems.singularity_spark, 'P', ModItems.powder_spark_mix, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_2500), new Object[] { "SCS", "CVC", "SCS", 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100), 'V', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_1000), 'S', ModItems.powder_spark_mix }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_10000), new Object[] { "OSO", "SVS", "OSO", 'S', ModItems.singularity_spark, 'V', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_2500), 'O', ModItems.ingot_osmiridium }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_power), new Object[] { "YSY", "SCS", "YSY", 'S', ModItems.singularity_spark, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_10000), 'Y', ModItems.billet_yharonite }); - addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potato), new Object[] { Items.potato, AL.wireFine(), CU.wireFine() }); addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potatos), new Object[] { ItemBattery.getFullBattery(ModItems.battery_potato), ModItems.turret_chip, REDSTONE.dust() }); @@ -637,7 +605,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.ams_core_sing, 1), new Object[] { "EAE", "ASA", "EAE", 'E', ModItems.plate_euphemium, 'A', ModItems.cell_anti_schrabidium, 'S', ModItems.singularity }); addRecipeAuto(new ItemStack(ModItems.ams_core_wormhole, 1), new Object[] { "DPD", "PSP", "DPD", 'D', ModItems.plate_dineutronium, 'P', ModItems.powder_spark_mix, 'S', ModItems.singularity }); addRecipeAuto(new ItemStack(ModItems.ams_core_eyeofharmony, 1), new Object[] { "ALA", "LSL", "ALA", 'A', ModItems.plate_dalekanium, 'L', new ItemStack(ModItems.fluid_barrel_full, 1, Fluids.LAVA.getID()), 'S', ModItems.black_hole }); - addRecipeAuto(new ItemStack(ModItems.ams_core_thingy), new Object[] { "NSN", "NGN", "G G", 'N', GOLD.nugget(), 'G', GOLD.ingot(), 'S', ModItems.battery_spark_cell_10000 }); + addRecipeAuto(new ItemStack(ModItems.ams_core_thingy), new Object[] { "NSN", "NGN", "G G", 'N', GOLD.nugget(), 'G', GOLD.ingot(), 'S', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.photo_panel), new Object[] { " G ", "IPI", " C ", 'G', KEY_ANYPANE, 'I', ModItems.plate_polymer, 'P', NETHERQUARTZ.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB) }); addRecipeAuto(new ItemStack(ModBlocks.machine_satlinker), new Object[] { "PSP", "SCS", "PSP", 'P', STEEL.plate(), 'S', STAR.ingot(), 'C', ModItems.sat_chip }); addRecipeAuto(new ItemStack(ModBlocks.machine_keyforge), new Object[] { "PCP", "WSW", "WSW", 'P', STEEL.plate(), 'S', W.ingot(), 'C', ModItems.padlock, 'W', KEY_PLANKS }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 7080fc9d2..3046a25cd 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -664,6 +664,7 @@ public class MainRegistry { event.registerServerCommand(new CommandReloadServer()); event.registerServerCommand(new CommandLocate()); event.registerServerCommand(new CommandCustomize()); + event.registerServerCommand(new CommandReapNetworks()); ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes } diff --git a/src/main/java/com/hbm/uninos/UniNodespace.java b/src/main/java/com/hbm/uninos/UniNodespace.java index fbd807cce..2f8e1faf2 100644 --- a/src/main/java/com/hbm/uninos/UniNodespace.java +++ b/src/main/java/com/hbm/uninos/UniNodespace.java @@ -3,6 +3,7 @@ package com.hbm.uninos; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.Map; import java.util.Set; import java.util.Map.Entry; @@ -23,7 +24,7 @@ import net.minecraft.world.World; */ public class UniNodespace { - public static HashMap worlds = new HashMap(); + public static Map worlds = new HashMap(); public static Set activeNodeNets = new HashSet(); public static GenNode getNode(World world, int x, int y, int z, INetworkProvider type) { @@ -73,7 +74,7 @@ public class UniNodespace { } updateNetworks(); - resetReapTimer(); + updateReapTimer(); } private static void updateNetworks() { @@ -87,8 +88,9 @@ public class UniNodespace { } } - private static void resetReapTimer() { + private static void updateReapTimer() { if(reapTimer <= 0) reapTimer = 5 * 60 * 20; // 5 minutes is more than plenty + else reapTimer--; } /** Goes over each connection point of the given node, tries to find neighbor nodes and to join networks with them */ diff --git a/src/main/java/com/hbm/util/Tuple.java b/src/main/java/com/hbm/util/Tuple.java index f2276386e..22f750185 100644 --- a/src/main/java/com/hbm/util/Tuple.java +++ b/src/main/java/com/hbm/util/Tuple.java @@ -194,6 +194,17 @@ public class Tuple { public Z getZ() { return this.z; } + + /// flavor town /// + public void mangle(W w, X x, Y y, Z z) { + this.w = w; + this.x = x; + this.y = y; + this.z = z; + } + public Quartet clone() { + return new Quartet(w, x, y, z); + } } public static class Quintet { From 8619c8e67de7801f2adb0bc60e29217aa345b9ff Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 6 Jan 2026 19:35:39 +0100 Subject: [PATCH 19/19] he big --- changelog | 11 +- .../java/api/hbm/block/IDrillInteraction.java | 1 + src/main/java/api/hbm/block/IMiningDrill.java | 1 + src/main/java/com/hbm/blocks/ModBlocks.java | 6 +- .../com/hbm/blocks/generic/BlockCluster.java | 60 +- .../blocks/network/MachineBatteryREDD.java | 50 + .../blocks/network/MachineBatterySocket.java | 1 + .../com/hbm/commands/CommandReapNetworks.java | 3 + .../java/com/hbm/crafting/WeaponRecipes.java | 3 + .../com/hbm/handler/EntityEffectHandler.java | 2 +- .../container/ContainerBatteryREDD.java | 62 + .../com/hbm/inventory/gui/GUIBatteryREDD.java | 87 + .../hbm/inventory/gui/GUIBatterySocket.java | 6 + .../inventory/recipes/AnnihilatorRecipes.java | 37 +- .../recipes/AssemblyMachineRecipes.java | 28 +- src/main/java/com/hbm/items/ModItems.java | 6 +- .../items/block/ItemBlockStorageCrate.java | 5 + .../items/machine/ItemBatteryCreative.java | 18 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/tileentity/RenderBatteryREDD.java | 264 + .../java/com/hbm/render/util/BeamPronter.java | 4 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineMiningLaser.java | 83 +- .../machine/rbmk/TileEntityRBMKHeater.java | 4 + .../storage/TileEntityBatteryBase.java | 184 + .../storage/TileEntityBatteryREDD.java | 219 + .../storage/TileEntityBatterySocket.java | 159 +- src/main/resources/assets/hbm/lang/de_DE.lang | 26 +- src/main/resources/assets/hbm/lang/en_US.lang | 26 +- .../assets/hbm/models/machines/fensu2.obj | 6193 +++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/fensuHum.ogg | Bin 0 -> 99323 bytes .../textures/gui/storage/gui_battery_redd.png | Bin 0 -> 10989 bytes .../hbm/textures/models/machines/fensu2.png | Bin 0 -> 6901 bytes 35 files changed, 7211 insertions(+), 343 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java create mode 100644 src/main/java/com/hbm/items/machine/ItemBatteryCreative.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java create mode 100644 src/main/resources/assets/hbm/models/machines/fensu2.obj create mode 100644 src/main/resources/assets/hbm/sounds/block/fensuHum.ogg create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/fensu2.png diff --git a/changelog b/changelog index d26d26487..cb014d297 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,10 @@ * Instead of energy storage blocks, there is now a battery socket, which allows those new items to be connected to the power grid * Battery sockets act like cables, they will connect power grids when two cables are plugged into them in different directions * Self-chargers and creative batteries are still around, as well as spark batteries which are needed for the balefire bomb + * The FEnSU has been replaced by a much larger version with unlimited energy storage +* `/ntmreapnetworks` + * Deletes all active nodespace instances + * Mainly useful for server owners, in case nodespace builds up too much garbage data that isn't cleared correctly ## Changed * Updated italian localization @@ -15,6 +19,8 @@ * The block ID economy is looking better than ever * Infinite water barrels can now be crafted with any water container and not just buckets * OpenComputers integration for the PWR can now also read the heat capacity stats +* Removed the restriction that demands that cluster ores need to be mined by hand +* Laser beams from energy weapons are now a lot more narrow ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases @@ -22,4 +28,7 @@ * Potentially fixed a performance issue caused by transmission networks not being deleted when they have no active links * Fixed multi output recipe objects not deserializing right, causing the precision assembler config to not load * Fixed pedestal recipes not using the correct register option, making custom config files wipe all clay tablets -* Fixed custom fluids breaking when using the `/ntmreload` command \ No newline at end of file +* Fixed custom fluids breaking when using the `/ntmreload` command +* Fixed power not saving for mining lasers +* Fixed the annihilator producing blank 528 mode blueprints when 528 mode isn't even enabled +* Fixed black fire not using the skeletonizer on death \ No newline at end of file diff --git a/src/main/java/api/hbm/block/IDrillInteraction.java b/src/main/java/api/hbm/block/IDrillInteraction.java index 7e9c7bffe..f9b700da3 100644 --- a/src/main/java/api/hbm/block/IDrillInteraction.java +++ b/src/main/java/api/hbm/block/IDrillInteraction.java @@ -3,6 +3,7 @@ package api.hbm.block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +@Deprecated public interface IDrillInteraction { /** diff --git a/src/main/java/api/hbm/block/IMiningDrill.java b/src/main/java/api/hbm/block/IMiningDrill.java index 15d61178b..05294f0d1 100644 --- a/src/main/java/api/hbm/block/IMiningDrill.java +++ b/src/main/java/api/hbm/block/IMiningDrill.java @@ -1,5 +1,6 @@ package api.hbm.block; +@Deprecated public interface IMiningDrill { /** diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a63a8fe91..e14996324 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -743,13 +743,14 @@ public class ModBlocks { public static Block machine_microwave; public static Block machine_battery_socket; + public static Block machine_battery_redd; @Deprecated public static Block machine_battery_potato; @Deprecated public static Block machine_battery; @Deprecated public static Block machine_lithium_battery; @Deprecated public static Block machine_schrabidium_battery; @Deprecated public static Block machine_dineutronium_battery; - public static Block machine_fensu; + @Deprecated public static Block machine_fensu; @Deprecated public static Block capacitor_bus; public static Block capacitor_copper; // neat for structures @@ -1863,6 +1864,8 @@ public class ModBlocks { machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_battery_redd = new MachineBatteryREDD().setBlockName("machine_battery_redd").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3261,6 +3264,7 @@ public class ModBlocks { register(barrel_tcalloy); register(barrel_antimatter); register(machine_battery_socket); + register(machine_battery_redd); register(machine_battery_potato); register(machine_battery); register(machine_lithium_battery); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCluster.java b/src/main/java/com/hbm/blocks/generic/BlockCluster.java index ab7ae9dff..0887df979 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCluster.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCluster.java @@ -1,26 +1,15 @@ package com.hbm.blocks.generic; -import java.util.List; import java.util.Random; -import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; -import com.hbm.util.i18n.I18nUtil; -import api.hbm.block.IDrillInteraction; -import api.hbm.block.IMiningDrill; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -public class BlockCluster extends Block implements IDrillInteraction, ITooltipProvider { +public class BlockCluster extends Block { public BlockCluster(Material mat) { super(mat); @@ -28,32 +17,7 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr @Override public Item getItemDropped(int i, Random rand, int j) { - return null; - } - - @Override - public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { - - if(player instanceof FakePlayer || player == null) { - return; - } - - if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops") && !world.restoringBlockSnapshots) { - - Item drop = getDrop(); - - if(drop == null) - return; - - float f = 0.7F; - double mX = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double mY = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double mZ = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - - EntityItem entityitem = new EntityItem(world, (double) x + mX, (double) y + mY, (double) z + mZ, new ItemStack(drop)); - entityitem.delayBeforeCanPickup = 10; - world.spawnEntityInWorld(entityitem); - } + return getDrop(); } private Item getDrop() { @@ -65,24 +29,4 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr return null; } - - @Override - public boolean canBreak(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return drill.getDrillRating() > 70 || world.rand.nextFloat() < 0.05; - } - - @Override - public ItemStack extractResource(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return drill.getDrillRating() <= 70 ? new ItemStack(getDrop()) : null; - } - - @Override - public float getRelativeHardness(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return this.getBlockHardness(world, x, y, z); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.tile.cluster")); - } } diff --git a/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java new file mode 100644 index 000000000..ee40d8574 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java @@ -0,0 +1,50 @@ +package com.hbm.blocks.network; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineBatteryREDD extends BlockDummyable { + + public MachineBatteryREDD() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityBatteryREDD(); + if(meta >= 6) return new TileEntityProxyCombo().power().conductor(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override public int[] getDimensions() { return new int[] {9, 0, 2, 2, 4, 4}; } + @Override public int getOffset() { return 2; } + + @Override + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + this.makeExtra(world, x + dir.offsetX * 2 + rot.offsetX * 2, y, z + dir.offsetZ * 2 + rot.offsetZ * 2); + this.makeExtra(world, x + dir.offsetX * 2 - rot.offsetX * 2, y, z + dir.offsetZ * 2 - rot.offsetZ * 2); + this.makeExtra(world, x - dir.offsetX * 2 + rot.offsetX * 2, y, z - dir.offsetZ * 2 + rot.offsetZ * 2); + this.makeExtra(world, x - dir.offsetX * 2 - rot.offsetX * 2, y, z - dir.offsetZ * 2 - rot.offsetZ * 2); + this.makeExtra(world, x + rot.offsetX * 4, y, z + rot.offsetZ * 4); + this.makeExtra(world, x - rot.offsetX * 4, y, z - rot.offsetZ * 4); + } +} diff --git a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java index a1030cd99..89ccdf7ce 100644 --- a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java +++ b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java @@ -35,6 +35,7 @@ public class MachineBatterySocket extends BlockDummyable implements ITooltipProv @Override public int[] getDimensions() { return new int[] {1, 0, 1, 0, 1, 0}; } @Override public int getOffset() { return 0; } + @Override protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/commands/CommandReapNetworks.java b/src/main/java/com/hbm/commands/CommandReapNetworks.java index 2d746057c..a52c41e3d 100644 --- a/src/main/java/com/hbm/commands/CommandReapNetworks.java +++ b/src/main/java/com/hbm/commands/CommandReapNetworks.java @@ -6,6 +6,7 @@ import com.hbm.util.ChatBuilder; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class CommandReapNetworks extends CommandBase { @@ -33,6 +34,8 @@ public class CommandReapNetworks extends CommandBase { }); UniNodespace.activeNodeNets.clear(); UniNodespace.worlds.clear(); + + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Nodespace cleared :)")); } catch(Exception ex) { sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index c11304bf5..e597fec39 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -311,6 +311,9 @@ public class WeaponRecipes { //Nuke parts CraftingManager.addRecipeAuto(new ItemStack(ModItems.n2_charge, 1), new Object[] { " D ", "ERE", " D ", 'D', ModItems.ducttape, 'E', ModBlocks.det_charge, 'R', REDSTONE.block() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_spark, 1), new Object[] { " W ", "DSD", "DSD", 'W', MAGTUNG.wireDense(), 'D', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_trixite, 1), new Object[] { " W ", "DSD", "DTD", 'W', MAGTUNG.wireDense(), 'D', BIGMT.plateCast(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_trixite, 1), new Object[] { " W ", "DTD", "DSD", 'W', MAGTUNG.wireDense(), 'D', BIGMT.plateCast(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); //Custom nuke rods CraftingManager.addRecipeAuto(new ItemStack(ModItems.custom_tnt, 1), new Object[] { " C ", "TIT", "TIT", 'C', CU.plate(), 'I', IRON.plate(), 'T', ANY_HIGHEXPLOSIVE.ingot() }); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 8a98850ac..9fc6d0c0e 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -676,7 +676,7 @@ public class EntityEffectHandler { FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_BLACK); } - if(props.fire > 0 || props.phosphorus > 0 || props.balefire > 0) if(!entity.isEntityAlive()) ConfettiUtil.decideConfetti(living, DamageSource.onFire); + if(props.fire > 0 || props.phosphorus > 0 || props.balefire > 0 || props.blackFire > 0) if(!entity.isEntityAlive()) ConfettiUtil.decideConfetti(living, DamageSource.onFire); } private static void handleDashing(Entity entity) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java b/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java new file mode 100644 index 000000000..e2478b79c --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java @@ -0,0 +1,62 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerBatteryREDD extends Container { + + protected TileEntityBatteryREDD socket; + + public ContainerBatteryREDD(InventoryPlayer invPlayer, TileEntityBatteryREDD tedf) { + this.socket = tedf; + + this.addSlotToContainer(new SlotNonRetarded(socket, 0, 26, 53)); + this.addSlotToContainer(new SlotNonRetarded(socket, 1, 80, 53)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 99 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 157)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return socket.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack copy = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + copy = stack.copy(); + + if(index <= 1) { + if(!this.mergeItemStack(stack, 2, this.inventorySlots.size(), true)) return null; + } else { + if(!this.mergeItemStack(stack, 0, 2, false)) return null; + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return copy; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java b/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java new file mode 100644 index 000000000..c8c2f5f55 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java @@ -0,0 +1,87 @@ +package com.hbm.inventory.gui; + +import java.math.BigInteger; +import java.util.Locale; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import com.hbm.inventory.container.ContainerBatteryREDD; +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.client.Minecraft; +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 GUIBatteryREDD extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_battery_redd.png"); + private TileEntityBatteryREDD battery; + + public GUIBatteryREDD(InventoryPlayer invPlayer, TileEntityBatteryREDD tedf) { + super(new ContainerBatteryREDD(invPlayer, tedf)); + battery = tedf; + + this.xSize = 176; + this.ySize = 181; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + NBTTagCompound data = new NBTTagCompound(); + + if(this.checkClick(x, y, 133, 16, 18, 18)) { this.click(); data.setBoolean("low", true); } + if(this.checkClick(x, y, 133, 52, 18, 18)) { this.click(); data.setBoolean("high", true); } + if(this.checkClick(x, y, 152, 35, 16, 16)) { this.click(); data.setBoolean("priority", true); } + + if(!data.hasNoTags()) PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, battery.xCoord, battery.yCoord, battery.zCoord)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.battery.hasCustomInventoryName() ? this.battery.getInventoryName() : I18n.format(this.battery.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + GL11.glPushMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glScaled(0.5, 0.5, 1); + + String label = String.format(Locale.US, "%,d", battery.power) + " HE"; + this.fontRendererObj.drawString(label, 242 - this.fontRendererObj.getStringWidth(label), 45, 0x00ff00); + + String deltaText = String.format(Locale.US, "%,d", battery.delta) + " HE/s"; + + int comp = battery.delta.compareTo(BigInteger.ZERO); + if(comp > 0) deltaText = EnumChatFormatting.GREEN + "+" + deltaText; + else if(comp < 0) deltaText = EnumChatFormatting.RED + deltaText; + else deltaText = EnumChatFormatting.YELLOW + "+" + deltaText; + + this.fontRendererObj.drawString(deltaText, 242 - this.fontRendererObj.getStringWidth(deltaText), 65, 0x00ff00); + + GL11.glPopMatrix(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + drawTexturedModalRect(guiLeft + 133, guiTop + 16, 176, 52 + battery.redLow * 18, 18, 18); + drawTexturedModalRect(guiLeft + 133, guiTop + 52, 176, 52 + battery.redHigh * 18, 18, 18); + drawTexturedModalRect(guiLeft + 152, guiTop + 35, 194, 52 + battery.priority.ordinal() * 16 - 16, 16, 16); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java index f9e0f5585..cc94ceae3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java @@ -99,6 +99,12 @@ public class GUIBatterySocket extends GuiInfoContainer { IBatteryItem item = (IBatteryItem) battery.slots[0].getItem(); long power = item.getCharge(battery.slots[0]); long maxPower = item.getMaxCharge(battery.slots[0]); + + if(power > Long.MAX_VALUE / 100) { + power /= 100; + maxPower /= 100; + } + if(maxPower <= 1) maxPower = 1; int p = (int) (power * 52 / maxPower); // won't work then flying too close to the sun (the limits of the LONG data type) drawTexturedModalRect(guiLeft + 62, guiTop + 69 - p, 176, 52 - p, 34, p); } diff --git a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java index 2a1ae355d..b58b8d9d2 100644 --- a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java @@ -14,6 +14,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.FluidType; @@ -59,23 +60,25 @@ public class AnnihilatorRecipes extends SerializableRecipe { @Override public void registerDefaults() { - recipes.put(STEEL.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "steel")))); - recipes.put(SI.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip")))); - recipes.put(BI.nugget(), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_bismoid")))); - recipes.put(ModItems.pellet_charged, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")))); - - recipes.put(U.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "gascent")))); - recipes.put(ANY_PLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "plastic")))); - recipes.put(RUBBER.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "rubber")))); - recipes.put(FERRO.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "ferrouranium")))); - recipes.put(SR.dust(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "strontium")))); - recipes.put(ANY_HARDPLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "hardplastic")))); - recipes.put(ANY_RESISTANTALLOY.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "tcalloy")))); - recipes.put(ModItems.powder_chlorophyte, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")))); - - recipes.put(new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.BMG50_FMJ), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "bmg")))); - recipes.put(new ComparableStack(ModItems.ammo_arty, 1, 0), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "arty")))); - recipes.put(new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "controller")))); + if(GeneralConfig.enable528) { + recipes.put(STEEL.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "steel")))); + recipes.put(SI.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip")))); + recipes.put(BI.nugget(), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_bismoid")))); + recipes.put(ModItems.pellet_charged, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")))); + + recipes.put(U.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "gascent")))); + recipes.put(ANY_PLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "plastic")))); + recipes.put(RUBBER.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "rubber")))); + recipes.put(FERRO.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "ferrouranium")))); + recipes.put(SR.dust(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "strontium")))); + recipes.put(ANY_HARDPLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "hardplastic")))); + recipes.put(ANY_RESISTANTALLOY.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "tcalloy")))); + recipes.put(ModItems.powder_chlorophyte, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")))); + + recipes.put(new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.BMG50_FMJ), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "bmg")))); + recipes.put(new ComparableStack(ModItems.ammo_arty, 1, 0), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "arty")))); + recipes.put(new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "controller")))); + } } @Override public String getFileName() { return "hbmAnnihilator.json"; } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 692821491..5013ba2ba 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -83,7 +83,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.platebismuth").setup(200, 100).outputItems(new ItemStack(ModItems.plate_bismuth, 1)) .inputItems(new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1))); this.register(new GenericRecipe("ass.plateeuphemium").setup(600, 100).outputItems(new ItemStack(ModItems.plate_euphemium, 1)) - .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); + .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new OreDictStack(OSMIRIDIUM.ingot()))); this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); @@ -422,16 +422,16 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 8_000)) .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 8_000))); - this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) - .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), + this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1)) + .inputItems(new ComparableStack(ModItems.ingot_electronium, 64), new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), - new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64), - new OreDictStack(DURA.block(), 16), - new OreDictStack(STAR.block(), 64), - new ComparableStack(ModBlocks.machine_transformer_dnt, 8), - new ComparableStack(ModItems.coil_magnetized_tungsten, 24), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64), + new OreDictStack(CMB.plateCast(), 32), + new OreDictStack(MAGTUNG.wireDense(), 32), + new ComparableStack(ModItems.plate_dineutronium, 64), new ComparableStack(ModItems.powder_magic, 64), - new ComparableStack(ModItems.plate_dineutronium, 24), new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64)) @@ -439,11 +439,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING), - new OreDictStack(STAR.block(), 64), - new ComparableStack(ModBlocks.machine_transformer_dnt, 8), - new ComparableStack(ModItems.coil_magnetized_tungsten, 24), - new ComparableStack(ModItems.powder_magic, 64), - new ComparableStack(ModItems.plate_dineutronium, 24), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64), + new OreDictStack(CMB.plateCast(), 64), new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64))); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index bde1c68d2..fb868ca18 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1654,8 +1654,8 @@ public class ModItems { public static Item battery_pack; public static Item battery_creative; public static Item cube_power; - @Deprecated public static Item battery_spark; - @Deprecated public static Item battery_trixite; + public static Item battery_spark; + public static Item battery_trixite; public static Item battery_sc_uranium; public static Item battery_sc_technetium; @@ -3896,7 +3896,7 @@ public class ModItems { battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); battery_pack = new ItemBatteryPack().setUnlocalizedName("battery_pack").setTextureName(RefStrings.MODID + ":battery_generic_new"); - battery_creative = new Item().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); + battery_creative = new ItemBatteryCreative().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 97d2cb7e8..badb00e86 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -133,6 +133,11 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider public boolean hasCustomInventoryName() { return target.hasDisplayName(); } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return player.getHeldItem() == this.target; + } @Override public void markDirty() { // You have been blessed by the unfuck diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java b/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java new file mode 100644 index 000000000..1c3f30b82 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java @@ -0,0 +1,18 @@ +package com.hbm.items.machine; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class ItemBatteryCreative extends Item implements IBatteryItem { + + @Override public void chargeBattery(ItemStack stack, long i) { } + @Override public void setCharge(ItemStack stack, long i) { } + @Override public void dischargeBattery(ItemStack stack, long i) { } + + @Override public long getCharge(ItemStack stack) { return Long.MAX_VALUE / 2L; } + @Override public long getMaxCharge(ItemStack stack) { return Long.MAX_VALUE; } + + @Override public long getChargeRate(ItemStack stack) { return Long.MAX_VALUE / 100L; } + @Override public long getDischargeRate(ItemStack stack) { return Long.MAX_VALUE / 100L; } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 47bb3e5d9..f563e2300 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -307,6 +307,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForceField.class, new RenderMachineForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFENSU.class, new RenderFENSU()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatterySocket.class, new RenderBatterySocket()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatteryREDD.class, new RenderBatteryREDD()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineLargeTurbine.class, new RenderBigTurbine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineReactorBreeding.class, new RenderBreeder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolarBoiler.class, new RenderSolarBoiler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index a0f97f3b6..b89556fb4 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -271,6 +271,7 @@ public class ResourceManager { //FENSU public static final IModelCustom battery_socket = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/battery.obj")).asVBO(); + public static final IModelCustom battery_redd = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu2.obj")).asVBO(); public static final IModelCustom fensu = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu.obj")).asVBO(); //Radar @@ -739,6 +740,7 @@ public class ResourceManager { //FENSU public static final ResourceLocation battery_socket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/battery_socket.png"); + public static final ResourceLocation battery_redd_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu2.png"); public static final ResourceLocation fensu_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu.png"); //Radar diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java b/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java new file mode 100644 index 000000000..b0080da6d --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java @@ -0,0 +1,264 @@ +package com.hbm.render.tileentity; + +import java.util.Random; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.MainRegistry; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.util.BeamPronter; +import com.hbm.render.util.BeamPronter.EnumBeamType; +import com.hbm.render.util.BeamPronter.EnumWaveType; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; +import com.hbm.util.BobMathUtil; +import com.hbm.util.Clock; +import com.hbm.util.Vec3NT; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.IItemRenderer; + +public class RenderBatteryREDD extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - 10) { + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + + bindTexture(ResourceManager.battery_redd_tex); + ResourceManager.battery_redd.renderPart("Base"); + + GL11.glPushMatrix(); + + GL11.glTranslated(0, 5.5, 0); + TileEntityBatteryREDD redd = (TileEntityBatteryREDD) tile; + float speed = redd.getSpeed(); + double rot = redd.prevRotation + (redd.rotation - redd.prevRotation) * interp; + GL11.glRotated(rot, 1, 0, 0); + GL11.glTranslated(0, -5.5, 0); + + ResourceManager.battery_redd.renderPart("Wheel"); + + RenderArcFurnace.fullbright(true); + ResourceManager.battery_redd.renderPart("Lights"); + + RenderArcFurnace.fullbright(false); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 5.5, 0); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); + + Vec3NT vec = new Vec3NT(0, 0, 4); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + double len = 4.25D; + double width = 0.125D; + double span = speed * 0.75; + + if(span > 0) for(int j = -1; j <= 1; j += 2) { + for(int i = 0; i < 8; i++) { + double xOffset = 0.8125 * j; + vec.setComponents(0, 1, 0); + vec.rotateAroundXDeg(i * 45D); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.75F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0.5F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.5F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0.25F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.25F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + } + } + tess.draw(); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glPopAttrib(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPopMatrix(); + + renderSparkle(tile); + + GL11.glPopMatrix(); + + if(speed > 0) renderZaps(tile); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + protected void renderSparkle(TileEntity tile) { + TileEntityBatteryREDD redd = (TileEntityBatteryREDD) tile; + + long time = Clock.get_ms(); + float alpha = 0.45F + (float) (Math.sin(time / 1000D) * 0.15F); + float alphaMult = redd.getSpeed() / 15F; + float r = 1.0F; + float g = 0.25F; + float b = 0.75F; + + double mainOsc = BobMathUtil.sps(time / 1000D) % 1D; + double sparkleSpin = time / 250D * -1 % 1D; + double sparkleOsc = Math.sin(time / 1000D) * 0.5D % 1D; + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); + + GL11.glColor4f(r, g, b, alpha * alphaMult); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + bindTexture(ResourceManager.fusion_plasma_tex); + GL11.glTranslated(0, mainOsc, 0); + ResourceManager.battery_redd.renderPart("Plasma"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + // cost-cutting measure, don't render extra layers from more than 100m away + if(MainRegistry.proxy.me().getDistanceSq(tile.xCoord + 0.5, tile.yCoord + 2.5, tile.zCoord + 0.5) < 100 * 100) { + + GL11.glColor4f(r * 2, g * 2, b * 2, 0.75F * alphaMult); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + bindTexture(ResourceManager.fusion_plasma_sparkle_tex); + GL11.glTranslated(sparkleSpin, sparkleOsc, 0); + ResourceManager.battery_redd.renderPart("Plasma"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glPopAttrib(); + + GL11.glEnable(GL11.GL_CULL_FACE); + } + + protected void renderZaps(TileEntity tile) { + + Random rand = new Random(tile.getWorldObj().getTotalWorldTime() / 5); + rand.nextBoolean(); + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(-3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(-3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_battery_redd); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommon() { + GL11.glRotated(-90, 0, 1, 0); + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.battery_redd_tex); + ResourceManager.battery_redd.renderPart("Base"); + ResourceManager.battery_redd.renderPart("Wheel"); + GL11.glDisable(GL11.GL_LIGHTING); + ResourceManager.battery_redd.renderPart("Lights"); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } + +} diff --git a/src/main/java/com/hbm/render/util/BeamPronter.java b/src/main/java/com/hbm/render/util/BeamPronter.java index 27a065534..c13b90d7c 100644 --- a/src/main/java/com/hbm/render/util/BeamPronter.java +++ b/src/main/java/com/hbm/render/util/BeamPronter.java @@ -9,6 +9,8 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; public class BeamPronter { + + public static Random rand = new Random(); public static enum EnumWaveType { RANDOM, SPIRAL @@ -51,7 +53,7 @@ public class BeamPronter { Tessellator tessellator = Tessellator.instance; Vec3 unit = Vec3.createVectorHelper(0, 1, 0); - Random rand = new Random(start); + rand.setSeed(start); double length = skeleton.lengthVector(); double segLength = length / segments; double lastX = 0; diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a4cbb8014..8e3eca98c 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -82,6 +82,7 @@ public class TileMappings { put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); put(TileEntityMachineBattery.class, "tileentity_battery"); put(TileEntityBatterySocket.class, "tileentity_battery_socket"); + put(TileEntityBatteryREDD.class, "tileentity_battery_redd"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner"); put(TileEntityRedBarrel.class, "tileentity_barrel"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 09393dc0a..c270b3828 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -28,8 +28,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; -import api.hbm.block.IDrillInteraction; -import api.hbm.block.IMiningDrill; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; @@ -53,7 +51,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyReceiverMK2, IMiningDrill, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { public long power; public int age = 0; @@ -325,17 +323,6 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen } } - if(normal && b instanceof IDrillInteraction) { - IDrillInteraction in = (IDrillInteraction) b; - ItemStack drop = in.extractResource(worldObj, targetX, targetY, targetZ, meta, this); - - if(drop != null) { - worldObj.spawnEntityInWorld(new EntityItem(worldObj, targetX + 0.5, targetY + 0.5, targetZ + 0.5, drop.copy())); - } - - doesBreak = in.canBreak(worldObj, targetX, targetY, targetZ, meta, this); - } - if(doesBreak) { if(normal) b.dropBlockAsItem(worldObj, targetX, targetY, targetZ, meta, fortune); worldObj.func_147480_a(targetX, targetY, targetZ, false); @@ -464,106 +451,68 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen } public int getRange() { - int range = 1; - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_effect_1) - range += 2; - else if(slots[i].getItem() == ModItems.upgrade_effect_2) - range += 4; - else if(slots[i].getItem() == ModItems.upgrade_effect_3) - range += 6; + if(slots[i].getItem() == ModItems.upgrade_effect_1) range += 2; + else if(slots[i].getItem() == ModItems.upgrade_effect_2) range += 4; + else if(slots[i].getItem() == ModItems.upgrade_effect_3) range += 6; } } - return Math.min(range, 25); } public boolean hasNullifier() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_nullifier) - return true; + if(slots[i].getItem() == ModItems.upgrade_nullifier) return true; } } - return false; } public boolean hasSmelter() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_smelter) - return true; + if(slots[i].getItem() == ModItems.upgrade_smelter) return true; } } - return false; } public boolean hasShredder() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_shredder) - return true; + if(slots[i].getItem() == ModItems.upgrade_shredder) return true; } } - return false; } public boolean hasCentrifuge() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_centrifuge) - return true; + if(slots[i].getItem() == ModItems.upgrade_centrifuge) return true; } } - return false; } public boolean hasCrystallizer() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_crystallizer) - return true; + if(slots[i].getItem() == ModItems.upgrade_crystallizer) return true; } } - return false; } public boolean doesScream() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_screm) - return true; + if(slots[i].getItem() == ModItems.upgrade_screm) return true; } } - return false; } @@ -646,6 +595,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen super.readFromNBT(nbt); tank.readFromNBT(nbt, "oil"); + power = nbt.getLong("power"); isOn = nbt.getBoolean("isOn"); redstonePowered = false; } @@ -655,19 +605,10 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen super.writeToNBT(nbt); tank.writeToNBT(nbt, "oil"); + nbt.setLong("power", power); nbt.setBoolean("isOn", isOn); } - @Override - public DrillType getDrillTier() { - return DrillType.HITECH; - } - - @Override - public int getDrillRating() { - return 100; - } - @Override public FluidTank[] getSendingTanks() { return new FluidTank[] { tank }; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index 3965ea170..dd355a829 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -68,9 +68,13 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I feed.setFill(feed.getFill() - step.amountReq * ops); steam.setFill(steam.getFill() + step.amountProduced * ops); this.heat -= (step.heatReq * ops / TU_PER_DEGREE) * trait.getEfficiency(HeatingType.HEATEXCHANGER); + } else { + feed.setTankType(Fluids.NONE); + steam.setTankType(Fluids.NONE); } } else { + feed.setTankType(Fluids.NONE); steam.setTankType(Fluids.NONE); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java new file mode 100644 index 000000000..34976ac9d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java @@ -0,0 +1,184 @@ +package com.hbm.tileentity.machine.storage; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.uninos.UniNodespace; +import com.hbm.util.EnumUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IBatteryItem; +import api.hbm.energymk2.IEnergyConductorMK2; +import api.hbm.energymk2.IEnergyProviderMK2; +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.energymk2.Nodespace; +import api.hbm.energymk2.Nodespace.PowerNode; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; + +public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { + + public byte lastRedstone = 0; + public long prevPowerState = 0; + + public static final int mode_input = 0; + public static final int mode_buffer = 1; + public static final int mode_output = 2; + public static final int mode_none = 3; + public short redLow = 0; + public short redHigh = 2; + public ConnectionPriority priority = ConnectionPriority.LOW; + + protected PowerNode node; + + public TileEntityBatteryBase(int slotCount) { + super(slotCount); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { + priority = ConnectionPriority.LOW; + } + + if(this.node == null || this.node.expired) { + this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { + case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; + case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; + case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; + case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; + } + + byte comp = this.getComparatorPower(); + if(comp != this.lastRedstone) this.markDirty(); + this.lastRedstone = comp; + + prevPowerState = this.getPower(); + + this.networkPackNT(100); + } + } + + public byte getComparatorPower() { + double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; + return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower + } + + @Override + public PowerNode createNode() { + return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + } + } + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack.getItem() instanceof IBatteryItem; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeShort(redLow); + buf.writeShort(redHigh); + buf.writeByte(priority.ordinal()); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + redLow = buf.readShort(); + redHigh = buf.readShort(); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.redLow = nbt.getShort("redLow"); + this.redHigh = nbt.getShort("redHigh"); + this.lastRedstone = nbt.getByte("lastRedstone"); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("priority")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setShort("redLow", redLow); + nbt.setShort("redHigh", redHigh); + nbt.setByte("lastRedstone", lastRedstone); + nbt.setByte("priority", (byte) this.priority.ordinal()); + } + + @Override public boolean allowDirectProvision() { return false; } + @Override public ConnectionPriority getPriority() { return this.priority; } + + public abstract BlockPos[] getPortPos(); + public abstract DirPos[] getConPos(); + + private short modeCache = 0; + + public short getRelevantMode(boolean useCache) { + if(useCache) return this.modeCache; + boolean powered = false; + for(BlockPos pos : getPortPos()) if(worldObj.isBlockIndirectlyGettingPowered(pos.getX(), pos.getY(), pos.getZ())) { powered = true; break; } + this.modeCache = powered ? this.redHigh : this.redLow; + return this.modeCache; + } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("low")) { + this.redLow++; + if(this.redLow > 3) this.redLow = 0; + } + if(data.hasKey("high")) { + this.redHigh++; + if(this.redHigh > 3) this.redHigh = 0; + } + if(data.hasKey("priority")) { + int ordinal = this.priority.ordinal(); + ordinal++; + if(ordinal > ConnectionPriority.HIGH.ordinal()) ordinal = ConnectionPriority.LOW.ordinal(); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); + } + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java new file mode 100644 index 000000000..06f3d8a8d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -0,0 +1,219 @@ +package com.hbm.tileentity.machine.storage; + +import java.math.BigInteger; + +import com.hbm.inventory.container.ContainerBatteryREDD; +import com.hbm.inventory.gui.GUIBatteryREDD; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityBatteryREDD extends TileEntityBatteryBase { + + public float prevRotation = 0F; + public float rotation = 0F; + + public BigInteger[] log = new BigInteger[20]; + public BigInteger delta = BigInteger.valueOf(0); + + public BigInteger power = BigInteger.valueOf(0); + + private AudioWrapper audio; + + public TileEntityBatteryREDD() { + super(2); + } + + @Override public String getName() { return "container.batteryREDD"; } + + @Override + public void updateEntity() { + BigInteger prevPower = new BigInteger(power.toByteArray()); + + super.updateEntity(); + + if(!worldObj.isRemote) { + + long toAdd = Library.chargeTEFromItems(slots, 0, 0, this.getMaxPower()); + if(toAdd > 0) this.power = this.power.add(BigInteger.valueOf(toAdd)); + + long toRemove = this.getPower() - Library.chargeItemsFromTE(slots, 1, this.getPower(), this.getMaxPower()); + if(toRemove > 0)this.power = this.power.subtract(BigInteger.valueOf(toRemove)); + + // same implementation as for batteries, however retooled to use bigints because fuck + BigInteger avg = this.power.add(prevPower).divide(BigInteger.valueOf(2)); + this.delta = avg.subtract(this.log[0] == null ? BigInteger.ZERO : this.log[0]); + + for(int i = 1; i < this.log.length; i++) { + this.log[i - 1] = this.log[i]; + } + + this.log[19] = avg; + + } else { + this.prevRotation = this.rotation; + this.rotation += this.getSpeed(); + + if(rotation >= 360) { + rotation -= 360; + prevRotation -= 360; + } + + float pitch = 0.5F + this.getSpeed() / 15F * 1.5F; + + if(this.prevRotation != this.rotation && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5) < 50 * 50) { + if(this.audio == null || !this.audio.isPlaying()) { + this.audio = MainRegistry.proxy.getLoopedSound("hbm:block.fensuHum", xCoord, yCoord, zCoord, this.getVolume(1.5F), 25F, pitch, 5); + this.audio.startSound(); + } + this.audio.updatePitch(pitch); + this.audio.keepAlive(); + + } else { + if(this.audio != null) { + this.audio.stopSound(); + this.audio = null; + } + } + } + } + + public float getSpeed() { + return (float) Math.min(Math.pow(Math.log(this.power.doubleValue() * 0.05 + 1) * 0.05F, 5), 15F); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + super.invalidate(); + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + byte[] array0 = this.power.toByteArray(); + buf.writeInt(array0.length); + for(byte b : array0) buf.writeByte(b); + + byte[] array1 = this.delta.toByteArray(); + buf.writeInt(array1.length); + for(byte b : array1) buf.writeByte(b); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + byte[] array0 = new byte[buf.readInt()]; + for(int i = 0 ; i < array0.length; i++) array0[i] = buf.readByte(); + this.power = new BigInteger(array0); + + byte[] array1 = new byte[buf.readInt()]; + for(int i = 0 ; i < array1.length; i++) array1[i] = buf.readByte(); + this.delta = new BigInteger(array1); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.power = new BigInteger(nbt.getByteArray("power")); + + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setByteArray("power", this.power.toByteArray()); + + } + + @Override + public BlockPos[] getPortPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new BlockPos[] { + new BlockPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2), + new BlockPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2), + new BlockPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2), + new BlockPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2), + new BlockPos(xCoord + rot.offsetX * 4, yCoord, zCoord + rot.offsetZ * 4), + new BlockPos(xCoord - rot.offsetX * 4, yCoord, zCoord - rot.offsetZ * 4), + }; + } + + @Override + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 3 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 + rot.offsetZ * 2, dir), + new DirPos(xCoord + dir.offsetX * 3 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 - rot.offsetZ * 2, dir), + new DirPos(xCoord - dir.offsetX * 3 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 3 + rot.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 3 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 3 - rot.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord + rot.offsetX * 5, yCoord, zCoord + rot.offsetZ * 5, rot), + new DirPos(xCoord - rot.offsetX * 5, yCoord, zCoord - rot.offsetZ * 5, rot.getOpposite()), + }; + } + + @Override + public void usePower(long power) { + this.power = this.power.subtract(BigInteger.valueOf(power)); + } + + @Override + public long transferPower(long power) { + this.power = this.power.add(BigInteger.valueOf(power)); + return 0L; + } + + @Override public long getPower() { return this.power.min(BigInteger.valueOf(getMaxPower() / 2)).longValue(); } // for provision + @Override public void setPower(long power) { } // not needed since we use transferPower and usePower directly + @Override public long getMaxPower() { return Long.MAX_VALUE / 100L; } // for connection speed + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatteryREDD(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatteryREDD(player.inventory, this); } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 4, + yCoord, + zCoord - 4, + xCoord + 5, + yCoord + 10, + zCoord + 5 + ); + } + + return bb; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 6538ea15f..329391fc3 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -1,52 +1,26 @@ package com.hbm.tileentity.machine.storage; -import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerBatterySocket; import com.hbm.inventory.gui.GUIBatterySocket; import com.hbm.items.ModItems; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.uninos.UniNodespace; -import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IBatteryItem; -import api.hbm.energymk2.IEnergyConductorMK2; -import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.energymk2.Nodespace; -import api.hbm.energymk2.Nodespace.PowerNode; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityBatterySocket extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { +public class TileEntityBatterySocket extends TileEntityBatteryBase { public long[] log = new long[20]; public long delta = 0; - public byte lastRedstone = 0; - public long prevPowerState = 0; - - public static final int mode_input = 0; - public static final int mode_buffer = 1; - public static final int mode_output = 2; - public static final int mode_none = 3; - public short redLow = 0; - public short redHigh = 2; - public ConnectionPriority priority = ConnectionPriority.LOW; public int renderPack = -1; - - protected PowerNode node; public TileEntityBatterySocket() { super(1); @@ -56,36 +30,12 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE @Override public void updateEntity() { + long prevPower = this.getPower(); + + super.updateEntity(); if(!worldObj.isRemote) { - if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { - priority = ConnectionPriority.LOW; - } - - long prevPower = this.getPower(); - - if(this.node == null || this.node.expired) { - - this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); - - if(this.node == null || this.node.expired) { - this.node = this.createNode(); - UniNodespace.createNode(worldObj, this.node); - } - } - - if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { - case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; - case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; - case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; - case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; - } - - byte comp = this.getComparatorPower(); - if(comp != this.lastRedstone) this.markDirty(); - this.lastRedstone = comp; - long avg = (this.getPower() + prevPower) / 2; this.delta = avg - this.log[0]; @@ -94,31 +44,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE } this.log[19] = avg; - - prevPowerState = this.getPower(); - - this.networkPackNT(100); - } - } - - @Override - public PowerNode createNode() { - return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); - } - - public byte getComparatorPower() { - double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; - return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower - } - - @Override - public void invalidate() { - super.invalidate(); - - if(!worldObj.isRemote) { - if(this.node != null) { - UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); - } } } @@ -130,43 +55,15 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE if(slots[0] != null && slots[0].getItem() == ModItems.battery_pack) { renderPack = slots[0].getItemDamage(); } - buf.writeInt(renderPack); buf.writeLong(delta); - buf.writeShort(redLow); - buf.writeShort(redHigh); - buf.writeByte(priority.ordinal()); } @Override public void deserialize(ByteBuf buf) { super.deserialize(buf); - renderPack = buf.readInt(); delta = buf.readLong(); - redLow = buf.readShort(); - redHigh = buf.readShort(); - priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - - this.redLow = nbt.getShort("redLow"); - this.redHigh = nbt.getShort("redHigh"); - this.lastRedstone = nbt.getByte("lastRedstone"); - this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("priority")); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - - nbt.setShort("redLow", redLow); - nbt.setShort("redHigh", redHigh); - nbt.setByte("lastRedstone", lastRedstone); - nbt.setByte("priority", (byte) this.priority.ordinal()); } @Override @@ -178,11 +75,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return false; } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack) { - return stack.getItem() instanceof IBatteryItem; - } - @Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] {0}; } @Override @@ -203,9 +95,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return ((IBatteryItem) slots[0].getItem()).getMaxCharge(slots[0]); } - @Override public boolean allowDirectProvision() { return false; } - @Override public ConnectionPriority getPriority() { return this.priority; } - @Override public long getProviderSpeed() { if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; int mode = this.getRelevantMode(true); @@ -217,7 +106,8 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE int mode = this.getRelevantMode(true); return mode == mode_input || mode == mode_buffer ? ((IBatteryItem) slots[0].getItem()).getChargeRate(slots[0]) : 0; } - + + @Override public BlockPos[] getPortPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -229,6 +119,7 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE }; } + @Override public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -247,38 +138,8 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE }; } - private short modeCache = 0; - - public short getRelevantMode(boolean useCache) { - if(useCache) return this.modeCache; - boolean powered = false; - for(BlockPos pos : getPortPos()) if(worldObj.isBlockIndirectlyGettingPowered(pos.getX(), pos.getY(), pos.getZ())) { powered = true; break; } - this.modeCache = powered ? this.redHigh : this.redLow; - return this.modeCache; - } - @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatterySocket(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatterySocket(player.inventory, this); } - - @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } - - @Override - public void receiveControl(NBTTagCompound data) { - if(data.hasKey("low")) { - this.redLow++; - if(this.redLow > 3) this.redLow = 0; - } - if(data.hasKey("high")) { - this.redHigh++; - if(this.redHigh > 3) this.redHigh = 0; - } - if(data.hasKey("priority")) { - int ordinal = this.priority.ordinal(); - ordinal++; - if(ordinal > ConnectionPriority.HIGH.ordinal()) ordinal = ConnectionPriority.LOW.ordinal(); - this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); - } - } AxisAlignedBB bb = null; @@ -298,10 +159,4 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return bb; } - - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { - return 65536.0D; - } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b567812b9..f1c8ed61e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -322,6 +322,7 @@ container.autocrafter=Automatische Werkbank container.barrel=Fass container.bat9000=Big-Ass Tank 9000 container.battery=Energiespeicher +container.batteryREDD=FEnSU container.batterySocket=Batteriesockel container.bombMulti=Mehrzweckbombe container.casingBag=Hülsentasche @@ -4056,13 +4057,13 @@ tile.c4.name=C4 tile.cable_detector.name=Redstone-Stromschalter tile.cable_diode.name=Rote Kupferdiode tile.cable_switch.name=Stromschalter -tile.capacitor_bus.name=Kondensator-Bus +tile.capacitor_bus.name=Kondensator-Bus (LEGACY) tile.capacitor_bus.desc=Output für Kondensatoren$Kann in einer geraden Linie aneinandergereit werden -tile.capacitor_copper.name=Kupferkondensator -tile.capacitor_gold.name=Goldkondensator -tile.capacitor_niobium.name=Niobkondensator -tile.capacitor_schrabidate.name=Schrabidatkondensator -tile.capacitor_tantalium.name=Tantalkondensator +tile.capacitor_copper.name=Alter Kondensator +tile.capacitor_gold.name=Goldkondensator (LEGACY) +tile.capacitor_niobium.name=Niobkondensator (LEGACY) +tile.capacitor_schrabidate.name=Schrabidatkondensator (LEGACY) +tile.capacitor_tantalium.name=Tantalkondensator (LEGACY) tile.capacitor.desc=Input: Oben$Output: Unten, über Kondensator-Bus tile.charge_c4.name=Abrissladung tile.charge_dynamite.name=Zeitbombe @@ -4469,8 +4470,9 @@ tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl tile.machine_autosaw.suspended=Angehalten tile.machine_bat9000.name=Big-Ass Tank 9000 -tile.machine_battery.name=Energiespeicherblock -tile.machine_battery_potato.name=Kartoffelbatterieblock +tile.machine_battery.name=Energiespeicherblock (LEGACY) +tile.machine_battery_potato.name=Kartoffelbatterieblock (LEGACY) +tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Batteriesockel tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t @@ -4513,7 +4515,7 @@ tile.machine_difurnace_off.name=Hochofen tile.machine_difurnace_on.name=Hochofen tile.machine_difurnace_rtg_off.name=Atomarer Hochofen tile.machine_difurnace_rtg_on.name=Atomarer Hochofen -tile.machine_dineutronium_battery.name=Spark Energiespeicherblock +tile.machine_dineutronium_battery.name=Spark Energiespeicherblock (LEGACY) tile.machine_drain.name=Ausgussrohr tile.machine_drill.name=Automatischer Minenbohrer tile.machine_electric_furnace_off.name=Elektrischer Ofen @@ -4523,7 +4525,7 @@ tile.machine_epress.name=Hydraulische Presse tile.machine_exposure_chamber.name=Bestrahlungskammer tile.machine_excavator.name=Großer Minenbohrer tile.machine_fel.name=FEL -tile.machine_fensu.name=FEnSU +tile.machine_fensu.name=FEnSU (LEGACY) tile.machine_flare.name=Abfackelturm tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Kraftfeldgenerator @@ -4543,7 +4545,7 @@ tile.machine_intake.name=Lufteinlass tile.machine_keyforge.name=Schlossertisch tile.machine_large_turbine.name=Industrielle Dampfturbine tile.machine_large_turbine.desc=Effizienz: 100%% -tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock +tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock (LEGACY) tile.machine_microwave.name=Mikrowelle tile.machine_mining_laser.name=Bergbaulaser tile.machine_minirtg.name=Radioisotopenzelle @@ -4583,7 +4585,7 @@ tile.machine_rtg_yellow.name=Australium Supergenerator tile.machine_satlinker.name=Satelliten-ID-Manager tile.machine_sawmill.name=Stirling-Sägemühle tile.machine_sawmill.desc=Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Minimalaufnahme: 100 TU/t, Maximalaufnahme: 300 TU/t -tile.machine_schrabidium_battery.name=Schrabidium-Energiespeicherblock +tile.machine_schrabidium_battery.name=Schrabidium-Energiespeicherblock (LEGACY) tile.machine_schrabidium_transmutator.name=Schrabidium-Transmutationsgerät (LEGACY) tile.machine_selenium.name=Hochleistungs-Sternmotor tile.machine_shredder.name=Brecher diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e7414c7e7..d36f37dfd 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -727,6 +727,7 @@ container.autocrafter=Automatic Crafting Table container.barrel=Barrel container.bat9000=Big-Ass Tank 9000 container.battery=Energy Storage +container.batteryREDD=FEnSU container.batterySocket=Battery Socket container.bombMulti=Multi Purpose Bomb container.casingBag=Bullet Casing Bag @@ -5272,13 +5273,13 @@ tile.c4.name=C-4 tile.cable_detector.name=Redstone Power Switch tile.cable_diode.name=Red Copper Diode tile.cable_switch.name=Power Switch -tile.capacitor_bus.name=Capacitor Bus +tile.capacitor_bus.name=Capacitor Bus (LEGACY) tile.capacitor_bus.desc=Output block for capacitors$Can be chained up in a straight line -tile.capacitor_copper.name=Copper Capacitor -tile.capacitor_gold.name=Golden Capacitor -tile.capacitor_niobium.name=Niobium Capacitor -tile.capacitor_schrabidate.name=Schrabidate Capacitor -tile.capacitor_tantalium.name=Tantalum Capacitor +tile.capacitor_copper.name=Old Capacitor +tile.capacitor_gold.name=Golden Capacitor (LEGACY) +tile.capacitor_niobium.name=Niobium Capacitor (LEGACY) +tile.capacitor_schrabidate.name=Schrabidate Capacitor (LEGACY) +tile.capacitor_tantalium.name=Tantalum Capacitor (LEGACY) tile.capacitor.desc=Input: Top$Output: Bottom, via Capacitor Bus tile.charge_c4.name=Demolition Charge tile.charge_dynamite.name=Time Bomb @@ -5730,8 +5731,9 @@ tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 -tile.machine_battery.name=Energy Storage Block -tile.machine_battery_potato.name=Potato Battery Block +tile.machine_battery.name=Energy Storage Block (LEGACY) +tile.machine_battery_potato.name=Potato Battery Block (LEGACY) +tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Battery Socket tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t @@ -5775,7 +5777,7 @@ tile.machine_difurnace_off.name=Blast Furnace tile.machine_difurnace_on.name=Blast Furnace tile.machine_difurnace_rtg_off.name=Nuclear Blast Furnace tile.machine_difurnace_rtg_on.name=Nuclear Blast Furnace -tile.machine_dineutronium_battery.name=Spark Energy Storage Block +tile.machine_dineutronium_battery.name=Spark Energy Storage Block (LEGACY) tile.machine_drain.name=Drainage Pipe tile.machine_drill.name=Automatic Mining Drill tile.machine_electric_furnace_off.name=Electric Furnace @@ -5785,7 +5787,7 @@ tile.machine_epress.name=Electric Press tile.machine_excavator.name=Large Mining Drill tile.machine_exposure_chamber.name=Exposure Chamber tile.machine_fel.name=FEL -tile.machine_fensu.name=FEnSU +tile.machine_fensu.name=FEnSU (LEGACY) tile.machine_flare.name=Flare Stack tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Forcefield Emitter @@ -5808,7 +5810,7 @@ tile.machine_large_turbine.name=Industrial Steam Turbine tile.machine_large_turbine.desc=Efficiency: 100%% tile.machine_liquefactor.name=Industrial Liquefaction Machine tile.machine_liquefactor.desc=Powerful universal machine to turn items into fluids.$Comes with versatile catalytic components, heating elements$and a built-in hydrator for petrochemical liquefaction. -tile.machine_lithium_battery.name=Li-Ion Energy Storage Block +tile.machine_lithium_battery.name=Li-Ion Energy Storage Block (LEGACY) tile.machine_microwave.name=Microwave tile.machine_mining_laser.name=Mining Laser tile.machine_minirtg.name=Radio Isotope Cell @@ -5848,7 +5850,7 @@ tile.machine_rtg_yellow.name=Australium Superfuel Reactor tile.machine_satlinker.name=Satellite ID Manager tile.machine_sawmill.name=Stirling Sawmill tile.machine_sawmill.desc=Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Min intake: 100 TU/t, Max intake: 300 TU/t -tile.machine_schrabidium_battery.name=Schrabidium Energy Storage Block +tile.machine_schrabidium_battery.name=Schrabidium Energy Storage Block (LEGACY) tile.machine_schrabidium_transmutator.name=Schrabidium Transmutation Device (LEGACY) tile.machine_selenium.name=Radial Performance Engine tile.machine_shredder.name=Shredder diff --git a/src/main/resources/assets/hbm/models/machines/fensu2.obj b/src/main/resources/assets/hbm/models/machines/fensu2.obj new file mode 100644 index 000000000..2d6ace3c3 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/fensu2.obj @@ -0,0 +1,6193 @@ +# Blender v2.79 (sub 0) OBJ File: 'fensu2.blend' +# www.blender.org +o Wheel +v 0.500000 5.500000 -4.499998 +v 0.500000 6.377907 -4.413532 +v 0.500000 7.222075 -4.157456 +v 0.500000 8.000065 -3.741611 +v 0.500000 8.681980 -3.181979 +v 0.500000 9.241613 -2.500065 +v 0.500000 9.657457 -1.722075 +v 0.500000 9.913532 -0.877905 +v 0.500000 10.000000 0.000001 +v 0.500000 9.913532 0.877907 +v 0.500000 9.657457 1.722075 +v 0.500000 9.241613 2.500067 +v 0.500000 8.681980 3.181981 +v 0.500000 8.000065 3.741614 +v 0.500000 7.222075 4.157459 +v 0.500000 6.377905 4.413535 +v 0.500000 5.499998 4.500000 +v 0.500000 4.622091 4.413535 +v 0.500000 3.777922 4.157458 +v 0.500000 2.999931 3.741612 +v 0.500000 2.318017 3.181979 +v 0.500000 1.758385 2.500064 +v 0.500000 1.342541 1.722074 +v 0.500000 1.086465 0.877904 +v 0.500000 1.000000 -0.000003 +v 0.500000 1.086467 -0.877910 +v 0.500000 1.342544 -1.722078 +v 0.500000 1.758389 -2.500070 +v 0.500000 2.318023 -3.181983 +v 0.500000 2.999939 -3.741615 +v 0.500000 3.777930 -4.157459 +v 0.500000 4.622100 -4.413533 +v -0.500000 5.500000 -4.499998 +v -0.500000 6.377907 -4.413532 +v -0.500000 7.222075 -4.157456 +v -0.500000 8.000065 -3.741611 +v -0.500000 8.681980 -3.181979 +v -0.500000 9.241613 -2.500065 +v -0.500000 9.657457 -1.722075 +v -0.500000 9.913532 -0.877905 +v -0.500000 10.000000 0.000001 +v -0.500000 9.913532 0.877907 +v -0.500000 9.657457 1.722075 +v -0.500000 9.241613 2.500067 +v -0.500000 8.681980 3.181981 +v -0.500000 8.000065 3.741614 +v -0.500000 7.222075 4.157459 +v -0.500000 6.377905 4.413535 +v -0.500000 5.499998 4.500000 +v -0.500000 4.622091 4.413535 +v -0.500000 3.777922 4.157458 +v -0.500000 2.999931 3.741612 +v -0.500000 2.318017 3.181979 +v -0.500000 1.758385 2.500064 +v -0.500000 1.342541 1.722074 +v -0.500000 1.086465 0.877904 +v -0.500000 1.000000 -0.000003 +v -0.500000 1.086467 -0.877910 +v -0.500000 1.342544 -1.722078 +v -0.500000 1.758389 -2.500070 +v -0.500000 2.318023 -3.181983 +v -0.500000 2.999939 -3.741615 +v -0.500000 3.777930 -4.157459 +v -0.500000 4.622100 -4.413533 +v 0.750000 5.500000 -3.749999 +v 0.750000 6.231590 -3.677944 +v 0.750000 6.935064 -3.464547 +v 0.750000 7.583389 -3.118011 +v 0.750000 8.151649 -2.651649 +v 0.750000 8.618011 -2.083387 +v 0.750000 8.964550 -1.435062 +v 0.750000 9.177946 -0.731588 +v 0.750000 9.250000 0.000000 +v 0.750000 9.177946 0.731588 +v 0.750000 8.964550 1.435062 +v 0.750000 8.618011 2.083388 +v 0.750000 8.151649 2.651650 +v 0.750000 7.583385 3.118011 +v 0.750000 6.935061 3.464549 +v 0.750000 6.231590 3.677945 +v 0.750000 5.500000 3.750000 +v 0.750000 4.768408 3.677945 +v 0.750000 4.064937 3.464548 +v 0.750000 3.416611 3.118011 +v 0.750000 2.848347 2.651649 +v 0.750000 2.381987 2.083386 +v 0.750000 2.035452 1.435061 +v 0.750000 1.822056 0.731586 +v 0.750000 1.750000 -0.000003 +v 0.750000 1.822056 -0.731592 +v 0.750000 2.035452 -1.435066 +v 0.750000 2.381993 -2.083391 +v 0.750000 2.848354 -2.651653 +v 0.750000 3.416615 -3.118013 +v 0.750000 4.064943 -3.464550 +v 0.750000 4.768415 -3.677945 +v 1.250000 5.500000 -3.749999 +v 1.250000 6.231590 -3.677944 +v 1.250000 6.935064 -3.464547 +v 1.250000 7.583389 -3.118011 +v 1.250000 8.151649 -2.651649 +v 1.250000 8.618011 -2.083387 +v 1.250000 8.964550 -1.435062 +v 1.250000 9.177946 -0.731588 +v 1.250000 9.250000 0.000000 +v 1.250000 9.177946 0.731588 +v 1.250000 8.964550 1.435062 +v 1.250000 8.618011 2.083388 +v 1.250000 8.151649 2.651650 +v 1.250000 7.583385 3.118011 +v 1.250000 6.935061 3.464549 +v 1.250000 6.231590 3.677945 +v 1.250000 5.500000 3.750000 +v 1.250000 4.768408 3.677945 +v 1.250000 4.064937 3.464548 +v 1.250000 3.416611 3.118011 +v 1.250000 2.848347 2.651649 +v 1.250000 2.381987 2.083386 +v 1.250000 2.035452 1.435061 +v 1.250000 1.822056 0.731586 +v 1.250000 1.750000 -0.000003 +v 1.250000 1.822056 -0.731592 +v 1.250000 2.035452 -1.435066 +v 1.250000 2.381993 -2.083391 +v 1.250000 2.848354 -2.651653 +v 1.250000 3.416615 -3.118013 +v 1.250000 4.064943 -3.464550 +v 1.250000 4.768415 -3.677945 +v 1.500000 5.500000 -1.000000 +v 1.500000 5.695091 -0.980785 +v 1.500000 5.882685 -0.923880 +v 1.500000 6.055571 -0.831470 +v 1.500000 6.207108 -0.707108 +v 1.500000 6.331470 -0.555571 +v 1.500000 6.423880 -0.382684 +v 1.500000 6.480785 -0.195091 +v 1.500000 6.500000 -0.000001 +v 1.500000 6.480785 0.195089 +v 1.500000 6.423880 0.382683 +v 1.500000 6.331470 0.555570 +v 1.500000 6.207108 0.707107 +v 1.500000 6.055571 0.831469 +v 1.500000 5.882683 0.923879 +v 1.500000 5.695091 0.980784 +v 1.500000 5.500000 0.999999 +v 1.500000 5.304909 0.980784 +v 1.500000 5.117317 0.923879 +v 1.500000 4.944429 0.831469 +v 1.500000 4.792892 0.707106 +v 1.500000 4.668530 0.555569 +v 1.500000 4.576120 0.382682 +v 1.500000 4.519215 0.195089 +v 1.500000 4.500000 -0.000002 +v 1.500000 4.519215 -0.195092 +v 1.500000 4.576120 -0.382685 +v 1.500000 4.668531 -0.555572 +v 1.500000 4.792894 -0.707108 +v 1.500000 4.944431 -0.831470 +v 1.500000 5.117319 -0.923881 +v 1.500000 5.304911 -0.980786 +v -0.750000 5.500000 -3.749999 +v -0.750000 6.231590 -3.677944 +v -0.750000 6.935064 -3.464547 +v -0.750000 7.583389 -3.118011 +v -0.750000 8.151649 -2.651649 +v -0.750000 8.618011 -2.083387 +v -0.750000 8.964550 -1.435062 +v -0.750000 9.177946 -0.731588 +v -0.750000 9.250000 0.000000 +v -0.750000 9.177946 0.731588 +v -0.750000 8.964550 1.435062 +v -0.750000 8.618011 2.083388 +v -0.750000 8.151649 2.651650 +v -0.750000 7.583385 3.118011 +v -0.750000 6.935061 3.464549 +v -0.750000 6.231590 3.677945 +v -0.750000 5.500000 3.750000 +v -0.750000 4.768408 3.677945 +v -0.750000 4.064937 3.464548 +v -0.750000 3.416611 3.118011 +v -0.750000 2.848347 2.651649 +v -0.750000 2.381987 2.083386 +v -0.750000 2.035452 1.435061 +v -0.750000 1.822056 0.731586 +v -0.750000 1.750000 -0.000003 +v -0.750000 1.822056 -0.731592 +v -0.750000 2.035452 -1.435066 +v -0.750000 2.381993 -2.083391 +v -0.750000 2.848354 -2.651653 +v -0.750000 3.416615 -3.118013 +v -0.750000 4.064943 -3.464550 +v -0.750000 4.768415 -3.677945 +v -1.250000 5.500000 -3.749999 +v -1.250000 6.231590 -3.677944 +v -1.250000 6.935064 -3.464547 +v -1.250000 7.583389 -3.118011 +v -1.250000 8.151649 -2.651649 +v -1.250000 8.618011 -2.083387 +v -1.250000 8.964550 -1.435062 +v -1.250000 9.177946 -0.731588 +v -1.250000 9.250000 0.000000 +v -1.250000 9.177946 0.731588 +v -1.250000 8.964550 1.435062 +v -1.250000 8.618011 2.083388 +v -1.250000 8.151649 2.651650 +v -1.250000 7.583385 3.118011 +v -1.250000 6.935061 3.464549 +v -1.250000 6.231590 3.677945 +v -1.250000 5.500000 3.750000 +v -1.250000 4.768408 3.677945 +v -1.250000 4.064937 3.464548 +v -1.250000 3.416611 3.118011 +v -1.250000 2.848347 2.651649 +v -1.250000 2.381987 2.083386 +v -1.250000 2.035452 1.435061 +v -1.250000 1.822056 0.731586 +v -1.250000 1.750000 -0.000003 +v -1.250000 1.822056 -0.731592 +v -1.250000 2.035452 -1.435066 +v -1.250000 2.381993 -2.083391 +v -1.250000 2.848354 -2.651653 +v -1.250000 3.416615 -3.118013 +v -1.250000 4.064943 -3.464550 +v -1.250000 4.768415 -3.677945 +v -1.500000 5.500000 -1.000000 +v -1.500000 5.695091 -0.980785 +v -1.500000 5.882685 -0.923880 +v -1.500000 6.055571 -0.831470 +v -1.500000 6.207108 -0.707108 +v -1.500000 6.331470 -0.555571 +v -1.500000 6.423880 -0.382684 +v -1.500000 6.480785 -0.195091 +v -1.500000 6.500000 -0.000001 +v -1.500000 6.480785 0.195089 +v -1.500000 6.423880 0.382683 +v -1.500000 6.331470 0.555570 +v -1.500000 6.207108 0.707107 +v -1.500000 6.055571 0.831469 +v -1.500000 5.882683 0.923879 +v -1.500000 5.695091 0.980784 +v -1.500000 5.500000 0.999999 +v -1.500000 5.304909 0.980784 +v -1.500000 5.117317 0.923879 +v -1.500000 4.944429 0.831469 +v -1.500000 4.792892 0.707106 +v -1.500000 4.668530 0.555569 +v -1.500000 4.576120 0.382682 +v -1.500000 4.519215 0.195089 +v -1.500000 4.500000 -0.000002 +v -1.500000 4.519215 -0.195092 +v -1.500000 4.576120 -0.382685 +v -1.500000 4.668531 -0.555572 +v -1.500000 4.792894 -0.707108 +v -1.500000 4.944431 -0.831470 +v -1.500000 5.117319 -0.923881 +v -1.500000 5.304911 -0.980786 +v 0.250000 5.500000 -4.499998 +v 0.250000 6.377907 -4.413532 +v 0.250000 7.222075 -4.157456 +v 0.250000 8.000065 -3.741611 +v 0.250000 8.681980 -3.181979 +v 0.250000 9.241613 -2.500065 +v 0.250000 9.657457 -1.722075 +v 0.250000 9.913532 -0.877905 +v 0.250000 10.000000 0.000001 +v 0.250000 9.913532 0.877907 +v 0.250000 9.657457 1.722075 +v 0.250000 9.241613 2.500067 +v 0.250000 8.681980 3.181981 +v 0.250000 8.000065 3.741614 +v 0.250000 7.222075 4.157459 +v 0.250000 6.377905 4.413535 +v 0.250000 5.499998 4.500000 +v 0.250000 4.622091 4.413535 +v 0.250000 3.777922 4.157458 +v 0.250000 2.999931 3.741612 +v 0.250000 2.318017 3.181979 +v 0.250000 1.758385 2.500064 +v 0.250000 1.342541 1.722074 +v 0.250000 1.086465 0.877904 +v 0.250000 1.000000 -0.000003 +v 0.250000 1.086467 -0.877910 +v 0.250000 1.342544 -1.722078 +v 0.250000 1.758389 -2.500070 +v 0.250000 2.318023 -3.181983 +v 0.250000 2.999939 -3.741615 +v 0.250000 3.777930 -4.157459 +v 0.250000 4.622100 -4.413533 +v -0.250000 5.500000 -4.499998 +v -0.250000 6.377907 -4.413532 +v -0.250000 7.222075 -4.157456 +v -0.250000 8.000065 -3.741611 +v -0.250000 8.681980 -3.181979 +v -0.250000 9.241613 -2.500065 +v -0.250000 9.657457 -1.722075 +v -0.250000 9.913532 -0.877905 +v -0.250000 10.000000 0.000001 +v -0.250000 9.913532 0.877907 +v -0.250000 9.657457 1.722075 +v -0.250000 9.241613 2.500067 +v -0.250000 8.681980 3.181981 +v -0.250000 8.000065 3.741614 +v -0.250000 7.222075 4.157459 +v -0.250000 6.377905 4.413535 +v -0.250000 5.499998 4.500000 +v -0.250000 4.622091 4.413535 +v -0.250000 3.777922 4.157458 +v -0.250000 2.999931 3.741612 +v -0.250000 2.318017 3.181979 +v -0.250000 1.758385 2.500064 +v -0.250000 1.342541 1.722074 +v -0.250000 1.086465 0.877904 +v -0.250000 1.000000 -0.000003 +v -0.250000 1.086467 -0.877910 +v -0.250000 1.342544 -1.722078 +v -0.250000 1.758389 -2.500070 +v -0.250000 2.318023 -3.181983 +v -0.250000 2.999939 -3.741615 +v -0.250000 3.777930 -4.157459 +v -0.250000 4.622100 -4.413533 +v 0.249999 5.500000 -3.999999 +v 0.249999 6.280361 -3.923140 +v 0.249999 7.030735 -3.695517 +v 0.249999 7.722279 -3.325878 +v 0.249999 8.328426 -2.828426 +v 0.249999 8.825878 -2.222281 +v 0.249999 9.195518 -1.530733 +v 0.249999 9.423141 -0.780361 +v 0.249999 9.500000 0.000000 +v 0.249999 9.423141 0.780361 +v 0.249999 9.195518 1.530734 +v 0.249999 8.825878 2.222281 +v 0.249999 8.328426 2.828427 +v 0.249999 7.722279 3.325879 +v 0.249999 7.030731 3.695519 +v 0.249999 6.280361 3.923141 +v 0.249999 5.500000 4.000000 +v 0.249999 4.719635 3.923141 +v 0.249999 3.969265 3.695518 +v 0.249999 3.277718 3.325878 +v 0.249999 2.671570 2.828426 +v 0.249999 2.174118 2.222279 +v 0.249999 1.804482 1.530731 +v 0.249999 1.576859 0.780358 +v 0.249999 1.500000 -0.000003 +v 0.249999 1.576859 -0.780365 +v 0.249999 1.804485 -1.530737 +v 0.249999 2.174122 -2.222284 +v 0.249999 2.671577 -2.828430 +v 0.249999 3.277721 -3.325880 +v 0.249999 3.969273 -3.695519 +v 0.249999 4.719643 -3.923141 +v -0.250001 5.500000 -3.999999 +v -0.250001 6.280361 -3.923140 +v -0.250001 7.030735 -3.695517 +v -0.250001 7.722279 -3.325878 +v -0.250001 8.328426 -2.828426 +v -0.250001 8.825878 -2.222281 +v -0.250001 9.195518 -1.530733 +v -0.250001 9.423141 -0.780361 +v -0.250001 9.500000 0.000000 +v -0.250001 9.423141 0.780361 +v -0.250001 9.195518 1.530734 +v -0.250001 8.825878 2.222281 +v -0.250001 8.328426 2.828427 +v -0.250001 7.722279 3.325879 +v -0.250001 7.030731 3.695519 +v -0.250001 6.280361 3.923141 +v -0.250001 5.500000 4.000000 +v -0.250001 4.719635 3.923141 +v -0.250001 3.969265 3.695518 +v -0.250001 3.277718 3.325878 +v -0.250001 2.671570 2.828426 +v -0.250001 2.174118 2.222279 +v -0.250001 1.804482 1.530731 +v -0.250001 1.576859 0.780358 +v -0.250001 1.500000 -0.000003 +v -0.250001 1.576859 -0.780365 +v -0.250001 1.804485 -1.530737 +v -0.250001 2.174122 -2.222284 +v -0.250001 2.671577 -2.828430 +v -0.250001 3.277721 -3.325880 +v -0.250001 3.969273 -3.695519 +v -0.250001 4.719643 -3.923141 +v -0.500000 5.750001 3.625001 +v -0.500000 5.250002 3.625001 +v -0.500000 5.750001 4.375002 +v -0.500000 5.250002 4.375002 +v -1.000000 5.750001 3.625001 +v -1.000000 5.250001 3.625001 +v -1.000000 5.750001 4.125002 +v -1.000000 5.250001 4.125002 +v -1.000000 5.750001 -4.125000 +v -1.000000 5.250001 -4.125000 +v -1.000000 5.750001 -3.624999 +v -1.000000 5.250001 -3.624999 +v -0.500000 5.750000 -4.375000 +v -0.500000 5.250001 -4.375000 +v -0.500000 5.750000 -3.624999 +v -0.500000 5.250001 -3.624999 +v -0.500000 1.875001 0.250001 +v -0.500000 1.875001 -0.249998 +v -0.500000 1.125000 0.250001 +v -0.500000 1.125000 -0.249998 +v -1.000000 1.875001 0.250001 +v -1.000000 1.875001 -0.249999 +v -1.000000 1.375000 0.250001 +v -1.000000 1.375000 -0.249999 +v -1.000000 9.625002 0.250001 +v -1.000000 9.625002 -0.249999 +v -1.000000 9.125001 0.250001 +v -1.000000 9.125001 -0.249999 +v -0.500000 9.875002 0.250000 +v -0.500000 9.875002 -0.249999 +v -0.500000 9.125001 0.250000 +v -0.500000 9.125001 -0.249999 +v -0.250000 9.937502 0.062502 +v -0.250000 9.937502 -0.062498 +v -0.250000 9.812502 0.062502 +v -0.250000 9.812502 -0.062498 +v 0.250000 9.937502 0.062502 +v 0.250000 9.937502 -0.062498 +v 0.250000 9.812502 0.062502 +v 0.250000 9.812502 -0.062498 +v -0.250000 1.062499 -0.062500 +v -0.250000 1.062499 0.062500 +v -0.250000 1.187499 -0.062500 +v -0.250000 1.187499 0.062500 +v 0.250000 1.062499 -0.062500 +v 0.250000 1.062499 0.062500 +v 0.250000 1.187499 -0.062500 +v 0.250000 1.187499 0.062500 +v -0.250000 5.437500 4.437502 +v -0.250000 5.562500 4.437502 +v -0.250000 5.437500 4.312502 +v -0.250000 5.562500 4.312502 +v 0.250000 5.437500 4.437502 +v 0.250000 5.562500 4.437502 +v 0.250000 5.437500 4.312502 +v 0.250000 5.562500 4.312502 +v -0.250000 5.562502 -4.437500 +v -0.250000 5.437502 -4.437500 +v -0.250000 5.562502 -4.312500 +v -0.250000 5.437502 -4.312500 +v 0.250000 5.562502 -4.437500 +v 0.250000 5.437502 -4.437500 +v 0.250000 5.562502 -4.312500 +v 0.250000 5.437502 -4.312500 +v -0.250000 8.593593 3.181983 +v -0.250000 8.681981 3.093595 +v -0.250000 8.505204 3.093595 +v -0.250000 8.593593 3.005206 +v 0.250000 8.593593 3.181983 +v 0.250000 8.681981 3.093595 +v 0.250000 8.505204 3.093595 +v 0.250000 8.593593 3.005206 +v -0.250000 2.406408 -3.181982 +v -0.250000 2.318020 -3.093593 +v -0.250000 2.494797 -3.093593 +v -0.250000 2.406408 -3.005205 +v 0.250000 2.406408 -3.181982 +v 0.250000 2.318020 -3.093593 +v 0.250000 2.494797 -3.093593 +v 0.250000 2.406408 -3.005205 +v -0.250000 2.318018 3.093593 +v -0.250000 2.406407 3.181982 +v -0.250000 2.406407 3.005205 +v -0.250000 2.494795 3.093593 +v 0.250000 2.318018 3.093593 +v 0.250000 2.406407 3.181982 +v 0.250000 2.406407 3.005205 +v 0.250000 2.494795 3.093593 +v -0.250000 8.681983 -3.093591 +v -0.250000 8.593595 -3.181980 +v -0.250000 8.593595 -3.005203 +v -0.250000 8.505206 -3.093591 +v 0.250000 8.681983 -3.093591 +v 0.250000 8.593595 -3.181980 +v 0.250000 8.593595 -3.005203 +v 0.250000 8.505206 -3.093591 +v -0.250000 7.140415 4.123636 +v -0.250000 7.255900 4.075800 +v -0.250000 7.092579 4.008151 +v -0.250000 7.208065 3.960315 +v 0.250000 7.140415 4.123636 +v 0.250000 7.255900 4.075800 +v 0.250000 7.092579 4.008151 +v 0.250000 7.208065 3.960315 +v -0.250000 3.859586 -4.123634 +v -0.250000 3.744101 -4.075799 +v -0.250000 3.907422 -4.008149 +v -0.250000 3.791937 -3.960313 +v 0.250000 3.859586 -4.123634 +v 0.250000 3.744101 -4.075799 +v 0.250000 3.907422 -4.008149 +v 0.250000 3.791937 -3.960313 +v -0.250000 1.376366 1.640416 +v -0.250000 1.424201 1.755901 +v -0.250000 1.491850 1.592580 +v -0.250000 1.539686 1.708065 +v 0.250000 1.376366 1.640416 +v 0.250000 1.424201 1.755901 +v 0.250000 1.491850 1.592580 +v 0.250000 1.539686 1.708065 +v -0.250000 9.623635 -1.640413 +v -0.250000 9.575800 -1.755898 +v -0.250000 9.508150 -1.592578 +v -0.250000 9.460315 -1.708063 +v 0.250000 9.623635 -1.640413 +v 0.250000 9.575800 -1.755898 +v 0.250000 9.508150 -1.592578 +v 0.250000 9.460315 -1.708063 +v -0.250000 3.744098 4.075799 +v -0.250000 3.859583 4.123635 +v -0.250000 3.791934 3.960314 +v -0.250000 3.907419 4.008150 +v 0.250000 3.744098 4.075799 +v 0.250000 3.859583 4.123635 +v 0.250000 3.791934 3.960314 +v 0.250000 3.907419 4.008150 +v -0.250000 7.255903 -4.075797 +v -0.250000 7.140418 -4.123633 +v -0.250000 7.208067 -3.960312 +v -0.250000 7.092582 -4.008147 +v 0.250000 7.255903 -4.075797 +v 0.250000 7.140418 -4.123633 +v 0.250000 7.208067 -3.960312 +v 0.250000 7.092582 -4.008147 +v -0.250000 1.424202 -1.755901 +v -0.250000 1.376367 -1.640416 +v -0.250000 1.539687 -1.708066 +v -0.250000 1.491852 -1.592580 +v 0.250000 1.424202 -1.755901 +v 0.250000 1.376367 -1.640416 +v 0.250000 1.539687 -1.708066 +v 0.250000 1.491852 -1.592580 +v -0.250000 9.575798 1.755903 +v -0.250000 9.623634 1.640418 +v -0.250000 9.460314 1.708067 +v -0.250000 9.508148 1.592582 +v 0.250000 9.575798 1.755903 +v 0.250000 9.623634 1.640418 +v 0.250000 9.460314 1.708067 +v 0.250000 9.508148 1.592582 +v -0.500000 3.113516 2.740040 +v -0.500000 2.759963 2.386487 +v -0.500000 2.583185 3.270370 +v -0.500000 2.229632 2.916818 +v -1.000000 3.113516 2.740040 +v -1.000000 2.759962 2.386486 +v -1.000000 2.759962 3.093594 +v -1.000000 2.406408 2.740040 +v -1.000000 8.593594 -2.740038 +v -1.000000 8.240041 -3.093591 +v -1.000000 8.240040 -2.386484 +v -1.000000 7.886487 -2.740037 +v -0.500000 8.770370 -2.916816 +v -0.500000 8.416818 -3.270368 +v -0.500000 8.240040 -2.386485 +v -0.500000 7.886487 -2.740037 +v -0.500000 2.759963 -2.386485 +v -0.500000 3.113515 -2.740037 +v -0.500000 2.229632 -2.916816 +v -0.500000 2.583184 -3.270368 +v -1.000000 2.759963 -2.386485 +v -1.000000 3.113516 -2.740038 +v -1.000000 2.406409 -2.740039 +v -1.000000 2.759962 -3.093592 +v -1.000000 8.240040 3.093594 +v -1.000000 8.593594 2.740040 +v -1.000000 7.886486 2.740040 +v -1.000000 8.240040 2.386486 +v -0.500000 8.416818 3.270370 +v -0.500000 8.770370 2.916817 +v -0.500000 7.886487 2.740039 +v -0.500000 8.240040 2.386486 +v 0.500000 5.750001 -3.625001 +v 0.500000 5.250002 -3.625001 +v 0.500000 5.750001 -4.375002 +v 0.500000 5.250002 -4.375002 +v 1.000000 5.750001 -3.625001 +v 1.000000 5.250001 -3.625001 +v 1.000000 5.750001 -4.125002 +v 1.000000 5.250001 -4.125002 +v 1.000000 5.750001 4.125000 +v 1.000000 5.250001 4.125000 +v 1.000000 5.750001 3.624999 +v 1.000000 5.250001 3.624999 +v 0.500000 5.750000 4.375000 +v 0.500000 5.250001 4.375000 +v 0.500000 5.750000 3.624999 +v 0.500000 5.250001 3.624999 +v 0.500000 1.875001 -0.250001 +v 0.500000 1.875001 0.249998 +v 0.500000 1.125000 -0.250001 +v 0.500000 1.125000 0.249998 +v 1.000000 1.875001 -0.250001 +v 1.000000 1.875001 0.249999 +v 1.000000 1.375000 -0.250001 +v 1.000000 1.375000 0.249999 +v 1.000000 9.625002 -0.250001 +v 1.000000 9.625002 0.249999 +v 1.000000 9.125001 -0.250001 +v 1.000000 9.125001 0.249999 +v 0.500000 9.875002 -0.250000 +v 0.500000 9.875002 0.249999 +v 0.500000 9.125001 -0.250000 +v 0.500000 9.125001 0.249999 +v 0.500000 3.113516 -2.740040 +v 0.500000 2.759963 -2.386487 +v 0.500000 2.583185 -3.270370 +v 0.500000 2.229632 -2.916818 +v 1.000000 3.113516 -2.740040 +v 1.000000 2.759962 -2.386486 +v 1.000000 2.759962 -3.093594 +v 1.000000 2.406408 -2.740040 +v 1.000000 8.593594 2.740038 +v 1.000000 8.240041 3.093591 +v 1.000000 8.240040 2.386484 +v 1.000000 7.886487 2.740037 +v 0.500000 8.770370 2.916816 +v 0.500000 8.416818 3.270368 +v 0.500000 8.240040 2.386485 +v 0.500000 7.886487 2.740037 +v 0.500000 2.759963 2.386485 +v 0.500000 3.113515 2.740037 +v 0.500000 2.229632 2.916816 +v 0.500000 2.583184 3.270368 +v 1.000000 2.759963 2.386485 +v 1.000000 3.113516 2.740038 +v 1.000000 2.406409 2.740039 +v 1.000000 2.759962 3.093592 +v 1.000000 8.240040 -3.093594 +v 1.000000 8.593594 -2.740040 +v 1.000000 7.886486 -2.740040 +v 1.000000 8.240040 -2.386486 +v 0.499999 8.416818 -3.270370 +v 0.500000 8.770370 -2.916817 +v 0.500000 7.886487 -2.740039 +v 0.500000 8.240040 -2.386486 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.428571 0.671642 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.687500 0.238806 +vt 0.656250 0.253731 +vt 0.656250 0.238806 +vt 0.281250 0.238806 +vt 0.250000 0.253731 +vt 0.250000 0.238806 +vt 0.125000 0.238806 +vt 0.093750 0.253731 +vt 0.093750 0.238806 +vt 0.718750 0.238806 +vt 0.687500 0.253731 +vt 0.312500 0.238806 +vt 0.281250 0.253731 +vt 0.156250 0.238806 +vt 0.125000 0.253731 +vt 0.750000 0.253731 +vt 0.718750 0.253731 +vt 0.343750 0.253731 +vt 0.312500 0.253731 +vt 0.187500 0.253731 +vt 0.156250 0.253731 +vt 0.750000 0.238806 +vt 0.781250 0.253731 +vt 0.375000 0.238806 +vt 0.343750 0.238806 +vt 0.218750 0.238806 +vt 0.187500 0.238806 +vt 0.812500 0.238806 +vt 0.781250 0.238806 +vt 0.406250 0.238806 +vt 0.375000 0.253731 +vt 0.218750 0.253731 +vt 0.843750 0.238806 +vt 0.812500 0.253731 +vt 0.437500 0.238806 +vt 0.406250 0.253731 +vt 0.875000 0.238806 +vt 0.843750 0.253731 +vt 0.468750 0.238806 +vt 0.437500 0.253731 +vt 0.906250 0.238806 +vt 0.875000 0.253731 +vt 0.500000 0.238806 +vt 0.468750 0.253731 +vt 0.937500 0.238806 +vt 0.906250 0.253731 +vt 0.531250 0.238806 +vt 0.500000 0.253731 +vt 0.968750 0.238806 +vt 0.937500 0.253731 +vt 0.562500 0.238806 +vt 0.531250 0.253731 +vt 1.000000 0.238806 +vt 0.968750 0.253731 +vt 0.593750 0.238806 +vt 0.562500 0.253731 +vt 0.031250 0.238806 +vt 0.000000 0.253731 +vt 0.000000 0.238806 +vt 0.625000 0.238806 +vt 0.593750 0.253731 +vt 0.062500 0.238806 +vt 0.031250 0.253731 +vt 0.625000 0.253731 +vt 0.062500 0.253731 +vt 0.218750 0.194030 +vt 0.183036 0.194030 +vt 0.156250 0.194030 +vt 0.093750 0.194030 +vt 0.120536 0.194030 +vt 0.058036 0.194030 +vt 0.004464 0.194030 +vt 0.031250 0.194030 +vt 0.968750 0.194030 +vt 0.995536 0.194030 +vt 0.941964 0.194030 +vt 0.906250 0.194030 +vt 0.933036 0.194030 +vt 0.870536 0.194030 +vt 0.843750 0.194030 +vt 0.781250 0.194030 +vt 0.808036 0.194030 +vt 0.754464 0.194030 +vt 0.745536 0.194030 +vt 0.718750 0.194030 +vt 0.656250 0.194030 +vt 0.683036 0.194030 +vt 0.629464 0.194030 +vt 0.620536 0.194030 +vt 0.593750 0.194030 +vt 0.531250 0.194030 +vt 0.558036 0.194030 +vt 0.504464 0.194030 +vt 0.495536 0.194030 +vt 0.468750 0.194030 +vt 0.433036 0.194030 +vt 0.406250 0.194030 +vt 0.370536 0.194030 +vt 0.343750 0.194030 +vt 0.308036 0.194030 +vt 0.254464 0.194030 +vt 0.281250 0.194030 +vt 0.245536 0.194030 +vt 0.745536 0.164179 +vt 0.129464 0.194030 +vt 0.156250 0.164179 +vt 0.308036 0.164179 +vt 0.691964 0.194030 +vt 0.718750 0.164179 +vt 0.120536 0.164179 +vt 0.281250 0.164179 +vt 0.683036 0.164179 +vt 0.066964 0.194030 +vt 0.093750 0.164179 +vt 0.629464 0.164179 +vt 0.656250 0.164179 +vt 0.058036 0.164179 +vt 0.620536 0.164179 +vt 0.031250 0.164179 +vt 0.566964 0.194030 +vt 0.593750 0.164179 +vt 0.995536 0.164179 +vt 0.558036 0.164179 +vt 0.968750 0.164179 +vt 0.531250 0.164179 +vt 0.933036 0.164179 +vt 0.495536 0.164179 +vt 0.879464 0.194030 +vt 0.906250 0.164179 +vt 0.441964 0.194030 +vt 0.468750 0.164179 +vt 0.843750 0.164179 +vt 0.870536 0.164179 +vt 0.433036 0.164179 +vt 0.816964 0.194030 +vt 0.245536 0.164179 +vt 0.379464 0.194030 +vt 0.406250 0.164179 +vt 0.808036 0.164179 +vt 0.191964 0.194030 +vt 0.218750 0.164179 +vt 0.370536 0.164179 +vt 0.781250 0.164179 +vt 0.183036 0.164179 +vt 0.316964 0.194030 +vt 0.343750 0.164179 +vt 0.191964 0.164179 +vt 0.218750 0.000000 +vt 0.156250 0.000000 +vt 0.162946 -0.000000 +vt 0.129464 0.164179 +vt 0.100446 -0.000000 +vt 0.087054 -0.000000 +vt 0.093750 0.000000 +vt 0.031250 -0.000000 +vt 0.037946 -0.000000 +vt 0.004464 0.164179 +vt 0.968750 0.000000 +vt 0.975446 0.000000 +vt 0.941964 0.164179 +vt 0.906250 -0.000000 +vt 0.912946 -0.000000 +vt 0.899554 -0.000000 +vt 0.850446 0.000000 +vt 0.837054 0.000000 +vt 0.843750 0.000000 +vt 0.781250 0.000000 +vt 0.787946 -0.000000 +vt 0.774554 -0.000000 +vt 0.718750 0.000000 +vt 0.725446 -0.000000 +vt 0.691964 0.164179 +vt 0.656250 -0.000000 +vt 0.662946 -0.000000 +vt 0.649554 -0.000000 +vt 0.600446 0.000000 +vt 0.566964 0.164179 +vt 0.593750 -0.000000 +vt 0.531250 0.000000 +vt 0.537946 -0.000000 +vt 0.504464 0.164179 +vt 0.468750 0.000000 +vt 0.475446 -0.000000 +vt 0.462054 -0.000000 +vt 0.412946 0.000000 +vt 0.399554 -0.000000 +vt 0.406250 -0.000000 +vt 0.343750 0.000000 +vt 0.350446 -0.000000 +vt 0.316964 0.164179 +vt 0.281250 0.000000 +vt 0.287946 -0.000000 +vt 0.254464 0.164179 +vt 0.225446 -0.000000 +vt 0.062500 0.238806 +vt 0.093750 0.194030 +vt 0.093750 0.238806 +vt 0.031250 0.238806 +vt 0.058036 0.194030 +vt -0.000000 0.238806 +vt 0.031250 0.194030 +vt 0.968750 0.238806 +vt 0.995536 0.194030 +vt 1.000000 0.238806 +vt 0.941964 0.194030 +vt 0.937500 0.238806 +vt 0.906250 0.238806 +vt 0.933036 0.194030 +vt 0.875000 0.238806 +vt 0.906250 0.194030 +vt 0.843750 0.194030 +vt 0.843750 0.238806 +vt 0.816964 0.194030 +vt 0.812500 0.238806 +vt 0.781250 0.194030 +vt 0.781250 0.238806 +vt 0.754464 0.194030 +vt 0.750000 0.238806 +vt 0.718750 0.238806 +vt 0.745536 0.194030 +vt 0.691964 0.194030 +vt 0.687500 0.238806 +vt 0.656250 0.194030 +vt 0.656250 0.238806 +vt 0.629464 0.194030 +vt 0.625000 0.238806 +vt 0.593750 0.194030 +vt 0.593750 0.238806 +vt 0.566964 0.194030 +vt 0.562500 0.238806 +vt 0.531250 0.194030 +vt 0.531250 0.238806 +vt 0.504464 0.194030 +vt 0.500000 0.238806 +vt 0.468750 0.238806 +vt 0.495536 0.194030 +vt 0.441964 0.194030 +vt 0.437500 0.238806 +vt 0.406250 0.194030 +vt 0.406250 0.238806 +vt 0.379464 0.194030 +vt 0.375000 0.238806 +vt 0.343750 0.238806 +vt 0.370536 0.194030 +vt 0.312500 0.238806 +vt 0.343750 0.194030 +vt 0.281250 0.194030 +vt 0.281250 0.238806 +vt 0.250000 0.238806 +vt 0.218750 0.238806 +vt 0.245536 0.194030 +vt 0.187500 0.238806 +vt 0.218750 0.194030 +vt 0.156250 0.194030 +vt 0.156250 0.238806 +vt 0.131315 0.193995 +vt 0.125000 0.238806 +vt 0.066964 0.164179 +vt 0.066964 0.194030 +vt 0.093750 0.164179 +vt 0.120536 0.194030 +vt 0.129464 0.164179 +vt 0.156250 0.164179 +vt 0.183036 0.194030 +vt 0.191964 0.164179 +vt 0.191964 0.194030 +vt 0.218750 0.164179 +vt 0.254464 0.164179 +vt 0.254464 0.194030 +vt 0.281250 0.164179 +vt 0.308036 0.194030 +vt 0.316964 0.164179 +vt 0.316964 0.194030 +vt 0.343750 0.164179 +vt 0.379464 0.164179 +vt 0.406250 0.164179 +vt 0.433036 0.194030 +vt 0.441964 0.164179 +vt 0.468750 0.194030 +vt 0.468750 0.164179 +vt 0.504464 0.164179 +vt 0.531250 0.164179 +vt 0.558036 0.194030 +vt 0.566964 0.164179 +vt 0.593750 0.164179 +vt 0.620536 0.194030 +vt 0.656250 0.164179 +vt 0.683036 0.194030 +vt 0.691964 0.164179 +vt 0.718750 0.194030 +vt 0.718750 0.164179 +vt 0.754464 0.164179 +vt 0.781250 0.164179 +vt 0.808036 0.194030 +vt 0.816964 0.164179 +vt 0.870536 0.164179 +vt 0.870536 0.194030 +vt 0.879464 0.164179 +vt 0.879464 0.194030 +vt 0.906250 0.164179 +vt 0.941964 0.164179 +vt 0.968750 0.194030 +vt 0.968750 0.164179 +vt 0.004464 0.164179 +vt 0.004464 0.194030 +vt 0.031250 0.164179 +vt 0.462054 -0.000000 +vt 0.406250 0.000000 +vt 0.433036 0.164179 +vt 0.350446 -0.000000 +vt 0.370536 0.164179 +vt 0.337054 0.000000 +vt 0.281250 0.000000 +vt 0.308036 0.164179 +vt 0.274554 -0.000000 +vt 0.218750 -0.000000 +vt 0.245536 0.164179 +vt 0.162946 -0.000000 +vt 0.183036 0.164179 +vt 0.149554 0.000000 +vt 0.093750 0.000000 +vt 0.120536 0.164179 +vt 0.031250 -0.000000 +vt 0.058036 0.164179 +vt 0.968750 -0.000000 +vt 0.995536 0.164179 +vt 0.962054 -0.000000 +vt 0.912946 -0.000000 +vt 0.933036 0.164179 +vt 0.899554 -0.000000 +vt 0.843750 0.000000 +vt 0.843750 0.164179 +vt 0.781250 0.000000 +vt 0.808036 0.164179 +vt 0.774554 -0.000000 +vt 0.718750 0.000000 +vt 0.745536 0.164179 +vt 0.656250 0.000000 +vt 0.683036 0.164179 +vt 0.649554 -0.000000 +vt 0.629464 0.164179 +vt 0.593750 -0.000000 +vt 0.620536 0.164179 +vt 0.587054 -0.000000 +vt 0.537946 0.000000 +vt 0.558036 0.164179 +vt 0.531250 0.000000 +vt 0.468750 -0.000000 +vt 0.495536 0.164179 +vt 0.156250 0.253731 +vt 0.750000 0.253731 +vt 0.593750 0.253731 +vt 0.218750 0.253731 +vt 0.187500 0.253731 +vt 0.781250 0.253731 +vt 0.625000 0.253731 +vt 0.843750 0.253731 +vt 0.812500 0.253731 +vt 0.687500 0.253731 +vt 0.656250 0.253731 +vt 0.281250 0.253731 +vt 0.250000 0.253731 +vt 0.875000 0.253731 +vt 0.718750 0.253731 +vt 0.312500 0.253731 +vt 0.906250 0.253731 +vt 0.375000 0.253731 +vt 0.343750 0.253731 +vt 0.937500 0.253731 +vt 0.968750 0.253731 +vt 0.406250 0.253731 +vt -0.000000 0.253731 +vt 0.437500 0.253731 +vt 0.031250 0.253731 +vt 0.468750 0.253731 +vt 0.062500 0.253731 +vt 0.500000 0.253731 +vt 0.093750 0.253731 +vt 0.531250 0.253731 +vt 0.125000 0.253731 +vt 0.562500 0.253731 +vt 0.093750 0.283582 +vt 0.066964 0.283582 +vt 0.031250 0.283582 +vt 0.004464 0.283582 +vt 1.000000 0.253731 +vt 0.968750 0.283582 +vt 0.941964 0.283582 +vt 0.933036 0.283582 +vt 0.906250 0.283582 +vt 0.870536 0.283582 +vt 0.843750 0.283582 +vt 0.781250 0.283582 +vt 0.754464 0.283582 +vt 0.718750 0.283582 +vt 0.656250 0.283582 +vt 0.629464 0.283582 +vt 0.620536 0.283582 +vt 0.593750 0.283582 +vt 0.558036 0.283582 +vt 0.531250 0.283582 +vt 0.495536 0.283582 +vt 0.468750 0.283582 +vt 0.406250 0.283582 +vt 0.343750 0.283582 +vt 0.281250 0.283582 +vt 0.254464 0.283582 +vt 0.218750 0.283582 +vt 0.183036 0.283582 +vt 0.129464 0.283582 +vt 0.919643 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.973214 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.373134 +vt 0.973214 0.343284 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.906250 0.283582 +vt 0.879464 0.283582 +vt 0.933036 0.283582 +vt 0.968750 0.283582 +vt 0.941964 0.283582 +vt 0.995536 0.283582 +vt 0.031250 0.283582 +vt 0.004464 0.283582 +vt 0.058036 0.283582 +vt 0.093750 0.283582 +vt 0.066964 0.283582 +vt 0.129464 0.283582 +vt 0.156250 0.283582 +vt 0.191964 0.283582 +vt 0.245536 0.283582 +vt 0.218750 0.283582 +vt 0.281250 0.283582 +vt 0.254464 0.283582 +vt 0.343750 0.283582 +vt 0.316964 0.283582 +vt 0.370536 0.283582 +vt 0.379464 0.283582 +vt 0.406250 0.283582 +vt 0.441964 0.283582 +vt 0.468750 0.283582 +vt 0.504464 0.283582 +vt 0.531250 0.283582 +vt 0.593750 0.283582 +vt 0.566964 0.283582 +vt 0.656250 0.283582 +vt 0.629464 0.283582 +vt 0.718750 0.283582 +vt 0.691964 0.283582 +vt 0.745536 0.283582 +vt 0.781250 0.283582 +vt 0.754464 0.283582 +vt 0.816964 0.283582 +vt 0.870536 0.283582 +vt 0.843750 0.283582 +vt 0.066964 0.164179 +vt 0.879464 0.164179 +vt 0.441964 0.164179 +vt 0.816964 0.164179 +vt 0.379464 0.164179 +vt 0.754464 0.164179 +vt 0.212054 0.000000 +vt 0.149554 -0.000000 +vt 0.024554 -0.000000 +vt 0.962054 -0.000000 +vt 0.712054 -0.000000 +vt 0.587054 -0.000000 +vt 0.524554 -0.000000 +vt 0.337054 -0.000000 +vt 0.274554 -0.000000 +vt 0.412946 -0.000000 +vt 0.399554 -0.000000 +vt 0.343750 0.000000 +vt 0.287946 -0.000000 +vt 0.225446 -0.000000 +vt 0.212054 0.000000 +vt 0.156250 0.000000 +vt 0.100446 0.000000 +vt 0.087054 -0.000000 +vt 0.037946 0.000000 +vt 0.024554 -0.000000 +vt 0.975446 -0.000000 +vt 0.906250 0.000000 +vt 0.850446 -0.000000 +vt 0.837054 -0.000000 +vt 0.787946 0.000000 +vt 0.725446 0.000000 +vt 0.712054 0.000000 +vt 0.662946 -0.000000 +vt 0.600446 0.000000 +vt 0.524554 0.000000 +vt 0.475446 -0.000000 +vt 1.000000 0.253731 +vt 0.120536 0.283582 +vt 0.058036 0.283582 +vt 0.995536 0.283582 +vt 0.879464 0.283582 +vt 0.816964 0.283582 +vt 0.808036 0.283582 +vt 0.745536 0.283582 +vt 0.691964 0.283582 +vt 0.683036 0.283582 +vt 0.566964 0.283582 +vt 0.504464 0.283582 +vt 0.441964 0.283582 +vt 0.433036 0.283582 +vt 0.379464 0.283582 +vt 0.370536 0.283582 +vt 0.316964 0.283582 +vt 0.308036 0.283582 +vt 0.245536 0.283582 +vt 0.191964 0.283582 +vt 0.156250 0.283582 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.120536 0.283582 +vt 0.183036 0.283582 +vt 0.308036 0.283582 +vt 0.433036 0.283582 +vt 0.495536 0.283582 +vt 0.558036 0.283582 +vt 0.620536 0.283582 +vt 0.683036 0.283582 +vt 0.808036 0.283582 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.4472 0.0000 0.8944 +vn -1.0000 0.0000 0.0000 +vn -0.4472 0.0000 -0.8944 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.4472 -0.8944 0.0000 +vn -0.4472 0.8944 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn -0.4472 -0.6325 0.6325 +vn -0.4472 0.6325 -0.6325 +vn -0.4472 -0.6325 -0.6325 +vn -0.4472 0.6325 0.6325 +vn 0.4472 0.0000 -0.8944 +vn 1.0000 0.0000 -0.0000 +vn 0.4472 0.0000 0.8944 +vn 0.4472 -0.8944 0.0000 +vn 0.4472 0.8944 0.0000 +vn 0.4472 -0.6325 -0.6325 +vn 0.4472 0.6325 0.6325 +vn 0.4472 -0.6325 0.6325 +vn 0.4472 0.6325 -0.6325 +vn 0.0000 -0.5556 0.8315 +vn 0.0000 -0.1951 -0.9808 +vn 0.0000 0.8315 -0.5556 +vn 0.0000 -0.1951 0.9808 +vn 0.0000 0.5556 -0.8315 +vn 0.0000 -0.5556 -0.8315 +vn 0.0000 0.1951 0.9808 +vn 0.0000 0.1951 -0.9808 +vn 0.0000 -0.8315 -0.5556 +vn 0.0000 0.5556 0.8315 +vn 0.0000 -0.9808 -0.1951 +vn 0.0000 0.8315 0.5556 +vn 0.0000 -0.9808 0.1951 +vn 0.0000 0.9808 0.1951 +vn 0.0000 -0.8315 0.5556 +vn 0.0000 0.9808 -0.1951 +vn 0.9487 0.1210 -0.2922 +vn 0.9487 0.0617 -0.3102 +vn 0.9487 0.1757 -0.2629 +vn 0.9487 0.2236 -0.2236 +vn 0.9487 0.2629 -0.1757 +vn 0.9487 0.2922 -0.1210 +vn 0.9487 0.3102 -0.0617 +vn 0.9487 0.3162 -0.0000 +vn 0.9487 0.3102 0.0617 +vn 0.9487 0.2922 0.1210 +vn 0.9487 0.2629 0.1757 +vn 0.9487 0.2236 0.2236 +vn 0.9487 0.1757 0.2629 +vn 0.9487 0.1210 0.2922 +vn 0.9487 0.0617 0.3102 +vn 0.9487 -0.0000 0.3162 +vn 0.9487 -0.0617 0.3102 +vn 0.9487 -0.1210 0.2922 +vn 0.9487 -0.1757 0.2629 +vn 0.9487 -0.2236 0.2236 +vn 0.9487 -0.2629 0.1757 +vn 0.9487 -0.2922 0.1210 +vn 0.9487 -0.3102 0.0617 +vn 0.9487 -0.3162 -0.0000 +vn 0.9487 -0.3102 -0.0617 +vn 0.9487 -0.2922 -0.1210 +vn 0.9487 -0.2629 -0.1757 +vn 0.9487 -0.2236 -0.2236 +vn 0.9487 -0.1757 -0.2629 +vn 0.9487 -0.1210 -0.2922 +vn 0.9487 -0.0617 -0.3102 +vn 0.9487 0.0000 -0.3162 +vn 0.9959 0.0346 -0.0836 +vn 0.9959 0.0177 -0.0888 +vn 0.9959 0.0503 -0.0753 +vn 0.9959 0.0640 -0.0640 +vn 0.9959 0.0753 -0.0503 +vn 0.9959 0.0836 -0.0346 +vn 0.9959 0.0888 -0.0177 +vn 0.9959 0.0905 0.0000 +vn 0.9959 0.0888 0.0177 +vn 0.9959 0.0836 0.0346 +vn 0.9959 0.0753 0.0503 +vn 0.9959 0.0640 0.0640 +vn 0.9959 0.0503 0.0753 +vn 0.9959 0.0346 0.0836 +vn 0.9959 0.0177 0.0888 +vn 0.9959 0.0000 0.0905 +vn 0.9959 -0.0177 0.0888 +vn 0.9959 -0.0346 0.0836 +vn 0.9959 -0.0503 0.0753 +vn 0.9959 -0.0640 0.0640 +vn 0.9959 -0.0753 0.0503 +vn 0.9959 -0.0836 0.0346 +vn 0.9959 -0.0888 0.0177 +vn 0.9959 -0.0905 0.0000 +vn 0.9959 -0.0888 -0.0177 +vn 0.9959 -0.0836 -0.0346 +vn 0.9959 -0.0753 -0.0503 +vn 0.9959 -0.0640 -0.0640 +vn 0.9959 -0.0503 -0.0753 +vn 0.9959 -0.0346 -0.0836 +vn 0.9959 -0.0177 -0.0888 +vn 0.9959 -0.0000 -0.0905 +vn -0.9487 0.2922 0.1210 +vn -0.9487 0.2629 0.1757 +vn -0.9487 0.3102 0.0617 +vn -0.9487 0.3162 -0.0000 +vn -0.9487 0.3102 -0.0617 +vn -0.9487 0.2922 -0.1210 +vn -0.9487 0.2629 -0.1757 +vn -0.9487 0.2236 -0.2236 +vn -0.9487 0.1757 -0.2629 +vn -0.9487 0.1210 -0.2922 +vn -0.9487 0.0617 -0.3102 +vn -0.9487 0.0000 -0.3162 +vn -0.9487 -0.0617 -0.3102 +vn -0.9487 -0.1210 -0.2922 +vn -0.9487 -0.1757 -0.2629 +vn -0.9487 -0.2236 -0.2236 +vn -0.9487 -0.2629 -0.1757 +vn -0.9487 -0.2922 -0.1210 +vn -0.9487 -0.3102 -0.0617 +vn -0.9487 -0.3162 -0.0000 +vn -0.9487 -0.3102 0.0617 +vn -0.9487 -0.2922 0.1210 +vn -0.9487 -0.2629 0.1757 +vn -0.9487 -0.2236 0.2236 +vn -0.9487 -0.1757 0.2629 +vn -0.9487 -0.1210 0.2922 +vn -0.9487 -0.0617 0.3102 +vn -0.9487 -0.0000 0.3162 +vn -0.9487 0.0617 0.3102 +vn -0.9487 0.1210 0.2922 +vn -0.9487 0.1757 0.2629 +vn -0.9487 0.2236 0.2236 +vn -0.9959 -0.0836 0.0346 +vn -0.9959 -0.0888 0.0177 +vn -0.9959 -0.0753 0.0503 +vn -0.9959 -0.0640 0.0640 +vn -0.9959 -0.0503 0.0753 +vn -0.9959 -0.0346 0.0836 +vn -0.9959 -0.0177 0.0888 +vn -0.9959 -0.0000 0.0905 +vn -0.9959 0.0177 0.0888 +vn -0.9959 0.0346 0.0836 +vn -0.9959 0.0503 0.0753 +vn -0.9959 0.0640 0.0640 +vn -0.9959 0.0753 0.0503 +vn -0.9959 0.0836 0.0346 +vn -0.9959 0.0888 0.0177 +vn -0.9959 0.0905 0.0000 +vn -0.9959 0.0888 -0.0177 +vn -0.9959 0.0836 -0.0346 +vn -0.9959 0.0753 -0.0503 +vn -0.9959 0.0640 -0.0640 +vn -0.9959 0.0503 -0.0753 +vn -0.9959 0.0346 -0.0836 +vn -0.9959 0.0177 -0.0888 +vn -0.9959 -0.0000 -0.0905 +vn -0.9959 -0.0177 -0.0888 +vn -0.9959 -0.0346 -0.0836 +vn -0.9959 -0.0503 -0.0753 +vn -0.9959 -0.0640 -0.0640 +vn -0.9959 -0.0753 -0.0503 +vn -0.9959 -0.0836 -0.0346 +vn -0.9959 -0.0888 -0.0177 +vn -0.9959 -0.0905 0.0000 +s off +f 386/1/1 392/2/1 390/3/1 +f 391/4/2 385/5/2 389/6/2 +f 391/4/3 388/7/3 387/8/3 +f 391/4/4 390/3/4 392/2/4 +f 394/9/4 395/10/4 393/11/4 +f 394/9/5 397/12/5 398/13/5 +f 394/9/1 400/14/1 396/15/1 +f 399/16/2 393/11/2 395/10/2 +f 402/17/6 408/18/6 406/19/6 +f 407/20/7 401/21/7 405/22/7 +f 407/20/8 404/23/8 403/24/8 +f 407/20/4 406/19/4 408/18/4 +f 410/25/4 411/26/4 409/27/4 +f 410/25/9 413/28/9 414/29/9 +f 410/25/6 416/30/6 412/31/6 +f 415/32/7 409/27/7 411/26/7 +f 420/33/1 423/34/1 419/35/1 +f 422/36/2 417/37/2 421/38/2 +f 423/34/7 417/37/7 419/35/7 +f 420/39/6 422/36/6 424/40/6 +f 428/41/2 431/42/2 427/43/2 +f 430/44/1 425/45/1 429/46/1 +f 431/42/6 425/45/6 427/43/6 +f 428/47/7 430/44/7 432/48/7 +f 436/49/6 439/50/6 435/51/6 +f 438/52/7 433/53/7 437/54/7 +f 439/50/1 433/53/1 435/51/1 +f 436/55/2 438/52/2 440/56/2 +f 444/57/7 447/58/7 443/59/7 +f 446/60/6 441/61/6 445/62/6 +f 447/58/2 441/61/2 443/59/2 +f 444/63/1 446/60/1 448/64/1 +f 452/65/10 455/66/10 451/67/10 +f 454/68/11 449/69/11 453/70/11 +f 455/66/12 449/69/12 451/67/12 +f 452/71/13 454/68/13 456/72/13 +f 460/73/11 463/74/11 459/75/11 +f 462/76/10 457/77/10 461/78/10 +f 463/74/13 457/77/13 459/75/13 +f 460/79/12 462/76/12 464/80/12 +f 468/81/13 471/82/13 467/83/13 +f 470/84/12 465/85/12 469/86/12 +f 471/82/10 465/85/10 467/83/10 +f 468/87/11 470/84/11 472/88/11 +f 476/89/12 479/90/12 475/91/12 +f 478/92/13 473/93/13 477/94/13 +f 479/90/11 473/93/11 475/91/11 +f 476/95/10 478/92/10 480/96/10 +f 484/97/14 487/98/14 483/99/14 +f 486/100/15 481/101/15 485/102/15 +f 487/98/16 481/101/16 483/99/16 +f 484/103/17 486/100/17 488/104/17 +f 492/105/15 495/106/15 491/107/15 +f 494/108/14 489/109/14 493/110/14 +f 495/106/17 489/109/17 491/107/17 +f 492/111/16 494/108/16 496/112/16 +f 500/113/17 503/114/17 499/115/17 +f 502/116/16 497/117/16 501/118/16 +f 503/114/14 497/117/14 499/115/14 +f 500/119/15 502/116/15 504/120/15 +f 508/121/16 511/122/16 507/123/16 +f 510/124/17 505/125/17 509/126/17 +f 511/122/15 505/125/15 507/123/15 +f 508/127/14 510/124/14 512/128/14 +f 516/129/18 519/130/18 515/131/18 +f 518/132/19 513/133/19 517/134/19 +f 519/130/20 513/133/20 515/131/20 +f 516/135/21 518/132/21 520/136/21 +f 524/137/19 527/138/19 523/139/19 +f 526/140/18 521/141/18 525/142/18 +f 527/138/21 521/141/21 523/139/21 +f 524/143/20 526/140/20 528/144/20 +f 532/145/21 535/146/21 531/147/21 +f 534/148/20 529/149/20 533/150/20 +f 535/146/18 529/149/18 531/147/18 +f 532/151/19 534/148/19 536/152/19 +f 540/153/20 543/154/20 539/155/20 +f 542/156/21 537/157/21 541/158/21 +f 543/154/19 537/157/19 539/155/19 +f 540/159/18 542/156/18 544/160/18 +f 546/161/10 552/162/10 550/163/10 +f 551/164/11 545/165/11 549/166/11 +f 551/164/22 548/167/22 547/168/22 +f 551/164/4 550/163/4 552/162/4 +f 553/169/4 556/170/4 555/171/4 +f 553/169/23 558/172/23 554/173/23 +f 554/173/10 560/174/10 556/170/10 +f 559/175/11 553/169/11 555/171/11 +f 562/176/13 568/177/13 566/178/13 +f 567/179/12 561/180/12 565/181/12 +f 567/179/24 564/182/24 563/183/24 +f 567/179/4 566/178/4 568/177/4 +f 569/184/4 572/185/4 571/186/4 +f 570/187/25 573/188/25 574/189/25 +f 570/187/13 576/190/13 572/185/13 +f 575/191/12 569/184/12 571/186/12 +f 578/192/1 584/193/1 582/194/1 +f 583/195/2 577/196/2 581/197/2 +f 583/195/26 580/198/26 579/199/26 +f 583/195/27 582/194/27 584/193/27 +f 586/200/27 587/201/27 585/202/27 +f 586/200/28 589/203/28 590/204/28 +f 586/200/1 592/205/1 588/206/1 +f 591/207/2 585/202/2 587/201/2 +f 594/208/7 600/209/7 598/210/7 +f 599/211/6 593/212/6 597/213/6 +f 599/211/29 596/214/29 595/215/29 +f 599/211/27 598/210/27 600/209/27 +f 602/216/27 603/217/27 601/218/27 +f 602/216/30 605/219/30 606/220/30 +f 602/216/7 608/221/7 604/222/7 +f 607/223/6 601/218/6 603/217/6 +f 610/224/12 616/225/12 614/226/12 +f 615/227/13 609/228/13 613/229/13 +f 615/227/31 612/230/31 611/231/31 +f 615/227/27 614/226/27 616/225/27 +f 617/232/27 620/233/27 619/234/27 +f 618/235/32 621/236/32 622/237/32 +f 618/235/12 624/238/12 620/233/12 +f 623/239/13 617/232/13 619/234/13 +f 626/240/11 632/241/11 630/242/11 +f 631/243/10 625/244/10 629/245/10 +f 631/243/33 628/246/33 627/247/33 +f 631/243/27 630/242/27 632/241/27 +f 633/248/27 636/249/27 635/250/27 +f 634/251/34 637/252/34 638/253/34 +f 634/251/11 640/254/11 636/249/11 +f 639/255/10 633/248/10 635/250/10 +f 386/1/1 388/256/1 392/2/1 +f 391/4/2 387/257/2 385/5/2 +f 391/4/3 392/2/3 388/7/3 +f 391/4/4 389/6/4 390/3/4 +f 394/9/4 396/15/4 395/10/4 +f 394/9/5 393/11/5 397/12/5 +f 394/9/1 398/258/1 400/14/1 +f 399/16/2 397/259/2 393/11/2 +f 402/17/6 404/260/6 408/18/6 +f 407/20/7 403/261/7 401/21/7 +f 407/20/8 408/18/8 404/23/8 +f 407/20/4 405/22/4 406/19/4 +f 410/25/4 412/31/4 411/26/4 +f 410/25/9 409/27/9 413/28/9 +f 410/25/6 414/262/6 416/30/6 +f 415/32/7 413/263/7 409/27/7 +f 420/33/1 424/264/1 423/34/1 +f 422/36/2 418/265/2 417/37/2 +f 423/34/7 421/38/7 417/37/7 +f 420/39/6 418/265/6 422/36/6 +f 428/41/2 432/266/2 431/42/2 +f 430/44/1 426/267/1 425/45/1 +f 431/42/6 429/46/6 425/45/6 +f 428/47/7 426/267/7 430/44/7 +f 436/49/6 440/268/6 439/50/6 +f 438/52/7 434/269/7 433/53/7 +f 439/50/1 437/54/1 433/53/1 +f 436/55/2 434/269/2 438/52/2 +f 444/57/7 448/270/7 447/58/7 +f 446/60/6 442/271/6 441/61/6 +f 447/58/2 445/62/2 441/61/2 +f 444/63/1 442/271/1 446/60/1 +f 452/65/10 456/272/10 455/66/10 +f 454/68/11 450/273/11 449/69/11 +f 455/66/12 453/70/12 449/69/12 +f 452/71/13 450/273/13 454/68/13 +f 460/73/11 464/274/11 463/74/11 +f 462/76/10 458/275/10 457/77/10 +f 463/74/13 461/78/13 457/77/13 +f 460/79/12 458/275/12 462/76/12 +f 468/81/13 472/276/13 471/82/13 +f 470/84/12 466/277/12 465/85/12 +f 471/82/10 469/86/10 465/85/10 +f 468/87/11 466/277/11 470/84/11 +f 476/89/12 480/278/12 479/90/12 +f 478/92/13 474/279/13 473/93/13 +f 479/90/11 477/94/11 473/93/11 +f 476/95/10 474/279/10 478/92/10 +f 484/97/14 488/280/14 487/98/14 +f 486/100/15 482/281/15 481/101/15 +f 487/98/16 485/102/16 481/101/16 +f 484/103/17 482/281/17 486/100/17 +f 492/105/15 496/282/15 495/106/15 +f 494/108/14 490/283/14 489/109/14 +f 495/106/17 493/110/17 489/109/17 +f 492/111/16 490/283/16 494/108/16 +f 500/113/17 504/284/17 503/114/17 +f 502/116/16 498/285/16 497/117/16 +f 503/114/14 501/118/14 497/117/14 +f 500/119/15 498/285/15 502/116/15 +f 508/121/16 512/286/16 511/122/16 +f 510/124/17 506/287/17 505/125/17 +f 511/122/15 509/126/15 505/125/15 +f 508/127/14 506/287/14 510/124/14 +f 516/129/18 520/288/18 519/130/18 +f 518/132/19 514/289/19 513/133/19 +f 519/130/20 517/134/20 513/133/20 +f 516/135/21 514/289/21 518/132/21 +f 524/137/19 528/290/19 527/138/19 +f 526/140/18 522/291/18 521/141/18 +f 527/138/21 525/142/21 521/141/21 +f 524/143/20 522/291/20 526/140/20 +f 532/145/21 536/292/21 535/146/21 +f 534/148/20 530/293/20 529/149/20 +f 535/146/18 533/150/18 529/149/18 +f 532/151/19 530/293/19 534/148/19 +f 540/153/20 544/294/20 543/154/20 +f 542/156/21 538/295/21 537/157/21 +f 543/154/19 541/158/19 537/157/19 +f 540/159/18 538/295/18 542/156/18 +f 546/161/10 548/296/10 552/162/10 +f 551/164/11 547/297/11 545/165/11 +f 551/164/22 552/162/22 548/167/22 +f 551/164/4 549/166/4 550/163/4 +f 553/169/4 554/173/4 556/170/4 +f 553/169/23 557/298/23 558/172/23 +f 554/173/10 558/299/10 560/174/10 +f 559/175/11 557/300/11 553/169/11 +f 562/176/13 564/301/13 568/177/13 +f 567/179/12 563/302/12 561/180/12 +f 567/179/24 568/177/24 564/182/24 +f 567/179/4 565/181/4 566/178/4 +f 569/184/4 570/187/4 572/185/4 +f 570/187/25 569/184/25 573/188/25 +f 570/187/13 574/303/13 576/190/13 +f 575/191/12 573/304/12 569/184/12 +f 578/192/1 580/305/1 584/193/1 +f 583/195/2 579/306/2 577/196/2 +f 583/195/26 584/193/26 580/198/26 +f 583/195/27 581/197/27 582/194/27 +f 586/200/27 588/206/27 587/201/27 +f 586/200/28 585/202/28 589/203/28 +f 586/200/1 590/307/1 592/205/1 +f 591/207/2 589/308/2 585/202/2 +f 594/208/7 596/309/7 600/209/7 +f 599/211/6 595/310/6 593/212/6 +f 599/211/29 600/209/29 596/214/29 +f 599/211/27 597/213/27 598/210/27 +f 602/216/27 604/222/27 603/217/27 +f 602/216/30 601/218/30 605/219/30 +f 602/216/7 606/311/7 608/221/7 +f 607/223/6 605/312/6 601/218/6 +f 610/224/12 612/313/12 616/225/12 +f 615/227/13 611/314/13 609/228/13 +f 615/227/31 616/225/31 612/230/31 +f 615/227/27 613/229/27 614/226/27 +f 617/232/27 618/235/27 620/233/27 +f 618/235/32 617/232/32 621/236/32 +f 618/235/12 622/315/12 624/238/12 +f 623/239/13 621/316/13 617/232/13 +f 626/240/11 628/317/11 632/241/11 +f 631/243/10 627/318/10 625/244/10 +f 631/243/33 632/241/33 628/246/33 +f 631/243/27 629/245/27 630/242/27 +f 633/248/27 634/251/27 636/249/27 +f 634/251/34 633/248/34 637/252/34 +f 634/251/11 638/319/11 640/254/11 +f 639/255/10 637/320/10 633/248/10 +s 1 +f 19/321/19 276/322/35 20/323/35 +f 32/324/36 257/325/6 1/326/6 +f 5/327/13 262/328/37 6/329/37 +f 18/330/38 275/331/19 19/321/19 +f 31/332/14 288/333/36 32/324/36 +f 4/334/39 261/335/13 5/327/13 +f 18/330/38 273/336/7 274/337/38 +f 31/332/14 286/338/40 287/339/14 +f 4/334/39 259/340/18 260/341/39 +f 17/342/7 272/343/41 273/336/7 +f 29/344/10 286/338/40 30/345/40 +f 2/346/42 259/340/18 3/347/18 +f 15/348/15 272/343/41 16/349/41 +f 28/350/43 285/351/10 29/344/10 +f 2/346/42 257/325/6 258/352/42 +f 14/353/44 271/354/15 15/348/15 +f 27/355/20 284/356/43 28/350/43 +f 13/357/11 270/358/44 14/353/44 +f 26/359/45 283/360/20 27/355/20 +f 12/361/46 269/362/11 13/357/11 +f 25/363/1 282/364/45 26/359/45 +f 11/365/21 268/366/46 12/361/46 +f 24/367/47 281/368/1 25/363/1 +f 10/369/48 267/370/21 11/365/21 +f 23/371/16 280/372/47 24/367/47 +f 9/373/2 266/374/48 10/369/48 +f 22/375/49 279/376/16 23/371/16 +f 8/377/50 265/378/2 9/379/2 +f 21/380/12 278/381/49 22/375/49 +f 7/382/17 264/383/50 8/377/50 +f 21/380/12 276/322/35 277/384/12 +f 6/329/37 263/385/17 7/382/17 +f 3/347/51 66/386/52 2/346/52 +f 4/334/53 67/387/51 3/347/51 +f 5/327/54 68/388/53 4/334/53 +f 5/327/54 70/389/55 69/390/54 +f 7/382/56 70/389/55 6/329/55 +f 8/377/57 71/391/56 7/382/56 +f 8/377/57 73/392/58 72/393/57 +f 9/373/58 74/394/59 73/395/58 +f 10/369/59 75/396/60 74/394/59 +f 11/365/60 76/397/61 75/398/60 +f 13/357/62 76/397/61 12/361/61 +f 14/353/63 77/399/62 13/357/62 +f 15/348/64 78/400/63 14/353/63 +f 15/348/64 80/401/65 79/402/64 +f 16/349/65 81/403/66 80/401/65 +f 18/330/67 81/404/66 17/342/66 +f 19/321/68 82/405/67 18/330/67 +f 19/321/68 84/406/69 83/407/68 +f 20/323/69 85/408/70 84/406/69 +f 22/375/71 85/409/70 21/380/70 +f 23/371/72 86/410/71 22/375/71 +f 23/371/72 88/411/73 87/412/72 +f 24/367/73 89/413/74 88/411/73 +f 26/359/75 89/414/74 25/363/74 +f 27/355/76 90/415/75 26/359/75 +f 28/350/77 91/416/76 27/355/76 +f 29/344/78 92/417/77 28/350/77 +f 30/345/79 93/418/78 29/344/78 +f 31/332/80 94/419/79 30/345/79 +f 32/324/81 95/420/80 31/332/80 +f 32/324/81 65/421/82 96/422/81 +f 2/346/52 65/423/82 1/326/82 +f 82/405/38 113/424/7 81/404/7 +f 69/425/13 100/426/39 68/388/39 +f 96/422/36 127/427/14 95/420/14 +f 83/428/19 114/429/38 82/405/38 +f 70/389/37 101/430/13 69/390/13 +f 65/421/6 128/431/36 96/422/36 +f 84/406/35 115/432/19 83/407/19 +f 71/433/17 102/434/37 70/389/37 +f 84/406/35 117/435/12 116/436/35 +f 72/393/50 103/437/17 71/391/17 +f 86/410/49 117/438/12 85/409/12 +f 73/392/2 104/439/50 72/393/50 +f 87/440/16 118/441/49 86/410/49 +f 74/394/48 105/442/2 73/395/2 +f 88/411/47 119/443/16 87/412/16 +f 75/396/21 106/444/48 74/394/48 +f 89/413/1 120/445/47 88/411/47 +f 76/397/46 107/446/21 75/398/21 +f 90/415/45 121/447/1 89/414/1 +f 77/448/11 108/449/46 76/397/46 +f 91/450/20 122/451/45 90/415/45 +f 77/399/11 110/452/44 109/453/11 +f 92/417/43 123/454/20 91/416/20 +f 79/455/15 110/452/44 78/400/44 +f 66/386/42 97/456/6 65/423/6 +f 93/457/10 124/458/43 92/417/43 +f 80/401/41 111/459/15 79/402/15 +f 67/460/18 98/461/42 66/386/42 +f 94/419/40 125/462/10 93/418/10 +f 81/403/7 112/463/41 80/401/41 +f 68/388/39 99/464/18 67/387/18 +f 95/465/14 126/466/40 94/419/40 +f 99/467/83 130/468/84 98/461/84 +f 99/464/83 132/469/85 131/470/83 +f 101/471/86 132/469/85 100/426/85 +f 102/434/87 133/472/86 101/430/86 +f 102/434/87 135/473/88 134/474/87 +f 103/437/88 136/475/89 135/476/88 +f 105/477/90 136/475/89 104/439/89 +f 105/442/90 138/478/91 137/479/90 +f 107/480/92 138/478/91 106/444/91 +f 107/446/92 140/481/93 139/482/92 +f 108/449/93 141/483/94 140/481/93 +f 110/452/95 141/484/94 109/453/94 +f 110/452/95 143/485/96 142/486/95 +f 111/459/96 144/487/97 143/488/96 +f 112/463/97 145/489/98 144/487/97 +f 113/424/98 146/490/99 145/491/98 +f 115/492/100 146/490/99 114/429/99 +f 115/432/100 148/493/101 147/494/100 +f 116/436/101 149/495/102 148/493/101 +f 118/441/103 149/496/102 117/438/102 +f 119/497/104 150/498/103 118/441/103 +f 119/443/104 152/499/105 151/500/104 +f 121/501/106 152/499/105 120/445/105 +f 121/447/106 154/502/107 153/503/106 +f 122/451/107 155/504/108 154/502/107 +f 124/458/109 155/505/108 123/454/108 +f 124/458/109 157/506/110 156/507/109 +f 125/462/110 158/508/111 157/509/110 +f 127/510/112 158/508/111 126/466/111 +f 127/427/112 160/511/113 159/512/112 +f 97/513/114 160/511/113 128/431/113 +f 97/456/114 130/468/84 129/514/114 +f 43/515/115 172/516/116 44/517/116 +f 42/518/117 171/519/115 43/515/115 +f 41/520/118 170/521/117 42/518/117 +f 40/522/119 169/523/118 41/524/118 +f 167/525/120 40/522/119 39/526/120 +f 38/527/121 167/528/120 39/526/120 +f 37/529/122 166/530/121 38/527/121 +f 164/531/123 37/529/122 36/532/123 +f 163/533/124 36/532/123 35/534/124 +f 162/535/125 35/534/124 34/536/125 +f 161/537/126 34/536/125 33/538/126 +f 64/539/127 161/540/126 33/538/126 +f 191/541/128 64/539/127 63/542/128 +f 190/543/129 63/542/128 62/544/129 +f 189/545/130 62/544/129 61/546/130 +f 188/547/131 61/546/130 60/548/131 +f 187/549/132 60/548/131 59/550/132 +f 186/551/133 59/550/132 58/552/133 +f 185/553/134 58/552/133 57/554/134 +f 56/555/135 185/556/134 57/554/134 +f 183/557/136 56/555/135 55/558/136 +f 182/559/137 55/558/136 54/560/137 +f 181/561/138 54/560/137 53/562/138 +f 52/563/139 181/564/138 53/562/138 +f 51/565/140 180/566/139 52/563/139 +f 178/567/141 51/565/140 50/568/141 +f 49/569/142 178/567/141 50/568/141 +f 48/570/143 177/571/142 49/569/142 +f 47/572/144 176/573/143 48/570/143 +f 174/574/145 47/572/144 46/575/145 +f 173/576/146 46/575/145 45/577/146 +f 172/516/116 45/577/146 44/517/116 +f 203/578/21 172/516/46 171/579/21 +f 204/580/46 173/581/11 172/516/46 +f 205/582/11 174/574/44 173/576/11 +f 206/583/44 175/584/15 174/574/44 +f 207/585/15 176/573/41 175/586/15 +f 208/587/41 177/571/7 176/573/41 +f 209/588/7 178/567/38 177/589/7 +f 210/590/38 179/591/19 178/567/38 +f 211/592/19 180/566/35 179/593/19 +f 212/594/35 181/564/12 180/566/35 +f 213/595/12 182/559/49 181/561/12 +f 214/596/49 183/597/16 182/559/49 +f 215/598/16 184/599/47 183/557/16 +f 216/600/47 185/556/1 184/599/47 +f 217/601/1 186/551/45 185/553/1 +f 218/602/45 187/603/20 186/551/45 +f 219/604/20 188/547/43 187/549/20 +f 220/605/43 189/606/10 188/547/43 +f 189/545/10 222/607/40 190/543/40 +f 222/607/40 191/608/14 190/543/40 +f 223/609/14 192/610/36 191/541/14 +f 224/611/36 161/540/6 192/610/36 +f 193/612/6 162/535/42 161/537/6 +f 194/613/42 163/614/18 162/535/42 +f 195/615/18 164/531/39 163/533/18 +f 164/531/39 197/616/13 165/617/13 +f 197/618/13 166/530/37 165/619/13 +f 198/620/37 167/528/17 166/530/37 +f 199/621/17 168/622/50 167/525/17 +f 200/623/50 169/523/2 168/622/50 +f 201/624/2 170/521/48 169/625/2 +f 202/626/48 171/519/21 170/521/48 +f 247/627/147 216/600/148 215/598/147 +f 246/628/149 215/629/147 214/596/149 +f 213/595/150 246/628/149 214/596/149 +f 212/594/151 245/630/150 213/631/150 +f 243/632/152 212/594/151 211/592/152 +f 242/633/153 211/634/152 210/590/153 +f 241/635/154 210/590/153 209/588/154 +f 240/636/155 209/637/154 208/587/155 +f 207/585/156 240/636/155 208/587/155 +f 206/583/157 239/638/156 207/639/156 +f 237/640/158 206/583/157 205/582/158 +f 236/641/159 205/642/158 204/580/159 +f 203/578/160 236/641/159 204/580/159 +f 234/643/161 203/644/160 202/626/161 +f 201/624/162 234/643/161 202/626/161 +f 232/645/163 201/646/162 200/623/163 +f 231/647/164 200/623/163 199/621/164 +f 198/620/165 231/648/164 199/649/164 +f 229/650/166 198/620/165 197/618/166 +f 228/651/167 197/616/166 196/652/167 +f 195/615/168 228/651/167 196/652/167 +f 226/653/169 195/654/168 194/613/169 +f 225/655/170 194/613/169 193/612/170 +f 256/656/171 193/657/170 224/611/171 +f 223/609/172 256/656/171 224/611/171 +f 254/658/173 223/659/172 222/607/173 +f 253/660/174 222/607/173 221/661/174 +f 252/662/175 221/663/174 220/605/175 +f 251/664/176 220/605/175 219/604/176 +f 218/602/177 251/665/176 219/666/176 +f 217/601/178 250/667/177 218/602/177 +f 248/668/148 217/669/178 216/600/148 +f 47/572/15 302/670/44 46/575/44 +f 34/536/42 289/671/6 33/538/6 +f 61/546/10 316/672/43 60/548/43 +f 47/572/15 304/673/41 303/674/15 +f 35/534/18 290/675/42 34/536/42 +f 62/544/40 317/676/10 61/546/10 +f 49/569/7 304/673/41 48/570/41 +f 35/534/18 292/677/39 291/678/18 +f 62/544/40 319/679/14 318/680/40 +f 49/569/7 306/681/38 305/682/7 +f 37/529/13 292/677/39 36/532/39 +f 64/539/36 319/679/14 63/542/14 +f 51/565/19 306/681/38 50/568/38 +f 38/527/37 293/683/13 37/529/13 +f 33/538/6 320/684/36 64/539/36 +f 52/563/35 307/685/19 51/565/19 +f 39/526/17 294/686/37 38/527/37 +f 52/563/35 309/687/12 308/688/35 +f 40/522/50 295/689/17 39/526/17 +f 54/560/49 309/687/12 53/562/12 +f 41/524/2 296/690/50 40/522/50 +f 55/558/16 310/691/49 54/560/49 +f 42/518/48 297/692/2 41/520/2 +f 56/555/47 311/693/16 55/558/16 +f 43/515/21 298/694/48 42/518/48 +f 57/554/1 312/695/47 56/555/47 +f 44/517/46 299/696/21 43/515/21 +f 58/552/45 313/697/1 57/554/1 +f 45/577/11 300/698/46 44/517/46 +f 59/550/20 314/699/45 58/552/45 +f 46/575/44 301/700/11 45/577/11 +f 60/548/43 315/701/20 59/550/20 +f 261/335/4 326/702/4 262/328/4 +f 262/328/4 327/703/4 263/385/4 +f 263/385/4 328/704/4 264/383/4 +f 264/383/4 329/705/4 265/378/4 +f 265/706/4 330/707/4 266/374/4 +f 266/374/4 331/708/4 267/370/4 +f 331/709/4 268/366/4 267/370/4 +f 332/710/4 269/362/4 268/366/4 +f 333/711/4 270/358/4 269/362/4 +f 334/712/4 271/354/4 270/358/4 +f 271/354/4 336/713/4 272/343/4 +f 272/343/4 337/714/4 273/336/4 +f 273/336/4 338/715/4 274/337/4 +f 338/715/4 275/331/4 274/337/4 +f 275/331/4 340/716/4 276/322/4 +f 276/322/4 341/717/4 277/384/4 +f 341/718/4 278/381/4 277/384/4 +f 342/719/4 279/376/4 278/381/4 +f 343/720/4 280/372/4 279/376/4 +f 344/721/4 281/368/4 280/372/4 +f 345/722/4 282/364/4 281/368/4 +f 346/723/4 283/360/4 282/364/4 +f 283/360/4 348/724/4 284/356/4 +f 348/724/4 285/351/4 284/356/4 +f 285/351/4 350/725/4 286/338/4 +f 350/725/4 287/339/4 286/338/4 +f 287/339/4 352/726/4 288/333/4 +f 288/333/4 321/727/4 257/325/4 +f 257/325/4 322/728/4 258/352/4 +f 322/728/4 259/340/4 258/352/4 +f 323/729/4 260/341/4 259/340/4 +f 260/341/4 325/730/4 261/335/4 +f 326/731/37 359/732/17 327/733/17 +f 340/734/35 373/735/12 341/736/12 +f 327/733/17 360/737/50 328/738/50 +f 341/739/12 374/740/49 342/741/49 +f 328/738/50 361/742/2 329/743/2 +f 342/741/49 375/744/16 343/745/16 +f 329/746/2 362/747/48 330/748/48 +f 343/745/16 376/749/47 344/750/47 +f 330/748/48 363/751/21 331/752/21 +f 344/750/47 377/753/1 345/754/1 +f 331/752/21 364/755/46 332/756/46 +f 345/757/1 378/758/45 346/759/45 +f 332/756/46 365/760/11 333/761/11 +f 346/759/45 379/762/20 347/763/20 +f 333/764/11 366/765/44 334/766/44 +f 347/763/20 380/767/43 348/768/43 +f 334/766/44 367/769/15 335/770/15 +f 321/771/6 354/772/42 322/773/42 +f 348/768/43 381/774/10 349/775/10 +f 336/776/41 367/769/15 368/777/41 +f 322/773/42 355/778/18 323/779/18 +f 349/780/10 382/781/40 350/782/40 +f 336/776/41 369/783/7 337/784/7 +f 323/779/18 356/785/39 324/786/39 +f 350/782/40 383/787/14 351/788/14 +f 337/789/7 370/790/38 338/791/38 +f 324/786/39 357/792/13 325/793/13 +f 351/788/14 384/794/36 352/795/36 +f 338/791/38 371/796/19 339/797/19 +f 325/798/13 358/799/37 326/731/37 +f 352/795/36 353/800/6 321/801/6 +f 339/797/19 372/802/35 340/734/35 +f 293/683/27 358/803/27 357/804/27 +f 294/686/27 359/805/27 358/803/27 +f 295/689/27 360/806/27 359/807/27 +f 296/690/27 361/808/27 360/806/27 +f 297/692/27 362/809/27 361/810/27 +f 298/694/27 363/811/27 362/809/27 +f 299/696/27 364/812/27 363/813/27 +f 301/700/27 364/812/27 300/698/27 +f 302/670/27 365/814/27 301/700/27 +f 303/674/27 366/815/27 302/670/27 +f 304/673/27 367/816/27 303/674/27 +f 304/673/27 369/817/27 368/818/27 +f 305/682/27 370/819/27 369/820/27 +f 307/685/27 370/819/27 306/681/27 +f 307/685/27 372/821/27 371/822/27 +f 308/688/27 373/823/27 372/821/27 +f 310/691/27 373/824/27 309/687/27 +f 311/693/27 374/825/27 310/691/27 +f 312/695/27 375/826/27 311/693/27 +f 313/697/27 376/827/27 312/695/27 +f 314/699/27 377/828/27 313/697/27 +f 315/701/27 378/829/27 314/699/27 +f 315/701/27 380/830/27 379/831/27 +f 317/676/27 380/830/27 316/672/27 +f 317/676/27 382/832/27 381/833/27 +f 319/679/27 382/832/27 318/680/27 +f 319/679/27 384/834/27 383/835/27 +f 320/684/27 353/836/27 384/834/27 +f 289/671/27 354/837/27 353/838/27 +f 291/678/27 354/837/27 290/675/27 +f 292/677/27 355/839/27 291/678/27 +f 292/677/27 357/840/27 356/841/27 +f 19/321/19 275/331/19 276/322/35 +f 32/324/36 288/333/36 257/325/6 +f 5/327/13 261/335/13 262/328/37 +f 18/330/38 274/337/38 275/331/19 +f 31/332/14 287/339/14 288/333/36 +f 4/334/39 260/341/39 261/335/13 +f 18/330/38 17/342/7 273/336/7 +f 31/332/14 30/345/40 286/338/40 +f 4/334/39 3/347/18 259/340/18 +f 17/342/7 16/349/41 272/343/41 +f 29/344/10 285/351/10 286/338/40 +f 2/346/42 258/352/42 259/340/18 +f 15/348/15 271/354/15 272/343/41 +f 28/350/43 284/356/43 285/351/10 +f 2/346/42 1/326/6 257/325/6 +f 14/353/44 270/358/44 271/354/15 +f 27/355/20 283/360/20 284/356/43 +f 13/357/11 269/362/11 270/358/44 +f 26/359/45 282/364/45 283/360/20 +f 12/361/46 268/366/46 269/362/11 +f 25/363/1 281/368/1 282/364/45 +f 11/365/21 267/370/21 268/366/46 +f 24/367/47 280/372/47 281/368/1 +f 10/369/48 266/374/48 267/370/21 +f 23/371/16 279/376/16 280/372/47 +f 9/373/2 265/706/2 266/374/48 +f 22/375/49 278/381/49 279/376/16 +f 8/377/50 264/383/50 265/378/2 +f 21/380/12 277/384/12 278/381/49 +f 7/382/17 263/385/17 264/383/50 +f 21/380/12 20/323/35 276/322/35 +f 6/329/37 262/328/37 263/385/17 +f 3/347/51 67/460/51 66/386/52 +f 4/334/53 68/388/53 67/387/51 +f 5/327/54 69/425/54 68/388/53 +f 5/327/54 6/329/55 70/389/55 +f 7/382/56 71/433/56 70/389/55 +f 8/377/57 72/393/57 71/391/56 +f 8/377/57 9/379/58 73/392/58 +f 9/373/58 10/369/59 74/394/59 +f 10/369/59 11/365/60 75/396/60 +f 11/365/60 12/361/61 76/397/61 +f 13/357/62 77/448/62 76/397/61 +f 14/353/63 78/400/63 77/399/62 +f 15/348/64 79/455/64 78/400/63 +f 15/348/64 16/349/65 80/401/65 +f 16/349/65 17/342/66 81/403/66 +f 18/330/67 82/405/67 81/404/66 +f 19/321/68 83/428/68 82/405/67 +f 19/321/68 20/323/69 84/406/69 +f 20/323/69 21/380/70 85/408/70 +f 22/375/71 86/410/71 85/409/70 +f 23/371/72 87/440/72 86/410/71 +f 23/371/72 24/367/73 88/411/73 +f 24/367/73 25/363/74 89/413/74 +f 26/359/75 90/415/75 89/414/74 +f 27/355/76 91/450/76 90/415/75 +f 28/350/77 92/417/77 91/416/76 +f 29/344/78 93/457/78 92/417/77 +f 30/345/79 94/419/79 93/418/78 +f 31/332/80 95/465/80 94/419/79 +f 32/324/81 96/422/81 95/420/80 +f 32/324/81 1/326/82 65/421/82 +f 2/346/52 66/386/52 65/423/82 +f 82/405/38 114/429/38 113/424/7 +f 69/425/13 101/471/13 100/426/39 +f 96/422/36 128/431/36 127/427/14 +f 83/428/19 115/492/19 114/429/38 +f 70/389/37 102/434/37 101/430/13 +f 65/421/6 97/513/6 128/431/36 +f 84/406/35 116/436/35 115/432/19 +f 71/433/17 103/842/17 102/434/37 +f 84/406/35 85/408/12 117/435/12 +f 72/393/50 104/439/50 103/437/17 +f 86/410/49 118/441/49 117/438/12 +f 73/392/2 105/477/2 104/439/50 +f 87/440/16 119/497/16 118/441/49 +f 74/394/48 106/444/48 105/442/2 +f 88/411/47 120/445/47 119/443/16 +f 75/396/21 107/480/21 106/444/48 +f 89/413/1 121/501/1 120/445/47 +f 76/397/46 108/449/46 107/446/21 +f 90/415/45 122/451/45 121/447/1 +f 77/448/11 109/843/11 108/449/46 +f 91/450/20 123/844/20 122/451/45 +f 77/399/11 78/400/44 110/452/44 +f 92/417/43 124/458/43 123/454/20 +f 79/455/15 111/845/15 110/452/44 +f 66/386/42 98/461/42 97/456/6 +f 93/457/10 125/846/10 124/458/43 +f 80/401/41 112/463/41 111/459/15 +f 67/460/18 99/467/18 98/461/42 +f 94/419/40 126/466/40 125/462/10 +f 81/403/7 113/847/7 112/463/41 +f 68/388/39 100/426/39 99/464/18 +f 95/465/14 127/510/14 126/466/40 +f 99/467/83 131/848/83 130/468/84 +f 99/464/83 100/426/85 132/469/85 +f 101/471/86 133/849/86 132/469/85 +f 102/434/87 134/474/87 133/472/86 +f 102/434/87 103/842/88 135/473/88 +f 103/437/88 104/439/89 136/475/89 +f 105/477/90 137/850/90 136/475/89 +f 105/442/90 106/444/91 138/478/91 +f 107/480/92 139/851/92 138/478/91 +f 107/446/92 108/449/93 140/481/93 +f 108/449/93 109/843/94 141/483/94 +f 110/452/95 142/486/95 141/484/94 +f 110/452/95 111/845/96 143/485/96 +f 111/459/96 112/463/97 144/487/97 +f 112/463/97 113/847/98 145/489/98 +f 113/424/98 114/429/99 146/490/99 +f 115/492/100 147/852/100 146/490/99 +f 115/432/100 116/436/101 148/493/101 +f 116/436/101 117/435/102 149/495/102 +f 118/441/103 150/498/103 149/496/102 +f 119/497/104 151/853/104 150/498/103 +f 119/443/104 120/445/105 152/499/105 +f 121/501/106 153/854/106 152/499/105 +f 121/447/106 122/451/107 154/502/107 +f 122/451/107 123/844/108 155/504/108 +f 124/458/109 156/507/109 155/505/108 +f 124/458/109 125/846/110 157/506/110 +f 125/462/110 126/466/111 158/508/111 +f 127/510/112 159/855/112 158/508/111 +f 127/427/112 128/431/113 160/511/113 +f 97/513/114 129/856/114 160/511/113 +f 97/456/114 98/461/84 130/468/84 +f 43/515/115 171/579/115 172/516/116 +f 42/518/117 170/521/117 171/519/115 +f 41/520/118 169/625/118 170/521/117 +f 40/522/119 168/622/119 169/523/118 +f 167/525/120 168/622/119 40/522/119 +f 38/527/121 166/530/121 167/528/120 +f 37/529/122 165/619/122 166/530/121 +f 164/531/123 165/617/122 37/529/122 +f 163/533/124 164/531/123 36/532/123 +f 162/535/125 163/614/124 35/534/124 +f 161/537/126 162/535/125 34/536/125 +f 64/539/127 192/610/127 161/540/126 +f 191/541/128 192/610/127 64/539/127 +f 190/543/129 191/608/128 63/542/128 +f 189/545/130 190/543/129 62/544/129 +f 188/547/131 189/606/130 61/546/130 +f 187/549/132 188/547/131 60/548/131 +f 186/551/133 187/603/132 59/550/132 +f 185/553/134 186/551/133 58/552/133 +f 56/555/135 184/599/135 185/556/134 +f 183/557/136 184/599/135 56/555/135 +f 182/559/137 183/597/136 55/558/136 +f 181/561/138 182/559/137 54/560/137 +f 52/563/139 180/566/139 181/564/138 +f 51/565/140 179/593/140 180/566/139 +f 178/567/141 179/591/140 51/565/140 +f 49/569/142 177/589/142 178/567/141 +f 48/570/143 176/573/143 177/571/142 +f 47/572/144 175/586/144 176/573/143 +f 174/574/145 175/584/144 47/572/144 +f 173/576/146 174/574/145 46/575/145 +f 172/516/116 173/581/146 45/577/146 +f 203/578/21 204/580/46 172/516/46 +f 204/580/46 205/642/11 173/581/11 +f 205/582/11 206/583/44 174/574/44 +f 206/583/44 207/639/15 175/584/15 +f 207/585/15 208/587/41 176/573/41 +f 208/587/41 209/637/7 177/571/7 +f 209/588/7 210/590/38 178/567/38 +f 210/590/38 211/634/19 179/591/19 +f 211/592/19 212/594/35 180/566/35 +f 212/594/35 213/631/12 181/564/12 +f 213/595/12 214/596/49 182/559/49 +f 214/596/49 215/629/16 183/597/16 +f 215/598/16 216/600/47 184/599/47 +f 216/600/47 217/669/1 185/556/1 +f 217/601/1 218/602/45 186/551/45 +f 218/602/45 219/666/20 187/603/20 +f 219/604/20 220/605/43 188/547/43 +f 220/605/43 221/663/10 189/606/10 +f 189/545/10 221/661/10 222/607/40 +f 222/607/40 223/659/14 191/608/14 +f 223/609/14 224/611/36 192/610/36 +f 224/611/36 193/657/6 161/540/6 +f 193/612/6 194/613/42 162/535/42 +f 194/613/42 195/654/18 163/614/18 +f 195/615/18 196/652/39 164/531/39 +f 164/531/39 196/652/39 197/616/13 +f 197/618/13 198/620/37 166/530/37 +f 198/620/37 199/649/17 167/528/17 +f 199/621/17 200/623/50 168/622/50 +f 200/623/50 201/646/2 169/523/2 +f 201/624/2 202/626/48 170/521/48 +f 202/626/48 203/644/21 171/519/21 +f 247/627/147 248/668/148 216/600/148 +f 246/628/149 247/857/147 215/629/147 +f 213/595/150 245/858/150 246/628/149 +f 212/594/151 244/859/151 245/630/150 +f 243/632/152 244/859/151 212/594/151 +f 242/633/153 243/860/152 211/634/152 +f 241/635/154 242/633/153 210/590/153 +f 240/636/155 241/861/154 209/637/154 +f 207/585/156 239/862/156 240/636/155 +f 206/583/157 238/863/157 239/638/156 +f 237/640/158 238/863/157 206/583/157 +f 236/641/159 237/864/158 205/642/158 +f 203/578/160 235/865/160 236/641/159 +f 234/643/161 235/866/160 203/644/160 +f 201/624/162 233/867/162 234/643/161 +f 232/645/163 233/868/162 201/646/162 +f 231/647/164 232/645/163 200/623/163 +f 198/620/165 230/869/165 231/648/164 +f 229/650/166 230/869/165 198/620/165 +f 228/651/167 229/870/166 197/616/166 +f 195/615/168 227/871/168 228/651/167 +f 226/653/169 227/872/168 195/654/168 +f 225/655/170 226/653/169 194/613/169 +f 256/656/171 225/873/170 193/657/170 +f 223/609/172 255/874/172 256/656/171 +f 254/658/173 255/875/172 223/659/172 +f 253/660/174 254/658/173 222/607/173 +f 252/662/175 253/876/174 221/663/174 +f 251/664/176 252/662/175 220/605/175 +f 218/602/177 250/667/177 251/665/176 +f 217/601/178 249/877/178 250/667/177 +f 248/668/148 249/878/178 217/669/178 +f 47/572/15 303/674/15 302/670/44 +f 34/536/42 290/675/42 289/671/6 +f 61/546/10 317/676/10 316/672/43 +f 47/572/15 48/570/41 304/673/41 +f 35/534/18 291/678/18 290/675/42 +f 62/544/40 318/680/40 317/676/10 +f 49/569/7 305/682/7 304/673/41 +f 35/534/18 36/532/39 292/677/39 +f 62/544/40 63/542/14 319/679/14 +f 49/569/7 50/568/38 306/681/38 +f 37/529/13 293/683/13 292/677/39 +f 64/539/36 320/684/36 319/679/14 +f 51/565/19 307/685/19 306/681/38 +f 38/527/37 294/686/37 293/683/13 +f 33/538/6 289/671/6 320/684/36 +f 52/563/35 308/688/35 307/685/19 +f 39/526/17 295/689/17 294/686/37 +f 52/563/35 53/562/12 309/687/12 +f 40/522/50 296/690/50 295/689/17 +f 54/560/49 310/691/49 309/687/12 +f 41/524/2 297/879/2 296/690/50 +f 55/558/16 311/693/16 310/691/49 +f 42/518/48 298/694/48 297/692/2 +f 56/555/47 312/695/47 311/693/16 +f 43/515/21 299/696/21 298/694/48 +f 57/554/1 313/697/1 312/695/47 +f 44/517/46 300/698/46 299/696/21 +f 58/552/45 314/699/45 313/697/1 +f 45/577/11 301/700/11 300/698/46 +f 59/550/20 315/701/20 314/699/45 +f 46/575/44 302/670/44 301/700/11 +f 60/548/43 316/672/43 315/701/20 +f 261/335/4 325/880/4 326/702/4 +f 262/328/4 326/702/4 327/703/4 +f 263/385/4 327/881/4 328/704/4 +f 264/383/4 328/704/4 329/705/4 +f 265/706/4 329/882/4 330/707/4 +f 266/374/4 330/707/4 331/708/4 +f 331/709/4 332/710/4 268/366/4 +f 332/710/4 333/883/4 269/362/4 +f 333/711/4 334/712/4 270/358/4 +f 334/712/4 335/884/4 271/354/4 +f 271/354/4 335/885/4 336/713/4 +f 272/343/4 336/713/4 337/714/4 +f 273/336/4 337/886/4 338/715/4 +f 338/715/4 339/887/4 275/331/4 +f 275/331/4 339/888/4 340/716/4 +f 276/322/4 340/716/4 341/717/4 +f 341/718/4 342/719/4 278/381/4 +f 342/719/4 343/889/4 279/376/4 +f 343/720/4 344/721/4 280/372/4 +f 344/721/4 345/890/4 281/368/4 +f 345/722/4 346/723/4 282/364/4 +f 346/723/4 347/891/4 283/360/4 +f 283/360/4 347/892/4 348/724/4 +f 348/724/4 349/893/4 285/351/4 +f 285/351/4 349/894/4 350/725/4 +f 350/725/4 351/895/4 287/339/4 +f 287/339/4 351/896/4 352/726/4 +f 288/333/4 352/726/4 321/727/4 +f 257/325/4 321/897/4 322/728/4 +f 322/728/4 323/898/4 259/340/4 +f 323/729/4 324/899/4 260/341/4 +f 260/341/4 324/899/4 325/730/4 +f 326/731/37 358/799/37 359/732/17 +f 340/734/35 372/802/35 373/735/12 +f 327/733/17 359/732/17 360/737/50 +f 341/739/12 373/900/12 374/740/49 +f 328/738/50 360/737/50 361/742/2 +f 342/741/49 374/740/49 375/744/16 +f 329/746/2 361/901/2 362/747/48 +f 343/745/16 375/744/16 376/749/47 +f 330/748/48 362/747/48 363/751/21 +f 344/750/47 376/749/47 377/753/1 +f 331/752/21 363/751/21 364/755/46 +f 345/757/1 377/902/1 378/758/45 +f 332/756/46 364/755/46 365/760/11 +f 346/759/45 378/758/45 379/762/20 +f 333/764/11 365/903/11 366/765/44 +f 347/763/20 379/762/20 380/767/43 +f 334/766/44 366/765/44 367/769/15 +f 321/771/6 353/904/6 354/772/42 +f 348/768/43 380/767/43 381/774/10 +f 336/776/41 335/770/15 367/769/15 +f 322/773/42 354/772/42 355/778/18 +f 349/780/10 381/905/10 382/781/40 +f 336/776/41 368/777/41 369/783/7 +f 323/779/18 355/778/18 356/785/39 +f 350/782/40 382/781/40 383/787/14 +f 337/789/7 369/906/7 370/790/38 +f 324/786/39 356/785/39 357/792/13 +f 351/788/14 383/787/14 384/794/36 +f 338/791/38 370/790/38 371/796/19 +f 325/798/13 357/907/13 358/799/37 +f 352/795/36 384/794/36 353/800/6 +f 339/797/19 371/796/19 372/802/35 +f 293/683/27 294/686/27 358/803/27 +f 294/686/27 295/689/27 359/805/27 +f 295/689/27 296/690/27 360/806/27 +f 296/690/27 297/879/27 361/808/27 +f 297/692/27 298/694/27 362/809/27 +f 298/694/27 299/696/27 363/811/27 +f 299/696/27 300/698/27 364/812/27 +f 301/700/27 365/908/27 364/812/27 +f 302/670/27 366/815/27 365/814/27 +f 303/674/27 367/909/27 366/815/27 +f 304/673/27 368/818/27 367/816/27 +f 304/673/27 305/682/27 369/817/27 +f 305/682/27 306/681/27 370/819/27 +f 307/685/27 371/910/27 370/819/27 +f 307/685/27 308/688/27 372/821/27 +f 308/688/27 309/687/27 373/823/27 +f 310/691/27 374/825/27 373/824/27 +f 311/693/27 375/911/27 374/825/27 +f 312/695/27 376/827/27 375/826/27 +f 313/697/27 377/912/27 376/827/27 +f 314/699/27 378/829/27 377/828/27 +f 315/701/27 379/913/27 378/829/27 +f 315/701/27 316/672/27 380/830/27 +f 317/676/27 381/914/27 380/830/27 +f 317/676/27 318/680/27 382/832/27 +f 319/679/27 383/915/27 382/832/27 +f 319/679/27 320/684/27 384/834/27 +f 320/684/27 289/671/27 353/836/27 +f 289/671/27 290/675/27 354/837/27 +f 291/678/27 355/916/27 354/837/27 +f 292/677/27 356/841/27 355/839/27 +f 292/677/27 293/683/27 357/840/27 +o Lights +v -0.937500 2.494797 3.181982 +v -0.937500 2.318020 3.005205 +v -0.937500 2.671573 3.005205 +v -0.937500 2.494797 2.828429 +v -0.937500 5.375001 4.125002 +v -0.937500 5.625001 4.125002 +v -0.937500 5.375001 4.375002 +v -0.937500 5.625001 4.375002 +v -0.687500 5.375001 4.125002 +v -0.687500 5.625001 4.125002 +v -0.687500 5.375001 4.375002 +v -0.687500 5.625001 4.375002 +v -0.687500 5.375001 -4.375000 +v -0.687500 5.625001 -4.375000 +v -0.687500 5.375001 -4.125000 +v -0.687500 5.625001 -4.125000 +v -0.937500 5.375001 -4.375000 +v -0.937500 5.625001 -4.375000 +v -0.937500 5.375001 -4.125000 +v -0.937500 5.625001 -4.125000 +v -0.937500 1.375000 -0.124999 +v -0.937500 1.375000 0.125001 +v -0.937500 1.125000 -0.124999 +v -0.937500 1.125000 0.125001 +v -0.687500 1.375000 -0.124999 +v -0.687500 1.375000 0.125001 +v -0.687500 1.125000 -0.124999 +v -0.687500 1.125000 0.125001 +v -0.687500 9.875002 -0.124999 +v -0.687500 9.875002 0.125001 +v -0.687500 9.625002 -0.124999 +v -0.687500 9.625002 0.125001 +v -0.937500 9.875002 -0.124999 +v -0.937500 9.875002 0.125001 +v -0.937500 9.625002 -0.124999 +v -0.937500 9.625002 0.125001 +v -0.687500 2.494797 2.828429 +v -0.687500 2.671573 3.005205 +v -0.687500 2.318020 3.005205 +v -0.687500 2.494797 3.181982 +v -0.687500 8.505206 -3.181980 +v -0.687500 8.681982 -3.005203 +v -0.687500 8.328429 -3.005203 +v -0.687500 8.505205 -2.828426 +v -0.937500 8.505206 -3.181980 +v -0.937500 8.681982 -3.005203 +v -0.937500 8.328429 -3.005203 +v -0.937500 8.505205 -2.828426 +v -0.937500 2.671574 -3.005204 +v -0.937500 2.494797 -2.828427 +v -0.937500 2.494797 -3.181981 +v -0.937500 2.318020 -3.005204 +v -0.687500 2.671574 -3.005204 +v -0.687500 2.494797 -2.828427 +v -0.687500 2.494797 -3.181981 +v -0.687500 2.318020 -3.005204 +v -0.687500 8.681982 3.005205 +v -0.687500 8.505205 3.181982 +v -0.687500 8.505205 2.828429 +v -0.687500 8.328428 3.005205 +v -0.937500 8.681982 3.005205 +v -0.937500 8.505205 3.181982 +v -0.937500 8.505205 2.828429 +v -0.937500 8.328428 3.005205 +v 0.937500 2.494797 -3.181982 +v 0.937500 2.318020 -3.005205 +v 0.937500 2.671573 -3.005205 +v 0.937500 2.494797 -2.828429 +v 0.937500 5.375001 -4.125002 +v 0.937500 5.625001 -4.125002 +v 0.937500 5.375001 -4.375002 +v 0.937500 5.625001 -4.375002 +v 0.687500 5.375001 -4.125002 +v 0.687500 5.625001 -4.125002 +v 0.687500 5.375001 -4.375002 +v 0.687500 5.625001 -4.375002 +v 0.687500 5.375001 4.375000 +v 0.687500 5.625001 4.375000 +v 0.687500 5.375001 4.125000 +v 0.687500 5.625001 4.125000 +v 0.937500 5.375001 4.375000 +v 0.937500 5.625001 4.375000 +v 0.937500 5.375001 4.125000 +v 0.937500 5.625001 4.125000 +v 0.937500 1.375000 0.124999 +v 0.937500 1.375000 -0.125001 +v 0.937500 1.125000 0.124999 +v 0.937500 1.125000 -0.125001 +v 0.687500 1.375000 0.124999 +v 0.687500 1.375000 -0.125001 +v 0.687500 1.125000 0.124999 +v 0.687500 1.125000 -0.125001 +v 0.687500 9.875002 0.124999 +v 0.687500 9.875002 -0.125001 +v 0.687500 9.625002 0.124999 +v 0.687500 9.625002 -0.125001 +v 0.937500 9.875002 0.124999 +v 0.937500 9.875002 -0.125001 +v 0.937500 9.625002 0.124999 +v 0.937500 9.625002 -0.125001 +v 0.687500 2.494797 -2.828429 +v 0.687500 2.671573 -3.005205 +v 0.687500 2.318020 -3.005205 +v 0.687500 2.494797 -3.181982 +v 0.687500 8.505206 3.181980 +v 0.687500 8.681982 3.005203 +v 0.687500 8.328429 3.005203 +v 0.687500 8.505205 2.828426 +v 0.937500 8.505206 3.181980 +v 0.937500 8.681982 3.005203 +v 0.937500 8.328429 3.005203 +v 0.937500 8.505205 2.828426 +v 0.937500 2.671574 3.005204 +v 0.937500 2.494797 2.828427 +v 0.937500 2.494797 3.181981 +v 0.937500 2.318020 3.005204 +v 0.687500 2.671574 3.005204 +v 0.687500 2.494797 2.828427 +v 0.687500 2.494797 3.181981 +v 0.687500 2.318020 3.005204 +v 0.687500 8.681982 -3.005205 +v 0.687500 8.505205 -3.181982 +v 0.687500 8.505205 -2.828429 +v 0.687500 8.328428 -3.005205 +v 0.937500 8.681982 -3.005205 +v 0.937500 8.505205 -3.181982 +v 0.937500 8.505205 -2.828429 +v 0.937500 8.328428 -3.005205 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.455357 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.455357 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.611940 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.611940 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 649/917/179 647/918/179 645/919/179 +f 646/920/180 652/921/180 650/922/180 +f 647/918/181 652/921/181 648/923/181 +f 645/924/182 648/923/182 646/925/182 +f 651/926/183 650/927/183 652/921/183 +f 654/928/183 655/929/183 653/930/183 +f 660/931/182 657/932/182 659/933/182 +f 658/934/184 653/930/184 657/932/184 +f 659/935/179 653/930/179 655/936/179 +f 656/937/180 658/934/180 660/938/180 +f 665/939/184 663/940/184 661/941/184 +f 662/942/181 668/943/181 666/944/181 +f 663/940/179 668/943/179 664/945/179 +f 661/946/182 664/945/182 662/947/182 +f 668/943/183 665/948/183 666/949/183 +f 670/950/183 671/951/183 669/952/183 +f 676/953/182 673/954/182 675/955/182 +f 674/956/180 669/952/180 673/954/180 +f 675/957/184 669/952/184 671/958/184 +f 672/959/181 674/956/181 676/960/181 +f 677/961/185 642/962/185 644/963/185 +f 643/964/186 680/965/186 678/966/186 +f 642/962/187 680/965/187 641/967/187 +f 644/968/182 641/967/182 643/969/182 +f 679/970/183 678/971/183 680/965/183 +f 682/972/183 683/973/183 681/974/183 +f 687/975/182 686/976/182 685/977/182 +f 686/976/188 681/974/188 685/977/188 +f 687/978/185 681/974/185 683/979/185 +f 684/980/186 686/976/186 688/981/186 +f 693/982/188 691/983/188 689/984/188 +f 690/985/187 696/986/187 694/987/187 +f 691/983/185 696/986/185 692/988/185 +f 689/989/182 692/988/182 690/990/182 +f 696/986/183 693/991/183 694/992/183 +f 698/993/183 699/994/183 697/995/183 +f 704/996/182 701/997/182 703/998/182 +f 702/999/186 697/995/186 701/997/186 +f 703/1000/188 697/995/188 699/1001/188 +f 700/1002/187 702/999/187 704/1003/187 +f 713/1004/179 711/1005/179 709/1006/179 +f 710/1007/180 716/1008/180 714/1009/180 +f 711/1005/184 716/1008/184 712/1010/184 +f 709/1011/183 712/1010/183 710/1012/183 +f 715/1013/182 714/1014/182 716/1008/182 +f 718/1015/182 719/1016/182 717/1017/182 +f 724/1018/183 721/1019/183 723/1020/183 +f 722/1021/181 717/1017/181 721/1019/181 +f 723/1022/179 717/1017/179 719/1023/179 +f 720/1024/180 722/1021/180 724/1025/180 +f 729/1026/181 727/1027/181 725/1028/181 +f 726/1029/184 732/1030/184 730/1031/184 +f 727/1027/179 732/1030/179 728/1032/179 +f 725/1033/183 728/1032/183 726/1034/183 +f 732/1030/182 729/1035/182 730/1036/182 +f 734/1037/182 735/1038/182 733/1039/182 +f 740/1040/183 737/1041/183 739/1042/183 +f 738/1043/180 733/1039/180 737/1041/180 +f 739/1044/181 733/1039/181 735/1045/181 +f 736/1046/184 738/1043/184 740/1047/184 +f 741/1048/187 706/1049/187 708/1050/187 +f 707/1051/188 744/1052/188 742/1053/188 +f 706/1049/185 744/1052/185 705/1054/185 +f 708/1055/183 705/1054/183 707/1056/183 +f 743/1057/182 742/1058/182 744/1052/182 +f 746/1059/182 747/1060/182 745/1061/182 +f 751/1062/183 750/1063/183 749/1064/183 +f 750/1063/186 745/1061/186 749/1064/186 +f 751/1065/187 745/1061/187 747/1066/187 +f 748/1067/188 750/1063/188 752/1068/188 +f 757/1069/186 755/1070/186 753/1071/186 +f 754/1072/185 760/1073/185 758/1074/185 +f 755/1070/187 760/1073/187 756/1075/187 +f 753/1076/183 756/1075/183 754/1077/183 +f 760/1073/182 757/1078/182 758/1079/182 +f 762/1080/182 763/1081/182 761/1082/182 +f 768/1083/183 765/1084/183 767/1085/183 +f 766/1086/188 761/1082/188 765/1084/188 +f 767/1087/186 761/1082/186 763/1088/186 +f 764/1089/185 766/1086/185 768/1090/185 +f 649/917/179 651/926/179 647/918/179 +f 646/920/180 648/923/180 652/921/180 +f 647/918/181 651/926/181 652/921/181 +f 645/924/182 647/918/182 648/923/182 +f 651/926/183 649/1091/183 650/927/183 +f 654/928/183 656/1092/183 655/929/183 +f 660/931/182 658/934/182 657/932/182 +f 658/934/184 654/928/184 653/930/184 +f 659/935/179 657/932/179 653/930/179 +f 656/937/180 654/928/180 658/934/180 +f 665/939/184 667/1093/184 663/940/184 +f 662/942/181 664/945/181 668/943/181 +f 663/940/179 667/1093/179 668/943/179 +f 661/946/182 663/940/182 664/945/182 +f 668/943/183 667/1093/183 665/948/183 +f 670/950/183 672/1094/183 671/951/183 +f 676/953/182 674/956/182 673/954/182 +f 674/956/180 670/950/180 669/952/180 +f 675/957/184 673/954/184 669/952/184 +f 672/959/181 670/950/181 674/956/181 +f 677/961/185 679/970/185 642/962/185 +f 643/964/186 641/967/186 680/965/186 +f 642/962/187 679/970/187 680/965/187 +f 644/968/182 642/962/182 641/967/182 +f 679/970/183 677/1095/183 678/971/183 +f 682/972/183 684/1096/183 683/973/183 +f 687/975/182 688/1097/182 686/976/182 +f 686/976/188 682/972/188 681/974/188 +f 687/978/185 685/977/185 681/974/185 +f 684/980/186 682/972/186 686/976/186 +f 693/982/188 695/1098/188 691/983/188 +f 690/985/187 692/988/187 696/986/187 +f 691/983/185 695/1098/185 696/986/185 +f 689/989/182 691/983/182 692/988/182 +f 696/986/183 695/1098/183 693/991/183 +f 698/993/183 700/1099/183 699/994/183 +f 704/996/182 702/999/182 701/997/182 +f 702/999/186 698/993/186 697/995/186 +f 703/1000/188 701/997/188 697/995/188 +f 700/1002/187 698/993/187 702/999/187 +f 713/1004/179 715/1013/179 711/1005/179 +f 710/1007/180 712/1010/180 716/1008/180 +f 711/1005/184 715/1013/184 716/1008/184 +f 709/1011/183 711/1005/183 712/1010/183 +f 715/1013/182 713/1100/182 714/1014/182 +f 718/1015/182 720/1101/182 719/1016/182 +f 724/1018/183 722/1021/183 721/1019/183 +f 722/1021/181 718/1015/181 717/1017/181 +f 723/1022/179 721/1019/179 717/1017/179 +f 720/1024/180 718/1015/180 722/1021/180 +f 729/1026/181 731/1102/181 727/1027/181 +f 726/1029/184 728/1032/184 732/1030/184 +f 727/1027/179 731/1102/179 732/1030/179 +f 725/1033/183 727/1027/183 728/1032/183 +f 732/1030/182 731/1102/182 729/1035/182 +f 734/1037/182 736/1103/182 735/1038/182 +f 740/1040/183 738/1043/183 737/1041/183 +f 738/1043/180 734/1037/180 733/1039/180 +f 739/1044/181 737/1041/181 733/1039/181 +f 736/1046/184 734/1037/184 738/1043/184 +f 741/1048/187 743/1057/187 706/1049/187 +f 707/1051/188 705/1054/188 744/1052/188 +f 706/1049/185 743/1057/185 744/1052/185 +f 708/1055/183 706/1049/183 705/1054/183 +f 743/1057/182 741/1104/182 742/1058/182 +f 746/1059/182 748/1105/182 747/1060/182 +f 751/1062/183 752/1106/183 750/1063/183 +f 750/1063/186 746/1059/186 745/1061/186 +f 751/1065/187 749/1064/187 745/1061/187 +f 748/1067/188 746/1059/188 750/1063/188 +f 757/1069/186 759/1107/186 755/1070/186 +f 754/1072/185 756/1075/185 760/1073/185 +f 755/1070/187 759/1107/187 760/1073/187 +f 753/1076/183 755/1070/183 756/1075/183 +f 760/1073/182 759/1107/182 757/1078/182 +f 762/1080/182 764/1108/182 763/1081/182 +f 768/1083/183 766/1086/183 765/1084/183 +f 766/1086/188 762/1080/188 761/1082/188 +f 767/1087/186 765/1084/186 761/1082/186 +f 764/1089/185 762/1080/185 766/1086/185 +o Plasma +v -0.250000 5.500000 -4.250000 +v -0.250000 6.329134 -4.168337 +v -0.249999 7.126407 -3.926488 +v -0.250000 7.861172 -3.533745 +v -0.250000 8.505203 -3.005203 +v -0.250000 9.033746 -2.361173 +v -0.250000 9.426489 -1.626404 +v -0.250000 9.668339 -0.829134 +v -0.250000 9.750000 0.000000 +v -0.250000 9.668339 0.829134 +v -0.250000 9.426489 1.626404 +v -0.250000 9.033746 2.361174 +v -0.250000 8.505203 3.005203 +v -0.250000 7.861172 3.533746 +v -0.249999 7.126402 3.926488 +v -0.250000 6.329134 4.168338 +v -0.250000 5.500000 4.250000 +v -0.250000 4.670863 4.168337 +v -0.250000 3.873595 3.926487 +v -0.250000 3.138825 3.533745 +v -0.250000 2.494793 3.005201 +v -0.250000 1.966251 2.361171 +v -0.250000 1.573512 1.626402 +v -0.250000 1.331663 0.829130 +v -0.250000 1.250000 -0.000004 +v -0.250000 1.331663 -0.829138 +v -0.250000 1.573512 -1.626409 +v -0.250000 1.966255 -2.361177 +v -0.250000 2.494802 -3.005207 +v -0.250000 3.138829 -3.533749 +v -0.250000 3.873603 -3.926490 +v -0.250000 4.670871 -4.168338 +v 0.250000 5.500000 -4.250000 +v 0.250000 6.329134 -4.168337 +v 0.250001 7.126407 -3.926488 +v 0.250000 7.861172 -3.533745 +v 0.250000 8.505203 -3.005203 +v 0.250000 9.033746 -2.361173 +v 0.250000 9.426489 -1.626404 +v 0.250000 9.668339 -0.829134 +v 0.250000 9.750000 0.000000 +v 0.250000 9.668339 0.829134 +v 0.250000 9.426489 1.626404 +v 0.250000 9.033746 2.361174 +v 0.250000 8.505203 3.005203 +v 0.250000 7.861172 3.533746 +v 0.250001 7.126402 3.926488 +v 0.250000 6.329134 4.168338 +v 0.250000 5.500000 4.250000 +v 0.250000 4.670863 4.168337 +v 0.250000 3.873595 3.926487 +v 0.250000 3.138825 3.533745 +v 0.250000 2.494793 3.005201 +v 0.250000 1.966251 2.361171 +v 0.250000 1.573512 1.626402 +v 0.250000 1.331663 0.829130 +v 0.250000 1.250000 -0.000004 +v 0.250000 1.331663 -0.829138 +v 0.250000 1.573512 -1.626409 +v 0.250000 1.966255 -2.361177 +v 0.250000 2.494802 -3.005207 +v 0.250000 3.138829 -3.533749 +v 0.250000 3.873603 -3.926490 +v 0.250000 4.670871 -4.168338 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.749958 +vt 0.500000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.249958 +vn 0.0000 0.9808 -0.1951 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.8315 0.5556 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.9808 0.1951 +vn 0.0000 -0.9808 0.1951 +vn 0.0000 0.9239 0.3827 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.8315 0.5556 +vn 0.0000 -0.9808 -0.1951 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.5556 0.8315 +vn 0.0000 -0.8315 -0.5556 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.1951 -0.9808 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.1951 0.9808 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.5556 -0.8315 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.5556 -0.8315 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.1951 0.9808 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.1951 -0.9808 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.8315 -0.5556 +vn 0.0000 -0.5556 0.8315 +s 1 +f 776/1109/189 807/1110/190 775/1111/190 +f 790/1112/191 821/1113/192 789/1114/192 +f 777/1115/193 808/1116/189 776/1109/189 +f 791/1117/194 822/1118/191 790/1112/191 +f 778/1119/195 809/1120/193 777/1121/193 +f 792/1122/196 823/1123/194 791/1124/194 +f 779/1125/197 810/1126/195 778/1119/195 +f 793/1127/198 824/1128/196 792/1122/196 +f 780/1129/199 811/1130/197 779/1131/197 +f 793/1132/198 826/1133/200 825/1134/198 +f 781/1135/201 812/1136/199 780/1129/199 +f 795/1137/202 826/1133/200 794/1138/200 +f 782/1139/203 813/1140/201 781/1141/201 +f 796/1142/204 827/1143/202 795/1144/202 +f 783/1145/205 814/1146/203 782/1139/203 +f 770/1147/206 801/1148/207 769/1149/207 +f 797/1150/208 828/1151/204 796/1142/204 +f 783/1152/205 816/1153/209 815/1154/205 +f 771/1155/210 802/1156/206 770/1147/206 +f 797/1157/208 830/1158/211 829/1159/208 +f 785/1160/212 816/1153/209 784/1161/209 +f 772/1162/213 803/1163/210 771/1164/210 +f 799/1165/214 830/1158/211 798/1166/211 +f 786/1167/215 817/1168/212 785/1169/212 +f 773/1170/216 804/1171/213 772/1162/213 +f 800/1172/217 831/1173/214 799/1174/214 +f 787/1175/218 818/1176/215 786/1167/215 +f 774/1177/219 805/1178/216 773/1179/216 +f 769/1180/207 832/1181/217 800/1172/217 +f 788/1182/220 819/1183/218 787/1184/218 +f 775/1185/190 806/1186/219 774/1177/219 +f 788/1182/220 821/1187/192 820/1188/220 +f 776/1109/189 808/1116/189 807/1110/190 +f 790/1112/191 822/1118/191 821/1113/192 +f 777/1115/193 809/1189/193 808/1116/189 +f 791/1117/194 823/1190/194 822/1118/191 +f 778/1119/195 810/1126/195 809/1120/193 +f 792/1122/196 824/1128/196 823/1123/194 +f 779/1125/197 811/1191/197 810/1126/195 +f 793/1127/198 825/1192/198 824/1128/196 +f 780/1129/199 812/1136/199 811/1130/197 +f 793/1132/198 794/1138/200 826/1133/200 +f 781/1135/201 813/1193/201 812/1136/199 +f 795/1137/202 827/1194/202 826/1133/200 +f 782/1139/203 814/1146/203 813/1140/201 +f 796/1142/204 828/1151/204 827/1143/202 +f 783/1145/205 815/1195/205 814/1146/203 +f 770/1147/206 802/1156/206 801/1148/207 +f 797/1150/208 829/1196/208 828/1151/204 +f 783/1152/205 784/1161/209 816/1153/209 +f 771/1155/210 803/1197/210 802/1156/206 +f 797/1157/208 798/1166/211 830/1158/211 +f 785/1160/212 817/1198/212 816/1153/209 +f 772/1162/213 804/1171/213 803/1163/210 +f 799/1165/214 831/1199/214 830/1158/211 +f 786/1167/215 818/1176/215 817/1168/212 +f 773/1170/216 805/1200/216 804/1171/213 +f 800/1172/217 832/1181/217 831/1173/214 +f 787/1175/218 819/1201/218 818/1176/215 +f 774/1177/219 806/1186/219 805/1178/216 +f 769/1180/207 801/1202/207 832/1181/217 +f 788/1182/220 820/1188/220 819/1183/218 +f 775/1185/190 807/1203/190 806/1186/219 +f 788/1182/220 789/1204/192 821/1187/192 +o Base +v -2.500000 0.000000 4.500000 +v 2.500000 0.000000 4.500000 +v -2.500000 0.000000 -4.500000 +v 2.500000 0.000000 -4.500000 +v 1.750000 9.750000 -0.499999 +v 1.250000 10.250000 -0.499999 +v 1.250000 10.250000 0.500001 +v 1.750000 9.750000 0.500001 +v -1.250000 10.250000 -0.499999 +v -1.750000 9.750000 -0.499999 +v -1.750000 9.750000 0.500001 +v -1.250000 10.250000 0.500001 +v 1.750000 6.500000 -0.499999 +v 1.750000 6.500000 0.500001 +v -1.750000 6.500000 -0.499999 +v -1.750000 6.500000 0.500001 +v -2.500000 1.000000 -4.500000 +v -2.500000 1.000000 4.500000 +v 2.500000 1.000000 4.500000 +v 2.500000 1.000000 -4.500000 +v -2.000000 2.000000 0.500000 +v -1.500000 2.000000 0.500000 +v -2.000000 2.000000 -0.500000 +v -1.500000 2.000000 -0.500000 +v -2.000000 4.500000 -0.500000 +v -2.000000 4.500000 0.500000 +v -1.500000 4.500000 0.500000 +v -1.500000 4.500000 -0.500000 +v -2.500000 1.000000 0.500000 +v -1.000000 1.000000 0.500000 +v -2.500000 1.000000 -0.500000 +v -1.000000 1.000000 -0.500000 +v -1.250000 5.500000 1.250001 +v -1.250000 5.978355 1.154850 +v -1.250000 6.383883 0.883884 +v -1.250000 6.654850 0.478355 +v -1.250000 6.750000 0.000001 +v -1.250000 6.654850 -0.478354 +v -1.250000 6.383883 -0.883883 +v -1.250000 5.978355 -1.154848 +v -1.250000 5.500000 -1.249999 +v -1.250000 5.021646 -1.154849 +v -1.250000 4.616117 -0.883883 +v -1.250000 4.345151 -0.478354 +v -1.250000 4.250000 0.000001 +v -1.250000 4.345151 0.478355 +v -1.250000 4.616117 0.883884 +v -1.250000 5.021647 1.154850 +v -2.250000 5.500000 1.250001 +v -2.250000 5.978355 1.154850 +v -2.250000 6.383883 0.883884 +v -2.250000 6.654850 0.478355 +v -2.250000 6.750000 0.000001 +v -2.250000 6.654850 -0.478354 +v -2.250000 6.383883 -0.883883 +v -2.250000 5.978355 -1.154848 +v -2.250000 5.500000 -1.249999 +v -2.250000 5.021646 -1.154848 +v -2.250000 4.616117 -0.883883 +v -2.250000 4.345151 -0.478354 +v -2.250000 4.250000 0.000001 +v -2.250000 4.345151 0.478355 +v -2.250000 4.616117 0.883884 +v -2.250000 5.021647 1.154850 +v -2.250000 5.500001 1.000001 +v -2.250000 5.882684 0.923881 +v -2.250000 6.207108 0.707108 +v -2.250000 6.423881 0.382685 +v -2.250000 6.500001 0.000001 +v -2.250000 6.423881 -0.382683 +v -2.250000 6.207108 -0.707106 +v -2.250000 5.882684 -0.923879 +v -2.250000 5.500001 -0.999999 +v -2.250000 5.117317 -0.923879 +v -2.250000 4.792893 -0.707106 +v -2.250000 4.576121 -0.382683 +v -2.250000 4.500001 0.000001 +v -2.250000 4.576121 0.382685 +v -2.250000 4.792893 0.707108 +v -2.250000 5.117318 0.923881 +v -2.250000 5.500000 0.750001 +v -2.250000 5.787013 0.692910 +v -2.250000 6.030331 0.530331 +v -2.250000 6.192910 0.287013 +v -2.250000 6.250000 0.000001 +v -2.250000 6.192910 -0.287012 +v -2.250000 6.030331 -0.530329 +v -2.250000 5.787013 -0.692909 +v -2.250000 5.500000 -0.749999 +v -2.250000 5.212988 -0.692909 +v -2.250000 4.969670 -0.530330 +v -2.250000 4.807091 -0.287012 +v -2.250000 4.750000 0.000001 +v -2.250000 4.807091 0.287013 +v -2.250000 4.969670 0.530331 +v -2.250000 5.212988 0.692910 +v -2.000000 5.882684 0.923881 +v -2.000000 5.500001 1.000001 +v -2.000000 6.207108 0.707108 +v -2.000000 6.423881 0.382685 +v -2.000000 6.500001 0.000001 +v -2.000000 6.423881 -0.382683 +v -2.000000 6.207108 -0.707106 +v -2.000000 5.882684 -0.923879 +v -2.000000 5.500001 -0.999999 +v -2.000000 5.117317 -0.923879 +v -2.000000 4.792893 -0.707106 +v -2.000000 4.576121 -0.382683 +v -2.000000 4.500001 0.000001 +v -2.000000 4.576121 0.382685 +v -2.000000 4.792893 0.707108 +v -2.000000 5.117318 0.923881 +v -2.000000 5.787013 0.692910 +v -2.000000 5.500000 0.750001 +v -2.000000 6.030331 0.530331 +v -2.000000 6.192910 0.287013 +v -2.000000 6.250000 0.000001 +v -2.000000 6.192910 -0.287012 +v -2.000000 6.030331 -0.530329 +v -2.000000 5.787013 -0.692909 +v -2.000000 5.500000 -0.749999 +v -2.000000 5.212988 -0.692909 +v -2.000000 4.969670 -0.530330 +v -2.000000 4.807091 -0.287012 +v -2.000000 4.750000 0.000001 +v -2.000000 4.807091 0.287013 +v -2.000000 4.969670 0.530331 +v -2.000000 5.212988 0.692910 +v -1.250000 1.000000 -4.250000 +v -2.250000 1.000000 -4.250000 +v -1.250000 1.000000 -2.250000 +v -2.250000 1.000000 -2.250000 +v -1.250000 2.000000 -2.250000 +v -1.250000 2.000000 -4.250000 +v -2.250000 2.000000 -4.250000 +v -2.250000 2.000000 -2.250000 +v -1.500000 2.000000 -4.000000 +v -2.000000 2.000000 -4.000000 +v -1.500000 2.000000 -3.500000 +v -2.000000 2.000000 -3.500000 +v -1.500000 2.125000 -3.500000 +v -1.500000 2.125000 -4.000000 +v -2.000000 2.125000 -4.000000 +v -2.000000 2.125000 -3.500000 +v -1.625000 2.250000 -3.625000 +v -1.625000 2.250000 -3.875000 +v -1.875000 2.250000 -3.875000 +v -1.875000 2.250000 -3.625000 +v -1.875000 3.125000 -3.625000 +v -2.000000 3.000000 -3.625000 +v -1.875000 3.000000 -3.500000 +v -1.875000 2.625000 -3.625000 +v -1.875000 2.750000 -3.500000 +v -2.000000 2.750000 -3.625000 +v -1.875000 3.125000 -3.875000 +v -1.875000 3.000000 -4.000000 +v -2.000000 3.000000 -3.875000 +v -1.875000 2.625000 -3.875000 +v -2.000000 2.750000 -3.875000 +v -1.875000 2.750000 -4.000000 +v -1.625000 3.125000 -3.625000 +v -1.625000 3.000000 -3.500000 +v -1.500000 3.000000 -3.625000 +v -1.625000 2.625000 -3.625000 +v -1.500000 2.750000 -3.625000 +v -1.625000 2.750000 -3.500000 +v -1.625000 3.000000 -4.000000 +v -1.625000 3.125000 -3.875000 +v -1.500000 3.000000 -3.875000 +v -1.625000 2.625000 -3.875000 +v -1.625000 2.750000 -4.000000 +v -1.500000 2.750000 -3.875000 +v -2.000000 1.000000 1.000000 +v -1.500000 1.000000 1.000000 +v -2.000000 1.500000 0.500000 +v -1.500000 1.500000 0.500000 +v -2.000000 1.000000 0.500000 +v -1.500000 1.000000 0.500000 +v -1.500000 1.000000 -1.000000 +v -2.000000 1.000000 -1.000000 +v -1.500000 1.500000 -0.500000 +v -2.000000 1.500000 -0.500000 +v -1.500000 1.000000 -0.500000 +v -2.000000 1.000000 -0.500000 +v -1.625000 1.375000 -2.250000 +v -1.875000 1.375000 -2.250000 +v -1.625000 1.625000 -2.250000 +v -1.875000 1.625000 -2.250000 +v -1.625000 2.875000 -0.500000 +v -1.875000 2.875000 -0.500000 +v -1.625000 3.125000 -0.500000 +v -1.875000 3.125000 -0.500000 +v -1.625000 2.500000 -0.937500 +v -1.625000 2.000000 -1.375000 +v -1.625000 1.750000 -1.812500 +v -1.875000 1.750000 -1.812500 +v -1.875000 2.000000 -1.375000 +v -1.875000 2.500000 -0.937500 +v -1.875000 2.250000 -0.937500 +v -1.875000 1.750000 -1.375000 +v -1.875000 1.500000 -1.812500 +v -1.625000 1.500000 -1.812500 +v -1.625000 1.750000 -1.375000 +v -1.625000 2.250000 -0.937500 +v -0.500000 1.000000 -2.250000 +v 0.500000 1.000000 -2.250000 +v -0.500000 1.000000 -4.250000 +v 0.500000 1.000000 -4.250000 +v -0.500000 1.500000 -3.750000 +v -0.500000 1.500000 -2.750000 +v 0.500000 1.500000 -2.750000 +v 0.500000 1.500000 -3.750000 +v -1.750000 6.500000 0.500001 +v -1.750000 6.500000 -0.499999 +v 1.750000 6.500000 0.500001 +v 1.750000 6.500000 -0.499999 +v -1.250000 10.250000 0.500001 +v -1.750000 9.750000 0.500001 +v -1.750000 9.750000 -0.499999 +v -1.250000 10.250000 -0.499999 +v 1.750000 9.750000 0.500001 +v 1.250000 10.250000 0.500001 +v 1.250000 10.250000 -0.499999 +v 1.750000 9.750000 -0.499999 +v 2.000000 2.000000 -0.500000 +v 1.500000 2.000000 -0.500000 +v 2.000000 2.000000 0.500000 +v 1.500000 2.000000 0.500000 +v 2.000000 4.500000 0.500000 +v 2.000000 4.500000 -0.500000 +v 1.500000 4.500000 -0.500000 +v 1.500000 4.500000 0.500000 +v 2.500000 1.000000 -0.500000 +v 1.000000 1.000000 -0.500000 +v 2.500000 1.000000 0.500000 +v 1.000000 1.000000 0.500000 +v 1.250000 5.500000 -1.250001 +v 1.250000 5.978355 -1.154850 +v 1.250000 6.383883 -0.883885 +v 1.250000 6.654850 -0.478356 +v 1.250000 6.750000 -0.000001 +v 1.250000 6.654850 0.478353 +v 1.250000 6.383883 0.883882 +v 1.250000 5.978355 1.154848 +v 1.250000 5.500000 1.249999 +v 1.250000 5.021646 1.154849 +v 1.250000 4.616117 0.883882 +v 1.250000 4.345151 0.478353 +v 1.250000 4.250000 -0.000001 +v 1.250000 4.345151 -0.478356 +v 1.250000 4.616117 -0.883885 +v 1.250000 5.021647 -1.154850 +v 2.250000 5.500000 -1.250001 +v 2.250000 5.978355 -1.154850 +v 2.250000 6.383883 -0.883885 +v 2.250000 6.654850 -0.478356 +v 2.250000 6.750000 -0.000001 +v 2.250000 6.654850 0.478353 +v 2.250000 6.383883 0.883882 +v 2.250000 5.978355 1.154848 +v 2.250000 5.500000 1.249999 +v 2.250000 5.021646 1.154848 +v 2.250000 4.616117 0.883882 +v 2.250000 4.345151 0.478353 +v 2.250000 4.250000 -0.000001 +v 2.250000 4.345151 -0.478356 +v 2.250000 4.616117 -0.883885 +v 2.250000 5.021647 -1.154850 +v 2.250000 5.500001 -1.000001 +v 2.250000 5.882684 -0.923881 +v 2.250000 6.207108 -0.707108 +v 2.250000 6.423881 -0.382685 +v 2.250000 6.500001 -0.000001 +v 2.250000 6.423881 0.382683 +v 2.250000 6.207108 0.707105 +v 2.250000 5.882684 0.923878 +v 2.250000 5.500001 0.999999 +v 2.250000 5.117317 0.923878 +v 2.250000 4.792893 0.707105 +v 2.250000 4.576121 0.382683 +v 2.250000 4.500001 -0.000001 +v 2.250000 4.576121 -0.382685 +v 2.250000 4.792893 -0.707108 +v 2.250000 5.117318 -0.923881 +v 2.250000 5.500000 -0.750001 +v 2.250000 5.787013 -0.692910 +v 2.250000 6.030331 -0.530331 +v 2.250000 6.192910 -0.287013 +v 2.250000 6.250000 -0.000001 +v 2.250000 6.192910 0.287012 +v 2.250000 6.030331 0.530329 +v 2.250000 5.787013 0.692909 +v 2.250000 5.500000 0.749999 +v 2.250000 5.212988 0.692909 +v 2.250000 4.969670 0.530329 +v 2.250000 4.807091 0.287012 +v 2.250000 4.750000 -0.000001 +v 2.250000 4.807091 -0.287013 +v 2.250000 4.969670 -0.530331 +v 2.250000 5.212988 -0.692910 +v 2.000000 5.882684 -0.923881 +v 2.000000 5.500001 -1.000001 +v 2.000000 6.207108 -0.707108 +v 2.000000 6.423881 -0.382685 +v 2.000000 6.500001 -0.000001 +v 2.000000 6.423881 0.382683 +v 2.000000 6.207108 0.707105 +v 2.000000 5.882684 0.923878 +v 2.000000 5.500001 0.999999 +v 2.000000 5.117317 0.923878 +v 2.000000 4.792893 0.707105 +v 2.000000 4.576121 0.382683 +v 2.000000 4.500001 -0.000001 +v 2.000000 4.576121 -0.382685 +v 2.000000 4.792893 -0.707108 +v 2.000000 5.117318 -0.923881 +v 2.000000 5.787013 -0.692910 +v 2.000000 5.500000 -0.750001 +v 2.000000 6.030331 -0.530331 +v 2.000000 6.192910 -0.287013 +v 2.000000 6.250000 -0.000001 +v 2.000000 6.192910 0.287012 +v 2.000000 6.030331 0.530329 +v 2.000000 5.787013 0.692909 +v 2.000000 5.500000 0.749999 +v 2.000000 5.212988 0.692909 +v 2.000000 4.969670 0.530329 +v 2.000000 4.807091 0.287012 +v 2.000000 4.750000 -0.000001 +v 2.000000 4.807091 -0.287013 +v 2.000000 4.969670 -0.530331 +v 2.000000 5.212988 -0.692910 +v 1.250001 1.000000 4.250000 +v 2.250001 1.000000 4.250000 +v 1.250000 1.000000 2.250000 +v 2.250000 1.000000 2.250000 +v 1.250000 2.000000 2.250000 +v 1.250001 2.000000 4.250000 +v 2.250001 2.000000 4.250000 +v 2.250000 2.000000 2.250000 +v 1.500001 2.000000 4.000000 +v 2.000000 2.000000 4.000000 +v 1.500001 2.000000 3.500000 +v 2.000000 2.000000 3.500000 +v 1.500001 2.125000 3.500000 +v 1.500001 2.125000 4.000000 +v 2.000000 2.125000 4.000000 +v 2.000000 2.125000 3.500000 +v 1.625001 2.250000 3.625000 +v 1.625001 2.250000 3.875000 +v 1.875001 2.250000 3.875000 +v 1.875001 2.250000 3.625000 +v 1.875001 3.125000 3.625000 +v 2.000000 3.000000 3.625000 +v 1.875001 3.000000 3.500000 +v 1.875001 2.625000 3.625000 +v 1.875001 2.750000 3.500000 +v 2.000000 2.750000 3.625000 +v 1.875001 3.125000 3.875000 +v 1.875001 3.000000 4.000000 +v 2.000000 3.000000 3.875000 +v 1.875001 2.625000 3.875000 +v 2.000000 2.750000 3.875000 +v 1.875001 2.750000 4.000000 +v 1.625001 3.125000 3.625000 +v 1.625001 3.000000 3.500000 +v 1.500001 3.000000 3.625000 +v 1.625001 2.625000 3.625000 +v 1.500001 2.750000 3.625000 +v 1.625001 2.750000 3.500000 +v 1.625001 3.000000 4.000000 +v 1.625001 3.125000 3.875000 +v 1.500001 3.000000 3.875000 +v 1.625001 2.625000 3.875000 +v 1.625001 2.750000 4.000000 +v 1.500001 2.750000 3.875000 +v 2.000000 1.000000 -1.000000 +v 1.500000 1.000000 -1.000000 +v 2.000000 1.500000 -0.500000 +v 1.500000 1.500000 -0.500000 +v 2.000000 1.000000 -0.500000 +v 1.500000 1.000000 -0.500000 +v 1.500000 1.000000 1.000000 +v 2.000000 1.000000 1.000000 +v 1.500000 1.500000 0.500000 +v 2.000000 1.500000 0.500000 +v 1.500000 1.000000 0.500000 +v 2.000000 1.000000 0.500000 +v 1.625000 1.375000 2.250000 +v 1.875000 1.375000 2.250000 +v 1.625000 1.625000 2.250000 +v 1.875000 1.625000 2.250000 +v 1.625000 2.875000 0.500000 +v 1.875000 2.875000 0.500000 +v 1.625000 3.125000 0.500000 +v 1.875000 3.125000 0.500000 +v 1.625000 2.500000 0.937500 +v 1.625000 2.000000 1.375000 +v 1.625000 1.750000 1.812500 +v 1.875000 1.750000 1.812500 +v 1.875000 2.000000 1.375000 +v 1.875000 2.500000 0.937500 +v 1.875000 2.250000 0.937500 +v 1.875000 1.750000 1.375000 +v 1.875000 1.500000 1.812500 +v 1.625000 1.500000 1.812500 +v 1.625000 1.750000 1.375000 +v 1.625000 2.250000 0.937500 +v 0.500000 1.000000 2.250000 +v -0.500000 1.000000 2.250000 +v 0.500000 1.000000 4.250000 +v -0.500000 1.000000 4.250000 +v 0.500000 1.500000 3.750000 +v 0.500000 1.500000 2.750000 +v -0.500000 1.500000 2.750000 +v -0.500000 1.500000 3.750000 +v 2.250000 1.000000 -4.250000 +v 1.250000 1.000000 -4.250000 +v 2.250000 1.000000 -2.250000 +v 1.250000 1.000000 -2.250000 +v 2.250000 2.000000 -2.250000 +v 2.250000 2.000000 -4.250000 +v 1.250000 2.000000 -4.250000 +v 1.250000 2.000000 -2.250000 +v 2.000000 2.000000 -4.000000 +v 1.500000 2.000000 -4.000000 +v 2.000000 2.000000 -3.500000 +v 1.500000 2.000000 -3.500000 +v 2.000000 2.125000 -3.500000 +v 2.000000 2.125000 -4.000000 +v 1.500000 2.125000 -4.000000 +v 1.500000 2.125000 -3.500000 +v 1.875000 2.250000 -3.625000 +v 1.875000 2.250000 -3.875000 +v 1.625000 2.250000 -3.875000 +v 1.625000 2.250000 -3.625000 +v 1.625000 3.125000 -3.625000 +v 1.500000 3.000000 -3.625000 +v 1.625000 3.000000 -3.500000 +v 1.625000 2.625000 -3.625000 +v 1.625000 2.750000 -3.500000 +v 1.500000 2.750000 -3.625000 +v 1.625000 3.125000 -3.875000 +v 1.625000 3.000000 -4.000000 +v 1.500000 3.000000 -3.875000 +v 1.625000 2.625000 -3.875000 +v 1.500000 2.750000 -3.875000 +v 1.625000 2.750000 -4.000000 +v 1.875000 3.125000 -3.625000 +v 1.875000 3.000000 -3.500000 +v 2.000000 3.000000 -3.625000 +v 1.875000 2.625000 -3.625000 +v 2.000000 2.750000 -3.625000 +v 1.875000 2.750000 -3.500000 +v 1.875000 3.000000 -4.000000 +v 1.875000 3.125000 -3.875000 +v 2.000000 3.000000 -3.875000 +v 1.875000 2.625000 -3.875000 +v 1.875000 2.750000 -4.000000 +v 2.000000 2.750000 -3.875000 +v 1.875000 1.375000 -2.250000 +v 1.625000 1.375000 -2.250000 +v 1.875000 1.625000 -2.250000 +v 1.625000 1.625000 -2.250000 +v 1.875000 2.875000 -0.500000 +v 1.625000 2.875000 -0.500000 +v 1.875000 3.125000 -0.500000 +v 1.625000 3.125000 -0.500000 +v 1.875000 2.500000 -0.937500 +v 1.875000 2.000000 -1.375000 +v 1.875000 1.750000 -1.812500 +v 1.625000 1.750000 -1.812500 +v 1.625000 2.000000 -1.375000 +v 1.625000 2.500000 -0.937500 +v 1.625000 2.250000 -0.937500 +v 1.625000 1.750000 -1.375000 +v 1.625000 1.500000 -1.812500 +v 1.875000 1.500000 -1.812500 +v 1.875000 1.750000 -1.375000 +v 1.875000 2.250000 -0.937500 +v -2.249999 1.000000 4.250000 +v -1.249999 1.000000 4.250000 +v -2.250000 1.000000 2.250000 +v -1.250000 1.000000 2.250000 +v -2.250000 2.000000 2.250000 +v -2.249999 2.000000 4.250000 +v -1.249999 2.000000 4.250000 +v -1.250000 2.000000 2.250000 +v -1.999999 2.000000 4.000000 +v -1.500000 2.000000 4.000000 +v -1.999999 2.000000 3.500000 +v -1.500000 2.000000 3.500000 +v -1.999999 2.125000 3.500000 +v -1.999999 2.125000 4.000000 +v -1.500000 2.125000 4.000000 +v -1.500000 2.125000 3.500000 +v -1.874999 2.250000 3.625000 +v -1.874999 2.250000 3.875000 +v -1.624999 2.250000 3.875000 +v -1.624999 2.250000 3.625000 +v -1.624999 3.125000 3.625000 +v -1.500000 3.000000 3.625000 +v -1.624999 3.000000 3.500000 +v -1.624999 2.625000 3.625000 +v -1.624999 2.750000 3.500000 +v -1.500000 2.750000 3.625000 +v -1.624999 3.125000 3.875000 +v -1.624999 3.000000 4.000000 +v -1.500000 3.000000 3.875000 +v -1.624999 2.625000 3.875000 +v -1.500000 2.750000 3.875000 +v -1.624999 2.750000 4.000000 +v -1.874999 3.125000 3.625000 +v -1.874999 3.000000 3.500000 +v -1.999999 3.000000 3.625000 +v -1.874999 2.625000 3.625000 +v -1.999999 2.750000 3.625000 +v -1.874999 2.750000 3.500000 +v -1.874999 3.000000 4.000000 +v -1.874999 3.125000 3.875000 +v -1.999999 3.000000 3.875000 +v -1.874999 2.625000 3.875000 +v -1.874999 2.750000 4.000000 +v -1.999999 2.750000 3.875000 +v -1.875000 1.375000 2.250000 +v -1.625000 1.375000 2.250000 +v -1.875000 1.625000 2.250000 +v -1.625000 1.625000 2.250000 +v -1.875000 2.875000 0.500000 +v -1.625000 2.875000 0.500000 +v -1.875000 3.125000 0.500000 +v -1.625000 3.125000 0.500000 +v -1.875000 2.500000 0.937500 +v -1.875000 2.000000 1.375000 +v -1.875000 1.750000 1.812500 +v -1.625000 1.750000 1.812500 +v -1.625000 2.000000 1.375000 +v -1.625000 2.500000 0.937500 +v -1.625000 2.250000 0.937500 +v -1.625000 1.750000 1.375000 +v -1.625000 1.500000 1.812500 +v -1.875000 1.500000 1.812500 +v -1.875000 1.750000 1.375000 +v -1.875000 2.250000 0.937500 +v -2.250000 5.750000 -0.250000 +v -2.250000 5.250000 -0.250000 +v -2.250000 5.750000 0.250000 +v -2.250000 5.250000 0.250000 +v -2.375000 5.750000 0.250000 +v -2.375000 5.750000 -0.250000 +v -2.375000 5.250000 -0.250000 +v -2.375000 5.250000 0.250000 +v -2.500000 5.625000 0.125000 +v -2.500000 5.625000 -0.125000 +v -2.500000 5.375000 -0.125000 +v -2.500000 5.375000 0.125000 +v -3.375000 5.375000 0.125000 +v -3.250000 5.250000 0.125000 +v -3.250000 5.375000 0.250000 +v -2.875000 5.375000 0.125000 +v -3.000000 5.375000 0.250000 +v -3.000000 5.250000 0.125000 +v -3.375000 5.375000 -0.125000 +v -3.250000 5.375000 -0.250000 +v -3.250000 5.250000 -0.125000 +v -2.875000 5.375000 -0.125000 +v -3.000000 5.250000 -0.125000 +v -3.000000 5.375000 -0.250000 +v -3.375000 5.625000 0.125000 +v -3.250000 5.625000 0.250000 +v -3.250000 5.750000 0.125000 +v -2.875000 5.625000 0.125000 +v -3.000000 5.750000 0.125000 +v -3.000000 5.625000 0.250000 +v -3.250000 5.625000 -0.250000 +v -3.375000 5.625000 -0.125000 +v -3.250000 5.750000 -0.125000 +v -2.875000 5.625000 -0.125000 +v -3.000000 5.625000 -0.250000 +v -3.000000 5.750000 -0.125000 +v 2.250000 5.750000 0.250000 +v 2.250000 5.250000 0.250000 +v 2.250000 5.750000 -0.250000 +v 2.250000 5.250000 -0.250000 +v 2.375000 5.750000 -0.250000 +v 2.375000 5.750000 0.250000 +v 2.375000 5.250000 0.250000 +v 2.375000 5.250000 -0.250000 +v 2.500000 5.625000 -0.125000 +v 2.500000 5.625000 0.125000 +v 2.500000 5.375000 0.125000 +v 2.500000 5.375000 -0.125000 +v 3.375000 5.375000 -0.125000 +v 3.250000 5.250000 -0.125000 +v 3.250000 5.375000 -0.250000 +v 2.875000 5.375000 -0.125000 +v 3.000000 5.375000 -0.250000 +v 3.000000 5.250000 -0.125000 +v 3.375000 5.375000 0.125000 +v 3.250000 5.375000 0.250000 +v 3.250000 5.250000 0.125000 +v 2.875000 5.375000 0.125000 +v 3.000000 5.250000 0.125000 +v 3.000000 5.375000 0.250000 +v 3.375000 5.625000 -0.125000 +v 3.250000 5.625000 -0.250000 +v 3.250000 5.750000 -0.125000 +v 2.875000 5.625000 -0.125000 +v 3.000000 5.750000 -0.125000 +v 3.000000 5.625000 -0.250000 +v 3.250000 5.625000 0.250000 +v 3.375000 5.625000 0.125000 +v 3.250000 5.750000 0.125000 +v 2.875000 5.625000 0.125000 +v 3.000000 5.625000 0.250000 +v 3.000000 5.750000 0.125000 +vt 0.035714 0.582090 +vt 0.357143 0.283582 +vt 0.357143 0.582090 +vt 0.642857 0.656716 +vt 0.678571 0.507463 +vt 0.642857 0.507463 +vt 0.642857 0.686567 +vt 0.678571 0.656716 +vt 0.678571 0.477612 +vt 0.642857 0.477612 +vt 0.678571 0.283582 +vt 0.642857 0.880597 +vt 0.678571 0.686567 +vt 0.357143 0.940298 +vt 0.035714 0.641791 +vt 0.357143 0.641791 +vt 0.035714 1.000000 +vt 0.357143 1.000000 +vt 0.000000 0.641791 +vt 0.035714 0.940298 +vt -0.000000 0.940298 +vt 0.392857 0.940298 +vt 0.392857 0.641791 +vt 0.428571 0.462687 +vt 0.464286 0.402985 +vt 0.446429 0.462687 +vt 0.517857 0.462687 +vt 0.553571 0.402985 +vt 0.535714 0.462687 +vt 0.428571 0.611940 +vt 0.517857 0.611940 +vt 0.589286 0.462687 +vt 0.553571 0.611940 +vt 0.553571 0.462687 +vt 0.500000 0.462687 +vt 0.464286 0.611940 +vt 0.464286 0.462687 +vt 0.589286 0.402985 +vt 0.500000 0.402985 +vt 0.428571 0.343284 +vt 0.444196 0.358209 +vt 0.430804 0.358209 +vt 0.464286 0.343284 +vt 0.448661 0.358209 +vt 0.446429 0.343284 +vt 0.482143 0.343284 +vt 0.466518 0.358209 +vt 0.500000 0.343284 +vt 0.484375 0.358209 +vt 0.515625 0.358209 +vt 0.502232 0.358209 +vt 0.535714 0.343284 +vt 0.520089 0.358209 +vt 0.517857 0.343284 +vt 0.553571 0.343284 +vt 0.537946 0.358209 +vt 0.571429 0.343284 +vt 0.555804 0.358209 +vt 0.587054 0.358209 +vt 0.573661 0.358209 +vt 0.607143 0.343284 +vt 0.591518 0.358209 +vt 0.589286 0.343284 +vt 0.625000 0.343284 +vt 0.609375 0.358209 +vt 0.640625 0.358209 +vt 0.627232 0.358209 +vt 0.375000 0.343284 +vt 0.359375 0.358209 +vt 0.357143 0.343284 +vt 0.390625 0.358209 +vt 0.377232 0.358209 +vt 0.410714 0.343284 +vt 0.395089 0.358209 +vt 0.392857 0.343284 +vt 0.412946 0.358209 +vt 0.357194 0.447761 +vt 0.383929 0.403071 +vt 0.410663 0.447761 +vt 0.462054 0.373134 +vt 0.450893 0.388060 +vt 0.448661 0.373134 +vt 0.479911 0.373134 +vt 0.468750 0.388060 +vt 0.466518 0.373134 +vt 0.497768 0.373134 +vt 0.486607 0.388060 +vt 0.484375 0.373134 +vt 0.515625 0.373134 +vt 0.504464 0.388060 +vt 0.502232 0.373134 +vt 0.533482 0.373134 +vt 0.522321 0.388060 +vt 0.520089 0.373134 +vt 0.537946 0.373134 +vt 0.549107 0.388060 +vt 0.540179 0.388060 +vt 0.569196 0.373134 +vt 0.558036 0.388060 +vt 0.555804 0.373134 +vt 0.573661 0.373134 +vt 0.584821 0.388060 +vt 0.575893 0.388060 +vt 0.591518 0.373134 +vt 0.602679 0.388060 +vt 0.593750 0.388060 +vt 0.609375 0.373134 +vt 0.620536 0.388060 +vt 0.611607 0.388060 +vt 0.640625 0.373134 +vt 0.629464 0.388060 +vt 0.627232 0.373134 +vt 0.359375 0.373134 +vt 0.370536 0.388060 +vt 0.361607 0.388060 +vt 0.377232 0.373134 +vt 0.388393 0.388060 +vt 0.379464 0.388060 +vt 0.395089 0.373134 +vt 0.406250 0.388060 +vt 0.397321 0.388060 +vt 0.412946 0.373134 +vt 0.424107 0.388060 +vt 0.415179 0.388060 +vt 0.444196 0.373134 +vt 0.433036 0.388060 +vt 0.430804 0.373134 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.343284 +vt 0.785714 0.402985 +vt 0.714286 0.402985 +vt 0.821429 0.402985 +vt 0.785714 0.343284 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.392857 0.552239 +vt 0.375000 0.522388 +vt 0.392857 0.522388 +vt 0.375000 0.552239 +vt 0.392857 0.582090 +vt 0.375000 0.582090 +vt 0.375000 0.492537 +vt 0.392857 0.492537 +vt 0.357143 0.522388 +vt 0.375000 0.552239 +vt 0.357143 0.552239 +vt 0.375000 0.522388 +vt 0.357143 0.492537 +vt 0.375000 0.492537 +vt 0.375000 0.582090 +vt 0.357143 0.582090 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.875000 0.373134 +vt 0.839286 0.313433 +vt 0.875000 0.313433 +vt 0.892857 0.283582 +vt 0.821429 0.283582 +vt 0.821429 0.313433 +vt 0.839286 0.373134 +vt 0.821429 0.373134 +vt 0.892857 0.373134 +vt 0.892857 0.313433 +vt 0.821429 0.402985 +vt 0.892857 0.402985 +vt 0.678571 0.686567 +vt 0.642857 0.880597 +vt 0.642857 0.686567 +vt 0.642857 0.477612 +vt 0.678571 0.283582 +vt 0.678571 0.477612 +vt 0.642857 0.507463 +vt 0.678571 0.656716 +vt 0.642857 0.656716 +vt 0.678571 0.507463 +vt 0.428571 0.462687 +vt 0.464286 0.402985 +vt 0.446429 0.462687 +vt 0.517857 0.462687 +vt 0.553571 0.402985 +vt 0.535714 0.462687 +vt 0.428571 0.611940 +vt 0.517857 0.611940 +vt 0.589286 0.462687 +vt 0.553571 0.611940 +vt 0.553571 0.462687 +vt 0.500000 0.462687 +vt 0.464286 0.611940 +vt 0.464286 0.462687 +vt 0.589286 0.402985 +vt 0.500000 0.402985 +vt 0.428571 0.343284 +vt 0.444196 0.358209 +vt 0.430804 0.358209 +vt 0.464286 0.343284 +vt 0.448661 0.358209 +vt 0.446429 0.343284 +vt 0.482143 0.343284 +vt 0.466518 0.358209 +vt 0.500000 0.343284 +vt 0.484375 0.358209 +vt 0.515625 0.358209 +vt 0.502232 0.358209 +vt 0.535714 0.343284 +vt 0.520089 0.358209 +vt 0.517857 0.343284 +vt 0.553571 0.343284 +vt 0.537946 0.358209 +vt 0.571429 0.343284 +vt 0.555804 0.358209 +vt 0.587054 0.358209 +vt 0.573661 0.358209 +vt 0.607143 0.343284 +vt 0.591518 0.358209 +vt 0.589286 0.343284 +vt 0.625000 0.343284 +vt 0.609375 0.358209 +vt 0.640625 0.358209 +vt 0.627232 0.358209 +vt 0.375000 0.343284 +vt 0.359375 0.358209 +vt 0.357143 0.343284 +vt 0.390625 0.358209 +vt 0.377232 0.358209 +vt 0.410714 0.343284 +vt 0.395089 0.358209 +vt 0.392857 0.343284 +vt 0.412946 0.358209 +vt 0.357194 0.447761 +vt 0.383929 0.403071 +vt 0.410663 0.447761 +vt 0.462054 0.373134 +vt 0.450893 0.388060 +vt 0.448661 0.373134 +vt 0.479911 0.373134 +vt 0.468750 0.388060 +vt 0.466518 0.373134 +vt 0.497768 0.373134 +vt 0.486607 0.388060 +vt 0.484375 0.373134 +vt 0.515625 0.373134 +vt 0.504464 0.388060 +vt 0.502232 0.373134 +vt 0.533482 0.373134 +vt 0.522321 0.388060 +vt 0.520089 0.373134 +vt 0.537946 0.373134 +vt 0.549107 0.388060 +vt 0.540179 0.388060 +vt 0.569196 0.373134 +vt 0.558036 0.388060 +vt 0.555804 0.373134 +vt 0.573661 0.373134 +vt 0.584821 0.388060 +vt 0.575893 0.388060 +vt 0.591518 0.373134 +vt 0.602679 0.388060 +vt 0.593750 0.388060 +vt 0.609375 0.373134 +vt 0.620536 0.388060 +vt 0.611607 0.388060 +vt 0.640625 0.373134 +vt 0.629464 0.388060 +vt 0.627232 0.373134 +vt 0.359375 0.373134 +vt 0.370536 0.388060 +vt 0.361607 0.388060 +vt 0.377232 0.373134 +vt 0.388393 0.388060 +vt 0.379464 0.388060 +vt 0.395089 0.373134 +vt 0.406250 0.388060 +vt 0.397321 0.388060 +vt 0.412946 0.373134 +vt 0.424107 0.388060 +vt 0.415179 0.388060 +vt 0.444196 0.373134 +vt 0.433036 0.388060 +vt 0.430804 0.373134 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.402985 +vt 0.785714 0.343284 +vt 0.785714 0.402985 +vt 0.821429 0.402985 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.343284 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.392857 0.552239 +vt 0.375000 0.522388 +vt 0.392857 0.522388 +vt 0.375000 0.552239 +vt 0.392857 0.582090 +vt 0.375000 0.582090 +vt 0.375000 0.492537 +vt 0.392857 0.492537 +vt 0.357143 0.522388 +vt 0.375000 0.552239 +vt 0.357143 0.552239 +vt 0.375000 0.522388 +vt 0.357143 0.492537 +vt 0.375000 0.492537 +vt 0.375000 0.582090 +vt 0.357143 0.582090 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.875000 0.313433 +vt 0.839286 0.373134 +vt 0.839286 0.313433 +vt 0.892857 0.283582 +vt 0.821429 0.283582 +vt 0.821429 0.313433 +vt 0.821429 0.373134 +vt 0.892857 0.373134 +vt 0.892857 0.313433 +vt 0.821429 0.402985 +vt 0.875000 0.373134 +vt 0.892857 0.402985 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.343284 +vt 0.785714 0.402985 +vt 0.714286 0.402985 +vt 0.821429 0.402985 +vt 0.785714 0.343284 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.402985 +vt 0.785714 0.343284 +vt 0.785714 0.402985 +vt 0.821429 0.402985 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.343284 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.857143 0.410448 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.852679 0.417910 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.857143 0.410448 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.852679 0.417910 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.410448 +vt 0.035714 0.283582 +vt 0.642857 0.283582 +vt 0.678571 0.880597 +vt 0.410714 0.402985 +vt 0.446429 0.611940 +vt 0.535714 0.611940 +vt 0.589286 0.611940 +vt 0.500000 0.611940 +vt 0.462054 0.358209 +vt 0.479911 0.358209 +vt 0.497768 0.358209 +vt 0.533482 0.358209 +vt 0.551339 0.358209 +vt 0.569196 0.358209 +vt 0.604911 0.358209 +vt 0.622768 0.358209 +vt 0.642857 0.343284 +vt 0.372768 0.358209 +vt 0.408482 0.358209 +vt 0.426339 0.358209 +vt 0.408628 0.464863 +vt 0.383929 0.492452 +vt 0.402833 0.479362 +vt 0.394160 0.489050 +vt 0.373698 0.489050 +vt 0.365025 0.479362 +vt 0.359229 0.464863 +vt 0.359229 0.430659 +vt 0.365025 0.416160 +vt 0.373698 0.406473 +vt 0.394160 0.406473 +vt 0.402833 0.416160 +vt 0.408628 0.430659 +vt 0.459821 0.388060 +vt 0.477679 0.388060 +vt 0.495536 0.388060 +vt 0.513393 0.388060 +vt 0.531250 0.388060 +vt 0.551339 0.373134 +vt 0.566964 0.388060 +vt 0.587054 0.373134 +vt 0.604911 0.373134 +vt 0.622768 0.373134 +vt 0.638393 0.388060 +vt 0.372768 0.373134 +vt 0.390625 0.373134 +vt 0.408482 0.373134 +vt 0.426339 0.373134 +vt 0.441964 0.388060 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.678571 0.880597 +vt 0.642857 0.283582 +vt 0.410714 0.402985 +vt 0.446429 0.611940 +vt 0.535714 0.611940 +vt 0.589286 0.611940 +vt 0.500000 0.611940 +vt 0.462054 0.358209 +vt 0.479911 0.358209 +vt 0.497768 0.358209 +vt 0.533482 0.358209 +vt 0.551339 0.358209 +vt 0.569196 0.358209 +vt 0.604911 0.358209 +vt 0.622768 0.358209 +vt 0.642857 0.343284 +vt 0.372768 0.358209 +vt 0.408482 0.358209 +vt 0.426339 0.358209 +vt 0.408628 0.464863 +vt 0.383929 0.492452 +vt 0.402833 0.479362 +vt 0.394160 0.489050 +vt 0.373698 0.489050 +vt 0.365025 0.479362 +vt 0.359229 0.464863 +vt 0.359229 0.430659 +vt 0.365025 0.416160 +vt 0.373698 0.406473 +vt 0.394160 0.406473 +vt 0.402833 0.416160 +vt 0.408628 0.430659 +vt 0.459821 0.388060 +vt 0.477679 0.388060 +vt 0.495536 0.388060 +vt 0.513393 0.388060 +vt 0.531250 0.388060 +vt 0.551339 0.373134 +vt 0.566964 0.388060 +vt 0.587054 0.373134 +vt 0.604911 0.373134 +vt 0.622768 0.373134 +vt 0.638393 0.388060 +vt 0.372768 0.373134 +vt 0.390625 0.373134 +vt 0.408482 0.373134 +vt 0.426339 0.373134 +vt 0.441964 0.388060 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.808036 0.440298 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.870536 0.402985 +vt 0.625000 0.283582 +vt 0.607143 0.283582 +vt 0.500000 0.283582 +vt 0.482143 0.283582 +vt 0.642857 0.283582 +vt 0.517857 0.283582 +vt 0.375000 0.283582 +vt 0.357143 0.283582 +vt 0.535714 0.283582 +vt 0.392857 0.283582 +vt 0.553571 0.283582 +vt 0.410714 0.283582 +vt 0.571429 0.283582 +vt 0.446429 0.283582 +vt 0.428571 0.283582 +vt 0.589286 0.283582 +vt 0.464286 0.283582 +vt 0.433036 0.402985 +vt 0.441964 0.402985 +vt 0.379464 0.402985 +vt 0.388393 0.402985 +vt 0.361607 0.402985 +vt 0.370536 0.402985 +vt 0.629464 0.402985 +vt 0.638393 0.402985 +vt 0.611607 0.402985 +vt 0.620536 0.402985 +vt 0.593750 0.402985 +vt 0.602679 0.402985 +vt 0.575893 0.402985 +vt 0.584821 0.402985 +vt 0.397321 0.402985 +vt 0.406250 0.402985 +vt 0.450893 0.402985 +vt 0.459821 0.402985 +vt 0.415179 0.402985 +vt 0.424107 0.402985 +vt 0.468750 0.402985 +vt 0.477679 0.402985 +vt 0.486607 0.402985 +vt 0.495536 0.402985 +vt 0.504464 0.402985 +vt 0.513393 0.402985 +vt 0.522321 0.402985 +vt 0.531250 0.402985 +vt 0.540179 0.402985 +vt 0.549107 0.402985 +vt 0.558036 0.402985 +vt 0.566964 0.402985 +vt 0.939732 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.607143 0.283582 +vt 0.500000 0.283582 +vt 0.482143 0.283582 +vt 0.642857 0.283582 +vt 0.625000 0.283582 +vt 0.517857 0.283582 +vt 0.375000 0.283582 +vt 0.357143 0.283582 +vt 0.535714 0.283582 +vt 0.392857 0.283582 +vt 0.410714 0.283582 +vt 0.571429 0.283582 +vt 0.553571 0.283582 +vt 0.446429 0.283582 +vt 0.428571 0.283582 +vt 0.589286 0.283582 +vt 0.464286 0.283582 +vt 0.433036 0.402985 +vt 0.441964 0.402985 +vt 0.388393 0.402985 +vt 0.361607 0.402985 +vt 0.370536 0.402985 +vt 0.638393 0.402985 +vt 0.611607 0.402985 +vt 0.620536 0.402985 +vt 0.593750 0.402985 +vt 0.602679 0.402985 +vt 0.575893 0.402985 +vt 0.584821 0.402985 +vt 0.397321 0.402985 +vt 0.406250 0.402985 +vt 0.450893 0.402985 +vt 0.459821 0.402985 +vt 0.415179 0.402985 +vt 0.424107 0.402985 +vt 0.468750 0.402985 +vt 0.477679 0.402985 +vt 0.486607 0.402985 +vt 0.495536 0.402985 +vt 0.504464 0.402985 +vt 0.513393 0.402985 +vt 0.522321 0.402985 +vt 0.531250 0.402985 +vt 0.540179 0.402985 +vt 0.549107 0.402985 +vt 0.558036 0.402985 +vt 0.566964 0.402985 +vt 0.955357 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.939732 0.283582 +vt 0.939732 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.379464 0.402985 +vt 0.629464 0.402985 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.939732 0.283582 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.8944 0.4472 0.0000 +vn -0.8944 0.4472 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn -0.5774 0.5773 0.5773 +vn -0.5774 -0.5773 0.5773 +vn -0.5774 0.5773 -0.5773 +vn -0.5774 -0.5773 -0.5773 +vn 0.5774 0.5774 0.5774 +vn 0.5774 -0.5774 0.5774 +vn 0.5774 0.5774 -0.5774 +vn 0.5774 -0.5774 -0.5774 +vn 0.0000 -0.7071 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.5774 0.5773 -0.5773 +vn 0.5774 -0.5773 -0.5773 +vn 0.5774 0.5773 0.5773 +vn 0.5774 -0.5773 0.5773 +vn -0.5774 0.5774 -0.5774 +vn -0.5774 -0.5774 -0.5774 +vn -0.5774 0.5774 0.5774 +vn -0.5774 -0.5774 0.5774 +vn 0.5773 0.5774 0.5774 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.3827 0.9239 +vn -0.0000 -0.3827 -0.9239 +vn 0.0000 0.6169 -0.7871 +vn 0.0000 0.5735 -0.8192 +vn 0.0000 -0.6169 0.7871 +vn 0.0000 -0.5735 0.8192 +vn 0.0000 -0.9615 0.2747 +vn 0.0000 -0.9216 0.3882 +vn 0.0000 -0.7741 0.6331 +vn 0.0000 0.9615 -0.2747 +vn 0.0000 0.9216 -0.3882 +vn 0.0000 0.7741 -0.6331 +vn 0.0000 0.6169 0.7871 +vn 0.0000 0.5735 0.8192 +vn -0.0000 -0.6169 -0.7871 +vn -0.0000 -0.5735 -0.8192 +vn 0.0000 -0.9615 -0.2747 +vn 0.0000 -0.9216 -0.3882 +vn -0.0000 -0.7741 -0.6331 +vn 0.0000 0.9615 0.2747 +vn 0.0000 0.9216 0.3882 +vn 0.0000 0.7741 0.6331 +s off +f 835/1205/221 834/1206/221 833/1207/221 +f 838/1208/221 844/1209/221 841/1210/221 +f 837/1211/222 839/1212/222 838/1208/222 +f 841/1210/223 843/1213/223 842/1214/223 +f 848/1215/224 842/1214/224 843/1213/224 +f 845/1216/225 840/1217/225 837/1211/225 +f 851/1218/226 849/1219/226 850/1220/226 +f 836/1221/224 851/1218/224 834/1222/224 +f 833/1207/225 849/1219/225 835/1205/225 +f 835/1223/227 852/1224/227 836/1225/227 +f 834/1226/228 850/1220/228 833/1227/228 +f 856/1228/227 863/1229/227 855/1230/227 +f 853/1231/228 862/1232/228 854/1233/228 +f 855/1230/227 860/1234/227 856/1228/227 +f 854/1233/228 858/1235/228 853/1231/228 +f 856/1236/224 859/1237/224 854/1238/224 +f 853/1239/225 857/1240/225 855/1241/225 +f 854/1238/229 864/1242/229 856/1236/229 +f 855/1241/230 861/1243/230 853/1239/230 +f 881/1244/225 898/1245/225 897/1246/225 +f 883/1247/225 898/1248/225 882/1249/225 +f 884/1250/225 899/1251/225 883/1247/225 +f 885/1252/225 900/1253/225 884/1250/225 +f 885/1252/225 902/1254/225 901/1255/225 +f 887/1256/225 902/1257/225 886/1258/225 +f 888/1259/225 903/1260/225 887/1256/225 +f 889/1261/225 904/1262/225 888/1259/225 +f 889/1261/225 906/1263/225 905/1264/225 +f 891/1265/225 906/1266/225 890/1267/225 +f 892/1268/225 907/1269/225 891/1265/225 +f 892/1268/225 909/1270/225 908/1271/225 +f 894/1272/225 909/1273/225 893/1274/225 +f 894/1272/225 911/1275/225 910/1276/225 +f 896/1277/225 911/1278/225 895/1279/225 +f 881/1244/225 912/1280/225 896/1277/225 +f 921/1281/225 925/1282/225 913/1283/225 +f 931/1284/225 945/1285/225 929/1286/225 +f 932/1287/225 947/1288/225 931/1289/225 +f 933/1290/225 948/1291/225 932/1292/225 +f 934/1293/225 949/1294/225 933/1295/225 +f 935/1296/225 950/1297/225 934/1298/225 +f 935/1299/225 952/1300/225 951/1301/225 +f 937/1302/225 952/1303/225 936/1304/225 +f 937/1305/225 954/1306/225 953/1307/225 +f 938/1308/225 955/1309/225 954/1310/225 +f 939/1311/225 956/1312/225 955/1313/225 +f 941/1314/225 956/1315/225 940/1316/225 +f 941/1317/225 958/1318/225 957/1319/225 +f 942/1320/225 959/1321/225 958/1322/225 +f 943/1323/225 960/1324/225 959/1325/225 +f 944/1326/225 946/1327/225 960/1328/225 +f 929/1329/225 946/1330/225 930/1331/225 +f 990/1332/227 978/1333/227 979/1334/227 +f 967/1335/226 965/1336/226 966/1337/226 +f 963/1338/228 968/1339/228 964/1340/228 +f 962/1341/227 966/1337/227 961/1342/227 +f 964/1343/225 967/1335/225 962/1344/225 +f 961/1345/224 965/1336/224 963/1346/224 +f 976/1347/231 979/1348/231 975/1349/231 +f 972/1350/225 975/1349/225 970/1351/225 +f 969/1352/224 973/1353/224 971/1354/224 +f 971/1355/228 976/1347/228 972/1350/228 +f 970/1351/227 974/1356/227 969/1352/227 +f 974/1356/232 977/1357/232 973/1353/232 +f 976/1347/233 977/1358/233 980/1359/233 +f 975/1349/234 978/1333/234 974/1356/234 +f 1002/1360/224 977/1357/224 978/1361/224 +f 996/1362/228 980/1359/228 977/1358/228 +f 984/1363/225 979/1348/225 980/1364/225 +f 988/1365/227 1003/1366/227 992/1367/227 +f 1001/1368/224 997/1369/224 1004/1370/224 +f 994/1371/228 985/1372/228 998/1373/228 +f 993/1374/226 987/1375/226 981/1376/226 +f 981/1377/235 982/1378/235 983/1379/235 +f 984/1380/236 985/1372/236 986/1381/236 +f 987/1375/237 988/1382/237 989/1383/237 +f 990/1384/238 991/1385/238 992/1386/238 +f 993/1387/239 994/1388/239 995/1389/239 +f 996/1390/240 997/1369/240 998/1391/240 +f 999/1392/241 1000/1393/241 1001/1394/241 +f 1002/1395/242 1003/1366/242 1004/1396/242 +f 1000/1393/234 988/1365/234 987/1397/234 +f 990/1398/243 1003/1366/243 1002/1395/243 +f 992/1386/244 989/1383/244 988/1382/244 +f 987/1375/231 982/1399/231 981/1376/231 +f 984/1400/222 991/1385/222 990/1384/222 +f 986/1381/245 983/1379/245 982/1378/245 +f 981/1377/233 994/1371/233 993/1401/233 +f 996/1402/246 985/1372/246 984/1380/246 +f 998/1391/247 995/1389/247 994/1388/247 +f 993/1387/232 1001/1368/232 1000/1403/232 +f 999/1392/248 1004/1396/248 1003/1366/248 +f 1002/1404/223 997/1369/223 996/1390/223 +f 982/1399/225 991/1385/225 986/1405/225 +f 1006/1406/233 1007/1407/233 1005/1408/233 +f 1008/1409/224 1006/1410/224 1010/1411/224 +f 1007/1407/225 1009/1412/225 1005/1413/225 +f 1012/1414/234 1013/1415/234 1011/1416/234 +f 1014/1417/225 1012/1418/225 1016/1419/225 +f 1013/1415/224 1015/1420/224 1011/1421/224 +f 1030/1422/225 1022/1423/225 1024/1424/225 +f 1025/1425/224 1021/1426/224 1036/1427/224 +f 1019/1428/224 1034/1429/224 1017/1430/224 +f 1027/1431/224 1035/1432/224 1034/1429/224 +f 1026/1433/224 1036/1427/224 1035/1432/224 +f 1020/1434/225 1033/1435/225 1028/1436/225 +f 1028/1436/225 1032/1437/225 1029/1438/225 +f 1029/1438/225 1031/1439/225 1030/1422/225 +f 1043/1440/226 1041/1441/226 1042/1442/226 +f 1037/1443/225 1041/1441/225 1039/1444/225 +f 1039/1445/234 1044/1446/234 1040/1447/234 +f 1038/1448/233 1042/1442/233 1037/1449/233 +f 1040/1450/224 1043/1440/224 1038/1451/224 +f 1053/1452/224 1048/1453/224 1056/1454/224 +f 1051/1455/225 1045/1456/225 1050/1457/225 +f 1050/1457/231 1052/1458/231 1051/1455/231 +f 1054/1459/232 1056/1454/232 1055/1460/232 +f 1049/1461/226 1055/1460/226 1052/1458/226 +f 1060/1462/228 1067/1463/228 1059/1464/228 +f 1057/1465/227 1066/1466/227 1058/1467/227 +f 1059/1464/228 1064/1468/228 1060/1462/228 +f 1058/1467/227 1062/1469/227 1057/1465/227 +f 1060/1470/225 1063/1471/225 1058/1472/225 +f 1057/1473/224 1061/1474/224 1059/1475/224 +f 1058/1472/230 1068/1476/230 1060/1470/230 +f 1059/1475/229 1065/1477/229 1057/1473/229 +f 1085/1478/224 1102/1479/224 1101/1480/224 +f 1087/1481/224 1102/1482/224 1086/1483/224 +f 1088/1484/224 1103/1485/224 1087/1481/224 +f 1089/1486/224 1104/1487/224 1088/1484/224 +f 1089/1486/224 1106/1488/224 1105/1489/224 +f 1091/1490/224 1106/1491/224 1090/1492/224 +f 1092/1493/224 1107/1494/224 1091/1490/224 +f 1093/1495/224 1108/1496/224 1092/1493/224 +f 1093/1495/224 1110/1497/224 1109/1498/224 +f 1095/1499/224 1110/1500/224 1094/1501/224 +f 1096/1502/224 1111/1503/224 1095/1499/224 +f 1096/1502/224 1113/1504/224 1112/1505/224 +f 1098/1506/224 1113/1507/224 1097/1508/224 +f 1098/1506/224 1115/1509/224 1114/1510/224 +f 1100/1511/224 1115/1512/224 1099/1513/224 +f 1085/1478/224 1116/1514/224 1100/1511/224 +f 1125/1515/224 1129/1516/224 1117/1517/224 +f 1135/1518/224 1149/1519/224 1133/1520/224 +f 1136/1521/224 1151/1522/224 1135/1523/224 +f 1137/1524/224 1152/1525/224 1136/1526/224 +f 1138/1527/224 1153/1528/224 1137/1529/224 +f 1139/1530/224 1154/1531/224 1138/1532/224 +f 1139/1533/224 1156/1534/224 1155/1535/224 +f 1141/1536/224 1156/1537/224 1140/1538/224 +f 1141/1539/224 1158/1540/224 1157/1541/224 +f 1142/1542/224 1159/1543/224 1158/1544/224 +f 1143/1545/224 1160/1546/224 1159/1547/224 +f 1145/1548/224 1160/1549/224 1144/1550/224 +f 1145/1551/224 1162/1552/224 1161/1553/224 +f 1146/1554/224 1163/1555/224 1162/1556/224 +f 1147/1557/224 1164/1558/224 1163/1559/224 +f 1148/1560/224 1150/1561/224 1164/1562/224 +f 1133/1563/224 1150/1564/224 1134/1565/224 +f 1194/1566/228 1182/1567/228 1183/1568/228 +f 1170/1569/226 1172/1570/226 1169/1571/226 +f 1167/1572/227 1172/1570/227 1168/1573/227 +f 1166/1574/228 1170/1569/228 1165/1575/228 +f 1168/1576/224 1171/1577/224 1166/1578/224 +f 1165/1579/225 1169/1571/225 1167/1580/225 +f 1180/1581/232 1183/1582/232 1179/1583/232 +f 1176/1584/224 1179/1583/224 1174/1585/224 +f 1173/1586/225 1177/1587/225 1175/1588/225 +f 1175/1589/227 1180/1581/227 1176/1584/227 +f 1174/1585/228 1178/1590/228 1173/1586/228 +f 1178/1590/231 1181/1591/231 1177/1587/231 +f 1180/1581/234 1181/1592/234 1184/1593/234 +f 1179/1583/233 1182/1567/233 1178/1590/233 +f 1206/1594/225 1181/1591/225 1182/1595/225 +f 1200/1596/227 1184/1593/227 1181/1592/227 +f 1188/1597/224 1183/1582/224 1184/1598/224 +f 1192/1599/228 1207/1600/228 1196/1601/228 +f 1205/1602/225 1201/1603/225 1208/1604/225 +f 1198/1605/227 1189/1606/227 1202/1607/227 +f 1197/1608/226 1191/1609/226 1185/1610/226 +f 1185/1611/249 1186/1612/249 1187/1613/249 +f 1188/1614/250 1189/1606/250 1190/1615/250 +f 1191/1609/251 1192/1616/251 1193/1617/251 +f 1194/1618/252 1195/1619/252 1196/1620/252 +f 1197/1621/253 1198/1622/253 1199/1623/253 +f 1200/1624/254 1201/1603/254 1202/1625/254 +f 1203/1626/255 1204/1627/255 1205/1628/255 +f 1206/1629/256 1207/1600/256 1208/1630/256 +f 1204/1627/233 1192/1599/233 1191/1631/233 +f 1194/1632/246 1207/1600/246 1206/1629/246 +f 1196/1620/247 1193/1617/247 1192/1616/247 +f 1191/1609/232 1186/1633/232 1185/1610/232 +f 1188/1634/223 1195/1619/223 1194/1618/223 +f 1190/1615/248 1187/1613/248 1186/1612/248 +f 1185/1611/234 1198/1605/234 1197/1635/234 +f 1200/1636/243 1189/1606/243 1188/1614/243 +f 1202/1625/244 1199/1623/244 1198/1622/244 +f 1197/1621/231 1205/1602/231 1204/1637/231 +f 1203/1626/245 1208/1630/245 1207/1600/245 +f 1206/1638/222 1201/1603/222 1200/1624/222 +f 1186/1633/224 1195/1619/224 1190/1639/224 +f 1210/1640/234 1211/1641/234 1209/1642/234 +f 1212/1643/225 1210/1644/225 1214/1645/225 +f 1211/1641/224 1213/1646/224 1209/1647/224 +f 1216/1648/233 1217/1649/233 1215/1650/233 +f 1218/1651/224 1216/1652/224 1220/1653/224 +f 1217/1649/225 1219/1654/225 1215/1655/225 +f 1234/1656/224 1226/1657/224 1228/1658/224 +f 1229/1659/225 1225/1660/225 1240/1661/225 +f 1223/1662/225 1238/1663/225 1221/1664/225 +f 1231/1665/225 1239/1666/225 1238/1663/225 +f 1230/1667/225 1240/1661/225 1239/1666/225 +f 1224/1668/224 1237/1669/224 1232/1670/224 +f 1232/1670/224 1236/1671/224 1233/1672/224 +f 1233/1672/224 1235/1673/224 1234/1656/224 +f 1246/1674/226 1248/1675/226 1245/1676/226 +f 1241/1677/224 1245/1676/224 1243/1678/224 +f 1243/1679/233 1248/1675/233 1244/1680/233 +f 1242/1681/234 1246/1674/234 1241/1682/234 +f 1244/1683/225 1247/1684/225 1242/1685/225 +f 1278/1686/227 1266/1687/227 1267/1688/227 +f 1255/1689/226 1253/1690/226 1254/1691/226 +f 1251/1692/228 1256/1693/228 1252/1694/228 +f 1250/1695/227 1254/1691/227 1249/1696/227 +f 1252/1697/225 1255/1689/225 1250/1698/225 +f 1249/1699/224 1253/1690/224 1251/1700/224 +f 1264/1701/231 1267/1702/231 1263/1703/231 +f 1260/1704/225 1263/1703/225 1258/1705/225 +f 1257/1706/224 1261/1707/224 1259/1708/224 +f 1259/1709/228 1264/1701/228 1260/1704/228 +f 1258/1705/227 1262/1710/227 1257/1706/227 +f 1262/1710/232 1265/1711/232 1261/1707/232 +f 1264/1701/233 1265/1712/233 1268/1713/233 +f 1263/1703/234 1266/1687/234 1262/1710/234 +f 1290/1714/224 1265/1711/224 1266/1715/224 +f 1284/1716/228 1268/1713/228 1265/1712/228 +f 1272/1717/225 1267/1702/225 1268/1718/225 +f 1276/1719/227 1291/1720/227 1280/1721/227 +f 1289/1722/224 1285/1723/224 1292/1724/224 +f 1282/1725/228 1273/1726/228 1286/1727/228 +f 1281/1728/226 1275/1729/226 1269/1730/226 +f 1269/1731/235 1270/1732/235 1271/1733/235 +f 1272/1734/236 1273/1726/236 1274/1735/236 +f 1275/1729/237 1276/1736/237 1277/1737/237 +f 1278/1738/238 1279/1739/238 1280/1740/238 +f 1281/1741/239 1282/1742/239 1283/1743/239 +f 1284/1744/240 1285/1723/240 1286/1745/240 +f 1287/1746/241 1288/1747/241 1289/1748/241 +f 1290/1749/242 1291/1720/242 1292/1750/242 +f 1288/1747/234 1276/1719/234 1275/1751/234 +f 1278/1752/243 1291/1720/243 1290/1749/243 +f 1280/1740/244 1277/1737/244 1276/1736/244 +f 1275/1729/231 1270/1753/231 1269/1730/231 +f 1272/1754/222 1279/1739/222 1278/1738/222 +f 1274/1735/245 1271/1733/245 1270/1732/245 +f 1269/1731/233 1282/1725/233 1281/1755/233 +f 1284/1756/246 1273/1726/246 1272/1734/246 +f 1286/1745/247 1283/1743/247 1282/1742/247 +f 1281/1741/232 1289/1722/232 1288/1757/232 +f 1287/1746/248 1292/1750/248 1291/1720/248 +f 1290/1758/223 1285/1723/223 1284/1744/223 +f 1270/1753/225 1279/1739/225 1274/1759/225 +f 1306/1760/225 1298/1761/225 1300/1762/225 +f 1301/1763/224 1297/1764/224 1312/1765/224 +f 1295/1766/224 1310/1767/224 1293/1768/224 +f 1303/1769/224 1311/1770/224 1310/1767/224 +f 1302/1771/224 1312/1765/224 1311/1770/224 +f 1296/1772/225 1309/1773/225 1304/1774/225 +f 1304/1774/225 1308/1775/225 1305/1776/225 +f 1305/1776/225 1307/1777/225 1306/1760/225 +f 1342/1778/228 1330/1779/228 1331/1780/228 +f 1318/1781/226 1320/1782/226 1317/1783/226 +f 1315/1784/227 1320/1782/227 1316/1785/227 +f 1314/1786/228 1318/1781/228 1313/1787/228 +f 1316/1788/224 1319/1789/224 1314/1790/224 +f 1313/1791/225 1317/1783/225 1315/1792/225 +f 1328/1793/232 1331/1794/232 1327/1795/232 +f 1324/1796/224 1327/1795/224 1322/1797/224 +f 1321/1798/225 1325/1799/225 1323/1800/225 +f 1323/1801/227 1328/1793/227 1324/1796/227 +f 1322/1797/228 1326/1802/228 1321/1798/228 +f 1326/1802/231 1329/1803/231 1325/1799/231 +f 1328/1793/234 1329/1804/234 1332/1805/234 +f 1327/1795/233 1330/1779/233 1326/1802/233 +f 1354/1806/225 1329/1803/225 1330/1807/225 +f 1348/1808/227 1332/1805/227 1329/1804/227 +f 1336/1809/224 1331/1794/224 1332/1810/224 +f 1340/1811/228 1355/1812/228 1344/1813/228 +f 1353/1814/225 1349/1815/225 1356/1816/225 +f 1346/1817/227 1337/1818/227 1350/1819/227 +f 1345/1820/226 1339/1821/226 1333/1822/226 +f 1333/1823/249 1334/1824/249 1335/1825/249 +f 1336/1826/250 1337/1818/250 1338/1827/250 +f 1339/1821/251 1340/1828/251 1341/1829/251 +f 1342/1830/252 1343/1831/252 1344/1832/252 +f 1345/1833/253 1346/1834/253 1347/1835/253 +f 1348/1836/254 1349/1815/254 1350/1837/254 +f 1351/1838/255 1352/1839/255 1353/1840/255 +f 1354/1841/256 1355/1812/256 1356/1842/256 +f 1352/1839/233 1340/1811/233 1339/1843/233 +f 1342/1844/246 1355/1812/246 1354/1841/246 +f 1344/1832/247 1341/1829/247 1340/1828/247 +f 1339/1821/232 1334/1845/232 1333/1822/232 +f 1336/1846/223 1343/1831/223 1342/1830/223 +f 1338/1827/248 1335/1825/248 1334/1824/248 +f 1333/1823/234 1346/1817/234 1345/1847/234 +f 1348/1848/243 1337/1818/243 1336/1826/243 +f 1350/1837/244 1347/1835/244 1346/1834/244 +f 1345/1833/231 1353/1814/231 1352/1849/231 +f 1351/1838/245 1356/1842/245 1355/1812/245 +f 1354/1850/222 1349/1815/222 1348/1836/222 +f 1334/1845/224 1343/1831/224 1338/1851/224 +f 1370/1852/224 1362/1853/224 1364/1854/224 +f 1365/1855/225 1361/1856/225 1376/1857/225 +f 1359/1858/225 1374/1859/225 1357/1860/225 +f 1367/1861/225 1375/1862/225 1374/1859/225 +f 1366/1863/225 1376/1857/225 1375/1862/225 +f 1360/1864/224 1373/1865/224 1368/1866/224 +f 1368/1866/224 1372/1867/224 1369/1868/224 +f 1369/1868/224 1371/1869/224 1370/1852/224 +f 1398/1870/227 1386/1871/227 1387/1872/227 +f 1384/1873/222 1387/1874/222 1383/1875/222 +f 1380/1876/221 1383/1875/221 1378/1877/221 +f 1377/1878/226 1381/1879/226 1379/1880/226 +f 1379/1881/228 1384/1873/228 1380/1876/228 +f 1378/1877/227 1382/1882/227 1377/1878/227 +f 1382/1882/231 1385/1883/231 1381/1879/231 +f 1381/1884/245 1388/1885/245 1384/1873/245 +f 1383/1875/244 1386/1871/244 1382/1882/244 +f 1410/1886/226 1385/1883/226 1386/1887/226 +f 1404/1888/228 1388/1885/228 1385/1889/228 +f 1392/1890/221 1387/1874/221 1388/1891/221 +f 1396/1892/227 1411/1893/227 1400/1894/227 +f 1409/1895/226 1405/1896/226 1412/1897/226 +f 1402/1898/228 1393/1899/228 1406/1900/228 +f 1401/1901/225 1395/1902/225 1389/1903/225 +f 1389/1904/256 1390/1905/256 1391/1906/256 +f 1392/1907/240 1393/1899/240 1394/1908/240 +f 1395/1902/254 1396/1909/254 1397/1910/254 +f 1398/1911/242 1399/1912/242 1400/1913/242 +f 1401/1914/255 1402/1915/255 1403/1916/255 +f 1404/1917/239 1405/1896/239 1406/1918/239 +f 1407/1919/253 1408/1920/253 1409/1921/253 +f 1410/1922/241 1411/1893/241 1412/1923/241 +f 1408/1920/244 1396/1892/244 1395/1924/244 +f 1398/1925/248 1411/1893/248 1410/1922/248 +f 1400/1913/243 1397/1910/243 1396/1909/243 +f 1395/1902/222 1390/1926/222 1389/1903/222 +f 1392/1927/223 1399/1912/223 1398/1911/223 +f 1394/1908/246 1391/1906/246 1390/1905/246 +f 1389/1904/245 1402/1898/245 1401/1928/245 +f 1404/1929/247 1393/1899/247 1392/1907/247 +f 1406/1918/233 1403/1916/233 1402/1915/233 +f 1401/1914/231 1409/1895/231 1408/1930/231 +f 1407/1919/234 1412/1923/234 1411/1893/234 +f 1410/1931/232 1405/1896/232 1404/1917/232 +f 1390/1926/221 1399/1912/221 1394/1932/221 +f 1434/1933/228 1422/1934/228 1423/1935/228 +f 1420/1936/223 1423/1937/223 1419/1938/223 +f 1416/1939/221 1419/1938/221 1414/1940/221 +f 1413/1941/226 1417/1942/226 1415/1943/226 +f 1415/1944/227 1420/1936/227 1416/1939/227 +f 1414/1940/228 1418/1945/228 1413/1941/228 +f 1418/1945/232 1421/1946/232 1417/1942/232 +f 1417/1947/248 1424/1948/248 1420/1936/248 +f 1419/1938/247 1422/1934/247 1418/1945/247 +f 1446/1949/226 1421/1946/226 1422/1950/226 +f 1440/1951/227 1424/1948/227 1421/1952/227 +f 1428/1953/221 1423/1937/221 1424/1954/221 +f 1432/1955/228 1447/1956/228 1436/1957/228 +f 1445/1958/226 1441/1959/226 1448/1960/226 +f 1438/1961/227 1429/1962/227 1442/1963/227 +f 1437/1964/224 1431/1965/224 1425/1966/224 +f 1425/1967/242 1426/1968/242 1427/1969/242 +f 1428/1970/254 1429/1962/254 1430/1971/254 +f 1431/1965/240 1432/1972/240 1433/1973/240 +f 1434/1974/256 1435/1975/256 1436/1976/256 +f 1437/1977/241 1438/1978/241 1439/1979/241 +f 1440/1980/253 1441/1959/253 1442/1981/253 +f 1443/1982/257 1444/1983/257 1445/1984/257 +f 1446/1985/255 1447/1956/255 1448/1986/255 +f 1444/1983/247 1432/1955/247 1431/1987/247 +f 1434/1988/245 1447/1956/245 1446/1985/245 +f 1436/1976/246 1433/1973/246 1432/1972/246 +f 1431/1965/223 1426/1989/223 1425/1966/223 +f 1428/1990/222 1435/1975/222 1434/1974/222 +f 1430/1971/243 1427/1969/243 1426/1968/243 +f 1425/1967/248 1438/1961/248 1437/1991/248 +f 1440/1992/244 1429/1962/244 1428/1970/244 +f 1442/1981/234 1439/1979/234 1438/1978/234 +f 1444/1993/232 1439/1979/232 1445/1958/232 +f 1443/1982/233 1448/1986/233 1447/1956/233 +f 1440/1980/231 1448/1960/231 1441/1959/231 +f 1426/1989/221 1435/1975/221 1430/1994/221 +f 835/1205/221 836/1995/221 834/1206/221 +f 838/1208/221 839/1212/221 844/1209/221 +f 837/1211/222 840/1217/222 839/1212/222 +f 841/1210/223 844/1209/223 843/1213/223 +f 848/1215/224 847/1996/224 842/1214/224 +f 845/1216/225 846/1997/225 840/1217/225 +f 851/1218/226 852/1224/226 849/1219/226 +f 836/1221/224 852/1224/224 851/1218/224 +f 833/1207/225 850/1220/225 849/1219/225 +f 835/1223/227 849/1219/227 852/1224/227 +f 834/1226/228 851/1218/228 850/1220/228 +f 856/1228/227 864/1998/227 863/1229/227 +f 853/1231/228 861/1243/228 862/1232/228 +f 855/1230/227 857/1999/227 860/1234/227 +f 854/1233/228 859/2000/228 858/1235/228 +f 856/1236/224 860/2001/224 859/1237/224 +f 853/1239/225 858/2002/225 857/1240/225 +f 854/1238/229 862/1232/229 864/1242/229 +f 855/1241/230 863/1229/230 861/1243/230 +f 881/1244/225 882/1249/225 898/1245/225 +f 883/1247/225 899/2003/225 898/1248/225 +f 884/1250/225 900/2004/225 899/1251/225 +f 885/1252/225 901/2005/225 900/1253/225 +f 885/1252/225 886/1258/225 902/1254/225 +f 887/1256/225 903/2006/225 902/1257/225 +f 888/1259/225 904/2007/225 903/1260/225 +f 889/1261/225 905/2008/225 904/1262/225 +f 889/1261/225 890/1267/225 906/1263/225 +f 891/1265/225 907/2009/225 906/1266/225 +f 892/1268/225 908/2010/225 907/1269/225 +f 892/1268/225 893/2011/225 909/1270/225 +f 894/1272/225 910/2012/225 909/1273/225 +f 894/1272/225 895/1279/225 911/1275/225 +f 896/1277/225 912/2013/225 911/1278/225 +f 881/1244/225 897/2014/225 912/1280/225 +f 913/1283/225 914/2015/225 917/2016/225 +f 914/2015/225 915/2017/225 917/2016/225 +f 915/2017/225 916/2018/225 917/2016/225 +f 917/2016/225 918/2019/225 919/2020/225 +f 919/2020/225 920/2021/225 921/1281/225 +f 921/1281/225 922/2022/225 923/2023/225 +f 923/2023/225 924/2024/225 921/1281/225 +f 924/2024/225 925/1282/225 921/1281/225 +f 925/1282/225 926/2025/225 927/2026/225 +f 927/2026/225 928/2027/225 925/1282/225 +f 928/2027/225 913/1283/225 925/1282/225 +f 917/2016/225 919/2020/225 913/1283/225 +f 919/2020/225 921/1281/225 913/1283/225 +f 931/1284/225 947/2028/225 945/1285/225 +f 932/1287/225 948/2029/225 947/1288/225 +f 933/1290/225 949/2030/225 948/1291/225 +f 934/1293/225 950/2031/225 949/1294/225 +f 935/1296/225 951/2032/225 950/1297/225 +f 935/1299/225 936/2033/225 952/1300/225 +f 937/1302/225 953/2034/225 952/1303/225 +f 937/1305/225 938/2035/225 954/1306/225 +f 938/1308/225 939/2036/225 955/1309/225 +f 939/1311/225 940/2037/225 956/1312/225 +f 941/1314/225 957/2038/225 956/1315/225 +f 941/1317/225 942/2039/225 958/1318/225 +f 942/1320/225 943/2040/225 959/1321/225 +f 943/1323/225 944/2041/225 960/1324/225 +f 944/1326/225 930/2042/225 946/1327/225 +f 929/1329/225 945/2043/225 946/1330/225 +f 990/1332/227 1002/2044/227 978/1333/227 +f 967/1335/226 968/1339/226 965/1336/226 +f 963/1338/228 965/1336/228 968/1339/228 +f 962/1341/227 967/1335/227 966/1337/227 +f 964/1343/225 968/1339/225 967/1335/225 +f 961/1345/224 966/1337/224 965/1336/224 +f 976/1347/231 980/1364/231 979/1348/231 +f 972/1350/225 976/1347/225 975/1349/225 +f 969/1352/224 974/1356/224 973/1353/224 +f 971/1355/228 973/2045/228 976/1347/228 +f 970/1351/227 975/1349/227 974/1356/227 +f 974/1356/232 978/1361/232 977/1357/232 +f 976/1347/233 973/2045/233 977/1358/233 +f 975/1349/234 979/1334/234 978/1333/234 +f 1002/1360/224 996/2046/224 977/1357/224 +f 996/1362/228 984/2047/228 980/1359/228 +f 984/1363/225 990/2048/225 979/1348/225 +f 988/1365/227 999/1392/227 1003/1366/227 +f 1001/1368/224 995/1389/224 997/1369/224 +f 994/1371/228 983/1379/228 985/1372/228 +f 993/1374/226 1000/2049/226 987/1375/226 +f 1000/1393/234 999/1392/234 988/1365/234 +f 990/1398/243 992/1367/243 1003/1366/243 +f 992/1386/244 991/1385/244 989/1383/244 +f 987/1375/231 989/1383/231 982/1399/231 +f 984/1400/222 986/1405/222 991/1385/222 +f 986/1381/245 985/1372/245 983/1379/245 +f 981/1377/233 983/1379/233 994/1371/233 +f 996/1402/246 998/1373/246 985/1372/246 +f 998/1391/247 997/1369/247 995/1389/247 +f 993/1387/232 995/1389/232 1001/1368/232 +f 999/1392/248 1001/1394/248 1004/1396/248 +f 1002/1404/223 1004/1370/223 997/1369/223 +f 982/1399/225 989/1383/225 991/1385/225 +f 1006/1406/233 1008/1409/233 1007/1407/233 +f 1012/1414/234 1014/1417/234 1013/1415/234 +f 1030/1422/225 1031/1439/225 1022/1423/225 +f 1025/1425/224 1023/2050/224 1021/1426/224 +f 1019/1428/224 1027/1431/224 1034/1429/224 +f 1027/1431/224 1026/1433/224 1035/1432/224 +f 1026/1433/224 1025/1425/224 1036/1427/224 +f 1020/1434/225 1018/2051/225 1033/1435/225 +f 1028/1436/225 1033/1435/225 1032/1437/225 +f 1029/1438/225 1032/1437/225 1031/1439/225 +f 1043/1440/226 1044/1446/226 1041/1441/226 +f 1037/1443/225 1042/1442/225 1041/1441/225 +f 1039/1445/234 1041/1441/234 1044/1446/234 +f 1038/1448/233 1043/1440/233 1042/1442/233 +f 1040/1450/224 1044/1446/224 1043/1440/224 +f 1053/1452/224 1047/2052/224 1048/1453/224 +f 1051/1455/225 1046/2053/225 1045/1456/225 +f 1050/1457/231 1049/1461/231 1052/1458/231 +f 1054/1459/232 1053/1452/232 1056/1454/232 +f 1049/1461/226 1054/1459/226 1055/1460/226 +f 1060/1462/228 1068/2054/228 1067/1463/228 +f 1057/1465/227 1065/1477/227 1066/1466/227 +f 1059/1464/228 1061/2055/228 1064/1468/228 +f 1058/1467/227 1063/2056/227 1062/1469/227 +f 1060/1470/225 1064/2057/225 1063/1471/225 +f 1057/1473/224 1062/2058/224 1061/1474/224 +f 1058/1472/230 1066/1466/230 1068/1476/230 +f 1059/1475/229 1067/1463/229 1065/1477/229 +f 1085/1478/224 1086/1483/224 1102/1479/224 +f 1087/1481/224 1103/2059/224 1102/1482/224 +f 1088/1484/224 1104/2060/224 1103/1485/224 +f 1089/1486/224 1105/2061/224 1104/1487/224 +f 1089/1486/224 1090/1492/224 1106/1488/224 +f 1091/1490/224 1107/2062/224 1106/1491/224 +f 1092/1493/224 1108/2063/224 1107/1494/224 +f 1093/1495/224 1109/2064/224 1108/1496/224 +f 1093/1495/224 1094/1501/224 1110/1497/224 +f 1095/1499/224 1111/2065/224 1110/1500/224 +f 1096/1502/224 1112/2066/224 1111/1503/224 +f 1096/1502/224 1097/2067/224 1113/1504/224 +f 1098/1506/224 1114/2068/224 1113/1507/224 +f 1098/1506/224 1099/1513/224 1115/1509/224 +f 1100/1511/224 1116/2069/224 1115/1512/224 +f 1085/1478/224 1101/2070/224 1116/1514/224 +f 1117/1517/224 1118/2071/224 1121/2072/224 +f 1118/2071/224 1119/2073/224 1121/2072/224 +f 1119/2073/224 1120/2074/224 1121/2072/224 +f 1121/2072/224 1122/2075/224 1123/2076/224 +f 1123/2076/224 1124/2077/224 1125/1515/224 +f 1125/1515/224 1126/2078/224 1127/2079/224 +f 1127/2079/224 1128/2080/224 1125/1515/224 +f 1128/2080/224 1129/1516/224 1125/1515/224 +f 1129/1516/224 1130/2081/224 1131/2082/224 +f 1131/2082/224 1132/2083/224 1129/1516/224 +f 1132/2083/224 1117/1517/224 1129/1516/224 +f 1121/2072/224 1123/2076/224 1117/1517/224 +f 1123/2076/224 1125/1515/224 1117/1517/224 +f 1135/1518/224 1151/2084/224 1149/1519/224 +f 1136/1521/224 1152/2085/224 1151/1522/224 +f 1137/1524/224 1153/2086/224 1152/1525/224 +f 1138/1527/224 1154/2087/224 1153/1528/224 +f 1139/1530/224 1155/2088/224 1154/1531/224 +f 1139/1533/224 1140/2089/224 1156/1534/224 +f 1141/1536/224 1157/2090/224 1156/1537/224 +f 1141/1539/224 1142/2091/224 1158/1540/224 +f 1142/1542/224 1143/2092/224 1159/1543/224 +f 1143/1545/224 1144/2093/224 1160/1546/224 +f 1145/1548/224 1161/2094/224 1160/1549/224 +f 1145/1551/224 1146/2095/224 1162/1552/224 +f 1146/1554/224 1147/2096/224 1163/1555/224 +f 1147/1557/224 1148/2097/224 1164/1558/224 +f 1148/1560/224 1134/2098/224 1150/1561/224 +f 1133/1563/224 1149/2099/224 1150/1564/224 +f 1194/1566/228 1206/2100/228 1182/1567/228 +f 1170/1569/226 1171/1577/226 1172/1570/226 +f 1167/1572/227 1169/1571/227 1172/1570/227 +f 1166/1574/228 1171/1577/228 1170/1569/228 +f 1168/1576/224 1172/1570/224 1171/1577/224 +f 1165/1579/225 1170/1569/225 1169/1571/225 +f 1180/1581/232 1184/1598/232 1183/1582/232 +f 1176/1584/224 1180/1581/224 1179/1583/224 +f 1173/1586/225 1178/1590/225 1177/1587/225 +f 1175/1589/227 1177/2101/227 1180/1581/227 +f 1174/1585/228 1179/1583/228 1178/1590/228 +f 1178/1590/231 1182/1595/231 1181/1591/231 +f 1180/1581/234 1177/2101/234 1181/1592/234 +f 1179/1583/233 1183/1568/233 1182/1567/233 +f 1206/1594/225 1200/2102/225 1181/1591/225 +f 1200/1596/227 1188/2103/227 1184/1593/227 +f 1188/1597/224 1194/2104/224 1183/1582/224 +f 1192/1599/228 1203/1626/228 1207/1600/228 +f 1205/1602/225 1199/1623/225 1201/1603/225 +f 1198/1605/227 1187/1613/227 1189/1606/227 +f 1197/1608/226 1204/2105/226 1191/1609/226 +f 1204/1627/233 1203/1626/233 1192/1599/233 +f 1194/1632/246 1196/1601/246 1207/1600/246 +f 1196/1620/247 1195/1619/247 1193/1617/247 +f 1191/1609/232 1193/1617/232 1186/1633/232 +f 1188/1634/223 1190/1639/223 1195/1619/223 +f 1190/1615/248 1189/1606/248 1187/1613/248 +f 1185/1611/234 1187/1613/234 1198/1605/234 +f 1200/1636/243 1202/1607/243 1189/1606/243 +f 1202/1625/244 1201/1603/244 1199/1623/244 +f 1197/1621/231 1199/1623/231 1205/1602/231 +f 1203/1626/245 1205/1628/245 1208/1630/245 +f 1206/1638/222 1208/1604/222 1201/1603/222 +f 1186/1633/224 1193/1617/224 1195/1619/224 +f 1210/1640/234 1212/1643/234 1211/1641/234 +f 1216/1648/233 1218/1651/233 1217/1649/233 +f 1234/1656/224 1235/1673/224 1226/1657/224 +f 1229/1659/225 1227/2106/225 1225/1660/225 +f 1223/1662/225 1231/1665/225 1238/1663/225 +f 1231/1665/225 1230/1667/225 1239/1666/225 +f 1230/1667/225 1229/1659/225 1240/1661/225 +f 1224/1668/224 1222/2107/224 1237/1669/224 +f 1232/1670/224 1237/1669/224 1236/1671/224 +f 1233/1672/224 1236/1671/224 1235/1673/224 +f 1246/1674/226 1247/1684/226 1248/1675/226 +f 1241/1677/224 1246/1674/224 1245/1676/224 +f 1243/1679/233 1245/1676/233 1248/1675/233 +f 1242/1681/234 1247/1684/234 1246/1674/234 +f 1244/1683/225 1248/1675/225 1247/1684/225 +f 1278/1686/227 1290/2108/227 1266/1687/227 +f 1255/1689/226 1256/1693/226 1253/1690/226 +f 1251/1692/228 1253/1690/228 1256/1693/228 +f 1250/1695/227 1255/1689/227 1254/1691/227 +f 1252/1697/225 1256/1693/225 1255/1689/225 +f 1249/1699/224 1254/1691/224 1253/1690/224 +f 1264/1701/231 1268/1718/231 1267/1702/231 +f 1260/1704/225 1264/1701/225 1263/1703/225 +f 1257/1706/224 1262/1710/224 1261/1707/224 +f 1259/1709/228 1261/2109/228 1264/1701/228 +f 1258/1705/227 1263/1703/227 1262/1710/227 +f 1262/1710/232 1266/1715/232 1265/1711/232 +f 1264/1701/233 1261/2109/233 1265/1712/233 +f 1263/1703/234 1267/1688/234 1266/1687/234 +f 1290/1714/224 1284/2110/224 1265/1711/224 +f 1284/1716/228 1272/2111/228 1268/1713/228 +f 1272/1717/225 1278/2112/225 1267/1702/225 +f 1276/1719/227 1287/1746/227 1291/1720/227 +f 1289/1722/224 1283/1743/224 1285/1723/224 +f 1282/1725/228 1271/1733/228 1273/1726/228 +f 1281/1728/226 1288/2113/226 1275/1729/226 +f 1288/1747/234 1287/1746/234 1276/1719/234 +f 1278/1752/243 1280/1721/243 1291/1720/243 +f 1280/1740/244 1279/1739/244 1277/1737/244 +f 1275/1729/231 1277/1737/231 1270/1753/231 +f 1272/1754/222 1274/1759/222 1279/1739/222 +f 1274/1735/245 1273/1726/245 1271/1733/245 +f 1269/1731/233 1271/1733/233 1282/1725/233 +f 1284/1756/246 1286/1727/246 1273/1726/246 +f 1286/1745/247 1285/1723/247 1283/1743/247 +f 1281/1741/232 1283/1743/232 1289/1722/232 +f 1287/1746/248 1289/1748/248 1292/1750/248 +f 1290/1758/223 1292/1724/223 1285/1723/223 +f 1270/1753/225 1277/1737/225 1279/1739/225 +f 1306/1760/225 1307/1777/225 1298/1761/225 +f 1301/1763/224 1299/2114/224 1297/1764/224 +f 1295/1766/224 1303/1769/224 1310/1767/224 +f 1303/1769/224 1302/1771/224 1311/1770/224 +f 1302/1771/224 1301/1763/224 1312/1765/224 +f 1296/1772/225 1294/2115/225 1309/1773/225 +f 1304/1774/225 1309/1773/225 1308/1775/225 +f 1305/1776/225 1308/1775/225 1307/1777/225 +f 1342/1778/228 1354/2116/228 1330/1779/228 +f 1318/1781/226 1319/1789/226 1320/1782/226 +f 1315/1784/227 1317/1783/227 1320/1782/227 +f 1314/1786/228 1319/1789/228 1318/1781/228 +f 1316/1788/224 1320/1782/224 1319/1789/224 +f 1313/1791/225 1318/1781/225 1317/1783/225 +f 1328/1793/232 1332/1810/232 1331/1794/232 +f 1324/1796/224 1328/1793/224 1327/1795/224 +f 1321/1798/225 1326/1802/225 1325/1799/225 +f 1323/1801/227 1325/2117/227 1328/1793/227 +f 1322/1797/228 1327/1795/228 1326/1802/228 +f 1326/1802/231 1330/1807/231 1329/1803/231 +f 1328/1793/234 1325/2117/234 1329/1804/234 +f 1327/1795/233 1331/1780/233 1330/1779/233 +f 1354/1806/225 1348/2118/225 1329/1803/225 +f 1348/1808/227 1336/2119/227 1332/1805/227 +f 1336/1809/224 1342/2120/224 1331/1794/224 +f 1340/1811/228 1351/1838/228 1355/1812/228 +f 1353/1814/225 1347/1835/225 1349/1815/225 +f 1346/1817/227 1335/1825/227 1337/1818/227 +f 1345/1820/226 1352/2121/226 1339/1821/226 +f 1352/1839/233 1351/1838/233 1340/1811/233 +f 1342/1844/246 1344/1813/246 1355/1812/246 +f 1344/1832/247 1343/1831/247 1341/1829/247 +f 1339/1821/232 1341/1829/232 1334/1845/232 +f 1336/1846/223 1338/1851/223 1343/1831/223 +f 1338/1827/248 1337/1818/248 1335/1825/248 +f 1333/1823/234 1335/1825/234 1346/1817/234 +f 1348/1848/243 1350/1819/243 1337/1818/243 +f 1350/1837/244 1349/1815/244 1347/1835/244 +f 1345/1833/231 1347/1835/231 1353/1814/231 +f 1351/1838/245 1353/1840/245 1356/1842/245 +f 1354/1850/222 1356/1816/222 1349/1815/222 +f 1334/1845/224 1341/1829/224 1343/1831/224 +f 1370/1852/224 1371/1869/224 1362/1853/224 +f 1365/1855/225 1363/2122/225 1361/1856/225 +f 1359/1858/225 1367/1861/225 1374/1859/225 +f 1367/1861/225 1366/1863/225 1375/1862/225 +f 1366/1863/225 1365/1855/225 1376/1857/225 +f 1360/1864/224 1358/2123/224 1373/1865/224 +f 1368/1866/224 1373/1865/224 1372/1867/224 +f 1369/1868/224 1372/1867/224 1371/1869/224 +f 1398/1870/227 1410/2124/227 1386/1871/227 +f 1384/1873/222 1388/1891/222 1387/1874/222 +f 1380/1876/221 1384/1873/221 1383/1875/221 +f 1377/1878/226 1382/1882/226 1381/1879/226 +f 1379/1881/228 1381/1884/228 1384/1873/228 +f 1378/1877/227 1383/1875/227 1382/1882/227 +f 1382/1882/231 1386/1887/231 1385/1883/231 +f 1381/1884/245 1385/1889/245 1388/1885/245 +f 1383/1875/244 1387/1872/244 1386/1871/244 +f 1410/1886/226 1404/2125/226 1385/1883/226 +f 1404/1888/228 1392/2126/228 1388/1885/228 +f 1392/1890/221 1398/2127/221 1387/1874/221 +f 1396/1892/227 1407/1919/227 1411/1893/227 +f 1409/1895/226 1403/1916/226 1405/1896/226 +f 1402/1898/228 1391/1906/228 1393/1899/228 +f 1401/1901/225 1408/2128/225 1395/1902/225 +f 1408/1920/244 1407/1919/244 1396/1892/244 +f 1398/1925/248 1400/1894/248 1411/1893/248 +f 1400/1913/243 1399/1912/243 1397/1910/243 +f 1395/1902/222 1397/1910/222 1390/1926/222 +f 1392/1927/223 1394/1932/223 1399/1912/223 +f 1394/1908/246 1393/1899/246 1391/1906/246 +f 1389/1904/245 1391/1906/245 1402/1898/245 +f 1404/1929/247 1406/1900/247 1393/1899/247 +f 1406/1918/233 1405/1896/233 1403/1916/233 +f 1401/1914/231 1403/1916/231 1409/1895/231 +f 1407/1919/234 1409/1921/234 1412/1923/234 +f 1410/1931/232 1412/1897/232 1405/1896/232 +f 1390/1926/221 1397/1910/221 1399/1912/221 +f 1434/1933/228 1446/2129/228 1422/1934/228 +f 1420/1936/223 1424/1954/223 1423/1937/223 +f 1416/1939/221 1420/1936/221 1419/1938/221 +f 1413/1941/226 1418/1945/226 1417/1942/226 +f 1415/1944/227 1417/1947/227 1420/1936/227 +f 1414/1940/228 1419/1938/228 1418/1945/228 +f 1418/1945/232 1422/1950/232 1421/1946/232 +f 1417/1947/248 1421/1952/248 1424/1948/248 +f 1419/1938/247 1423/1935/247 1422/1934/247 +f 1446/1949/226 1440/2130/226 1421/1946/226 +f 1440/1951/227 1428/2131/227 1424/1948/227 +f 1428/1953/221 1434/2132/221 1423/1937/221 +f 1432/1955/228 1443/1982/228 1447/1956/228 +f 1445/1958/226 1439/1979/226 1441/1959/226 +f 1438/1961/227 1427/1969/227 1429/1962/227 +f 1437/1964/224 1444/2133/224 1431/1965/224 +f 1444/1983/247 1443/1982/247 1432/1955/247 +f 1434/1988/245 1436/1957/245 1447/1956/245 +f 1436/1976/246 1435/1975/246 1433/1973/246 +f 1431/1965/223 1433/1973/223 1426/1989/223 +f 1428/1990/222 1430/1994/222 1435/1975/222 +f 1430/1971/243 1429/1962/243 1427/1969/243 +f 1425/1967/248 1427/1969/248 1438/1961/248 +f 1440/1992/244 1442/1963/244 1429/1962/244 +f 1442/1981/234 1441/1959/234 1439/1979/234 +f 1444/1993/232 1437/1977/232 1439/1979/232 +f 1443/1982/233 1445/1984/233 1448/1986/233 +f 1440/1980/231 1446/2134/231 1448/1960/231 +f 1426/1989/221 1433/1973/221 1435/1975/221 +s 1 +f 876/2135/258 891/1265/243 875/2136/243 +f 869/2137/226 884/1250/259 868/2138/259 +f 877/2139/221 892/1268/258 876/2135/258 +f 870/2140/260 885/1252/226 869/2137/226 +f 878/2141/261 893/1274/221 877/2142/221 +f 871/2143/234 886/1258/260 870/2140/260 +f 879/2144/246 894/1272/261 878/2141/261 +f 872/2145/262 887/1256/234 871/2143/234 +f 880/2146/263 895/1279/246 879/2144/246 +f 873/2147/227 888/1259/262 872/2145/262 +f 866/2148/264 881/1244/228 865/2149/228 +f 865/2149/228 896/1277/263 880/2146/263 +f 874/2150/265 889/1261/227 873/2147/227 +f 867/2151/233 882/1249/264 866/2148/264 +f 875/2136/243 890/1267/265 874/2150/265 +f 868/2138/259 883/1247/233 867/2151/233 +f 913/2152/228 945/2043/264 914/2153/264 +f 903/2006/246 934/1298/261 902/1257/261 +f 926/2154/261 959/1321/246 927/2155/246 +f 902/1254/261 933/1295/221 901/1255/221 +f 925/2156/221 958/1318/261 926/2157/261 +f 901/2005/221 932/1292/258 900/1253/258 +f 924/2158/258 957/2038/221 925/2159/221 +f 900/2004/258 931/1289/243 899/1251/243 +f 923/2160/243 956/1312/258 924/2161/258 +f 899/2003/243 929/1286/265 898/1248/265 +f 897/2014/227 944/1326/262 912/1280/262 +f 922/2162/265 955/1309/243 923/2163/243 +f 898/1245/265 930/1331/227 897/1246/227 +f 912/2013/262 943/1323/234 911/1278/234 +f 921/2164/227 954/1306/265 922/2165/265 +f 911/1275/234 942/1320/260 910/1276/260 +f 927/2166/246 960/1324/263 928/2167/263 +f 904/2007/263 935/1299/246 903/1260/246 +f 914/2168/264 947/2028/233 915/2169/233 +f 928/2170/263 946/1327/228 913/2171/228 +f 905/2008/228 936/1304/263 904/1262/263 +f 915/2172/233 948/2029/259 916/2173/259 +f 906/1263/264 937/1305/228 905/1264/228 +f 916/2174/259 949/2030/226 917/2175/226 +f 907/2009/233 938/1308/264 906/1266/264 +f 917/2176/226 950/2031/260 918/2177/260 +f 908/2010/259 939/1311/233 907/1269/233 +f 918/2178/260 951/2032/234 919/2179/234 +f 909/1270/226 940/1316/259 908/1271/259 +f 919/2180/234 952/1300/262 920/2181/262 +f 910/2012/260 941/1317/226 909/1273/226 +f 920/2182/262 953/2034/227 921/2183/227 +f 1030/1422/266 1023/2050/267 1025/1425/266 +f 1036/2184/268 1022/1423/269 1031/1439/268 +f 1017/2185/270 1033/1435/271 1018/2051/270 +f 1034/2186/271 1032/1437/272 1033/1435/271 +f 1035/2187/272 1031/1439/268 1032/1437/272 +f 1019/1428/273 1028/1436/274 1027/1431/274 +f 1028/1436/274 1026/1433/275 1027/1431/274 +f 1029/1438/275 1025/1425/266 1026/1433/275 +f 1079/2188/246 1096/1502/261 1095/1499/246 +f 1073/2189/226 1088/1484/260 1072/2190/260 +f 1081/2191/221 1096/1502/261 1080/2192/261 +f 1074/2193/259 1089/1486/226 1073/2189/226 +f 1082/2194/258 1097/1508/221 1081/2195/221 +f 1075/2196/233 1090/1492/259 1074/2193/259 +f 1083/2197/243 1098/1506/258 1082/2194/258 +f 1075/2196/233 1092/1493/264 1091/1490/233 +f 1084/2198/265 1099/1513/243 1083/2197/243 +f 1077/2199/228 1092/1493/264 1076/2200/264 +f 1070/2201/262 1085/1478/227 1069/2202/227 +f 1069/2202/227 1100/1511/265 1084/2198/265 +f 1078/2203/263 1093/1495/228 1077/2199/228 +f 1071/2204/234 1086/1483/262 1070/2201/262 +f 1079/2188/246 1094/1501/263 1078/2203/263 +f 1071/2204/234 1088/1484/260 1087/1481/234 +f 1117/2205/227 1149/2099/262 1118/2206/262 +f 1107/2062/243 1138/1532/258 1106/1491/258 +f 1131/2207/243 1162/1556/258 1163/1555/243 +f 1106/1488/258 1137/1529/221 1105/1489/221 +f 1129/2208/221 1162/1552/258 1130/2209/258 +f 1104/1487/261 1137/1524/221 1136/1526/261 +f 1129/2210/221 1160/1549/261 1161/2094/221 +f 1104/2060/261 1135/1523/246 1103/1485/246 +f 1127/2211/246 1160/1546/261 1128/2212/261 +f 1103/2059/246 1133/1520/263 1102/1482/263 +f 1101/2070/228 1148/1560/264 1116/1514/264 +f 1126/2213/263 1159/1543/246 1127/2214/246 +f 1102/1479/263 1134/1565/228 1101/1480/228 +f 1116/2069/264 1147/1557/233 1115/1512/233 +f 1125/2215/228 1158/1540/263 1126/2216/263 +f 1115/1509/233 1146/1554/259 1114/1510/259 +f 1131/2217/243 1164/1558/265 1132/2218/265 +f 1108/2063/265 1139/1533/243 1107/1494/243 +f 1118/2219/262 1151/2084/234 1119/2220/234 +f 1132/2221/265 1150/1561/227 1117/2222/227 +f 1109/2064/227 1140/1538/265 1108/1496/265 +f 1119/2223/234 1152/2085/260 1120/2224/260 +f 1110/1497/262 1141/1539/227 1109/1498/227 +f 1120/2225/260 1153/2086/226 1121/2226/226 +f 1111/2065/234 1142/1542/262 1110/1500/262 +f 1121/2227/226 1154/2087/259 1122/2228/259 +f 1112/2066/260 1143/1545/234 1111/1503/234 +f 1122/2229/259 1155/2088/233 1123/2230/233 +f 1113/1504/226 1144/1550/260 1112/1505/260 +f 1123/2231/233 1156/1534/264 1124/2232/264 +f 1114/2068/259 1145/1551/226 1113/1507/226 +f 1124/2233/264 1157/2090/228 1125/2234/228 +f 1234/1656/276 1227/2106/277 1229/1659/276 +f 1235/1673/278 1225/2235/279 1226/1657/279 +f 1221/2236/280 1237/1669/281 1222/2107/280 +f 1238/2237/281 1236/1671/282 1237/1669/281 +f 1236/1671/282 1240/2238/278 1235/1673/278 +f 1223/1662/283 1232/1670/284 1231/1665/284 +f 1232/1670/284 1230/1667/285 1231/1665/284 +f 1233/1672/285 1229/1659/276 1230/1667/285 +f 1306/1760/266 1299/2114/267 1301/1763/266 +f 1312/2239/268 1298/1761/269 1307/1777/268 +f 1293/2240/270 1309/1773/271 1294/2115/270 +f 1310/2241/271 1308/1775/272 1309/1773/271 +f 1311/2242/272 1307/1777/268 1308/1775/272 +f 1295/1766/273 1304/1774/274 1303/1769/274 +f 1304/1774/274 1302/1771/275 1303/1769/274 +f 1305/1776/275 1301/1763/266 1302/1771/275 +f 1370/1852/276 1363/2122/277 1365/1855/276 +f 1371/1869/278 1361/2243/279 1362/1853/279 +f 1357/2244/280 1373/1865/281 1358/2123/280 +f 1374/2245/281 1372/1867/282 1373/1865/281 +f 1375/2246/282 1371/1869/278 1372/1867/282 +f 1359/1858/283 1368/1866/284 1367/1861/284 +f 1368/1866/284 1366/1863/285 1367/1861/284 +f 1369/1868/285 1365/1855/276 1366/1863/285 +f 876/2135/258 892/1268/258 891/1265/243 +f 869/2137/226 885/1252/226 884/1250/259 +f 877/2139/221 893/2011/221 892/1268/258 +f 870/2140/260 886/1258/260 885/1252/226 +f 878/2141/261 894/1272/261 893/1274/221 +f 871/2143/234 887/1256/234 886/1258/260 +f 879/2144/246 895/1279/246 894/1272/261 +f 872/2145/262 888/1259/262 887/1256/234 +f 880/2146/263 896/1277/263 895/1279/246 +f 873/2147/227 889/1261/227 888/1259/262 +f 866/2148/264 882/1249/264 881/1244/228 +f 865/2149/228 881/1244/228 896/1277/263 +f 874/2150/265 890/1267/265 889/1261/227 +f 867/2151/233 883/1247/233 882/1249/264 +f 875/2136/243 891/1265/243 890/1267/265 +f 868/2138/259 884/1250/259 883/1247/233 +f 913/2152/228 946/1330/228 945/2043/264 +f 903/2006/246 935/1296/246 934/1298/261 +f 926/2154/261 958/1322/261 959/1321/246 +f 902/1254/261 934/1293/261 933/1295/221 +f 925/2156/221 957/1319/221 958/1318/261 +f 901/2005/221 933/1290/221 932/1292/258 +f 924/2158/258 956/1315/258 957/2038/221 +f 900/2004/258 932/1287/258 931/1289/243 +f 923/2160/243 955/1313/243 956/1312/258 +f 899/2003/243 931/1284/243 929/1286/265 +f 897/2014/227 930/2042/227 944/1326/262 +f 922/2162/265 954/1310/265 955/1309/243 +f 898/1245/265 929/1329/265 930/1331/227 +f 912/2013/262 944/2041/262 943/1323/234 +f 921/2164/227 953/1307/227 954/1306/265 +f 911/1275/234 943/2040/234 942/1320/260 +f 927/2166/246 959/1325/246 960/1324/263 +f 904/2007/263 936/2033/263 935/1299/246 +f 914/2168/264 945/1285/264 947/2028/233 +f 928/2170/263 960/1328/263 946/1327/228 +f 905/2008/228 937/1302/228 936/1304/263 +f 915/2172/233 947/1288/233 948/2029/259 +f 906/1263/264 938/2035/264 937/1305/228 +f 916/2174/259 948/1291/259 949/2030/226 +f 907/2009/233 939/2036/233 938/1308/264 +f 917/2176/226 949/1294/226 950/2031/260 +f 908/2010/259 940/2037/259 939/1311/233 +f 918/2178/260 950/1297/260 951/2032/234 +f 909/1270/226 941/1314/226 940/1316/259 +f 919/2180/234 951/1301/234 952/1300/262 +f 910/2012/260 942/2039/260 941/1317/226 +f 920/2182/262 952/1303/262 953/2034/227 +f 1030/1422/266 1024/1424/267 1023/2050/267 +f 1036/2184/268 1021/2247/269 1022/1423/269 +f 1017/2185/270 1034/2186/271 1033/1435/271 +f 1034/2186/271 1035/2187/272 1032/1437/272 +f 1035/2187/272 1036/2184/268 1031/1439/268 +f 1019/1428/273 1020/1434/273 1028/1436/274 +f 1028/1436/274 1029/1438/275 1026/1433/275 +f 1029/1438/275 1030/1422/266 1025/1425/266 +f 1079/2188/246 1080/2192/261 1096/1502/261 +f 1073/2189/226 1089/1486/226 1088/1484/260 +f 1081/2191/221 1097/2067/221 1096/1502/261 +f 1074/2193/259 1090/1492/259 1089/1486/226 +f 1082/2194/258 1098/1506/258 1097/1508/221 +f 1075/2196/233 1091/1490/233 1090/1492/259 +f 1083/2197/243 1099/1513/243 1098/1506/258 +f 1075/2196/233 1076/2200/264 1092/1493/264 +f 1084/2198/265 1100/1511/265 1099/1513/243 +f 1077/2199/228 1093/1495/228 1092/1493/264 +f 1070/2201/262 1086/1483/262 1085/1478/227 +f 1069/2202/227 1085/1478/227 1100/1511/265 +f 1078/2203/263 1094/1501/263 1093/1495/228 +f 1071/2204/234 1087/1481/234 1086/1483/262 +f 1079/2188/246 1095/1499/246 1094/1501/263 +f 1071/2204/234 1072/2190/260 1088/1484/260 +f 1117/2205/227 1150/1564/227 1149/2099/262 +f 1107/2062/243 1139/1530/243 1138/1532/258 +f 1131/2207/243 1130/2248/258 1162/1556/258 +f 1106/1488/258 1138/1527/258 1137/1529/221 +f 1129/2208/221 1161/1553/221 1162/1552/258 +f 1104/1487/261 1105/2061/221 1137/1524/221 +f 1129/2210/221 1128/2249/261 1160/1549/261 +f 1104/2060/261 1136/1521/261 1135/1523/246 +f 1127/2211/246 1159/1547/246 1160/1546/261 +f 1103/2059/246 1135/1518/246 1133/1520/263 +f 1101/2070/228 1134/2098/228 1148/1560/264 +f 1126/2213/263 1158/1544/263 1159/1543/246 +f 1102/1479/263 1133/1563/263 1134/1565/228 +f 1116/2069/264 1148/2097/264 1147/1557/233 +f 1125/2215/228 1157/1541/228 1158/1540/263 +f 1115/1509/233 1147/2096/233 1146/1554/259 +f 1131/2217/243 1163/1559/243 1164/1558/265 +f 1108/2063/265 1140/2089/265 1139/1533/243 +f 1118/2219/262 1149/1519/262 1151/2084/234 +f 1132/2221/265 1164/1562/265 1150/1561/227 +f 1109/2064/227 1141/1536/227 1140/1538/265 +f 1119/2223/234 1151/1522/234 1152/2085/260 +f 1110/1497/262 1142/2091/262 1141/1539/227 +f 1120/2225/260 1152/1525/260 1153/2086/226 +f 1111/2065/234 1143/2092/234 1142/1542/262 +f 1121/2227/226 1153/1528/226 1154/2087/259 +f 1112/2066/260 1144/2093/260 1143/1545/234 +f 1122/2229/259 1154/1531/259 1155/2088/233 +f 1113/1504/226 1145/1548/226 1144/1550/260 +f 1123/2231/233 1155/1535/233 1156/1534/264 +f 1114/2068/259 1146/2095/259 1145/1551/226 +f 1124/2233/264 1156/1537/264 1157/2090/228 +f 1234/1656/276 1228/1658/277 1227/2106/277 +f 1235/1673/278 1240/2238/278 1225/2235/279 +f 1221/2236/280 1238/2237/281 1237/1669/281 +f 1238/2237/281 1239/2250/282 1236/1671/282 +f 1236/1671/282 1239/2250/282 1240/2238/278 +f 1223/1662/283 1224/1668/283 1232/1670/284 +f 1232/1670/284 1233/1672/285 1230/1667/285 +f 1233/1672/285 1234/1656/276 1229/1659/276 +f 1306/1760/266 1300/1762/267 1299/2114/267 +f 1312/2239/268 1297/2251/269 1298/1761/269 +f 1293/2240/270 1310/2241/271 1309/1773/271 +f 1310/2241/271 1311/2242/272 1308/1775/272 +f 1311/2242/272 1312/2239/268 1307/1777/268 +f 1295/1766/273 1296/1772/273 1304/1774/274 +f 1304/1774/274 1305/1776/275 1302/1771/275 +f 1305/1776/275 1306/1760/266 1301/1763/266 +f 1370/1852/276 1364/1854/277 1363/2122/277 +f 1371/1869/278 1376/2252/278 1361/2243/279 +f 1357/2244/280 1374/2245/281 1373/1865/281 +f 1374/2245/281 1375/2246/282 1372/1867/282 +f 1375/2246/282 1376/2252/278 1371/1869/278 +f 1359/1858/283 1360/1864/283 1368/1866/284 +f 1368/1866/284 1369/1868/285 1366/1863/285 +f 1369/1868/285 1370/1852/276 1365/1855/276 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index d9801a2af..29f40d67f 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -54,6 +54,7 @@ "block.largeTurbineRunning": {"category": "block", "sounds": [{"name": "block/largeTurbine", "stream": false}]}, "block.damage": {"category": "block", "sounds": ["block/dam1", "block/dam2", "block/dam3", "block/dam4"]}, "block.electricHum": {"category": "block", "sounds": [{"name": "block/electricHum", "stream": false}]}, + "block.fensuHum": {"category": "block", "sounds": [{"name": "block/fensuHum", "stream": false}]}, "block.boiler": {"category": "block", "sounds": [{"name": "block/boiler", "stream": false}]}, "block.hornNearSingle": {"category": "block", "sounds": [{"name": "block/hornNearSingle", "stream": false}]}, "block.hornNearDual": {"category": "block", "sounds": [{"name": "block/hornNearDual", "stream": false}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/fensuHum.ogg b/src/main/resources/assets/hbm/sounds/block/fensuHum.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d709f804d7bf58497f67e2afa652f497ead23ca1 GIT binary patch literal 99323 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png new file mode 100644 index 0000000000000000000000000000000000000000..3c32ee17d45de6ff4af30468a308b9dfe86ec27a GIT binary patch literal 10989 zcmdUVcQjn#*Y4;wN{BjI2ohcN8U#Vq=)FZ7ZHQi@cY+`YK@eq>=)D^yj5@j@$mm4x zb0@#=TkC#*-FyGNv(`Ch);aGw@7~Ye@80iz_KDTfP<}*6M+g7_9;v)}tpfmHp#Ne3 z@Nv->Q;#2Z=nJ-|yoxS9`WJ|A8v_6^15{qi>H6j#toUWUw-1`XJ_=a%9A5z)mG46Q zKeaYAI;W(}JWh3?q_WzlNdaP!uqRM_T2pzNlVC?3yK+n<2Y8+n{`AVgc~4!3L04s7@Snf^X*~bH493VzSZh z*=@*QLB#E@#p%d9SnBypN+Q2NSf7^=+^`aJ%dm!O?li_mfo6bBC9HwUhB(i=$M|uY zB?idF|HDr7Z%1m)fY;g)4Y;sV{z1zG3>=lzP}Q!affG}Nj91c;BxrfC=ziZ`Rx&f6 zt3N&HW;(x7C@d6CXG0vT@&gA$eE@Ti&SQbwii}@EzoexsrU7@(YkqlQtV!lFv);`R znvB}>8M6ENp|NR0j70T0aO)fQRcG{6_R#Cs+Wo#QVGWMV7?C>P7!+mFdgv5*h~HEy ziW3&=(%}Ot6^#@G@{8zZY6$~j3Jdk!^rXG~uO0EA;6Hb!5^vV2<9|tCE@LIqRWwj3 zi|c~C!uYXmXzBUV*a!}IAZMhH$e;pn<8+<+dZCv;QDm}rH%*Q%t|cwH+1xd78o*sb z@`gh%vt_$!fpK-IfhVlb(=1RkjZI*LE;}B_6gB{}b(f}|^O`i?2w+@PVT!*78qF0K z&4k5c4gL;bO!9DNP-n?O!_2OMmZ#Oe%YA#IKwK7|g?C_Lg3JdIB)Zh()-*Di!bY5s zU{zU6#R1$q;>a8;tSo3K{#>w5F0p9BQGE1pqusBYD3Swpo zD{3pkQVbIy_|{$G0-p2gp&8_Q!W}pNy#cqFvixtSn8pv?J=;5ONU@z3As%}Ui%KdQ zSujoN=;pC$a^=xGo=k$U(DuxN=Q*W}k(+|F`aTf0y=%%l?qXA`Ll`1Aq>$|8&@3;f z`eS+tlO@B21v!zuqJl{klS_GHpV1xPD;Xh;RdZ_d15MsMR4h7dD{5!UhOzG z4avI%0Wpn5?1?G`O8AZ|sHnxTutoRjMnFG1d(1Aj_M22T2Uy=MiMXtSbb`?|T(RfU z9a2#0g<}Ren5odK>fHCx_wib{oU}WHg&F2@BcSbB5Pic=PtiP2#6`%|+A< z>_u5^-rv1Vddr)9@v`#J{L2L`z)-D&QH#fbE}+5TfJ|w96Zu2wrQCD8N-Gxw(Jyat z5vRj9v{IUB0C16kg}5W6AZ09V)Q+}V}znH3tJt!?f`_pL$o8Iay;(5+idRe-RW z3xj9y0~;VlQC*x4I!p7)F>%AcUZ{azAM)5J9%;`>8Fxj?#Fti}~HR*Zmvxa{ce6SI0@;j~%C>$g#y_|FYqu)!ba zV9!l98y9`7`lBC+V2!n@S_*vD$Ex6L+!1wQ9lKQ3mUj+97dKyBP{Sex)*axmA06H z*l|IW{hlWQQ?*6PrP$8c*f=Jf3{TCZ>wOA&j{CaumQF=W^V$1}Pd&vwBA;HHx_bQJ6NuuEJC@3v zXIm4aA^KvPmjTx|MF+Q)58I^tv2v2x*0m9Pt!ygt#rgvP?IKc3Yg5^TrzZ>Cym9Tw zx}QNfkd~)h*~W%TlZrG@nw)VWenQ{@*)xGT=jPl-otNRPtnC4N2f*#U_ZzL}GfL1h zy%(FOepOxmqq+IA1ORL8QDlyT%Yo%VHe-2%M2l&XQ-g-G37&D=RSP#bbz*f8pbztO9v)ddG~ z{g^A;Wcc>W2g3=res-&RsX;?6*78|D1W%X7;AzYtm-C`8E#HxUpYdv$SDBF~Qy{tbpMy4;sLhHAPHc z3MVnY)f;Kzvbo)ztY9DoHU{g)``#ff5=`7E+~HeVT;(W-7nH;Ae+s?#taLi)W+$Lg z07BUYb*kWE5`z87`PbsHm>Z7%q)gV$5+fU$(mlfz9Ad%~F!y39BvMlXW1z64f#|!< znSpa>>IPKPeRGIhq|!pOMNr98jq9t~3Z>fEriZw7+VPYcA2}QOvo6}=S4K3|`ZTn3 z){34)3}Za|lHN31PJsyJ=btaI00k;Ej7%FX9o1x!EVZTAlbRv&G8W%j8Xkd&wNt%c zD1j5ag+B=Z8Fous4A*>J5-NDxa^JD`u?-$C)+&6c-v0i__~LTx{Q83DT*l4uc-amCi!&*k23yQJ-q$+Y`XoYJ!xbh*h7&?wSXa0@9PT9dvV`= z{@7aE%52k?%&L=jVv9XuS^@&M8jP$01l5d-nx0iL7TmwDWMXS|LBbwixMOR5lis^K zN2nUw2fBw=9rDV9%4R_cxEQLESL!$<`C<}itT00jXFRU!r+L5rB#I2o%WDA9($W^R zwdFLzMY7eNRSKt%>IGj6X_obqyAGBbSHIMM{%(Z&#{h2sJ{u|ej!S(4-0x)#uRRm?XwWFPd@tUyCT!?ozR!V^(I=>bs8oP9W|`QdWs_EMU%2o4!r5rT z#GC_zpB&sK@b$}tW@Kcvh>-}4N=Qh|H@TtHo2!KdqQ3EHXGi=9ktmRc^A4mARLYg` z&gH6Zk$^lABUuECfq!G)k}_^O_+=RyJqC4`V0_QwS_4tTUce#SfBM&+pU^TXgX-b0 z*;SB)4v9U#1G4?4OFCL21KHK23IA4F*Gp+Q*rbOU1Nns{-m(}l=Zrm8B)9o2RN6iH zKw)c|&!2=b>h6{6%nO~^9;zRo)iu?nSeqR=T#!La8jKvdgsA~SiKu^zde-(R2n+7A zS@lySqZsz!kfN;NzcU-M_R~*tj2fJt4CusS$7hZ{{tVT6C6ZR01uN3a)@37>H_kD3 z1i5a_7U794A~bo^)C_Knu=M4e1qO9EDLLmb;})LgsSf=S^zDSMKcpFgp4$=5giDN+ zkz;!m^4o6gdTsODeh5rRf?o{Q6tWOwc|3@n)=+K##teNieqn_#AWUKOVPs3Ny8TSB z3h6NohZur<4_lB|@VTx}?ASezxd3XgXSLvt&-8L|uyvRV_J_=nEaL5$*H} zJ;6>j=^qq1*jO`8!r7`U5|yy)>$V>NOJt|x(~OVKBBOcI0VSpip>sKaK^nM4Fs+LV zq*>zYpIcIy6BgqoW52sn**-R03gvXE{N(#}=-)-vz*E#UuJR4ZI|1@Rw)wXi%!J}n z?wAIWl}3{T4>rm_W}P^TV=8;z(cu{Gt%=bA70DERM_7niYu4Hr8*BS%)UqYNwctz} z`jADDgL84yIg`q8Yft8Y7G&bjh8#Io25%5)3M$_U;_ zUQjx^8@Aa!8j%0gQy>?3@bh}NqUF>Fq1jkAB#8*%2)RXcLZ>Yrs`nY0ENk?8T6ys_ zfW-}3-|LFfF8)v{4MK;mX%};{Y3Ui{a9Cc5=t@Uw6T;4Gv=h#m<5&g1a5r!=tC-6s zsdhx^tU0MuDmy}pb^2A_(kQdRt^cs_RL=nV+jn+$zUZ&x{V=H5jKfK&P2{S3Myy~S zysp@ZS~(IF5sZ^x4`9sOI2k8>2!gvUzrrLYd88vAm`f_`#yscuOj0@d^mvUWX+Z+Z z#)ggHs#7hX?8~I;7q-gNBziZtr8(H{guPF3KEnnFZKCq?Kk+*!R*;2eD=faQ3%U#; z6D^wPT;M*`M|#o3ICdk;Sc@YjY)}eI?J@o14uA({UOZYx=dA6`91V&!dc+;OPbX5k z(zM0HqgkUZ8`Nm3_O7gdVvSi&dTp&UsGm^gY*@B`*iH*RwK&y(e27(vYOp|NlZM13 z!BEe-e2_tRrF_93l}QdT`1;=XQ6?6$=Gga*%vSE1E7k@*VhTaXZuU=DnbXJ&BKCcA zkrsim4wbz}L2JAZ*QmSd=2Owt;o4e^8b|9CXLbc;5WPz3nnR)vA>uUlw~_>yyY}m? z>npU;6$^X;~*4LU+pnj`uoU0Xi8JzU+Q>(D@6Q^SE|hvp04gDE$n^1@U}V#W`qgHun5|1wL#& zG&Y4{*=Sew8Y_HfC=WRmvyt_ST5go>Co!Pik?y?_2JM(nYRtuv3?@Zm%Q5JY^204} zH690Fl1n_SONy=fM5uRpJegYwq(E)$4_%<4))er8^KKx9aK(gU06WdVwo-}X!_}zSe>fe`! zZ;*7q1pe8U=gm_mt1RBivh;=PUe9)aOTN4caqknhEiNtteZ?q)4yB50XPMI_?r+1N%(MsZ*A2BZnf z?jm5TeXzfi)gc(gQ(Vmitd$<Xzr4hH<`jj4StGWB-SyTc>z#FjJ7SbZ>hcoenf6?HlGYO z{X7{B>8a3^A^`ttlnj0}cP=nX*Qxr=*q)ovog(}qh_F_ZJ!k!<>x%fOEl_%(QNQ~) zouXG@?%Q{4h#q}GX zWhLF@<9I&}1}S2zZbL}eyE2`NsR5}HeU8bsCq#D$iyP9wKRsOlW+0zUIR3i|ay)hBBqR`r#kTlwIhhAxr`@!Ve;p}%Ac7>l_v_c|0D3gOw z(KD6n-LW>5_uRr8ZIp_Y{i`LMM!(vyk&2a{lA_)+N?>|0?L|Burd*5se4FZM=F zj;y|nBjA|c7`8M^I+Zs(8U4mj(|B=D%##0p%V6jKYJ;|(r(NNMrj&;LU5I?^K2;5s zGFLrZ=t(?rCX|L~?~FlO-V~x!A2kYxAY++idbwl~!-+n35*2fh;)QA5qzJHu-z*SdWc`=TrCBhfK2%1Cl6p!wR;xD*;ZBhi&-J;*en$37yi zi|VQUwo>^QfAn{)UZIBgp-D{k3Z6ve9f_c}HgWIfOpeamASq??<~V=IprvVPRgiH` z9Hn4(iL=5e@)&p zXpAb6-%u@|8t+nVP&Fxt5r`5~nYtw%|F;^AgeeTJPrnRxgDTZek0P}t$nl5le@2{869e!M&Yqi@i^rONh^aE^xkzhJ5JOl5^ zh1HSRclRH>>r3^{r>8y|fu;j+Fc~1~LZ46Az;9~}yM43g=>nlFIj~w!DB3wk>xG0j zT3uV6CTW0_oIl{@|JYB$G8`|Zk&X7fKA*|kEtC-C)T<1Q5tXpbqbj%|w>EIy?&n&{ zIFb8GJq2I>dgkqAjnkOZ&(3H`5e-U{JU=^*y}3#|bsuGk0RuVqy}C~OG27XY-}XG>-z+dH)0yzf}G8&8}^K2-~BLoM9lbSIFGw+)tNgKnJk+2{0WheXy(v+PceP%>ba@aYgO9!Jzya-E(y*jr(!g~ zE%JVXfJ-LZ^X!K9np?ex!vQ3kL2#_=ry+L4d!OE)81SgwJWWi%H%?OahGq4%ppD&= zeq0zWj3Uq2Qoi@ad(%w+4h@z}Wso{=4%)pdRjOAy_dfl7sk@5->o|K%KUdvXx&7+- zXx!%&-I4bsU&Z9C9|M6Sp9Pz`%uW}RQoOkMiWnpBtS=AGL@bNhof=-q(M+@yrXhVg ze)Xi4YF%^Z!FP5$+2kCfor=RM%z(xC8!44XFNGv}-Gc8}?}}~@728}F@vM+C9P>C> zuauSXx;(dTk-rTivL34~S{b~^prK_bHswtl-9odf2}p`4mRNPSll3;nbN=s;vPgxX zXmP(?HffMPnq$lIi0R8IO0MH-!gGx5>QG2S&a|C&-rAG>^73HWCU2dld? z==Kj!emfa;Dx0G!BsTA=M28L=Sp23PTeEHF{w{S;3IhU8S1|E>dDOl^V!qrE-*Ib> z=Fau&o8Ap=9ZP4<8w&{zB*&rM!~)cvoztaUj+ zr8)?xO*yr^((|?J-sG+ewN)KcL{m&@;@TFQ9CVW$yD@kJu$i_ob--A&c4d9mALwBw zI@Z3Fg>CENKbzj_FWGC1szxJ=){QGb&?_5u#SHB?Y&iq8y=oH2>_@HC<5y6!bmq1GS? zxEpj_8^@3=6}8tA0e)?wEQ$JEcj>#*pFl?8_O2MqtY%EFBk#AHU zmk!Gp6EOD|gQYWn7{5oTwM}#Vz(S37p_)uR_Yw_lroAo($>`l{hz}07;=J}8kM`Fx zyL_n*UJYt;kh~Y9t%qY!qwbJp`9Q1bsIi^?yur_A*Nzlxk<`J%i^8CV4+Br` ztdY|+2*ri7!yWq4iN}PoW%+~? zilMyTMrXs#L2_1D`7B9(cb1TAaY^jMHo(k`YlxaKAvy6~^<3;mM2URtCr-9ZzFJhn z91R2AcL?OG^}EMK@U|u!${9;r$h!`j%uXafYL~x`He}DI>)^ciJ zek4rgvDUZrB}0pe=EURWOAJ*2Sse(T7H{a@Fe;sY|5gIlIXRfu{3sJnchH*Bzkju^ zxoy6H11Fn#aaL*8_YNjC3RxT&B*?1(dl=QY-$I&>d)4?nMy{pmz$I|&0QujitAdRzp>+SyM!Pm!{e%HhHexq*7N{zbAbk!br-31>oKIQ*G z!KjFYAP%MGRb+F!>B`X9u+VQJo(rjb8JOq}?yV7kgh4`xi|ORJk5n^&$)wTw%lVm3 zrc+sP^$z>rEPj*75C;eR(1WEWPt^F1K@O8IZr;v<_}0Ot%=HVVhq~mkKI6`voI1Mh z3?7q`hI^N$m5V5VFojR%*Q(;14!e;L6k+DS#C_MkI0j+gS<(mo*0_+l-c1(?xf$4D z?7lOqR}Y;=*_@xB^ThW4)Kx!6*s=d4SkmlGVvua!YJp6z&glppVXPHrnoDe4514Ah z&Y5fqa6Xm=R&UuAmeppZrf5VyJ4lnd2mf}n?+O+O$se}KnX~H7H22?02&;WRnjuP= zTle*-oImFp$v2?eIp=XYz!yYthI6ANDq@3E=L{^2NQNcWQe2 z<+W$$+@De1uDPFQt1)8)N&o<1*1vB7#*V|K>wbc6htKSL)7(~i(1!q5zLz%Cb5W0B z?ITe;3S*oYVDBdT?oR^&zqX+UAHP~b3is@haGDGlCLQ>gk({cDClJ`o+LcdyPl@+>PB9yKNcu}nl5*>M(Y-lwK6P`DEqVDBkh!3|rS(gCjerNFxQUH5c&-MMS&mHnC)5rY* zs&?F+Bb9f5NhBRocTlQ;ZX$TF6F%%5pw7$cP{9RA zx5oQ)bYf5&Szrh;X)1{fh9)tjRU_`_!<|tLZeyc=d4zrf4Y_HNFYYLCP(64|xqEZ+cX=&-Y3>OC(p4p>@tPG^g)h84_ zlaVkaNJ{sf?(V$JemjOL)6WePU%-r1uS*1SfQM?QhL8WMC`Hp7D;;JW1I`e}^ zq~W#*L%^*qS+mx9zWa^G8r)(9yZiVwfFlz}^Ume>bx>xAD?BNL_pK1dOlF3aF?+4A z3!;<3PE3~3T?vCJIQVGuh=TnDoBK(rD8|gi!4mRe^|k!lF&rXPu?Pl$$llR9j<@BE&MwgfK{Cy5bAoeHL0!R>%fy zR=#FVtLAf^B0%e@4qYYL<9)bCTye;L?FcstMYq_W?VYg$gu;6K?jE|X+tBv#DXE|B zWyW~LEspl8{e)KmO(oS9oMhY_rFeiH0A>6@&V}BA*?B+COU#a~9=*GhQ>fiF8Fh55 z)hiH0F?iEn;O>~6y2A6xgXk#!Sw@I>$2pc-q*~E2QLUlW^=8_#$0$#R=M1)n<`wuk z?MEdhnU)_0=jyZcH-K?hQG(hDsjIc{<)F)zT+r&sYo%|oXj<-Y|MG3~L%67?w5aBe zuhK(hGT-sma~Da(I6gqs?9QA_dqaJaEdkn-A_L3B1!`=Q#C}FTd2*Q zV!2edTs<=nf~{gG8ckGTsL z>S)_?St1DWcqDZ^JIZcx+wDjj*6B&(d;6t2|G{_~ujKsisVaKtBID2f`Py)ZMb}p0 zs>~-+W}105?^*VJm1akT`Pq9t!D}g_5DEp^)lt2~K!9Y(hNqO^sD+h?iYkBY2Vp|l z?j%IWNuh{iz$JT_EuUP&$V4(Ci_~%(T8+dS;`^9z@fgrQb*3euXlea|-&71g(2^(N zFyP}iZipBA;qklng^j|_Uh!Ue?(*&1MM}f|?*z;lC7L4a1RB_3 z@y?i1ms@kE7|wxiH^v>N>)oX0Fg*7@C}BF@+CsJN+RK;0o1SQm$Q~iYiG@xu&=a)_ z{-x{w-2V4m(fmpd{Uq%W6@K6Sr7y5l^c1mwJ`h-Kh3?Th-hQ{j9MUNYEovEn!`8A&6hJMLX3z{?Y`Fr3NVsgQH`{g9qwc{MFw)8{$7-qiQ==GHO z4Rh9q9=dKbpA}&U>D5fB%s^Auy~{%KzWvB;%Xhu<(!~3|mY0~)^C6-Lp4_*;r=c@|)mLbg zN3+mH3foFZ5?%Mb4wf(04i=f(l*oAHg&PPv;(g0+q|`q(R9u$4m7)q|{;c6eY`yppRB=F8oyTHy3qlm!9agdf0_}AhN?=YyeTu znR<@ZCxOcTtu@=+iepX6yXj0^M8HwUKKk*0r61-D%3=Huj{hW86vQ;6qs66EOR~jo z_5B|>D?*x@d_1I4#Z`M2<9-14e?Trax-4aEUERO^r16R+Lx2Dv&u#M<5MemT2EeaP zK&M1&TC{uh3$kOpih2L`KWN!vr`~g4-N!7j{ztuFS>z~w#O8G_)i6HWt8)=m z;K{~Svv1#Xq%2WtpDcv&e^lxJGW-A5{XYYT3Az92NnWS?6Ej{BeS!fUG5-fzRG(va zyRv9`zoqM340GhCr*ZWQzSPFjYC?zOcE%X8OnC`_{on$}#Q3N-K6vN*F%e4ynLPgg fk0${yl&q;Jc{_kYGVeu#>YJ(Ycps0<^KRJLrPq(~uKvP>8fSqAgNud**GvSiDeWh`M3 z6S8mF3u7=bgPHMvrsaL#^FQzZ{GBt$bDrhi&;8uxd+&`hG15Q4Ccp*&zyX6xy4L^z z(gglESXsb3W?WA7;6EmB9RqV#@Gp?nF%kd-iVSqmoBOBXCp{vCNI@MNgnVe5p^?*_ z%-#kG>FwmCSi?27P=SOOub>S)a+;sB8K1*U3hZ5&6vDL(w7p7mu941X>x!jCM(&zg zoOs=2!1YQ}+?az?s!q^lh*K)JvTj~(wXHh)FH`LH6V<}e(d5w`V(Jdf2}$5fsvECO z#}yGOruTY1kQnQ~LygjrcP9uw(Q7PmA8NgQ&hPO9HO^(Pjn=)>_J)7ZU+xOy-A<$|R^>JPu%#$s~Ax=ZWsl=g+ww!V_J6&C0KR-QP$Gdm+bajz|g?u|g zcn7u4tzoV#-UK#_{_QCDY7ObI=1~6km`m;KSxbmqzvS*WS6)hZtY$2AZg2aplExl> zlBlKaLaxh~DYZS|;_HaASN>FvYxfBeC!Ncj@sxVnY`$I4Pd+SLAJm@ z69F3}F;9n8qDM~*-+}{Jpua(LKnXi;e*#B`fT{QX|>0CH6g51ikeQ2+OiyrM}4k6AoflR-n zbq8)9dpXwep1R~P>vs_7PpV~Itn>)J@T@i4KZ9>)BmXI`J>%4tvBBuN1j@Qw41`3aN?!bL}(fhr}KmAX^8^Ri7?kkCn8P??$VSFYYb*}=qm9IW@d4F4d(XFk@| z>RJ$C*f=dwdClM0cta?O#4@&+r4zsCf_8wbra6#j_-k=#)Xt$p-8fg|F= zp+g%mX}I5Kh|ZOHUGn7Q&7+(Vr}#M>mH4rqXVNIAIsb{BhF6y!=BNOF zfCb&`cxF$qJiu^?gM${JbpoHKwWc^lM&?d`(m_S6KcJ|#|pwSD@W+t2^fxp9XpA&RV zGEWn-I`Pb3B2uL*kx3^E-C+Lx=*#N%P4 zmWk{Sbm$0lMr!%&3+wuVOr08lG;ZTPK%01QL~*#5&-&=dfJIt+c`6>Bi7Yt|uV1%W zC1fliHe0$&Ttp=}a=^&3425JxKex{cXJFMnBHOI}f5gns#~>J!{~mBLCCo0ZHfXu$ zN6?vE4_YrPeZEt{xJo)#Uuzu$-k`@ryN33fs=Yc=tMmXU2c%5<$ZvVGGA92!ME|Jc z$FT7L<=1U&QV^>AmCMbr9h;p!)-NKD?&NoY&04^_H zyqMqJT2aYUp>`xzG3wECD`ChTo^&1pWC4n~mNYnLJOag4s+_@z0F9a4SuBMkJDObFFopA)um_N?dr zN)5VdR`GG&o1K5<5IcG){T#Kcrn2t^A6nQzsJq*SiCWg`ea|jsj6jymYu_YOa}Xp( zYw~;Vm}3m5PY*zNruGh zb58BgS}xAD6}>fDqwEl)^0aZ8aGbOWPrIJd+Xf`5IeiUhH+2+>8u>)pKBscik&I}j zW(VE?qZ{>Z%Xg;iP`jmxZv1qn{mVtZclP>8KhlOC+g2H+1%BRmBmJ0w6ie(SOmb}s zozkgcWwGIHbr7;X+0X|NKMB^QE`5&AQNaW^>qv>0`^-Adds7KlWCCZDF^KV_+@IEF z+feMcw6+KHGaYIeW5#;*l%%?_7FlTuIwHA>HZE=z3tcOGPVI*iC0d|$I50MCC5?=N zgTEwA*O$cq1;&M{lZgEbb+d6rmd@6#VYu=7J{nar?F2gFP6c48dEgl3qFNwf@)3@m z^8D6PKDSRGHKlDS-PR*I@{=#ZK)i#p7!)f9R+u(_=r>HK`LX5L)s;L9_Z}7W*i?=0 z-Ng+V^yuqzjkK$69ZERjDYzsoSDn_G@73??s80`9cKZzVqXSx$l7QfN!rEGNB(|$7 zIx_M{Km(RgJ@fN4)vpb1ySE{%%=P&Un6=7wKtyZy_nV6kzxTiCEc4Hh1W)F&Y1eM$ z)cM^NbW59!FIcKyT=Wg8tE)RD#CcbV|EeZ$$FrZU$1RyfhyY!0EFO6Oc1}6<_0De2 z;s$e1-L2`K^g?!Zzv5@2SJJ0#JkZqqgQlXbdu-^PBgs&~%Axz$XTxYbIMVRtp2Bai z9#zojH}S$>ySlo*c!3~fWo0+F_b@ROq+lFqa03l7_s}}pTExJrIagi?Vf-$)fkE9_ zBqu*c%HrKRJySsl)z#Ja6d0l$KUs!vA5 zUn+E#??Y65^AQkJ;zYuT=O>9l{FZAbL%0^5mMMr!dcVuN>Nn4cvGsrD%`ETkrmpX6 z$+@h4${ltd-vAG)D-J^pN6JMhw`w07C59(?mm# z1=me!ll?WGs`3Rg9g-*Hfg2AdTVaA{RVTDsnXOTIkH}Q5!|uNq{yrMvf-qdWa^G}` z&#{}X1r=|WrA9dt_1GB%GhL@1zqh)OzA+S)m?%C%n3DCR5iEpJnUT~yKew|#k*l%1 zrCOa>epA_(Q4hiRuU>j^h$r5L7oLgVS9oxS{>o@x5DJ=b@2Dfe4KzmpD$ti;%F>ucEUqQKK`lPiHlEa0vskTB&i01xeu=O>gmoLc%FA z46KD=D0@&p4&LKxyFna%7zhTt4kXMcRIjwS&De2Q=89nZSj&T-(6WJ+%gv!y9kY_B zG<%(n+s2{6iX~8am}6P;J2GUZHpFysQqjcBGb6`MwmEXdJMacG8+iP`mHBY6`kibW zIdMnQ?5vz1wBkEC3G_Jlq+o9Mjk9i#Lq(Kf2R#nK4(eo|f*f(=VPMS9PD086GhCL7 z)h$~f*Rb(`orrc+MM-H|$Fn*5G13lXcU7S-m}r6*VDYvvtY@p3#$SC`cJu~$oTW-w z)anVn9VtkVsLgDsSIHo0s%^5P4$QflKG2{Od7I;)#st9$wx>3fQVm=z@ne!F`EYE?qh{rw4Y^71{f#t$D- z$o1fH51s*_MMqvmPk(tHeR>6~*p;2ad~)ZQW$p}b=p891F5whoF6MN0)Zn!bfy|*~ zku-kLb6?FP?v6^E9IE?`T*uGRb053A)HQ-jK9_9SBDw1hs|+sDyK36gO-2D zM(M3jB){~}sSqN9#Bm;!GU&5#?{fMXuVAN9#CKZj?zrB`^UVlf@$Jb2Q&m6NW)pLn zq1U=41XxGfh_KOfUi~R=>R&M_%9Z7lcfc4~gy?WHAC!uU4OhfIn{yBmQ&nbRU8x)z z-|QhEjqUt*20Qf!Li4PNMt?<)>nHE2m2q+JDTE@xkb_3rNbNnk=f7|?aZk#7T4MY5 zooPLKi^HRRUAAYk%aEsC{HF0}BGzzqy2^ljdxDGJaK4qtoSDbl(1$@-3AWcZK(*$E zttHi6a^qPeO?Uq_wR&iL?saY4yDdtG)sY@fPd7Ki%E+n4pw#a|(NZC$I;B?(QkX^I%CY7_);W-ry7^=IhROQ7BgQ~f#IQ{=(SgWk5_vXF4o1N?CoRy+#93`6OUC$ zf*voHM9)2ZwA`ceUFYwLE5*t6*b`~V73g)>{8{qV{u}H+deb!?F7*oU^u-FAiFT6} zWf(tv18yI{5oLmqDeUJd26MUFFBcxU`R`QM;0Ac*Z52cNRsquXHrQ--R-TS;Xz1)X zWgh?J0SL9-^GwnFjQ(pMp=R4iOy5SNpILI;+>#aXDqaFJLkznt+zgMoe%9IdigG$ z4cCU7_q`S?aJT{LPQf<@)WmFl@y#rGB0yruJ4qr;!*>D^h_fWEr_5^Z`{LrMsi_Y8 z0U%tbVov#hy5J>s#A-xkAB8=P51)x8Z;8r4@E5DB&#L_^dIwB|-V+9yaS#R#!`= z8#V5ifM0u)JW#i2r2Q!ZWkMP$4weg4a)zVb>pkLg1h*acp4x^$VY~2*&*T}}(p(*8 zj}dYI`)$Ok@xHEz&ExBPf6H8evKA&c%9LSgbht$i%!U;{KjSnxK{LNM#eTPC4y9-G z=EcGuPD`1#-kMF>uExYqQ>IJihjStvD@d;R)&dUZgF`A_aP7o&)1wYgBs97|#4?X5 zvGDsTU-d8Q{Xwe?TArbn@0(@*69L~c7$r>Zkw5EW`n8I>OaN1Mi8bi`SE+LE*;UJm zorUYP1s5S7mUGag`8BeFu-IqwyD_NbRfcYUt0FVLZ@aLjo}QjE>{GMX-QC^gRaI(@ zUUTiCk^g*1=R8$`vrZu)d;*=~_#u;MNePO$R3F2pDQhGFD~c|dQBBLs z%V#KDzCJ!aFn$i+ktqsZt%zxW$xP4W<8{fAkG(j3NZ5y(J@Nq-#wv}{h8WJz7?an% zn?jiHMy2`bnP>)9AL814@3xZ%sJ3X_8J8vAA+pAVT357lx$_ei!ZtVSnyU z!29X}2ru{GLUI!K2tjj1|4U%$?gV;4LjV?DsT;ZC{joVtd{JeL24Fd_8r0 zylf@l8N2-#n=J8!8k&Vvu0z|iWB6;x-t z8L?7y+{_IbHpLUeL#fqM@a>xYcW?2s`Vl}I!5)X z9TV}paq!re+i&{uzOiedpDofDe8v;engwGJweLLlQ;dqSqG^U{tj3VA0tu>vj_=(b z#;b+J-LLhMhdYmGwv7^eooEfGSXcq(5l{8Vudj(;h3dtLj8EH6yYEZ!?iB5+Zz?G**o{rdUrYxPhSRI398o5d(OdVA?8IeUaz)DWqUYdV<|S z*{A>ZzWwA&9hJ$Q@HU^&7)aOCD_#&W*&fc)zpiBOw3STbPZ(J%WmitQe@U{RVfbd; z@?crl09ZI0d-3pKCw-Tup1qc*Z47o0LiPRcyGS$ix&k*PB0`YNB`yk3#C*KI2x8tk zzPjX<7yuN3+pgdHz5bT$lj285u_FtY)k{o>ps5I_N({=xMh$O2&W zAD3N&knOrbg+N14CS7nYk(UUoonE=*nsalM{UjQ;i9L>n4IuJ0wBaZ4b9z6O$LrfA zBl6kpT{S-tl z|Gunm`^rbPdsfRgN%5onAsSzw{G@$waL{Y9;RHViOVrckUl`-_;;Z>-EI8uT#ZG&r zOA|)F-6eofVfH*DByb=t;txQO;eVOP`S%|p#GzuD$X(~-jA)OBEz5#Y%5S+=K2ukr zQvLNZ#=j-rj%WV-1u=|R^7~_iEc)MK{w-V4_h9)q4hlkr^5;Dj#d1a-X*-_*OTRxp z!lL9u4A0@N{E_`AK5zUHOR{DEMDC=<@Q|aGejDDM4DD%th|6aAzM6Hc4Ki{)F76*WT26{%i#X9z({{u>>OE&-j literal 0 HcmV?d00001