From ef590afe303ba58355a7ac8837991f483fe908ba Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 8 Mar 2023 16:14:50 +0100 Subject: [PATCH] recipe configs, tank textures, persistent NBT, cleanup --- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 8 +- .../hbm/blocks/machine/MachineFluidTank.java | 17 ----- .../blocks/machine/MachineFrackingTower.java | 29 +++++++- .../hbm/blocks/machine/MachineOilWell.java | 29 +++++++- .../hbm/blocks/machine/MachinePumpjack.java | 29 +++++++- .../com/hbm/inventory/OreDictManager.java | 6 +- .../hbm/inventory/recipes/BreederRecipes.java | 50 ++++++++++++- .../inventory/recipes/CombinationRecipes.java | 69 +++++++++++++++++- .../recipes/CrystallizerRecipes.java | 64 +++++++++++++++- .../hbm/inventory/recipes/PressRecipes.java | 52 ++++++++++++- .../recipes/loader/SerializableRecipe.java | 6 +- src/main/java/com/hbm/main/MainRegistry.java | 4 - .../com/hbm/main/ModEventHandlerImpact.java | 2 +- .../machine/oil/TileEntityOilDrillBase.java | 28 ++++++- .../hbm/textures/blocks/modgen_base.png | Bin 233 -> 0 bytes .../hbm/textures/blocks/modgen_base_blank.png | Bin 129 -> 0 bytes .../hbm/textures/blocks/modgen_base_core.png | Bin 296 -> 0 bytes .../hbm/textures/blocks/modgen_base_panel.png | Bin 194 -> 0 bytes .../hbm/textures/blocks/modgen_battery.png | Bin 359 -> 0 bytes .../hbm/textures/blocks/modgen_boiler.png | Bin 339 -> 0 bytes .../hbm/textures/blocks/modgen_breeder.png | Bin 372 -> 0 bytes .../hbm/textures/blocks/modgen_control.png | Bin 281 -> 0 bytes .../hbm/textures/blocks/modgen_diesel.png | Bin 400 -> 0 bytes .../hbm/textures/blocks/modgen_enhancer.png | Bin 461 -> 0 bytes .../textures/blocks/modgen_enhancer_blue.png | Bin 440 -> 0 bytes .../textures/blocks/modgen_enhancer_green.png | Bin 451 -> 0 bytes .../textures/blocks/modgen_enhancer_red.png | Bin 436 -> 0 bytes .../hbm/textures/blocks/modgen_fluid_in.png | Bin 380 -> 0 bytes .../hbm/textures/blocks/modgen_fluid_out.png | Bin 382 -> 0 bytes .../hbm/textures/blocks/modgen_heater.png | Bin 294 -> 0 bytes .../hbm/textures/blocks/modgen_heater_lit.png | Bin 324 -> 0 bytes .../hbm/textures/blocks/modgen_nuclear.png | Bin 375 -> 0 bytes .../hbm/textures/blocks/modgen_nuclear2.png | Bin 406 -> 0 bytes .../hbm/textures/blocks/modgen_nuclear3.png | Bin 376 -> 0 bytes .../hbm/textures/blocks/modgen_port.png | Bin 304 -> 0 bytes .../hbm/textures/blocks/modgen_power.png | Bin 214 -> 0 bytes .../hbm/textures/blocks/modgen_smelter.png | Bin 346 -> 0 bytes .../textures/blocks/modgen_smelter_lit.png | Bin 358 -> 0 bytes .../hbm/textures/blocks/modgen_tank.png | Bin 347 -> 0 bytes .../hbm/textures/blocks/modgen_thermo.png | Bin 305 -> 0 bytes .../hbm/textures/blocks/modgen_turbine.png | Bin 433 -> 0 bytes .../hbm/textures/blocks/modgen_vent.png | Bin 307 -> 0 bytes .../hbm/textures/items/chem_icon_PET.png | Bin 0 -> 305 bytes .../hbm/textures/items/chem_icon_TATB.png | Bin 0 -> 337 bytes .../assets/hbm/textures/items/stick_tatb.png | Bin 0 -> 223 bytes .../textures/models/tank/tank_HEAVYOIL.png | Bin 833 -> 1072 bytes .../models/tank/tank_HEAVYOIL_VACUUM.png | Bin 0 -> 1059 bytes .../models/tank/tank_LIGHTOIL_VACUUM.png | Bin 0 -> 1104 bytes .../textures/models/tank/tank_REFORMATE.png | Bin 0 -> 1355 bytes .../hbm/textures/models/tank/tank_SOURGAS.png | Bin 0 -> 1325 bytes .../hbm/textures/models/tank/tank_XYLENE.png | Bin 0 -> 1194 bytes 52 files changed, 347 insertions(+), 48 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_base.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_base_blank.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_base_core.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_base_panel.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_battery.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_boiler.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_breeder.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_control.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_diesel.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_enhancer.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_enhancer_blue.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_enhancer_green.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_enhancer_red.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_fluid_in.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_fluid_out.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_heater.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_heater_lit.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_nuclear.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_nuclear2.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_nuclear3.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_port.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_power.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_smelter.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_smelter_lit.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_tank.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_thermo.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_turbine.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/modgen_vent.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_PET.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_TATB.png create mode 100644 src/main/resources/assets/hbm/textures/items/stick_tatb.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_HEAVYOIL_VACUUM.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_LIGHTOIL_VACUUM.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_REFORMATE.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_SOURGAS.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_XYLENE.png diff --git a/gradle.properties b/gradle.properties index f1a9549c5..6efd5257d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion al \ Sten89 (models), Pixelguru26 (textures), TheBlueHat (textures), Alcater (GUI textures, porting), impbk2002 (project settings),\ \ OvermindDL1 (project settings), TehTemmie (reacher radiation function), Toshayo (satellite loot system, project settings), Silly541 (config for safe ME drives),\ \ Voxelstice (OpenComputers integration, turbine spinup), martemen (project settings), Pvndols (thorium fuel recipe, gas turbine), JamesH2 (blood, nitric acid),\ - \ sdddddf80 (mixer recipe config), SuperCraftAlex (tooltips) \ No newline at end of file + \ sdddddf80 (recipe configs), SuperCraftAlex (tooltips) \ 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 cc7647629..df260fd8e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -3172,10 +3172,10 @@ public class ModBlocks { GameRegistry.registerBlock(machine_storage_drum, machine_storage_drum.getUnlocalizedName()); GameRegistry.registerBlock(machine_shredder, machine_shredder.getUnlocalizedName()); GameRegistry.registerBlock(machine_shredder_large, machine_shredder_large.getUnlocalizedName()); - GameRegistry.registerBlock(machine_well, machine_well.getUnlocalizedName()); - GameRegistry.registerBlock(machine_pumpjack, machine_pumpjack.getUnlocalizedName()); - GameRegistry.registerBlock(machine_fracking_tower, machine_fracking_tower.getUnlocalizedName()); - GameRegistry.registerBlock(machine_flare, ItemBlockBase.class, machine_flare.getUnlocalizedName()); + register(machine_well); + register(machine_pumpjack); + register(machine_fracking_tower); + register(machine_flare); register(machine_refinery); register(machine_vacuum_distill); GameRegistry.registerBlock(machine_fraction_tower, machine_fraction_tower.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java index 92b5e814f..9e1641ca2 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFluidTank.java @@ -26,7 +26,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; @@ -89,27 +88,11 @@ public class MachineFluidTank extends BlockDummyable implements IPersistentInfoP this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ + 1); this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ - 1); } - - @Override - public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { - - if(!player.capabilities.isCreativeMode) { - harvesters.set(player); - this.dropBlockAsItem(world, x, y, z, meta, 0); - harvesters.set(null); - } - } @Override public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { return IPersistentNBT.getDrops(world, x, y, z, this); } - - @Override - public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { - player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); - player.addExhaustion(0.025F); - } @Override public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { diff --git a/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java b/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java index 5b198ed09..9383b3565 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFrackingTower.java @@ -1,19 +1,31 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineFrackingTower; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineFrackingTower extends BlockDummyable { +public class MachineFrackingTower extends BlockDummyable implements IPersistentInfoProvider { public MachineFrackingTower() { super(Material.iron); @@ -89,4 +101,19 @@ public class MachineFrackingTower extends BlockDummyable { return true; } } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return IPersistentNBT.getDrops(world, x, y, z, this); + } + + @Override + public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GREEN + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "HE"); + for(int i = 0; i < 2; i++) { + FluidTank tank = new FluidTank(Fluids.NONE, 0); + tank.readFromNBT(persistentTag, "t" + i); + list.add(EnumChatFormatting.YELLOW + "" + tank.getFill() + "/" + tank.getMaxFill() + "mB " + I18nUtil.resolveKey(tank.getTankType().getUnlocalizedName())); + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineOilWell.java b/src/main/java/com/hbm/blocks/machine/MachineOilWell.java index 6e0e85968..bdd36a179 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineOilWell.java +++ b/src/main/java/com/hbm/blocks/machine/MachineOilWell.java @@ -1,18 +1,30 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IPersistentInfoProvider; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineOilWell; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineOilWell extends BlockDummyable { +public class MachineOilWell extends BlockDummyable implements IPersistentInfoProvider { public MachineOilWell() { super(Material.iron); @@ -63,4 +75,19 @@ public class MachineOilWell extends BlockDummyable { return true; } } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return IPersistentNBT.getDrops(world, x, y, z, this); + } + + @Override + public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GREEN + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "HE"); + for(int i = 0; i < 2; i++) { + FluidTank tank = new FluidTank(Fluids.NONE, 0); + tank.readFromNBT(persistentTag, "t" + i); + list.add(EnumChatFormatting.YELLOW + "" + tank.getFill() + "/" + tank.getMaxFill() + "mB " + I18nUtil.resolveKey(tank.getTankType().getUnlocalizedName())); + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java b/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java index 311995331..89169d863 100644 --- a/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java +++ b/src/main/java/com/hbm/blocks/machine/MachinePumpjack.java @@ -1,19 +1,31 @@ package com.hbm.blocks.machine; +import java.util.ArrayList; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IPersistentInfoProvider; import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachinePumpjack; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachinePumpjack extends BlockDummyable { +public class MachinePumpjack extends BlockDummyable implements IPersistentInfoProvider { public MachinePumpjack() { super(Material.iron); @@ -76,4 +88,19 @@ public class MachinePumpjack extends BlockDummyable { return true; } } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return IPersistentNBT.getDrops(world, x, y, z, this); + } + + @Override + public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GREEN + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "HE"); + for(int i = 0; i < 2; i++) { + FluidTank tank = new FluidTank(Fluids.NONE, 0); + tank.readFromNBT(persistentTag, "t" + i); + list.add(EnumChatFormatting.YELLOW + "" + tank.getFill() + "/" + tank.getMaxFill() + "mB " + I18nUtil.resolveKey(tank.getTankType().getUnlocalizedName())); + } + } } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 58a863dea..803de8b08 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -488,11 +488,11 @@ public class OreDictManager { String dyeName = "dye" + dyes[i]; OreDictionary.registerOre(dyeName, new ItemStack(ModItems.chemical_dye, 1, i)); - OreDictionary.registerOre("dye", new ItemStack(ModItems.chemical_dye, 1, i)); OreDictionary.registerOre(dyeName, new ItemStack(ModItems.crayon, 1, i)); - OreDictionary.registerOre("dye", new ItemStack(ModItems.crayon, 1, i)); } + OreDictionary.registerOre("dye", new ItemStack(chemical_dye, 1, OreDictionary.WILDCARD_VALUE)); + OreDictionary.registerOre("dye", new ItemStack(crayon, 1, OreDictionary.WILDCARD_VALUE)); OreDictionary.registerOre("dyeRed", cinnebar); OreDictionary.registerOre("dye", cinnebar); @@ -513,7 +513,7 @@ public class OreDictManager { OreDictionary.registerOre("dyeGray", fromOne(oil_tar, EnumTarType.COAL)); OreDictionary.registerOre("dyeBrown", fromOne(oil_tar, EnumTarType.WOOD)); OreDictionary.registerOre("dyeCyan", fromOne(oil_tar, EnumTarType.WAX)); - OreDictionary.registerOre("dye", oil_tar); + OreDictionary.registerOre("dye", new ItemStack(oil_tar, 1, OreDictionary.WILDCARD_VALUE)); OreDictionary.registerOre("blockGlass", glass_boron); OreDictionary.registerOre("blockGlass", glass_lead); diff --git a/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java b/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java index 76d9f4a9b..7503b3dec 100644 --- a/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/BreederRecipes.java @@ -1,20 +1,28 @@ 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.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.*; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class BreederRecipes { +public class BreederRecipes extends SerializableRecipe { private static HashMap recipes = new HashMap(); - - public static void registerRecipes() { + + @Override + public void registerDefaults() { setRecipe(BreedingRodType.LITHIUM, BreedingRodType.TRITIUM, 200); setRecipe(BreedingRodType.CO, BreedingRodType.CO60, 100); @@ -73,4 +81,40 @@ public class BreederRecipes { } } + @Override + public String getFileName() { + return "hbmBreeder.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + AStack in = this.readAStack(obj.get("input").getAsJsonArray()); + int flux = obj.get("flux").getAsInt(); + ItemStack out = this.readItemStack(obj.get("output").getAsJsonArray()); + recipes.put(((ComparableStack) in), new BreederRecipe(out, flux)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry rec = (Entry) recipe; + ComparableStack in = rec.getKey(); + + writer.name("input"); + this.writeAStack(in, writer); + writer.name("flux").value(rec.getValue().flux); + writer.name("output"); + this.writeItemStack(rec.getValue().output, writer); + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java index c0cbc39d6..fa3b7ffaa 100644 --- a/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CombinationRecipes.java @@ -1,15 +1,21 @@ package com.hbm.inventory.recipes; +import java.io.IOException; import java.util.HashMap; import java.util.Map.Entry; import static com.hbm.inventory.OreDictManager.*; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.OreDictManager.DictFrame; +import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumBriquetteType; import com.hbm.items.ItemEnums.EnumCokeType; import com.hbm.items.ItemEnums.EnumTarType; @@ -20,11 +26,12 @@ import com.hbm.util.Tuple.Pair; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -public class CombinationRecipes { +public class CombinationRecipes extends SerializableRecipe { private static HashMap> recipes = new HashMap(); - - public static void register() { + + @Override + public void registerDefaults() { recipes.put(COAL.gem(), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.COAL), new FluidStack(Fluids.COALCREOSOTE, 100))); recipes.put(COAL.dust(), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.COAL), new FluidStack(Fluids.COALCREOSOTE, 100))); recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.briquette, EnumBriquetteType.COAL)), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.COAL), new FluidStack(Fluids.COALCREOSOTE, 150))); @@ -94,4 +101,60 @@ public class CombinationRecipes { return recipes; } + + @Override + public String getFileName() { + return "hbmCombination.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + AStack in = this.readAStack(obj.get("input").getAsJsonArray()); + FluidStack fluid = null; + ItemStack out = null; + + if(obj.has("fluid")) fluid = this.readFluidStack(obj.get("fluid").getAsJsonArray()); + if(obj.has("output")) out = this.readItemStack(obj.get("output").getAsJsonArray()); + + if(in instanceof ComparableStack) { + recipes.put(((ComparableStack) in).makeSingular(), new Pair(out, fluid)); + } else if(in instanceof OreDictStack) { + recipes.put(((OreDictStack) in).name, new Pair(out, fluid)); + } + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry rec = (Entry) recipe; + Object in = rec.getKey(); + Pair Pair = rec.getValue(); + ItemStack output = Pair.key; + FluidStack fluid = Pair.value; + + writer.name("input"); + if(in instanceof String) { + this.writeAStack(new OreDictStack((String) in), writer); + } else if(in instanceof ComparableStack) { + this.writeAStack((ComparableStack) in, writer); + } + if(output != null) { + writer.name("output"); + this.writeItemStack(output, writer); + } + if(fluid != null) { + writer.name("fluid"); + this.writeFluidStack(fluid, writer); + } + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index 30dc782d0..577e98bdd 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -1,17 +1,24 @@ package com.hbm.inventory.recipes; +import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import static com.hbm.inventory.OreDictManager.*; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.blocks.ModBlocks; import com.hbm.handler.imc.IMCCrystallizer; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; 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.ItemChemicalDye.EnumChemDye; @@ -30,12 +37,13 @@ import net.minecraftforge.oredict.OreDictionary; //This time we're doing this right //...right? -public class CrystallizerRecipes { +public class CrystallizerRecipes extends SerializableRecipe { //'Object' is either a ComparableStack or the key for the ore dict private static HashMap, CrystallizerRecipe> recipes = new HashMap(); - - public static void register() { + + @Override + public void registerDefaults() { int baseTime = 600; int utilityTime = 100; @@ -212,4 +220,54 @@ public class CrystallizerRecipes { this.acidAmount = 500; } } + + @Override + public String getFileName() { + return "hbmCrystallizer.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + ItemStack output = this.readItemStack(obj.get("output").getAsJsonArray()); + AStack input = this.readAStack(obj.get("input").getAsJsonArray()); + FluidStack fluid = this.readFluidStack(obj.get("fluid").getAsJsonArray()); + int duration = obj.get("duration").getAsInt(); + + CrystallizerRecipe cRecipe = new CrystallizerRecipe(output, duration); + cRecipe.acidAmount = fluid.fill; + if(input instanceof ComparableStack) { + recipes.put(new Pair(((ComparableStack) input).makeSingular(), fluid.type), cRecipe); + } else if(input instanceof OreDictStack) { + recipes.put(new Pair(((OreDictStack) input).name, fluid.type), cRecipe); + } + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry rec = (Entry) recipe; + CrystallizerRecipe cRecipe = rec.getValue(); + Pair pair = rec.getKey(); + AStack input = pair.getKey() instanceof String ? new OreDictStack((String )pair.getKey()) : (ComparableStack) pair.getKey(); + FluidStack fluid = new FluidStack(pair.value, cRecipe.acidAmount); + + writer.name("duration").value(cRecipe.duration); + writer.name("fluid"); + this.writeFluidStack(fluid, writer); + writer.name("input"); + this.writeAStack(input, writer); + writer.name("output"); + this.writeItemStack(cRecipe.output, writer); + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index b0dcb263b..1186eb481 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -1,12 +1,18 @@ package com.hbm.inventory.recipes; +import java.io.IOException; import java.util.HashMap; import java.util.Map.Entry; import static com.hbm.inventory.OreDictManager.*; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumBriquetteType; import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; import com.hbm.items.ItemAmmoEnums.Ammo556mm; @@ -20,7 +26,7 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class PressRecipes { +public class PressRecipes extends SerializableRecipe { public static HashMap, ItemStack> recipes = new HashMap(); @@ -42,8 +48,9 @@ public class PressRecipes { return null; } - - public static void register() { + + @Override + public void registerDefaults() { makeRecipe(StampType.FLAT, new OreDictStack(NETHERQUARTZ.dust()), Items.quartz); makeRecipe(StampType.FLAT, new OreDictStack(LAPIS.dust()), new ItemStack(Items.dye, 1, 4)); @@ -114,4 +121,43 @@ public class PressRecipes { public static void makeRecipe(StampType type, AStack in, ItemStack out) { recipes.put(new Pair(in, type), out); } + + @Override + public String getFileName() { + return "hbmPress.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + AStack input = this.readAStack(obj.get("input").getAsJsonArray()); + StampType stamp = StampType.valueOf(obj.get("stamp").getAsString().toUpperCase()); + ItemStack output = this.readItemStack(obj.get("output").getAsJsonArray()); + + if(stamp != null) { + makeRecipe(stamp, input, output); + } + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + Entry, ItemStack> entry = (Entry, ItemStack>) recipe; + + writer.name("input"); + this.writeAStack(entry.getKey().getKey(), writer); + writer.name("stamp").value(entry.getKey().getValue().name().toLowerCase()); + writer.name("output"); + this.writeItemStack(entry.getValue(), writer); + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index e786e20d7..1dc2895a4 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -39,15 +39,19 @@ public abstract class SerializableRecipe { */ public static void registerAllHandlers() { + recipeHandlers.add(new PressRecipes()); recipeHandlers.add(new BlastFurnaceRecipes()); recipeHandlers.add(new ShredderRecipes()); recipeHandlers.add(new ChemplantRecipes()); + recipeHandlers.add(new CombinationRecipes()); recipeHandlers.add(new CrucibleRecipes()); recipeHandlers.add(new CentrifugeRecipes()); + recipeHandlers.add(new CrystallizerRecipes()); recipeHandlers.add(new FractionRecipes()); recipeHandlers.add(new CrackingRecipes()); recipeHandlers.add(new LiquefactionRecipes()); recipeHandlers.add(new SolidificationRecipes()); + recipeHandlers.add(new BreederRecipes()); recipeHandlers.add(new CyclotronRecipes()); recipeHandlers.add(new HadronRecipes()); recipeHandlers.add(new FuelPoolRecipes()); @@ -211,7 +215,7 @@ public abstract class SerializableRecipe { ComparableStack comp = (ComparableStack) astack; writer.value("item"); //ITEM identifier writer.value(Item.itemRegistry.getNameForObject(comp.toStack().getItem())); //item name - if(comp.stacksize != 1) writer.value(comp.stacksize); //stack size + if(comp.stacksize != 1 || comp.meta > 0) writer.value(comp.stacksize); //stack size if(comp.meta > 0) writer.value(comp.meta); //metadata } if(astack instanceof OreDictStack) { diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 441c8627d..1b3af8b6b 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -775,17 +775,13 @@ public class MainRegistry { @EventHandler public static void PostLoad(FMLPostInitializationEvent PostEvent) { - CrystallizerRecipes.register(); TileEntityNukeFurnace.registerFuels(); - BreederRecipes.registerRecipes(); AssemblerRecipes.loadRecipes(); MagicRecipes.register(); SILEXRecipes.register(); AnvilRecipes.register(); - PressRecipes.register(); RefineryRecipes.registerRefinery(); GasCentrifugeRecipes.register(); - CombinationRecipes.register(); //the good stuff SerializableRecipe.registerAllHandlers(); diff --git a/src/main/java/com/hbm/main/ModEventHandlerImpact.java b/src/main/java/com/hbm/main/ModEventHandlerImpact.java index c278a2c5e..fbad76c79 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerImpact.java +++ b/src/main/java/com/hbm/main/ModEventHandlerImpact.java @@ -138,7 +138,7 @@ public class ModEventHandlerImpact { TomSaveData data = TomSaveData.getLastCachedOrNull(); - if(event.biome == null) { + if(data == null || event.biome == null) { return; } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index 8ddfb7867..307c87f9e 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -16,6 +16,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple; @@ -33,8 +34,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider { - +public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider { + public int indicator = 0; public long power; @@ -54,6 +55,7 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); + this.power = nbt.getLong("power"); for(int i = 0; i < this.tanks.length; i++) this.tanks[i].readFromNBT(nbt, "t" + i); } @@ -62,10 +64,32 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); + nbt.setLong("power", power); for(int i = 0; i < this.tanks.length; i++) this.tanks[i].writeToNBT(nbt, "t" + i); } + @Override + public void writeNBT(NBTTagCompound nbt) { + + boolean empty = power == 0; + for(FluidTank tank : tanks) if(tank.getFill() > 0) empty = false; + + if(!empty) { + nbt.setLong("power", power); + for(int i = 0; i < this.tanks.length; i++) { + this.tanks[i].writeToNBT(nbt, "t" + i); + } + } + } + + @Override + public void readNBT(NBTTagCompound nbt) { + this.power = nbt.getLong("power"); + for(int i = 0; i < this.tanks.length; i++) + this.tanks[i].readFromNBT(nbt, "t" + i); + } + public int speedLevel; public int energyLevel; public int overLevel; diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_base.png b/src/main/resources/assets/hbm/textures/blocks/modgen_base.png deleted file mode 100644 index 1b3599da6a0c3a63f42bee0b0c7ef27cc82ef566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#zY2>xK3D={zZ$^)GRM3ENvd$uv@>RKrixw^{ndwU^R4-Rcvb6zy%@-K=sh z#mHFabkQn@>!lv6xI&Lw^mTA_cmzM2vv3uEUIEGmC zzCE{5kU@ci`GCrfN!&Z89u~gSxOvI1Z#&QH-k#9Xr)``l9eTCMmBqs;=(OaS1h)BX Z{LCCPFYo$0%NS?|gQu&X%Q~loCIDX;C$9hi diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_base_core.png b/src/main/resources/assets/hbm/textures/blocks/modgen_base_core.png deleted file mode 100644 index e8baf735b193c439e4cc85302d39920fdee36343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfVwPm#Ao^E=B`Jv(mM*=0AG- zH`&OzgX5fwyO3f_FzcyJEy1BHw05mKY~riY^(Y``7Tc;{&JIFpZL3!CiAuCFswgV$ zXHjAjJox&wdQ#7g$=~I!-)2>6y18A^!1#zn;PtP^B%Bx+dLHk1lExVnyvnlt<5HID zv`MqS`#2c+Z!lZ?U-O_d|F<)l3rqP`+$UTPW_tg3e)5y+lQm=Vr~l!qmkv?&zwrI< r!_Yc~jN9MtAKxNi@!T&~+4Bx#qq(u_mP0C_Fk$d?^>bP0l+XkK0Hkx} diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_base_panel.png b/src/main/resources/assets/hbm/textures/blocks/modgen_base_panel.png deleted file mode 100644 index 797ad01596ce37e8c6955c03bb7c45e39e112eff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf0r!3B5o^FnGH9xvXS4yz} diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_battery.png b/src/main/resources/assets/hbm/textures/blocks/modgen_battery.png deleted file mode 100644 index 8a6898a6e352addb45249c5817bf66365202542f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmV-t0hs=YP)YU6o6)N}+f@>Eaz%kF@B6RWv zgieC)g3sXCwMjcD?WLR>hcpq5#WcU=z~TH3ALmbSdVZUG?-3EVdPuh*>_bUGbE zV+_U^7K;UWo)ZK?quA^9Fvb)Fs*3lXZnxX0L6&8xDkAbtAR>qe$4Bot=lDz3TIQ=h zB0}l=LEyc|IY$&ls4BDR0D#NuHvl%9O;uYG$ZvvDv*`eqNo6io*6t+$c)UM>Wdgv{ z!&%{6CX6P-8bNIaHSHQ5L~wES3XB1GzI!QhH)CMid{o002ovPDHLk FV1jCHmstP+ diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_boiler.png b/src/main/resources/assets/hbm/textures/blocks/modgen_boiler.png deleted file mode 100644 index 84b83831cb046df8fb1191f62d255a06ea6b1d3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmV-Z0j&OsP)bqwI%dyL1o9Et`gJZ8Vw^wl zQpIC%hYG?|Iv8A>x~9$CyF7_2r1S1WX0hC!LkL7s#5HxIs@$1Z2(dOWJY@D#BwiwVcyXKAh1uDU-Pz#m>OS?}BO)9VLo*|e9UT9 zu-UgI@ZOUo36)BP-k<@%-OU?u90Ragt+L!)0YGoipwk*>C-;ZVY`w|N75p9jVUr16 z+L58E06PNNC+M`sm>CngS+UOWxwyd0cp9D4j&?7y&>aA@qgMcKM=t<8M%Tdlu)sOD z^^6af7eBK#&N=MkfMB|;=eO{uM^*9#^ZC4REAI$uwc5WwQzi(*@TlKtW_$tJ%0Od% SguO2S0000~ck3#>CRU)|7(8A5T-G@yGywornQ8$5 diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_diesel.png b/src/main/resources/assets/hbm/textures/blocks/modgen_diesel.png deleted file mode 100644 index 9ef27d2f8ae2549923286cccddacdeef911a361f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|^P)s0fweiMThQrpuP|-ETGkWLd^=IP~YAZ>HMhEd+zXph+Nt)*54sHz;xeK*3*v`F!p#kJ1!? z@pz1g91Uz0bz2RLF~o5UK$0Ygh+nnxqI$q|DuS@CC_o&?^!xpW(PFV^7})}BL3)(nT$@Cqt+J0000T!56T#5<*1KLa~V0NPGdoUcpAuB2^j- z8!N#^Fuef_1&d3ipuJ!t_y}&AEC+L1oV&R*TIdhU-0aTG{`=2dG{1WEk!2Zi9P=ML zrK(h;C&?sFe&;bLKms*V=?CI=E zS%V3>NrExcxtK}v$sIh$TQH`FcR4S-yNw9XW14+W*>OSn9H`Y;A(ljm4fiVUz zsMlez(=9#AYv2n^bYbu18fyv5Cl;x1J@kL?f)Bh{*x+(;GbDZYf9!&DjR-rmHZ=3C(cR?-m~UEe`nFjJ$ z9@q#X2inL5gD5_Tq{-%B_AJ)j+$FKlfn(U6fByOTXD`}0xT>tR#Bt1j@`|dm77fAT z;t%;tw^*GV+{B2=K!P|eMAHw#u!Az z)u$uU_6q>2I#ZA&i9=6EJbYeIk8qxj0EaEh5)mO*)i5R9=)-C|07I_D(e4mqOi&Pe zsY#N|RQ!-s150)G*dVIo8XjatZ#L$q`S7|xWQ}TIiMozBD;)X$=2O#y1-W@nlB_#3 z^BmY&z%&#b?G91ZU|4hm)xbiY6Wv}mJWy52a>*9Fq27n6i<>;R0Y|W83wN)l4(LDM zSd*STZ~eXn4?OO?akBRjn&!_-w_uDRZNDHQ7~`I-C-g6|UiS)u2b0N!`Pkol0-!7x iN=*e{cKe^dv+@n8I}gBm_D!Gw0000$2m=07o2tro zV*)t^{!kZsL{mf{hgPeFsv;s~o%e^NF?6RF-oC1`TCEU~LIDl1*0Q{P0$}StLPT(| z)*>P-Z=XnG=sZUNsOq-@V+>0mje)zED&9BibhB-YAa(8;c!Ruvt>F4^_6s)y$o{I^zT1=j6=q9mx?i7?B ttk-LPVs~@`Kt@(O^As%dqkn#9d=CqWm4%1JNt!^w7ZE|U2n20JwDL6$ zf{h0$4pW3+nt=EqAx)NpIW3Z1Z*w*}&D`9~&i(iQ|3*irH(ym%5yvtA$t_i7FPcNe zCjO9@+My*PP(i!hMpY3JpKnJaGGNi`1@Bdr)oO)^Y!DEEwU&oG2jDVI5fNNiYY`D1 z@|+Bqr6~Za`h&n213(5mjmOl()!DW-#!!|eB0{XH{wtSh%6V-tqZ#vV7i+CY5Id;G z7>~j&8IA`GuaAR8^*IqCIy|}h+Kc8qzrFb(clhk_9TDO6qQhr;7xX7d5~|RETND_x zzag_Ie*L9Dg?YD&s(QkP_fuZR11JhU@23F=stRShvZgY|m7s{@lH**uhGqZc4p eR-J!dXXP6}0`z_5gXaYR0000NiZ`+%+T5qS zb--}&vQ&eGE;QS{scjom`?9xr%ej!#U^1Dk+=G<_qtU4FD(48Q)#|^GX+{tP!CKd7 aW_$zenq>sdN!8*20000%zWcoho_169uZ-k7?>HO(P*s#g+hTq zRZ&%+}hpt^s|*T;a*_W?V5M*z%fr+F4Zz1hJhMjZ8t z-=46|rR-5JvGf-7j6mg2+0Eaq3MDr6o^e*s;QQWFg+OA=V=l=FQlVIr#Uiw#r z8&yi1ySzSMFP%Z=78>pD#A!e4OW%HuAkzoq@pz>VRuT+{!`xP0AgEL-|30QEK@bFM cU89-t4VH#wLqj>N_W%F@07*qoM6N<$f~p;yA^-pY diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_heater.png b/src/main/resources/assets/hbm/textures/blocks/modgen_heater.png deleted file mode 100644 index b0c2dcfea0721401982e2d74bfc0a369fb48905e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmV+>0oneEP)0$vC8UAWv5lmWtsw2Bfuw;PBjCbe z>>Q9$ykQr_{>xah|LFP8$jj?n3?bm0<47&cj1U4b#zVDGRYU~m+@YEgjN`~2dGFT= z06ssi56!3Zg}ScS3HHj&?h~BOm(2#Mx=!G|r>d&W@!chOdJ0eN!7vQFLj-7=CMN*s z`=0Nw_lL$5@{*ORqN)I!=D%-}FC%E%ma;4}gNQ8Y#~7KW37B^w%K)J3I)M42D3^1I2xhi?Gb#Cg0fGAl6?Aa7%K!iX07*qoM6N<$g7KY$a{vGU diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_heater_lit.png b/src/main/resources/assets/hbm/textures/blocks/modgen_heater_lit.png deleted file mode 100644 index 6462a5f6b229a10fc9d9fc36f86eb50bbbe3b26c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfe1eGi8fz5F~LO|ha@(i)aUrMFTFQ1J71XLPfh*5 z+j~xbUy@lhJ7Mk0SG7&C`|2$mT=Ik?vOOm~dHD04kWFpt@_&xkOIN$HoY<7($#7wt z?(<+?z7-1?x!8SKSsR+CAJ+J^WNL?k62lz(EU9B@clN9;@NwSn_qBvm@ZbuqRaRkP z`@2qW*qU?0 UeNQ`zg2IWx)78&qol`;+0ORC=WB>pF diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear.png b/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear.png deleted file mode 100644 index c33073dc21b92fe13be1f1c966f62ddeff75a9b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_#IP)B z^Bh$LNE!5IX3XdF0kWCJ`Y3}Q0ibCbPN!2uud0gWatXjpH3T45A9V-EOdDRgF!mn$!~pA%sM(x~{*KF=3#p$-|;30H~@e8F0N`$M4|&9?T3g z8|eRd2cr!7=6hN5Jm+{kCJaV*u-$H>RJ|Pzho5(Fxm*Sf`~9BZEHXHEt0%v+^94q> VT;xf0jSm0-002ovPDHLkV1fa+pmYEL diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear2.png b/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear2.png deleted file mode 100644 index 1e50d2e320d2f296b92217c4c2bcc222cdef07f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk;P)p3Y9)u7AAt*n9-J^q27qL&#wWFV)W8eod zycG5kx(m4w2*KhlS%e)H-qt~8+i@hyfybNSG4KE5{bwrYm&30-&k2HneR5Sqs8?Pg zXS4p1SJI)Xl!6?>FhoR9O8qG(NrF;}KtupA#$b%0F`gCs?Kqme6?*^?Ay7&IptYto zT@Vw|nl8{dStcCZ_-# zog8!`Ra~lTjoPXwBrbt5#<#22rKS`{ zjAx@qptbfIG{!Rkmi@NZAj`7f39O|6%?W&5pX?-X-hqwsWoxVT--hQxnPAatk&S*D z0MzcToLP7?NYm8y==Q=nrfk*A1gpHW=XVyq0q(s%!k8SSDF6Tf07*qoM6N<$f-tME AQ~&?~ diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear3.png b/src/main/resources/assets/hbm/textures/blocks/modgen_nuclear3.png deleted file mode 100644 index 2f41896db0cd82364730565387b064adf923b74d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmV-;0f+vHP)vzz-BO7 z+?_nnS0!lMmJkA}`YljZRFy2t7U|=0$8|G-yHD*HP>dQ@u~H z`4#%UU;GD)f~IL!f8`&7vMlc|rb&<_$);)yA@Bvp%Y)U3HtDng0000jvox!>nAEKIitF#%W~lh+c!E)O-pX-iz&9o@=VJ!zIw=Ha;UGh z3yY@eG=uGD^>#ZNyyGs@JE`h;z}s}iVb6&^5q{+H|a9JBJA%}={jCgn2ZT>kzy z$8Ww0CxfSmtKsa+&+|W+|LAlKGkv?EkK6m(6N_s%Tz49ze`b5MBGPhNlDsz1VGN$G KelF{r5}E*9W>EA1 diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_smelter.png b/src/main/resources/assets/hbm/textures/blocks/modgen_smelter.png deleted file mode 100644 index fc53a4c5d9cec60a8bd577f6cc9bab89d004c769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)dWWXckte0jNwYooO5{Z2_am{nW`cp7-KHw1HnAcyo;hJaL%0* zEX%?)O$?9wsn~Ws(=^dE%`b^_j(C8V;_cs7vm@AI8e>pZy!WUo#u&zN1W5P83?k;M zupcCX(-{;+L0Oi6_QB~E{^f(%-?A*HE!=K5R5jHd2%_+8m2rgt)>?o)!934zJrLh* z*E0+QZQJe%Vo_C9Zt~5JevzN)RcLNK2h67f72Uu+p9*ea?`6C8C^QkC9?) z+AWaij9Z%&*bWhF6p@jvvB&7lBuRo&YL{OT zjN`~}mghOv+HC@33|edYuH6)u^#QFlRaJeHSZfIbxG7%lEj2#~mY7N@LBEe=4@;s*~ia-B@%~$x>KM3_1V>V03vJ4T4=T-zksI}(WwOoJ) z-~v4RCj=bip98#Z^Z)>#h2!F~)W@2|UQHzU0$ay14_E{`V*mgE07*qoM6N<$ Ef+Zl2;Q#;t diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_tank.png b/src/main/resources/assets/hbm/textures/blocks/modgen_tank.png deleted file mode 100644 index 848275f7d50500c574f02d302bacb45b9e7124ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^zkP)0PL@Gvxp#skP$HRk|2bDdHkhWO^~|I zY5pa+^bd-g`{yCX2(xj$~Q3)ynUR;@$E)EK}3%#3xaG9 toO7#Jd9jI2(_DN^6M@!x(={?Pz5yV6HvVh6me>FQ002ovPDHLkV1j7ahsyu} diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_thermo.png b/src/main/resources/assets/hbm/textures/blocks/modgen_thermo.png deleted file mode 100644 index faafa6d0749ff4cf4d8f40648ad07651669ce16b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-}?UR4)mbPrR$*w3E?wSICu}4txh>5Ap7B)^nKO#kbULkxQmP(={`% zSxaZ$6iL+mz;C3ta$j27mzOVlXU5*G2xS#q$iKGZfaUeq4kE4_&hVtUO-uc7@36$> zPR~gVGyU0=m_l7;j?d*2ab*-_6l`n);*Je5JsW1%Z!tPEt@=K1i0JkA{t^u8 Bef$6b diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_turbine.png b/src/main/resources/assets/hbm/textures/blocks/modgen_turbine.png deleted file mode 100644 index 3ae51eaa536b3927adf91edf1210af0e4c71be4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433 zcmV;i0Z#sjP)MMfGUGu zA@Cn87#5Ym7`zBZNnyOnKF5KV+YHRyVeVe;E}mar-{*NINfLfjpG1T|i@z{)#edW{ zDS1*#!3@jg5)nZu6>44ASZf)EA?k|=r_%|g6p4rc;JwFtkBG3@Y{;^V8&<0obzKLJ z_Z|QdAyG;JkfteVno<-6k5E-r-~lM5t{$+sD%ftf09b49maVlo=g6`w%thqWgEURq z?RH@y&vV+g1)wZTwAN^?0T{=TX_{gMbzMgn+qUI=J_FEo9mbe2D~f`??_&ku$^HuG z++8nHu;1@luh(H%mL*-+0bq;?@&THr`QC%7s)Au!Ym6~C=g?XQ6XD9ec@X8GX_|=m z?-TMo=XgB+oP)#R@X&{07=F&dEvnX9#&HaxYMSOQ%6A@IE|=)qG)?q<|4>b&;B78{ b`JIIiGT;oq9qHRn00000NkvXXu0mjfMozo# diff --git a/src/main/resources/assets/hbm/textures/blocks/modgen_vent.png b/src/main/resources/assets/hbm/textures/blocks/modgen_vent.png deleted file mode 100644 index 37852fc4dc67457cb999d7a1850153bdb3bc4bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmV-30nGl1P)nvso!XZ3Fzhv+t!8piMoFO>= zPOov%7T!O9W>0vMplO=Lr+i0H6vfNWG!S_2SAC^%NXn4}jzV#n*w}Mejp_L-6)R zA}Vr%<^omqMI|&#!%}{i%>3U>CT}33YJccsv7wT&%dg|52WZ=t_2+UlCkk+8r~e>9 z;OBDf0lKaWlAb}*VP$JA07|JKDbMrhOj1`_DTTF`sgM-#rlKe&LpxZ~2*U6Mlnx?rwVJf7qYkwC2UV%9C>3f?1%>DuZuD|EaeDP5NWLbuY zV2lC47~{>O9mF~Tg33-$7X|LWqqTl8zpPbRMOXU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/chem_icon_TATB.png b/src/main/resources/assets/hbm/textures/items/chem_icon_TATB.png new file mode 100644 index 0000000000000000000000000000000000000000..bb413aed8ccc7a19917057b2eea87a0a6171a87e GIT binary patch literal 337 zcmV-X0j~auP)#AWA7R#4h7SBz3=^*T`l}al{v1=ai{D}#vnjZ2vw!jwO@aFjrUCo z${e@ZfQa-zt4aZ=>%)>WgNtGSRTWhw%Y?3j^?K+IV82aWB(Sn{5s5kpYrjpMwyu{X zmaeLi#J-ybx(*f#xH(VJ)}cF)E6^QW*sNI=k6@yv@uCpc7T!MK@%<}_MhKI`L%h3; z;m_8?@N)}gj$5sKo7RcJFVdQ&MBb@0G4xB1ljw+2CxW_8Gi-<006U+z2E=<00eVFNmK|32nc)#WQYI&1LsLZK~#90?cFhM z6G0Tl@wX^fAi@nf02LAy6%q$X6)E>f6)7bW757+)ihD##mClW6jLacS5!M;6X6@(Q zdFz>Z|DS|#V7-a_Ja6ao&Tbk}c>C`CRAW|C&ERq?c~n^|`urrv&vW3&?#+6m&7p`7j<$bX2=2)|aiQ2gF2oQ&2D6$5ozL~! zx_=ze;RGw3cy+Bi)ugO#+vZS_`-oQtE*Dq3b{w|tPKuc~@hT(4D<}GGJjWuZ;J(lz z@q*S=WRb*$j(uLdS+90~!v7oEHuiV_d&Ks2=s6l;VQVY0$V~AneBn0h)!wmiXf(w> zYmPm4XxphjX9_t**W|6cKjON73-ynMcz;n;yy`|pSls?d>2H&AROTe7cs0ue% gc7k|iD5rS!4?KKdQCi!Oa{vGU07*qoM6N<$g36}@N&o-= literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^RY2Us!3-o@e0(nfDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(ehe5&=FTuA&lh6DLm0&CT`n^!)$-zoLRdL_`EoGT_6pw?K-cB*-rqC=LP) z_nP-c0>wBBJR*x382I*sFrx))unGeM(>zZX$B>G+w=)`xW*dmG1RwAG|G!_m^Qnr# zO5Uk{J{Qy^CpPaqdSLb48k;n`RZf|!{tEBQ4}PPTkv~6&e;p@((rNWS>J~{n*B?wj z)NIkV+Du()U5)LTJHJ-i|6ci-HGOTZ(3HGu=c*&3S4}^hy7&6&hgL`TzH>1Ds`+fz z)^DBxyCSXMC+4n<+h6?D_G~2I^{fAR-#eI>?z_HbtAEp_-l*3x^V4?t6|R39Q@buQ zdp^rj>8;mx#_>)68V3}&TD9H|qHxnR2a79@lOKlOxAQAJ2v#_I>u0%Z(_VdK@AWYM zTJfCelUKm5z}fm1+1_7&L|Du#u)d~V)A`l6xJKvA@0R3!t02x<<;!nnedh2~xstL7 zy&tdUa&LCs%k+8al?rASyAN!i)OKq*zT9MH_xuQBd(>gk`NfYMe4;i>=Mmtft<+@r)U6TsQg^;LP(Z%*`k!giixuon zq|DnFzss;orr?0yB&)dh>R-Qq57uq`VgL2K_?$~2w=;HB+|B;nbl*JYxKDFVdQ I&MBb@0O)mVQvd(} diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_HEAVYOIL_VACUUM.png b/src/main/resources/assets/hbm/textures/models/tank/tank_HEAVYOIL_VACUUM.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec5202225fc88be5ff30808f75bd9df8e035ef1 GIT binary patch literal 1059 zcmV+;1l;?HP)UMn!*$$VEZ-;7V8~454Y@g)E_n+s-bzRHv zUw@*!mK%zwXY6}h*Y(9?_wU!LD6|b9mVN=42Zc6*LK`tSD->bYJ=NG*wMo?%YD6|p8D@DXBcoDBMMZAKFzC#7Ay8t0AoQZ!e*;uviVts4}&1mtKVf{xK4JK{J#4e<(IoW07_ zT=DAR@qX}PJmOUWK7IZuFVC<2AAwTna&U|Wg)TwRXWc0+U@OgB?`_DWjS-!YsqyON z`E_s`;*}y62O_E_M>Fd#9Ot8rVMK$oSDNOER~(}=Gc{g?9HWU>isp(}Avv1KSV3sr zg=5W_5#(rNxb|uxG2>OpzWUI*6Vey2R=4ZZ&{yBSiC2nP9Ehk`9B2$Vx^U!ZBe?cz zVO)C!FK%s-DQ;~66}0ZcG3z#h)@=-DuNK1MKzOk@FjFiJL{zkHBbap?!-y^%x3*Xq zx3+*6x3ivtlAivtZAnh$V{HiAMM!PzTCTJdVLeUiGaFD78L?u>-St0^~|BVH-e zidREX%7#d_`_QUaF19 zX135>Be@yPr4`#`p}UG)Rh3j#Rb;WbwZ(sKQDgb~?Td(r>~_1(ozL~&njF#Y1k0Ux zHLW|=q-?j_ReeQnBVH+3ukOz6*lpX57&C9;RYHhYMzq^_ibamWe4$1B1udz_B9RO2 z`@HyY+@HVP|LfY;_h;93zUTKn&(QaYTo$&pB8$uvuiQ88aNJ)U3%f?s*w31M`yIQV z*ac20x<+r^?NQbIo2z{+jQLzS%PL+qqrxpfd!)3t2_1Ru?NV>CDaETb- zx;uA?_79T#!!gHenaaI@ZtBH!UCig`T#%y?ghCs^;y^_#4un@$@e1!!idW3KGePS{ z5DIMsg*JkCrHFV1FXC0Eh*ubm){P((+6W451o27{@d{qVt4tBEFdD5JK`68l6xs;l dm7Eakt zG3V`FN59(+BF8>X=L)f4o@l}4F=s(ctJfC}SFP_Sy5bhHzgWcnfsOOrfkoYAjdQFn zfBbQDUi$eTf9ti|S=gT%eyf@HF-4i{{=T|jiz{XMYX5zzHU2W|U3zs@o$mhob#J!M zUN-S`_jH~5(``!A9{()et^elp>#$kNCeB{HS?9Oi$xY%Z7jySc7uPSUoVfgil9K$U zx16qvFZcyysIyhKDt*~?+-lqP+)lCB370>=ZhrgxdhWJb;q_cjdy1MWT2E?h5f-_{ z`Dm)*Bhf`2;eG<^=gg2=AGDl{@2>U&%Ok-rL^EckeJ~ZNVl{bQ_-N|FosUJIzwqkm z4WD&=?uDqgGQV%`JOAs?_P_rser#A%Df@AiLh|FO&t%Rnyv@nAm+47{x{2kiiqwvZ zR*lmawL$tHg_d7g%@0*4-{kzAYr^7AWQr!tI zePvBDZ&|*_>FT8Kx%5W6^<0Ew5clTne~Od#=0&ZRRbyA`I@#!v6mXccXp8Wj>a7Ov z_Bx4pM~8GR)fG5;Nz7x>^|vgG!~G1Zwi-ax`bGHhEpZiZsa`+9W&LeVy%`nItp5*6pt|?sbdB3gqs|s(x}j;maz8 zV7K*cQ6|7Z(8+B)nQ?LI<$DVL-DOP`sV9`;S}%5q#VY#lkrH0((h=?|DZGA*?ku3& zbsmeht~+w&>2eEqYsZCi72+hdGM_p`l{o&0dgwLv%ii!WySNX%5LJW3d`Gx!`FDRM zrB6Q!W~bI4S$iUg_kg`$+=GsD1uGwM)lokI~Y% zJy*}wE_7{sd{rt%w`9$Cscn;PJT9>QR{ijE?R)v^^$YI{zucd&No?82Rd080laDF? zJ>&l6j=kqM{yrJ|VA7)3O2M6n=2(48a(S0{bm`K4VHK-f)!4tKURl`GuDj(6)B38S zgzZyH&-dPS&iq~Dx3RYUz5Ku0r5oqSy!h4R>ANF=NtEj?%VcI=Lra0cJJq2pLyv3s y9N!y0qsIvvu1ax=T@|64;0!@XR7*4NFKhf)v#Ets-i8B<2nJ7AKbLh*2~7Y*!4+}< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_REFORMATE.png b/src/main/resources/assets/hbm/textures/models/tank/tank_REFORMATE.png new file mode 100644 index 0000000000000000000000000000000000000000..e11563206781f8a172cdbfe99404d6d992e44b2c GIT binary patch literal 1355 zcmah}c~H`M6lW}2(+&yAi^&7C)HPf)&%6jhtrRsRQGZ&tN?D+w#ipoPZ75!=Lz$VR zcBmwDka*xR9%1fUR;#%vYG}rq7iw6hv{?PWZ|1!>^Z9;1Z$59{o0p06$8Od#)B=G( zn|*!ILF#;7?b(_e)bVja)2KSFr=fh0XsRtm^8^zF0&Do9y^hdJrllU_A&jnAA-qug z=$L0te$7y~XLti-wCx;otB$cLxlrG4$O4O#fD2r2cR|KMR(CgQn72A;um86;K8s|K zrN6~E)@jI~dG;q;bWOeP!+`edBXfBn<#Ro;ktw>6(8$ub5Xaegp&sN9ipNTwA#thk zMav33JavA)YGw7qY|kT_{~i_5V<6@}`z}*#j4DgA=Uk)Qluq>Oo)tPXY5u$&ZpjZ) z??1kME;>kTW_%4f!`gp2z+!M)7N#ucRxf5#u9mlcQXb58vj6nn?KTZ20f0N>foKqJ zG3cPMS|@{LFbO{2zv}SqOaN0R9dDpUQHt)RgS5KAKbPmj`|$B{Abpi9zW4zr2gg6( z%sWt~H`-~;*}|js!{2x;@)O|?j+OA!RL7ivh)EgVikRqie2jfJ&)o>hxAiC4bu3+X zc|VToU+X97c)Rm1q;j3kiMn5cg7%^Gvtj0oQD;Yx9YscO z)p`>WOhi-w?o+0hUTBEPugDo4=0eAYt?3F9%TGblroT%OfUnGeqy9d#9%_M^8*hb< z$vo)^2~l_a8l3XgI!l&-K>4@#D`Z5>Zvyc08f}ffR=dtg2M|}x^;N`PbkxR?5W5AC z4sJHJlRGo*VknSjkjDBF(C!-)Ru$n2tBI4E;qaq6JI-7 zovTu7j1>HK3RVzELTnEtJ=JNi&LxO70zS5W;-@YHX!LMPs_Qc)lK}0)kI&4PP@i)9 zis<-P9AXibv#ez__-NmkiLh9qvpr%~I$`p>exeq>K$BLj(i*#FBU>1_q5811Q%wZJ zK0Ts&^MKUs%hiA+eGYN{lCLFV_~DlXM)K>QTar~69)(iOpMHZ@St}dgQ$&N7Rj%4q z4c>g@iyLXtiL4=&q(8N0wbT%A#Fup5lvTbWKMVdmJrw|f{6iKtt+SN%rMF9)KRfp0 z4!Si@#C?uFEgZyGc13hp=aDZ&D{CmW4vT3L1_C&IOX?w3X()4e!C564batR{;GPwg z%*rHKN&>4_i!r{^(5~BhI})+H=KB(r`(o)#dezOO;8cJ^{v9ZOHij3PNVoP7T4$)| zG!TnVR)G;@dr|q}h*57&(_~x{VYZw$;#>ttXu+< zfETrWJ=AF}Pni8Ss_%QkB+Qus_$)dYDf?g4FN^S1Lo3nwO3k)w0qW}r^7Zyd^H5P4 F{{jEkm=XX0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_SOURGAS.png b/src/main/resources/assets/hbm/textures/models/tank/tank_SOURGAS.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0cc3dd78405c87574097cc166c4ba514c13445 GIT binary patch literal 1325 zcmZ`(dsLDK6gRapdkm69aB9-Y;Yie()2uWV6s$biG|J#x8(JP8>C*BGqI?WPAzf=} z57Wfd(1bHhGZ9_+pqz!820lo_66Vvk|AB4L>%j&XN)efv&R1{TAV6w{ge zM(Hxy5((QjH7#722G#Sj2&w0XIrTFiI`1MlR^@&cKYO{+bG6#-@r)=wxv}`;v4%d(t0c9K*4hf zxo~qAzmt8xldXsg$at@`?lt+IH?I*iKU|6`kmXw1TrX@Ij(57U!uYN)(L#iPi?(9` zdn-2H6jEIfTxX6^h4DEQn7$P!upgohRVMFQeI?v$GQ3)_>8yW|+ej6+tP=&+tkM&# zRW~uJZG=W$dr6K1;CKfIgoQ;GOfSa!H)L^U`*3C6{iDmVj*^R| z2}UNyNoY+2dZwPApIIKQdg87Y=0D4sudYH}s?4@WorQ|9CX(rdvL= zvuF{3V1rmOQ8)MmHpnc&4uEVIaw{%2!de7#nBbbg*F#7Ca_7&SY^fmpFSFqy7|#!x g1}RvAEd}*<-piDnZ*S#kp#Nt?CI%CPey7s@1-I~xW&i*H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_XYLENE.png b/src/main/resources/assets/hbm/textures/models/tank/tank_XYLENE.png new file mode 100644 index 0000000000000000000000000000000000000000..5a162a90a8d9211a1b77b6dc59170c2f48367ca1 GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^RY2Us!3HEZPulwcNU;<Eakt zG3V{w{eB{WBF8^&PSf0=ToMrA?WCONsPXbC>l0O#iRl+u;+eX0H*Pl(<50b7GRq@L zM@LiPAXD0$xp(I7tWH1oW^eJn`NtUBOE(`k{{HXT`BW9TxP4W>6_hsZHT-t-?w;4P zs|5vj{`yyVWy|~7*Wb&1dVBKVvY48mp*iW1YW4MN&h1HCvC&`f_CMvYsofDzfB9_I z5uSK8$@;WWWcx9hreoEDy4aKSAgLs=@lRq4zwaZ#(+-zv`r zl$5xrvClTXogKY>?q0KxUV-O#rle`KZ?J$=UZ7REev13=h%w}*g&H(r@cAlw#$w zWr%ye>-I72*TP$OEnL06;^@wIM}QWtFTQ(3+t%=|jEB3sib-5$@5O`fUvYlS`YExv zSHXSpfveiCwMVtjm8z=&CFj0Yi+lM}JI>Hey=|#(KzH@Ao(DIzm1~Y=OxqT)VB?ln z|B%(rPnCkU8|;2=M3M z_EXd976(@@%SW%kcysn&3l=LMS}*D+vj01mU(8;oY!Qg$sz-1B?Ct1~k)5}tPWMsh zl21zE+kY>TT<_L>WVPb|Rjrk+yf1U+pFh3z{H<%bhM(hZ@0!~gKIip2hn*+f+trPa zzTLdJGrVh+Ygw-TV}pBJuN{9h<@~JJxH)3CcTavi^Zi@DzSQ!fn3~$MfBSAM*O~h8 zOpd#`=*~TFf6criuwLtwYu@XBKm7#-XZkHKRu4L&ox0Aiv~<(z&$YhGF9*g>Tn+T< zGv8yg{;lKtsO9uI?fOF3yyl9fYogwyibT$SSrPhdR?E+xlPh`B=azkWdi3R)_Nn!A z>(~EE&pFi^Tk=SB_qoTR_avVR^J&&*#O}N97{7Owc1~C8``{pR_G_ZX|MyKz;{WyR zK*aI;A}XKXOkM3AD=fo(S7!FLRzKCah~vPR-%+(RK0JE~f*X>1V$ w1|Kkj9*NHB2=7#iJJ?x4NOaMRM_26^UcWsz@tWgmVBy2y>FVdQ&MBb@0QY)P!~g&Q literal 0 HcmV?d00001