From 37eb69e47d60ebd3d56a98a13d57c50ab3ae9b52 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 10 Sep 2023 21:02:20 +0200 Subject: [PATCH] wa'er pumps, new capacitor, fixes --- src/main/java/com/hbm/blocks/ModBlocks.java | 13 +- .../com/hbm/blocks/machine/MachinePump.java | 100 ++ .../ChunkRadiationHandlerSimple.java | 2 +- .../com/hbm/inventory/OreDictManager.java | 1 + .../gui/GUIScreenTemplateFolder.java | 7 +- .../inventory/recipes/anvil/AnvilRecipes.java | 16 + src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/CraftingManager.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 4 +- .../com/hbm/main/ModEventHandlerImpact.java | 2 + .../java/com/hbm/main/ResourceManager.java | 7 + .../com/hbm/render/tileentity/RenderPump.java | 102 ++ .../render/tileentity/RenderSteamEngine.java | 2 +- .../java/com/hbm/saveddata/TomSaveData.java | 4 + .../java/com/hbm/tileentity/TileMappings.java | 3 + .../machine/TileEntityMachinePumpBase.java | 119 ++ .../TileEntityMachinePumpElectric.java | 69 + .../machine/TileEntityMachinePumpSteam.java | 76 ++ .../network/TileEntityRadioTelex.java | 35 +- src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../assets/hbm/models/machines/pump.obj | 1107 +++++++++++++++++ .../blocks/capacitor_schrabidate_bottom.png | Bin 0 -> 554 bytes .../capacitor_schrabidate_inner_side.png | Bin 0 -> 170 bytes .../capacitor_schrabidate_inner_top.png | Bin 0 -> 271 bytes .../blocks/capacitor_schrabidate_side.png | Bin 0 -> 328 bytes .../blocks/capacitor_schrabidate_top.png | Bin 0 -> 203 bytes .../hbm/textures/models/machines/pump.png | Bin 0 -> 937 bytes .../models/machines/pump_electric.png | Bin 0 -> 5288 bytes .../textures/models/machines/pump_steam.png | Bin 0 -> 8373 bytes 30 files changed, 1672 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachinePump.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderPump.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java create mode 100644 src/main/resources/assets/hbm/models/machines/pump.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_inner_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_inner_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_top.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/pump.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/pump_electric.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/pump_steam.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 786f3da08..723931983 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -660,6 +660,9 @@ public class ModBlocks { public static Block nuke_n45; public static Block nuke_fstbmb; public static Block bomb_multi; + + public static Block pump_steam; + public static Block pump_electric; public static Block heater_firebox; public static Block heater_oven; @@ -771,6 +774,7 @@ public class ModBlocks { public static Block capacitor_gold; public static Block capacitor_niobium; public static Block capacitor_tantalium; + public static Block capacitor_schrabidate; public static Block machine_coal_off; public static Block machine_coal_on; @@ -1821,6 +1825,9 @@ public class ModBlocks { semtex = new BlockSemtex().setBlockName("semtex").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":semtex"); c4 = new BlockC4().setBlockName("c4").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":c4"); fissure_bomb = new BlockFissureBomb().setBlockName("fissure_bomb").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":fissure_bomb"); + + pump_steam = new MachinePump().setBlockName("pump_steam").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pump_steam"); + pump_electric = new MachinePump().setBlockName("pump_electric").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pump_electric"); heater_firebox = new HeaterFirebox().setBlockName("heater_firebox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); heater_oven = new HeaterOven().setBlockName("heater_oven").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); @@ -1924,7 +1931,8 @@ public class ModBlocks { 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, 100_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_tantalium"); + 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"); machine_coal_off = new MachineCoal(false).setBlockName("machine_coal_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_coal_on = new MachineCoal(true).setBlockName("machine_coal_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); @@ -3089,6 +3097,8 @@ public class ModBlocks { GameRegistry.registerBlock(machine_press, machine_press.getUnlocalizedName()); GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName()); register(machine_conveyor_press); + register(pump_steam); + register(pump_electric); register(heater_firebox); register(heater_oven); register(machine_ashpit); @@ -3277,6 +3287,7 @@ public class ModBlocks { register(capacitor_gold); register(capacitor_niobium); register(capacitor_tantalium); + register(capacitor_schrabidate); GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName()); GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePump.java b/src/main/java/com/hbm/blocks/machine/MachinePump.java new file mode 100644 index 000000000..ee90203b1 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePump.java @@ -0,0 +1,100 @@ +package com.hbm.blocks.machine; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachinePumpElectric; +import com.hbm.tileentity.machine.TileEntityMachinePumpSteam; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; + +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.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachinePump extends BlockDummyable implements ITooltipProvider, ILookOverlay { + + public MachinePump() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) { + if(this == ModBlocks.pump_steam) return new TileEntityMachinePumpSteam(); + if(this == ModBlocks.pump_electric) return new TileEntityMachinePumpElectric(); + } + if(meta >= 6) { + if(this == ModBlocks.pump_steam) return new TileEntityProxyCombo().fluid(); + if(this == ModBlocks.pump_electric) return new TileEntityProxyCombo().fluid().power(); + } + return null; + } + + @Override + public int[] getDimensions() { + return new int[] {3, 0, 1, 1, 1, 1}; + } + + @Override + public int getOffset() { + return 1; + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + this.makeExtra(world, x - dir.offsetX + 1, y, z - dir.offsetZ); + this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ); + this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ + 1); + this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ - 1); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + + int[] pos = this.findCore(world, x, y, z); + + if(pos == null) + return; + + TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]); + + List text = new ArrayList(); + + if(te instanceof TileEntityMachinePumpSteam) { + TileEntityMachinePumpSteam pump = (TileEntityMachinePumpSteam) te; + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + I18nUtil.resolveKey(pump.steam.getTankType().getUnlocalizedName()) + ": " + String.format("%,d", pump.steam.getFill()) + " / " + String.format("%,d", pump.steam.getMaxFill()) + "mB"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + I18nUtil.resolveKey(pump.lps.getTankType().getUnlocalizedName()) + ": " + String.format("%,d", pump.lps.getFill()) + " / " + String.format("%,d", pump.lps.getMaxFill()) + "mB"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + I18nUtil.resolveKey(pump.water.getTankType().getUnlocalizedName()) + ": " + String.format("%,d", pump.water.getFill()) + " / " + String.format("%,d", pump.water.getMaxFill()) + "mB"); + } + + if(te instanceof TileEntityMachinePumpElectric) { + TileEntityMachinePumpElectric pump = (TileEntityMachinePumpElectric) te; + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + String.format("%,d", pump.power) + " / " + String.format("%,d", pump.maxPower) + "HE"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + I18nUtil.resolveKey(pump.water.getTankType().getUnlocalizedName()) + ": " + String.format("%,d", pump.water.getFill()) + " / " + String.format("%,d", pump.water.getMaxFill()) + "mB"); + } + + if(pos[1] > 70) { + text.add("&[" + (BobMathUtil.getBlink() ? 0xff0000 : 0xffff00) + "&]! ! ! ALTITUDE ! ! !"); + } + + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } +} diff --git a/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java b/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java index d080eb6e6..72ab84887 100644 --- a/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java +++ b/src/main/java/com/hbm/handler/radiation/ChunkRadiationHandlerSimple.java @@ -102,7 +102,7 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler { } float rad = radiation.get(newCoord); - if(rad > RadiationConfig.fogRad && world != null && world.rand.nextInt(RadiationConfig.fogCh) == 0 && world.getChunkFromChunkCoords(coord.chunkXPos, coord.chunkZPos).isChunkLoaded) { + if(rad > RadiationConfig.fogRad && world != null && world.rand.nextInt(RadiationConfig.fogCh) == 0 && world.getChunkProvider().chunkExists(coord.chunkXPos, coord.chunkZPos)) { int x = coord.chunkXPos * 16 + world.rand.nextInt(16); int z = coord.chunkZPos * 16 + world.rand.nextInt(16); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 02afded30..685251982 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -63,6 +63,7 @@ public class OreDictManager { public static final String KEY_LEAVES = "treeLeaves"; public static final String KEY_SAPLING = "treeSapling"; public static final String KEY_SAND = "sand"; + public static final String KEY_COBBLESTONE = "cobblestone"; public static final String KEY_BLACK = "dyeBlack"; public static final String KEY_RED = "dyeRed"; diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index 4d09369be..44a89c104 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -101,8 +101,11 @@ public class GUIScreenTemplateFolder extends GuiScreen { for(int i = 0; i < AssemblerRecipes.recipeList.size(); i++) { if(AssemblerRecipes.hidden.get(AssemblerRecipes.recipeList.get(i)) != null && - AssemblerRecipes.hidden.get(AssemblerRecipes.recipeList.get(i)).contains(player.getHeldItem().getItem())) - allStacks.add(new ItemStack(ModItems.assembly_template, 1, i)); + AssemblerRecipes.hidden.get(AssemblerRecipes.recipeList.get(i)).contains(player.getHeldItem().getItem())) { + + ComparableStack comp = AssemblerRecipes.recipeList.get(i); + allStacks.add(ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template, 1, i), comp)); + } } isJournal = true; 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 3df9c8e30..607b9f289 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -225,6 +225,22 @@ public class AnvilRecipes { new ComparableStack(ModItems.circuit_aluminium, 1 * ukModifier) }, new AnvilOutput(new ItemStack(ModBlocks.machine_assembler))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new OreDictStack(KEY_COBBLESTONE, 8), + new OreDictStack(KEY_PLANKS, 16), + new OreDictStack(IRON.ingot(), 4), + new OreDictStack(CU.plate(), 8) + }, new AnvilOutput(new ItemStack(ModBlocks.pump_steam))).setTier(2)); + + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new ComparableStack(Blocks.stonebrick, 8), + new OreDictStack(STEEL.plate(), 16), + new ComparableStack(ModItems.motor, 2), + new ComparableStack(ModItems.circuit_copper, 1) + }, new AnvilOutput(new ItemStack(ModBlocks.pump_electric))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new ComparableStack(Blocks.furnace), diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c73c53576..c9800c9a6 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -289,6 +289,8 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPistonInserter.class, new RenderPistonInserter()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConveyorPress.class, new RenderConveyorPress()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRadioTelex.class, new RenderTelex()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePumpSteam.class, new RenderPump()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePumpElectric.class, new RenderPump()); //Foundry ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 177442895..24711fe67 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -287,6 +287,7 @@ public class CraftingManager { 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_coal_off, 1), new Object[] { "STS", "SCS", "SFS", 'S', STEEL.ingot(), 'T', ModItems.tank_steel, 'C', MINGRADE.ingot(), 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', STEEL.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_boiler_electric_off, 1), new Object[] { "SPS", "TFT", "SPS", 'S', DESH.ingot(), 'P', ModItems.board_copper, 'T', ModItems.tank_steel, 'F', ModBlocks.machine_electric_furnace_off }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index e8834cff7..7c3542ec2 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -289,7 +289,8 @@ public class MainRegistry { SiegeTier.registerTiers(); HazardRegistry.registerItems(); HazardRegistry.registerTrafos(); - OreDictManager.registerGroups(); + OreDictManager.registerGroups(); //important to run first + OreDictManager.registerOres(); Library.superuser.add("192af5d7-ed0f-48d8-bd89-9d41af8524f8"); Library.superuser.add("5aee1e3d-3767-4987-a222-e7ce1fbdf88e"); @@ -806,7 +807,6 @@ public class MainRegistry { // MUST be initialized AFTER achievements!! BobmazonOfferFactory.init(); - OreDictManager.registerOres(); IMCHandler.registerHandler("blastfurnace", new IMCBlastFurnace()); IMCHandler.registerHandler("crystallizer", new IMCCrystallizer()); diff --git a/src/main/java/com/hbm/main/ModEventHandlerImpact.java b/src/main/java/com/hbm/main/ModEventHandlerImpact.java index fbad76c79..27529784c 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerImpact.java +++ b/src/main/java/com/hbm/main/ModEventHandlerImpact.java @@ -125,6 +125,8 @@ public class ModEventHandlerImpact { @SubscribeEvent(priority = EventPriority.LOWEST) public void onLoad(WorldEvent.Load event) { + TomSaveData.resetLastCached(); + if(GeneralConfig.enableImpactWorldProvider) { DimensionManager.unregisterProviderType(0); DimensionManager.registerProviderType(0, WorldProviderNTM.class, true); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 35da24ba7..7a0ff4d0c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -96,6 +96,9 @@ public class ResourceManager { //Gas Turbine public static final IModelCustom turbinegas = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/turbinegas.obj")); + //Pumps + public static final IModelCustom pump = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/pump.obj")).asDisplayList(); + //Large Turbine public static final IModelCustom steam_engine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/steam_engine.obj")).asDisplayList(); public static final IModelCustom turbine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/turbine.obj")); @@ -449,6 +452,10 @@ public class ResourceManager { //Gas Turbine public static final ResourceLocation turbinegas_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/turbinegas.png"); + + //Pumps + public static final ResourceLocation pump_steam_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/pump_steam.png"); + public static final ResourceLocation pump_electric_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/pump_electric.png"); //Large Turbine public static final ResourceLocation steam_engine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/steam_engine.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPump.java b/src/main/java/com/hbm/render/tileentity/RenderPump.java new file mode 100644 index 000000000..8b9dc8756 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPump.java @@ -0,0 +1,102 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachinePumpBase; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPump extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + TileEntityMachinePumpBase engine = (TileEntityMachinePumpBase) tile; + float angle = engine.lastRotor + (engine.rotor - engine.lastRotor) * interp; + renderCommon(angle, engine.getBlockType() == ModBlocks.pump_steam ? 0 : 1); + //renderCommon(0, engine.getBlockType() == ModBlocks.pump_steam ? 0 : 1); + + GL11.glPopMatrix(); + } + + private void renderCommon(double rot, int type) { + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + + if(type == 0) bindTexture(ResourceManager.pump_steam_tex); + else bindTexture(ResourceManager.pump_electric_tex); + ResourceManager.pump.renderPart("Base"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.25, 0); + GL11.glRotated(rot - 90, 0, 0, 1); + GL11.glTranslated(0, -2.25, 0); + ResourceManager.pump.renderPart("Rotor"); + GL11.glPopMatrix(); + + double sin = Math.sin(rot * Math.PI / 180D) * 0.5D - 0.5D; + double cos = Math.cos(rot * Math.PI / 180D) * 0.5D; + double ang = Math.acos(cos / 2D); + double cath = Math.sqrt(1 + (cos * cos) / 2); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1 - cath + sin, 0); + GL11.glTranslated(0, 4.75, 0); + GL11.glRotated(ang * 180D / Math.PI - 90D, 0, 0, -1); + GL11.glTranslated(0, -4.75, 0); + ResourceManager.pump.renderPart("Arms"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1 - cath + sin, 0); + ResourceManager.pump.renderPart("Piston"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.pump_steam); + } + + @Override + public Item[] getItemsForRenderer() { + return new Item[] { + Item.getItemFromBlock(ModBlocks.pump_steam), + Item.getItemFromBlock(ModBlocks.pump_electric) + }; + } + + @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 renderCommonWithStack(ItemStack item) { + RenderPump.this.renderCommon(System.currentTimeMillis() % 3600 * 0.1F, item.getItem() == Item.getItemFromBlock(ModBlocks.pump_steam) ? 0 : 1); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderSteamEngine.java b/src/main/java/com/hbm/render/tileentity/RenderSteamEngine.java index f4b35ac7b..ff5e30bde 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSteamEngine.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSteamEngine.java @@ -71,7 +71,7 @@ public class RenderSteamEngine extends TileEntitySpecialRenderer implements IIte GL11.glPopMatrix(); GL11.glPushMatrix(); - double cath = Math.sqrt(3.515625D - (cos * cos)); + double cath = Math.sqrt(3.515625D - (cos * cos) / 2); GL11.glTranslated(1.875 - cath + sin, 0, 0); //the difference that "1.875 - cath" makes is minuscule but very much noticeable ResourceManager.steam_engine.renderPart("Piston"); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/saveddata/TomSaveData.java b/src/main/java/com/hbm/saveddata/TomSaveData.java index be36cecb5..0ccc22395 100644 --- a/src/main/java/com/hbm/saveddata/TomSaveData.java +++ b/src/main/java/com/hbm/saveddata/TomSaveData.java @@ -32,6 +32,10 @@ public class TomSaveData extends WorldSavedData { public static TomSaveData getLastCachedOrNull() { return lastCachedUnsafe; } + + public static void resetLastCached() { + lastCachedUnsafe = null; + } public TomSaveData(String tagName) { super(tagName); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 7c6f0a484..3274e10a2 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -277,6 +277,9 @@ public class TileMappings { put(TileEntityHeatBoiler.class, "tileentity_heat_boiler"); put(TileEntityHeatBoilerIndustrial.class, "tileentity_heat_boiler_industrial"); + put(TileEntityMachinePumpSteam.class, "tileentity_steam_pump"); + put(TileEntityMachinePumpElectric.class, "tileentity_electric_pump"); + put(TileEntityFoundryMold.class, "tileentity_foundry_mold"); put(TileEntityFoundryBasin.class, "tileentity_foundry_basin"); put(TileEntityFoundryChannel.class, "tileentity_foundry_channel"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java new file mode 100644 index 000000000..9d5426e62 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -0,0 +1,119 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; + +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver { + + public FluidTank water; + + public boolean isOn = false; + public float rotor; + public float lastRotor; + + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(DirPos pos : getConPos()) { + if(water.getFill() > 0) this.sendFluid(water, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + + this.isOn = false; + if(this.canOperate() && yCoord <= 70) { + this.isOn = true; + this.operate(); + } + + NBTTagCompound data = this.getSync(); + INBTPacketReceiver.networkPack(this, data, 150); + + } else { + + this.lastRotor = this.rotor; + if(this.isOn) this.rotor += 10F; + + if(this.rotor >= 360F) { + this.rotor -= 360F; + this.lastRotor -= 360F; + + MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:block.steamEngineOperate", 0.5F, 0.75F); + } + } + } + + protected NBTTagCompound getSync() { + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("isOn", isOn); + water.writeToNBT(data, "w"); + return data; + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.isOn = nbt.getBoolean("isOn"); + water.readFromNBT(nbt, "w"); + } + + protected abstract boolean canOperate(); + protected abstract void operate(); + + protected DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord, yCoord, zCoord - 2, Library.NEG_Z) + }; + } + + @Override + public FluidTank[] getAllTanks() { + return new FluidTank[] {water}; + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {water}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[0]; + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 5, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java new file mode 100644 index 000000000..2551c42a9 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java @@ -0,0 +1,69 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energy.IEnergyUser; +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityMachinePumpElectric extends TileEntityMachinePumpBase implements IEnergyUser { + + public long power; + public static final long maxPower = 10_000; + + public TileEntityMachinePumpElectric() { + super(); + water = new FluidTank(Fluids.WATER, 1_000_000); + } + + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(worldObj.getTotalWorldTime() % 20 == 0) for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + super.updateEntity(); + } + + protected NBTTagCompound getSync() { + NBTTagCompound data = super.getSync(); + data.setLong("power", power); + return data; + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + super.networkUnpack(nbt); + this.power = nbt.getLong("power"); + } + + @Override + protected boolean canOperate() { + return power >= 1_000 && water.getFill() < water.getMaxFill(); + } + + @Override + protected void operate() { + this.power -= 1_000; + water.setFill(Math.min(water.getFill() + 10_000, water.getMaxFill())); + } + + @Override + public long getPower() { + return power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public void setPower(long power) { + this.power = power; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java new file mode 100644 index 000000000..6644f3e83 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java @@ -0,0 +1,76 @@ +package com.hbm.tileentity.machine; + +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.fauxpointtwelve.DirPos; + +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityMachinePumpSteam extends TileEntityMachinePumpBase { + + public FluidTank steam; + public FluidTank lps; + + public TileEntityMachinePumpSteam() { + super(); + water = new FluidTank(Fluids.WATER, 100_000); + steam = new FluidTank(Fluids.STEAM, 1_000); + lps = new FluidTank(Fluids.SPENTSTEAM, 10); + } + + public void updateEntity() { + + if(!worldObj.isRemote) { + + for(DirPos pos : getConPos()) { + this.trySubscribe(steam.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(lps.getFill() > 0) { + this.sendFluid(lps, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + } + + super.updateEntity(); + } + + @Override + public FluidTank[] getAllTanks() { + return new FluidTank[] {water, steam, lps}; + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {water, lps}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {steam}; + } + + protected NBTTagCompound getSync() { + NBTTagCompound data = super.getSync(); + steam.writeToNBT(data, "s"); + lps.writeToNBT(data, "l"); + return data; + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + super.networkUnpack(nbt); + steam.readFromNBT(nbt, "s"); + lps.readFromNBT(nbt, "l"); + } + + @Override + protected boolean canOperate() { + return steam.getFill() >= 100 && lps.getMaxFill() - lps.getFill() > 0 && water.getFill() < water.getMaxFill(); + } + + @Override + protected void operate() { + steam.setFill(steam.getFill() - 100); + lps.setFill(lps.getFill() + 1); + water.setFill(Math.min(water.getFill() + 1000, water.getMaxFill())); + } +} diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java index 7b933f115..3137ef832 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.network; +import java.util.ArrayList; +import java.util.List; + import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.gui.GuiScreenRadioTelex; import com.hbm.tileentity.IGUIProvider; @@ -104,6 +107,7 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv this.deleteOnReceive = true; } else if(c == eol) { if(this.writingLine < 4) this.writingLine++; + this.markDirty(); } else if(c == bell) { worldObj.playSoundEffect(xCoord, yCoord, zCoord, "random.orb", 2F, 0.5F); } else if(c == print) { @@ -113,6 +117,7 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv this.writingLine = 0; } else { this.rxBuffer[this.writingLine] += c; + this.markDirty(); } } } @@ -174,7 +179,11 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv public void print() { ItemStack stack = new ItemStack(Items.paper); - ItemStackUtil.addTooltipToStack(stack, rxBuffer); + List text = new ArrayList(); + for(int i = 0; i < 5; i++) { + if(!rxBuffer[i].isEmpty()) text.add(rxBuffer[i]); + } + ItemStackUtil.addTooltipToStack(stack, text.toArray(new String[0])); stack.setStackDisplayName("Message"); worldObj.spawnEntityInWorld(new EntityItem(worldObj, xCoord + 0.5, yCoord + 1, zCoord + 0.5, stack)); } @@ -184,6 +193,30 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv return player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 16 * 16; } + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < 5; i++) { + txBuffer[i] = nbt.getString("tx" + i); + rxBuffer[i] = nbt.getString("rx" + i); + } + this.txChannel = nbt.getString("txChan"); + this.rxChannel = nbt.getString("rxChan"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < 5; i++) { + nbt.setString("tx" + i, txBuffer[i]); + nbt.setString("rx" + i, rxBuffer[i]); + } + nbt.setString("txChan", txChannel); + nbt.setString("rxChan", rxChannel); + } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index f2a0719a4..549ddb0fa 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4255,6 +4255,10 @@ tile.pribris.name=RBMK-Schutt tile.pribris_burning.name=Flammender RBMK-Schutt tile.pribris_digamma.name=Geschwärzter RBMK-Schutt tile.pribris_radiating.name=Glühender RBMK-Schutt +tile.pump_electric.name=Elektrische Grundwasserpumpe +tile.pump_electric.desc=Nutzt Strom um Grundwasser hochzupumpen$Erzeugt bis zu 10.000mB/t$Muss unter Y:70 platziert werden +tile.pump_steam.name=Dampfbetriebene Grundwasserpumpe +tile.pump_steam.desc=Nutzt Dampf um Grundwasser hochzupumpen$Erzeugt bis zu 10.000mB/t$Muss unter Y:70 platziert werden tile.pwr_block.name=PWR tile.pwr_casing.name=PWR Druckbehälter tile.pwr_casing.desc=Muss alle internen Teile des PWRs abdecken$Platzierung: Hülle diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c4c2b6dbc..9f1240865 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5235,6 +5235,10 @@ tile.pribris.name=RBMK Debris tile.pribris_burning.name=Flaming RBMK Debris tile.pribris_digamma.name=Blackened RBMK Debris tile.pribris_radiating.name=Smoldering RBMK Debris +tile.pump_electric.name=Electric Groundwater Pump +tile.pump_electric.desc=Uses electricity to pump up groundwater$Generates up to 10,000mB/t$Needs to be placed below Y:70 +tile.pump_steam.name=Steam-Powered Groundwater Pump +tile.pump_steam.desc=Uses steam to pump up groundwater$Generates up to 100mB/t$Needs to be placed below Y:70 tile.pwr_block.name=PWR tile.pwr_casing.name=PWR Pressure Vessel tile.pwr_casing.desc=Needs to cover all internal parts for the reactor to form$Placement: Casing diff --git a/src/main/resources/assets/hbm/models/machines/pump.obj b/src/main/resources/assets/hbm/models/machines/pump.obj new file mode 100644 index 000000000..4f859d6aa --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/pump.obj @@ -0,0 +1,1107 @@ +# Blender v2.79 (sub 0) OBJ File: 'pump.blend' +# www.blender.org +o Piston +v -0.500000 4.500000 -0.500000 +v -0.500000 4.500000 0.500000 +v 0.500000 4.500000 0.500000 +v 0.500000 4.500000 -0.500000 +v -0.500000 5.000000 -0.500000 +v -0.500000 5.000000 0.500000 +v 0.500000 5.000000 0.500000 +v 0.500000 5.000000 -0.500000 +v -0.125000 4.625000 1.000000 +v -0.125000 4.875000 1.000000 +v -0.125000 4.625000 -1.000000 +v -0.125000 4.875000 -1.000000 +v 0.125000 4.625000 1.000000 +v 0.125000 4.875000 1.000000 +v 0.125000 4.625000 -1.000000 +v 0.125000 4.875000 -1.000000 +v -0.250000 3.500000 0.250000 +v 0.250000 3.500000 0.250000 +v -0.250000 3.500000 -0.250000 +v 0.250000 3.500000 -0.250000 +v -0.250000 4.500000 0.250000 +v 0.250000 4.500000 0.250000 +v -0.250000 4.500000 -0.250000 +v 0.250000 4.500000 -0.250000 +vt 0.727273 0.250000 +vt 0.636364 0.375000 +vt 0.636364 0.250000 +vt 0.636364 0.437500 +vt 0.727273 0.562500 +vt 0.636364 0.562500 +vt 0.727273 0.375000 +vt 0.909091 0.375000 +vt 0.818182 0.437500 +vt 0.818182 0.375000 +vt 0.727273 0.437500 +vt 0.545455 0.437500 +vt 0.545455 0.375000 +vt 0.477273 0.656250 +vt 0.659091 0.687500 +vt 0.477273 0.687500 +vt 0.659091 0.656250 +vt 0.681818 0.625000 +vt 0.681818 0.656250 +vt 0.659091 0.625000 +vt 0.477273 0.593750 +vt 0.659091 0.593750 +vt 0.477273 0.625000 +vt 0.454545 0.656250 +vt 0.454545 0.625000 +vt 0.477273 0.562500 +vt 0.659091 0.562500 +vt 0.909091 0.250000 +vt 0.863636 0.375000 +vt 0.863636 0.250000 +vt 1.000000 0.250000 +vt 0.954545 0.375000 +vt 0.954545 0.250000 +vt 0.909091 0.375000 +vt 0.818182 0.375000 +vt 0.818182 0.250000 +vt 0.909091 0.437500 +vt 1.000000 0.375000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.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.0000 1.0000 +s off +f 1/1/1 3/2/1 2/3/1 +f 7/4/2 5/5/2 6/6/2 +f 4/7/3 7/4/3 3/2/3 +f 2/8/4 5/9/4 1/10/4 +f 1/10/5 8/11/5 4/7/5 +f 3/2/6 6/12/6 2/13/6 +f 10/14/4 11/15/4 9/16/4 +f 12/17/5 15/18/5 11/19/5 +f 16/20/3 13/21/3 15/22/3 +f 14/23/6 9/24/6 13/25/6 +f 15/22/1 9/26/1 11/27/1 +f 12/17/2 14/23/2 16/20/2 +f 20/28/3 22/29/3 18/30/3 +f 17/31/4 23/32/4 19/33/4 +f 19/33/5 24/34/5 20/28/5 +f 18/30/6 21/35/6 17/36/6 +f 1/1/1 4/7/1 3/2/1 +f 7/4/2 8/11/2 5/5/2 +f 4/7/3 8/11/3 7/4/3 +f 2/8/4 6/37/4 5/9/4 +f 1/10/5 5/9/5 8/11/5 +f 3/2/6 7/4/6 6/12/6 +f 10/14/4 12/17/4 11/15/4 +f 12/17/5 16/20/5 15/18/5 +f 16/20/3 14/23/3 13/21/3 +f 14/23/6 10/14/6 9/24/6 +f 15/22/1 13/21/1 9/26/1 +f 12/17/2 10/14/2 14/23/2 +f 20/28/3 24/34/3 22/29/3 +f 17/31/4 21/38/4 23/32/4 +f 19/33/5 23/32/5 24/34/5 +f 18/30/6 22/29/6 21/35/6 +o Arms +v -0.062500 2.687500 0.750000 +v 0.062500 2.687500 0.750000 +v -0.062500 4.812500 0.750000 +v 0.062500 4.812500 0.750000 +v -0.062500 4.812500 0.875000 +v -0.062500 2.687500 0.875000 +v 0.062500 2.687500 0.875000 +v 0.062500 4.812500 0.875000 +v -0.062500 2.687500 -0.875000 +v 0.062500 2.687500 -0.875000 +v -0.062500 4.812500 -0.875000 +v 0.062500 4.812500 -0.875000 +v -0.062500 4.812500 -0.750000 +v -0.062500 2.687500 -0.750000 +v 0.062500 2.687500 -0.750000 +v 0.062500 4.812500 -0.750000 +vt 0.579545 0.953125 +vt 0.568182 0.703125 +vt 0.579545 0.703125 +vt 0.556818 0.703125 +vt 0.545455 0.953125 +vt 0.545455 0.703125 +vt 0.568182 0.953125 +vt 0.590909 0.953125 +vt 0.590909 0.968750 +vt 0.579545 0.968750 +vt 0.579545 0.687500 +vt 0.590909 0.703125 +vt 0.579545 0.953125 +vt 0.568182 0.703125 +vt 0.579545 0.703125 +vt 0.556818 0.703125 +vt 0.545455 0.953125 +vt 0.545455 0.703125 +vt 0.568182 0.953125 +vt 0.590909 0.953125 +vt 0.590909 0.968750 +vt 0.579545 0.968750 +vt 0.579545 0.687500 +vt 0.590909 0.703125 +vt 0.556818 0.953125 +vt 0.590909 0.687500 +vt 0.556818 0.953125 +vt 0.590909 0.687500 +vn 0.0000 0.0000 -1.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 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +s off +f 27/39/7 26/40/7 25/41/7 +f 31/42/8 29/43/8 30/44/8 +f 28/45/9 31/42/9 26/40/9 +f 25/41/10 29/46/10 27/39/10 +f 27/39/11 32/47/11 28/48/11 +f 26/49/12 30/50/12 25/41/12 +f 35/51/7 34/52/7 33/53/7 +f 39/54/8 37/55/8 38/56/8 +f 36/57/9 39/54/9 34/52/9 +f 33/53/10 37/58/10 35/51/10 +f 35/51/11 40/59/11 36/60/11 +f 34/61/12 38/62/12 33/53/12 +f 27/39/7 28/45/7 26/40/7 +f 31/42/8 32/63/8 29/43/8 +f 28/45/9 32/63/9 31/42/9 +f 25/41/10 30/50/10 29/46/10 +f 27/39/11 29/46/11 32/47/11 +f 26/49/12 31/64/12 30/50/12 +f 35/51/7 36/57/7 34/52/7 +f 39/54/8 40/65/8 37/55/8 +f 36/57/9 40/65/9 39/54/9 +f 33/53/10 38/62/10 37/58/10 +f 35/51/11 37/58/11 40/59/11 +f 34/61/12 39/66/12 38/62/12 +o Rotor +v -0.000000 2.875000 0.500000 +v -0.441942 2.691942 0.500000 +v -0.625000 2.250000 0.500000 +v -0.441942 1.808058 0.500000 +v 0.000000 1.625000 0.500000 +v 0.441942 1.808058 0.500000 +v 0.625000 2.250000 0.500000 +v 0.441942 2.691942 0.500000 +v -0.441942 2.691942 0.750000 +v -0.000000 2.875000 0.750000 +v -0.625000 2.250000 0.750000 +v -0.441942 1.808058 0.750000 +v 0.000000 1.625000 0.750000 +v 0.441942 1.808058 0.750000 +v 0.625000 2.250000 0.750000 +v 0.441942 2.691942 0.750000 +v -0.000000 2.875000 -0.750000 +v -0.441942 2.691942 -0.750000 +v -0.625000 2.250000 -0.750000 +v -0.441942 1.808058 -0.750000 +v 0.000000 1.625000 -0.750000 +v 0.441942 1.808058 -0.750000 +v 0.625000 2.250000 -0.750000 +v 0.441942 2.691942 -0.750000 +v -0.441942 2.691942 -0.500000 +v -0.000000 2.875000 -0.500000 +v -0.625000 2.250000 -0.500000 +v -0.441942 1.808058 -0.500000 +v 0.000000 1.625000 -0.500000 +v 0.441942 1.808058 -0.500000 +v 0.625000 2.250000 -0.500000 +v 0.441942 2.691942 -0.500000 +vt 0.920455 0.439870 +vt 0.959412 0.462058 +vt 0.975549 0.515625 +vt 0.784091 0.439870 +vt 0.839185 0.515625 +vt 0.784091 0.591380 +vt 0.863636 0.687500 +vt 0.840909 0.625000 +vt 0.863636 0.625000 +vt 0.863636 0.562500 +vt 0.840909 0.500000 +vt 0.863636 0.500000 +vt 0.863636 0.937500 +vt 0.840909 0.875000 +vt 0.863636 0.875000 +vt 0.863636 0.812500 +vt 0.840909 0.750000 +vt 0.863636 0.750000 +vt 0.840909 0.562500 +vt 0.840909 0.437500 +vt 0.863636 0.437500 +vt 0.840909 0.812500 +vt 0.840909 0.687500 +vt 0.920455 0.439870 +vt 0.959412 0.462058 +vt 0.975549 0.515625 +vt 0.784091 0.439870 +vt 0.839185 0.515625 +vt 0.784091 0.591380 +vt 0.863636 0.687500 +vt 0.840909 0.625000 +vt 0.863636 0.625000 +vt 0.863636 0.562500 +vt 0.840909 0.500000 +vt 0.863636 0.500000 +vt 0.863636 0.937500 +vt 0.840909 0.875000 +vt 0.863636 0.875000 +vt 0.863636 0.812500 +vt 0.840909 0.750000 +vt 0.863636 0.750000 +vt 0.840909 0.562500 +vt 0.840909 0.437500 +vt 0.863636 0.437500 +vt 0.840909 0.812500 +vt 0.840909 0.687500 +vt 0.959412 0.569192 +vt 0.865360 0.515625 +vt 0.920455 0.591380 +vt 0.881497 0.569192 +vt 0.881497 0.462058 +vt 0.745133 0.569192 +vt 0.728997 0.515625 +vt 0.745133 0.462058 +vt 0.823048 0.462058 +vt 0.823048 0.569192 +vt 0.840909 0.937500 +vt 0.959412 0.569192 +vt 0.865360 0.515625 +vt 0.920455 0.591380 +vt 0.881497 0.569192 +vt 0.881497 0.462058 +vt 0.745133 0.569192 +vt 0.728997 0.515625 +vt 0.745133 0.462058 +vt 0.823048 0.462058 +vt 0.823048 0.569192 +vt 0.840909 0.937500 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.3827 0.9239 0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.3827 -0.9239 0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.3827 0.9239 0.0000 +s off +f 45/67/13 44/68/13 43/69/13 +f 53/70/14 55/71/14 50/72/14 +f 41/73/15 56/74/15 48/75/15 +f 47/76/16 54/77/16 46/78/16 +f 45/79/17 52/80/17 44/81/17 +f 43/82/18 49/83/18 42/84/18 +f 48/75/19 55/85/19 47/76/19 +f 46/78/20 53/86/20 45/87/20 +f 44/81/21 51/88/21 43/82/21 +f 42/84/22 50/89/22 41/73/22 +f 61/90/13 60/91/13 59/92/13 +f 69/93/14 71/94/14 66/95/14 +f 57/96/15 72/97/15 64/98/15 +f 63/99/16 70/100/16 62/101/16 +f 61/102/17 68/103/17 60/104/17 +f 59/105/18 65/106/18 58/107/18 +f 64/98/19 71/108/19 63/99/19 +f 62/101/20 69/109/20 61/110/20 +f 60/104/21 67/111/21 59/105/21 +f 58/107/22 66/112/22 57/96/22 +f 43/69/13 42/113/13 47/114/13 +f 42/113/13 41/115/13 47/114/13 +f 41/115/13 48/116/13 47/114/13 +f 47/114/13 46/117/13 43/69/13 +f 46/117/13 45/67/13 43/69/13 +f 50/72/14 49/118/14 51/119/14 +f 51/119/14 52/120/14 53/70/14 +f 53/70/14 54/121/14 55/71/14 +f 55/71/14 56/122/14 50/72/14 +f 50/72/14 51/119/14 53/70/14 +f 41/73/15 50/89/15 56/74/15 +f 47/76/16 55/85/16 54/77/16 +f 45/79/17 53/123/17 52/80/17 +f 43/82/18 51/88/18 49/83/18 +f 48/75/19 56/74/19 55/85/19 +f 46/78/20 54/77/20 53/86/20 +f 44/81/21 52/80/21 51/88/21 +f 42/84/22 49/83/22 50/89/22 +f 59/92/13 58/124/13 63/125/13 +f 58/124/13 57/126/13 63/125/13 +f 57/126/13 64/127/13 63/125/13 +f 63/125/13 62/128/13 59/92/13 +f 62/128/13 61/90/13 59/92/13 +f 66/95/14 65/129/14 67/130/14 +f 67/130/14 68/131/14 69/93/14 +f 69/93/14 70/132/14 71/94/14 +f 71/94/14 72/133/14 66/95/14 +f 66/95/14 67/130/14 69/93/14 +f 57/96/15 66/112/15 72/97/15 +f 63/99/16 71/108/16 70/100/16 +f 61/102/17 69/134/17 68/103/17 +f 59/105/18 67/111/18 65/106/18 +f 64/98/19 72/97/19 71/108/19 +f 62/101/20 70/100/20 69/109/20 +f 60/104/21 68/103/21 67/111/21 +f 58/107/22 65/106/22 66/112/22 +o Base +v -1.500000 0.000000 1.500000 +v 1.500000 0.000000 1.500000 +v -1.500000 0.000000 -1.500000 +v 1.500000 0.000000 -1.500000 +v -1.500000 1.000000 1.500000 +v 1.500000 1.000000 1.500000 +v -1.500000 1.000000 -1.500000 +v 1.500000 1.000000 -1.500000 +v -1.000000 1.000000 1.000000 +v 1.000000 1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v -1.000000 1.500000 -1.000000 +v -1.000000 1.500000 1.000000 +v 1.000000 1.500000 1.000000 +v 1.000000 1.500000 -1.000000 +v -0.500000 1.500000 0.500000 +v 0.500000 1.500000 0.500000 +v -0.500000 1.500000 -0.500000 +v 0.500000 1.500000 -0.500000 +v -0.500000 3.500000 -0.500000 +v -0.500000 3.500000 0.500000 +v 0.500000 3.500000 0.500000 +v 0.500000 3.500000 -0.500000 +v 0.625000 3.125000 -0.375000 +v 0.775888 3.150888 -0.338388 +v 0.801777 3.176777 -0.250000 +v 0.775888 3.150888 -0.161612 +v 0.713388 3.088388 -0.125000 +v 0.650888 3.025888 -0.161612 +v 0.650888 3.025888 -0.338388 +v 0.713388 3.088388 -0.375000 +v 0.838388 3.000000 -0.338388 +v 0.875000 3.000000 -0.250000 +v 0.838388 3.000000 -0.161612 +v 0.750000 3.000000 -0.125000 +v 0.661612 3.000000 -0.161612 +v 0.625000 3.000000 -0.250000 +v 0.661612 3.000000 -0.338388 +v 0.750000 3.000000 -0.375000 +v 0.750000 1.500000 0.125000 +v 0.661612 1.500000 0.161612 +v 0.625000 1.500000 0.250000 +v 0.661612 1.500000 0.338388 +v 0.750000 1.500000 0.375000 +v 0.838388 1.500000 0.338388 +v 0.875000 1.500000 0.250000 +v 0.838388 1.500000 0.161612 +v 0.750000 3.000000 0.125000 +v 0.661612 3.000000 0.161612 +v 0.625000 3.000000 0.250000 +v 0.661612 3.000000 0.338388 +v 0.750000 3.000000 0.375000 +v 0.838388 3.000000 0.338388 +v 0.875000 3.000000 0.250000 +v 0.838388 3.000000 0.161612 +v 0.713388 3.088388 0.125000 +v 0.650888 3.025888 0.161612 +v 0.650888 3.025888 0.338388 +v 0.713388 3.088388 0.375000 +v 0.775888 3.150888 0.338388 +v 0.801777 3.176777 0.250000 +v 0.775888 3.150888 0.161612 +v 0.625000 3.125000 0.125000 +v 0.625000 3.036612 0.161612 +v 0.625000 3.036612 0.338388 +v 0.625000 3.125000 0.375000 +v 0.625000 3.213388 0.338388 +v 0.625000 3.250000 0.250000 +v 0.625000 3.213388 0.161612 +v 0.500000 3.000000 0.250000 +v 0.500000 3.125000 0.125000 +v 0.500000 3.036612 0.161612 +v 0.500000 3.036612 0.338388 +v 0.500000 3.125000 0.375000 +v 0.500000 3.213388 0.338388 +v 0.500000 3.250000 0.250000 +v 0.500000 3.213388 0.161612 +v 0.838388 1.500000 -0.338388 +v 0.875000 1.500000 -0.250000 +v 0.838388 1.500000 -0.161612 +v 0.750000 1.500000 -0.125000 +v 0.661612 1.500000 -0.161612 +v 0.625000 1.500000 -0.250000 +v 0.661612 1.500000 -0.338388 +v 0.750000 1.500000 -0.375000 +v 0.625000 3.036612 -0.338388 +v 0.625000 3.036612 -0.161612 +v 0.625000 3.125000 -0.125000 +v 0.625000 3.213388 -0.161612 +v 0.625000 3.250000 -0.250000 +v 0.625000 3.213388 -0.338388 +v 0.500000 3.000000 -0.250000 +v 0.500000 3.125000 -0.375000 +v 0.500000 3.036612 -0.338388 +v 0.500000 3.036612 -0.161612 +v 0.500000 3.125000 -0.125000 +v 0.500000 3.213388 -0.161612 +v 0.500000 3.250000 -0.250000 +v 0.500000 3.213388 -0.338388 +v -0.625000 3.125000 0.375000 +v -0.775888 3.150888 0.338388 +v -0.801777 3.176777 0.250000 +v -0.775888 3.150888 0.161612 +v -0.713388 3.088388 0.125000 +v -0.650888 3.025888 0.161612 +v -0.650888 3.025888 0.338388 +v -0.713388 3.088388 0.375000 +v -0.838388 3.000000 0.338388 +v -0.875000 3.000000 0.250000 +v -0.838388 3.000000 0.161612 +v -0.750000 3.000000 0.125000 +v -0.661612 3.000000 0.161612 +v -0.625000 3.000000 0.250000 +v -0.661612 3.000000 0.338388 +v -0.750000 3.000000 0.375000 +v -0.750000 1.500000 -0.125000 +v -0.661612 1.500000 -0.161612 +v -0.625000 1.500000 -0.250000 +v -0.661612 1.500000 -0.338388 +v -0.750000 1.500000 -0.375000 +v -0.838388 1.500000 -0.338388 +v -0.875000 1.500000 -0.250000 +v -0.838388 1.500000 -0.161612 +v -0.750000 3.000000 -0.125000 +v -0.661612 3.000000 -0.161612 +v -0.625000 3.000000 -0.250000 +v -0.661612 3.000000 -0.338388 +v -0.750000 3.000000 -0.375000 +v -0.838388 3.000000 -0.338388 +v -0.875000 3.000000 -0.250000 +v -0.838388 3.000000 -0.161612 +v -0.713388 3.088388 -0.125000 +v -0.650888 3.025888 -0.161612 +v -0.650888 3.025888 -0.338388 +v -0.713388 3.088388 -0.375000 +v -0.775888 3.150888 -0.338388 +v -0.801777 3.176777 -0.250000 +v -0.775888 3.150888 -0.161612 +v -0.625000 3.125000 -0.125000 +v -0.625000 3.036612 -0.161612 +v -0.625000 3.036612 -0.338388 +v -0.625000 3.125000 -0.375000 +v -0.625000 3.213388 -0.338388 +v -0.625000 3.250000 -0.250000 +v -0.625000 3.213388 -0.161612 +v -0.500000 3.000000 -0.250000 +v -0.500000 3.125000 -0.125000 +v -0.500000 3.036612 -0.161612 +v -0.500000 3.036612 -0.338388 +v -0.500000 3.125000 -0.375000 +v -0.500000 3.213388 -0.338388 +v -0.500000 3.250000 -0.250000 +v -0.500000 3.213388 -0.161612 +v -0.838388 1.500000 0.338388 +v -0.875000 1.500000 0.250000 +v -0.838388 1.500000 0.161612 +v -0.750000 1.500000 0.125000 +v -0.661612 1.500000 0.161612 +v -0.625000 1.500000 0.250000 +v -0.661612 1.500000 0.338388 +v -0.750000 1.500000 0.375000 +v -0.625000 3.036612 0.338388 +v -0.625000 3.036612 0.161612 +v -0.625000 3.125000 0.125000 +v -0.625000 3.213388 0.161612 +v -0.625000 3.250000 0.250000 +v -0.625000 3.213388 0.338388 +v -0.500000 3.000000 0.250000 +v -0.500000 3.125000 0.375000 +v -0.500000 3.036612 0.338388 +v -0.500000 3.036612 0.161612 +v -0.500000 3.125000 0.125000 +v -0.500000 3.213388 0.161612 +v -0.500000 3.250000 0.250000 +v -0.500000 3.213388 0.338388 +vt 0.363636 0.007812 +vt 0.090909 0.382812 +vt 0.090909 0.007812 +vt 0.090909 0.500000 +vt 0.363636 0.875000 +vt 0.090909 0.875000 +vt 0.454545 0.875000 +vt 0.363636 0.500000 +vt 0.454545 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.875000 +vt 0.363636 0.382812 +vt 0.090909 1.000000 +vt 0.363636 1.000000 +vt 0.409091 0.062500 +vt 0.590909 0.312500 +vt 0.409091 0.312500 +vt 0.363636 0.062500 +vt 0.363636 0.312500 +vt 0.590909 0.000000 +vt 0.409091 0.000000 +vt 0.409091 0.375000 +vt 0.590909 0.375000 +vt 0.636364 0.312500 +vt 0.590909 0.062500 +vt 0.636364 0.062500 +vt 0.727273 0.250000 +vt 0.818182 0.375000 +vt 0.727273 0.375000 +vt 1.000000 -0.000000 +vt 0.909091 0.250000 +vt 0.909091 -0.000000 +vt 0.818182 0.250000 +vt 0.818182 -0.000000 +vt 0.727273 -0.000000 +vt 0.636364 0.250000 +vt 0.636364 -0.000000 +vt 1.000000 0.250000 +vt 0.465909 0.898438 +vt 0.477273 0.914062 +vt 0.465909 0.906250 +vt 0.488636 0.898438 +vt 0.500000 0.921875 +vt 0.488636 0.921875 +vt 0.477273 0.882812 +vt 0.465909 0.890625 +vt 0.488636 0.875000 +vt 0.500000 0.898438 +vt 0.522727 0.882812 +vt 0.511364 0.898438 +vt 0.511364 0.875000 +vt 0.534091 0.890625 +vt 0.522727 0.898438 +vt 0.477273 0.898438 +vt 0.500000 0.875000 +vt 0.522727 0.687500 +vt 0.511364 0.687500 +vt 0.534091 0.687500 +vt 0.522727 0.875000 +vt 0.500000 0.687500 +vt 0.488636 0.875000 +vt 0.488636 0.687500 +vt 0.477273 0.687500 +vt 0.465909 0.875000 +vt 0.465909 0.687500 +vt 0.545455 0.687500 +vt 0.534091 0.875000 +vt 0.534091 0.687500 +vt 0.511364 0.687500 +vt 0.500000 0.875000 +vt 0.477273 0.875000 +vt 0.454545 0.875000 +vt 0.454545 0.687500 +vt 0.522727 0.875000 +vt 0.522727 0.687500 +vt 0.511364 0.875000 +vt 0.500000 0.898438 +vt 0.477273 0.882812 +vt 0.488636 0.898438 +vt 0.477273 0.898438 +vt 0.522727 0.882812 +vt 0.534091 0.898438 +vt 0.522727 0.898438 +vt 0.511364 0.898438 +vt 0.465909 0.890625 +vt 0.465909 0.898438 +vt 0.500000 0.921875 +vt 0.488636 0.921875 +vt 0.477273 0.914062 +vt 0.465909 0.906250 +vt 0.522727 0.914062 +vt 0.511364 0.921875 +vt 0.534091 0.890625 +vt 0.545455 0.898438 +vt 0.534091 0.906250 +vt 0.454545 0.898438 +vt 0.477273 0.921875 +vt 0.465909 0.937500 +vt 0.465909 0.921875 +vt 0.500000 0.937500 +vt 0.477273 0.937500 +vt 0.534091 0.921875 +vt 0.522727 0.937500 +vt 0.522727 0.921875 +vt 0.454545 0.937500 +vt 0.454545 0.921875 +vt 0.511364 0.937500 +vt 0.545455 0.937500 +vt 0.534091 0.937500 +vt 0.488636 0.937500 +vt 0.465909 0.687500 +vt 0.454545 0.875000 +vt 0.454545 0.687500 +vt 0.488636 0.687500 +vt 0.477273 0.875000 +vt 0.477273 0.687500 +vt 0.500000 0.687500 +vt 0.545455 0.687500 +vt 0.534091 0.875000 +vt 0.465909 0.875000 +vt 0.534091 0.898438 +vt 0.522727 0.914062 +vt 0.511364 0.921875 +vt 0.545455 0.898438 +vt 0.534091 0.906250 +vt 0.454545 0.898438 +vt 0.477273 0.921875 +vt 0.465909 0.937500 +vt 0.465909 0.921875 +vt 0.500000 0.937500 +vt 0.477273 0.937500 +vt 0.534091 0.921875 +vt 0.522727 0.937500 +vt 0.522727 0.921875 +vt 0.454545 0.937500 +vt 0.454545 0.921875 +vt 0.511364 0.937500 +vt 0.545455 0.937500 +vt 0.534091 0.937500 +vt 0.488636 0.937500 +vt 0.465909 0.898438 +vt 0.477273 0.914062 +vt 0.465909 0.906250 +vt 0.488636 0.898438 +vt 0.500000 0.921875 +vt 0.488636 0.921875 +vt 0.477273 0.882812 +vt 0.465909 0.890625 +vt 0.500000 0.875000 +vt 0.488636 0.875000 +vt 0.522727 0.882812 +vt 0.511364 0.898438 +vt 0.511364 0.875000 +vt 0.534091 0.890625 +vt 0.522727 0.898438 +vt 0.477273 0.898438 +vt 0.500000 0.898438 +vt 0.522727 0.687500 +vt 0.511364 0.687500 +vt 0.534091 0.687500 +vt 0.522727 0.875000 +vt 0.500000 0.687500 +vt 0.488636 0.875000 +vt 0.488636 0.687500 +vt 0.477273 0.687500 +vt 0.465909 0.875000 +vt 0.465909 0.687500 +vt 0.545455 0.687500 +vt 0.534091 0.875000 +vt 0.534091 0.687500 +vt 0.511364 0.687500 +vt 0.500000 0.875000 +vt 0.477273 0.875000 +vt 0.454545 0.875000 +vt 0.454545 0.687500 +vt 0.522727 0.875000 +vt 0.522727 0.687500 +vt 0.511364 0.875000 +vt 0.500000 0.898438 +vt 0.477273 0.882812 +vt 0.488636 0.898438 +vt 0.477273 0.898438 +vt 0.522727 0.882812 +vt 0.534091 0.898438 +vt 0.522727 0.898438 +vt 0.511364 0.898438 +vt 0.465909 0.890625 +vt 0.465909 0.898438 +vt 0.500000 0.921875 +vt 0.488636 0.921875 +vt 0.465909 0.906250 +vt 0.477273 0.914062 +vt 0.522727 0.914062 +vt 0.511364 0.921875 +vt 0.534091 0.890625 +vt 0.545455 0.898438 +vt 0.534091 0.906250 +vt 0.454545 0.898438 +vt 0.465909 0.921875 +vt 0.477273 0.937500 +vt 0.465909 0.937500 +vt 0.500000 0.937500 +vt 0.477273 0.921875 +vt 0.534091 0.921875 +vt 0.522727 0.937500 +vt 0.522727 0.921875 +vt 0.454545 0.937500 +vt 0.454545 0.921875 +vt 0.511364 0.937500 +vt 0.545455 0.937500 +vt 0.534091 0.937500 +vt 0.488636 0.937500 +vt 0.465909 0.687500 +vt 0.454545 0.875000 +vt 0.454545 0.687500 +vt 0.488636 0.687500 +vt 0.477273 0.875000 +vt 0.477273 0.687500 +vt 0.500000 0.687500 +vt 0.545455 0.687500 +vt 0.534091 0.875000 +vt 0.465909 0.875000 +vt 0.534091 0.906250 +vt 0.522727 0.914062 +vt 0.511364 0.921875 +vt 0.545455 0.898438 +vt 0.534091 0.898438 +vt 0.454545 0.898438 +vt 0.477273 0.921875 +vt 0.465909 0.937500 +vt 0.465909 0.921875 +vt 0.500000 0.937500 +vt 0.477273 0.937500 +vt 0.534091 0.921875 +vt 0.522727 0.937500 +vt 0.522727 0.921875 +vt 0.454545 0.937500 +vt 0.454545 0.921875 +vt 0.511364 0.937500 +vt 0.545455 0.937500 +vt 0.534091 0.937500 +vt 0.488636 0.937500 +vt 0.545455 0.875000 +vt 0.545455 0.921875 +vt 0.545455 0.875000 +vt 0.545455 0.921875 +vt 0.545455 0.875000 +vt 0.545455 0.921875 +vt 0.545455 0.875000 +vt 0.545455 0.921875 +vn 0.0000 -1.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 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.4617 -0.4617 0.7573 +vn 0.0196 0.0473 0.9987 +vn -0.1363 -0.6737 0.7263 +vn 0.5293 0.5293 0.6630 +vn 0.1866 0.9824 0.0000 +vn 0.1447 0.7194 0.6794 +vn 0.0473 0.0196 0.9987 +vn -0.6737 -0.1363 0.7263 +vn 0.7194 0.1447 0.6794 +vn 0.7071 0.7071 0.0000 +vn 0.0473 0.0196 -0.9987 +vn 0.5293 0.5293 -0.6630 +vn 0.7194 0.1447 -0.6794 +vn -0.6737 -0.1363 -0.7263 +vn 0.0670 0.0670 -0.9955 +vn 0.0670 0.0670 0.9955 +vn 0.9824 0.1866 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 -0.7071 0.0000 +vn -0.4617 -0.4617 -0.7573 +vn 0.0196 0.0473 -0.9987 +vn 0.1447 0.7194 -0.6794 +vn -0.1363 -0.6737 -0.7263 +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.4617 -0.4617 -0.7573 +vn -0.0196 0.0473 -0.9987 +vn 0.1363 -0.6737 -0.7263 +vn -0.5293 0.5293 -0.6630 +vn -0.1866 0.9824 0.0000 +vn -0.1447 0.7194 -0.6794 +vn -0.0473 0.0196 -0.9987 +vn 0.6737 -0.1363 -0.7263 +vn -0.9824 0.1866 0.0000 +vn -0.7194 0.1447 -0.6794 +vn -0.0473 0.0196 0.9987 +vn -0.5293 0.5293 0.6630 +vn -0.7194 0.1447 0.6794 +vn 0.6737 -0.1363 0.7263 +vn -0.0670 0.0670 0.9955 +vn -0.0670 0.0670 -0.9955 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.4617 -0.4617 0.7573 +vn -0.0196 0.0473 0.9987 +vn -0.1447 0.7194 0.6794 +vn 0.1363 -0.6737 0.7263 +s off +f 75/135/23 74/136/23 73/137/23 +f 78/138/24 79/139/24 77/140/24 +f 75/141/25 80/142/25 76/143/25 +f 74/144/26 77/140/26 73/145/26 +f 76/146/27 78/138/27 74/136/27 +f 73/147/28 79/139/28 75/148/28 +f 87/149/24 85/150/24 86/151/24 +f 82/152/26 86/151/26 81/153/26 +f 84/154/27 87/149/27 82/155/27 +f 81/156/28 85/150/28 83/157/28 +f 83/158/25 88/159/25 84/160/25 +f 95/161/24 93/162/24 94/163/24 +f 89/164/28 93/165/28 91/166/28 +f 91/166/25 96/167/25 92/168/25 +f 90/169/26 94/170/26 89/171/26 +f 92/168/27 95/161/27 90/169/27 +f 75/135/23 76/146/23 74/136/23 +f 78/138/24 80/142/24 79/139/24 +f 75/141/25 79/139/25 80/142/25 +f 74/144/26 78/138/26 77/140/26 +f 76/146/27 80/142/27 78/138/27 +f 73/147/28 77/140/28 79/139/28 +f 87/149/24 88/159/24 85/150/24 +f 82/152/26 87/149/26 86/151/26 +f 84/154/27 88/159/27 87/149/27 +f 81/156/28 86/151/28 85/150/28 +f 83/158/25 85/150/25 88/159/25 +f 95/161/24 96/167/24 93/162/24 +f 89/164/28 94/172/28 93/165/28 +f 91/166/25 93/165/25 96/167/25 +f 90/169/26 95/161/26 94/170/26 +f 92/168/27 96/167/27 95/161/27 +s 1 +f 102/173/29 161/174/30 160/175/31 +f 100/176/32 163/177/33 162/178/34 +f 108/179/35 102/173/29 109/180/36 +f 107/181/37 99/182/38 100/176/32 +f 112/183/39 98/184/40 105/185/41 +f 111/186/42 104/187/43 112/183/39 +f 107/181/37 101/188/44 108/179/35 +f 106/189/45 98/184/40 99/182/38 +f 158/190/25 105/185/41 151/191/46 +f 157/192/47 112/193/39 158/190/25 +f 119/194/27 126/195/37 118/196/48 +f 117/197/26 124/198/36 116/199/49 +f 115/200/28 122/201/42 114/202/47 +f 120/203/46 127/204/45 119/194/27 +f 118/196/48 125/205/35 117/197/26 +f 116/199/49 123/206/50 115/207/28 +f 114/202/47 121/208/39 113/209/25 +f 113/209/25 128/210/41 120/203/46 +f 128/210/41 134/211/38 127/204/45 +f 125/212/35 133/213/32 132/214/44 +f 121/215/39 130/216/51 129/217/43 +f 128/210/41 129/217/43 135/218/40 +f 126/195/37 134/211/38 133/213/32 +f 124/219/36 132/214/44 131/220/29 +f 133/213/32 141/221/33 140/222/34 +f 131/220/29 139/223/30 138/224/31 +f 135/218/40 141/221/33 134/211/38 +f 132/214/44 140/222/34 139/223/30 +f 130/216/51 136/225/52 129/217/43 +f 129/217/43 142/226/53 135/218/40 +f 122/227/42 123/228/50 130/216/51 +f 130/216/51 123/228/50 137/229/54 +f 124/219/36 131/220/29 123/230/50 +f 131/220/29 138/224/31 123/230/50 +f 139/231/30 146/232/55 138/233/31 +f 142/226/53 149/234/24 141/221/33 +f 140/222/34 147/235/26 139/231/30 +f 137/236/54 144/237/25 136/238/52 +f 138/233/31 143/239/23 123/240/50 +f 136/238/52 150/241/56 142/226/53 +f 137/236/54 143/242/23 145/243/57 +f 140/222/34 149/234/24 148/244/58 +f 155/245/49 110/246/50 156/247/28 +f 153/248/48 108/249/35 154/250/26 +f 151/191/46 106/189/45 152/251/27 +f 156/252/28 111/253/42 157/192/47 +f 154/250/26 109/254/36 155/245/49 +f 152/251/27 107/181/37 153/248/48 +f 98/184/40 163/177/33 99/182/38 +f 101/188/44 162/178/34 161/174/30 +f 103/255/51 97/256/52 104/187/43 +f 104/187/43 164/257/53 98/184/40 +f 111/186/42 110/258/50 103/255/51 +f 103/255/51 110/258/50 159/259/54 +f 109/180/36 102/173/29 110/260/50 +f 102/173/29 160/175/31 110/260/50 +f 161/261/30 168/262/55 160/263/31 +f 164/257/53 171/264/24 163/177/33 +f 162/178/34 169/265/26 161/261/30 +f 159/266/54 166/267/25 97/268/52 +f 160/263/31 165/269/23 110/270/50 +f 97/268/52 172/271/56 164/257/53 +f 159/266/54 165/272/23 167/273/57 +f 162/178/34 171/264/24 170/274/58 +f 178/275/59 237/276/60 236/277/61 +f 176/278/62 239/279/63 238/280/64 +f 184/281/65 178/275/59 185/282/66 +f 182/283/67 176/278/62 183/284/68 +f 188/285/69 174/286/70 181/287/71 +f 187/288/72 180/289/73 188/285/69 +f 183/284/68 177/290/74 184/281/65 +f 182/283/67 174/286/70 175/291/75 +f 234/292/26 181/287/71 227/293/49 +f 233/294/48 188/295/69 234/292/26 +f 195/296/28 202/297/68 194/298/47 +f 193/299/25 200/300/66 192/301/46 +f 191/302/27 198/303/72 190/304/48 +f 196/305/49 203/306/67 195/296/28 +f 194/298/47 201/307/65 193/299/25 +f 192/301/46 199/308/76 191/309/27 +f 190/304/48 197/310/69 189/311/26 +f 189/311/26 204/312/71 196/305/49 +f 204/312/71 210/313/75 203/306/67 +f 201/314/65 209/315/62 208/316/74 +f 197/317/69 206/318/77 205/319/73 +f 204/312/71 205/319/73 211/320/70 +f 202/297/68 210/313/75 209/315/62 +f 200/321/66 208/316/74 207/322/59 +f 209/315/62 217/323/63 216/324/64 +f 208/316/74 214/325/61 207/322/59 +f 211/320/70 217/323/63 210/313/75 +f 208/316/74 216/324/64 215/326/60 +f 206/318/77 212/327/78 205/319/73 +f 205/319/73 218/328/79 211/320/70 +f 198/329/72 199/330/76 206/318/77 +f 206/318/77 199/330/76 213/331/80 +f 200/321/66 207/322/59 199/332/76 +f 207/322/59 214/325/61 199/332/76 +f 214/333/61 223/334/25 222/335/57 +f 218/328/79 225/336/24 217/323/63 +f 216/324/64 223/334/25 215/337/60 +f 213/338/80 220/339/26 212/340/78 +f 214/333/61 219/341/23 199/342/76 +f 212/340/78 226/343/58 218/328/79 +f 213/338/80 219/344/23 221/345/55 +f 216/324/64 225/336/24 224/346/56 +f 231/347/46 186/348/76 232/349/27 +f 229/350/47 184/351/65 230/352/25 +f 227/293/49 182/283/67 228/353/28 +f 232/354/27 187/355/72 233/294/48 +f 230/352/25 185/356/66 231/347/46 +f 228/353/28 183/284/68 229/350/47 +f 174/286/70 239/279/63 175/291/75 +f 177/290/74 238/280/64 237/276/60 +f 180/289/73 235/357/80 173/358/78 +f 180/289/73 240/359/79 174/286/70 +f 187/288/72 186/360/76 179/361/77 +f 179/361/77 186/360/76 235/357/80 +f 185/282/66 178/275/59 186/362/76 +f 178/275/59 236/277/61 186/362/76 +f 237/363/60 244/364/57 236/365/61 +f 240/359/79 247/366/24 239/279/63 +f 238/280/64 245/367/25 237/363/60 +f 235/368/80 242/369/26 173/370/78 +f 236/365/61 241/371/23 186/372/76 +f 173/370/78 248/373/58 240/359/79 +f 235/368/80 241/374/23 243/375/55 +f 238/280/64 247/366/24 246/376/56 +f 102/173/29 101/188/44 161/174/30 +f 100/176/32 99/182/38 163/177/33 +f 108/179/35 101/188/44 102/173/29 +f 107/181/37 106/189/45 99/182/38 +f 112/183/39 104/187/43 98/184/40 +f 111/186/42 103/255/51 104/187/43 +f 107/181/37 100/176/32 101/188/44 +f 106/189/45 105/185/41 98/184/40 +f 158/190/25 112/193/39 105/185/41 +f 157/192/47 111/253/42 112/193/39 +f 119/194/27 127/204/45 126/195/37 +f 117/197/26 125/205/35 124/198/36 +f 115/200/28 123/377/50 122/201/42 +f 120/203/46 128/210/41 127/204/45 +f 118/196/48 126/195/37 125/205/35 +f 116/199/49 124/198/36 123/206/50 +f 114/202/47 122/201/42 121/208/39 +f 113/209/25 121/208/39 128/210/41 +f 128/210/41 135/218/40 134/211/38 +f 125/212/35 126/195/37 133/213/32 +f 121/215/39 122/227/42 130/216/51 +f 128/210/41 121/215/39 129/217/43 +f 126/195/37 127/204/45 134/211/38 +f 124/219/36 125/212/35 132/214/44 +f 133/213/32 134/211/38 141/221/33 +f 131/220/29 132/214/44 139/223/30 +f 135/218/40 142/226/53 141/221/33 +f 132/214/44 133/213/32 140/222/34 +f 130/216/51 137/229/54 136/225/52 +f 129/217/43 136/225/52 142/226/53 +f 139/231/30 147/235/26 146/232/55 +f 142/226/53 150/241/56 149/234/24 +f 140/222/34 148/244/58 147/235/26 +f 137/236/54 145/243/57 144/237/25 +f 138/233/31 146/232/55 143/239/23 +f 136/238/52 144/237/25 150/241/56 +f 137/236/54 123/378/50 143/242/23 +f 140/222/34 141/221/33 149/234/24 +f 155/245/49 109/254/36 110/246/50 +f 153/248/48 107/181/37 108/249/35 +f 151/191/46 105/185/41 106/189/45 +f 156/252/28 110/379/50 111/253/42 +f 154/250/26 108/249/35 109/254/36 +f 152/251/27 106/189/45 107/181/37 +f 98/184/40 164/257/53 163/177/33 +f 101/188/44 100/176/32 162/178/34 +f 103/255/51 159/259/54 97/256/52 +f 104/187/43 97/256/52 164/257/53 +f 161/261/30 169/265/26 168/262/55 +f 164/257/53 172/271/56 171/264/24 +f 162/178/34 170/274/58 169/265/26 +f 159/266/54 167/273/57 166/267/25 +f 160/263/31 168/262/55 165/269/23 +f 97/268/52 166/267/25 172/271/56 +f 159/266/54 110/380/50 165/272/23 +f 162/178/34 163/177/33 171/264/24 +f 178/275/59 177/290/74 237/276/60 +f 176/278/62 175/291/75 239/279/63 +f 184/281/65 177/290/74 178/275/59 +f 182/283/67 175/291/75 176/278/62 +f 188/285/69 180/289/73 174/286/70 +f 187/288/72 179/361/77 180/289/73 +f 183/284/68 176/278/62 177/290/74 +f 182/283/67 181/287/71 174/286/70 +f 234/292/26 188/295/69 181/287/71 +f 233/294/48 187/355/72 188/295/69 +f 195/296/28 203/306/67 202/297/68 +f 193/299/25 201/307/65 200/300/66 +f 191/302/27 199/381/76 198/303/72 +f 196/305/49 204/312/71 203/306/67 +f 194/298/47 202/297/68 201/307/65 +f 192/301/46 200/300/66 199/308/76 +f 190/304/48 198/303/72 197/310/69 +f 189/311/26 197/310/69 204/312/71 +f 204/312/71 211/320/70 210/313/75 +f 201/314/65 202/297/68 209/315/62 +f 197/317/69 198/329/72 206/318/77 +f 204/312/71 197/317/69 205/319/73 +f 202/297/68 203/306/67 210/313/75 +f 200/321/66 201/314/65 208/316/74 +f 209/315/62 210/313/75 217/323/63 +f 208/316/74 215/326/60 214/325/61 +f 211/320/70 218/328/79 217/323/63 +f 208/316/74 209/315/62 216/324/64 +f 206/318/77 213/331/80 212/327/78 +f 205/319/73 212/327/78 218/328/79 +f 214/333/61 215/337/60 223/334/25 +f 218/328/79 226/343/58 225/336/24 +f 216/324/64 224/346/56 223/334/25 +f 213/338/80 221/345/55 220/339/26 +f 214/333/61 222/335/57 219/341/23 +f 212/340/78 220/339/26 226/343/58 +f 213/338/80 199/382/76 219/344/23 +f 216/324/64 217/323/63 225/336/24 +f 231/347/46 185/356/66 186/348/76 +f 229/350/47 183/284/68 184/351/65 +f 227/293/49 181/287/71 182/283/67 +f 232/354/27 186/383/76 187/355/72 +f 230/352/25 184/351/65 185/356/66 +f 228/353/28 182/283/67 183/284/68 +f 174/286/70 240/359/79 239/279/63 +f 177/290/74 176/278/62 238/280/64 +f 180/289/73 179/361/77 235/357/80 +f 180/289/73 173/358/78 240/359/79 +f 237/363/60 245/367/25 244/364/57 +f 240/359/79 248/373/58 247/366/24 +f 238/280/64 246/376/56 245/367/25 +f 235/368/80 243/375/55 242/369/26 +f 236/365/61 244/364/57 241/371/23 +f 173/370/78 242/369/26 248/373/58 +f 235/368/80 186/384/76 241/374/23 +f 238/280/64 239/279/63 247/366/24 diff --git a/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_bottom.png b/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..91b4ab9501665e0a9c1f760e9f5a81304c03829c GIT binary patch literal 554 zcmV+_0@eMAP)X2M5QRT*fr;CZy^FHQYLuhQDRY)NNR&gwNxN+@U}n){ z6l>TZDAnWrQ0n)eKjr)T8*43H*D*~K&N=pdM{A9>7Oge&JOj}8JpkLb@&5jfEX%^j z#|JrQ07Qh85-~;|A0LS^;=RW?M~o3;3`!}6Vc>SVAtFM~nQ|``5Mu-&=UnenN{r*k z^?E&liwLC@w6(UPDy3-Kwl?RS5fSEj=61VLN+IV=(=<5e5E1mUEHq66z%UGW?rnRQ*!B2o+9d-}ddL{55-I)HNy=N#5rj4|kK+iEd{z%)%&>#_gzV_nx8 zwNeV*_x*{oQi_~&{TBy_bM8d{h*W#;tNSAIAN?bdbzK4Kzu30zo+VVXdV4FMpP$4S svDQ*bsZ)1Mp)rQ*^@=g3zJ8?h7gQQ9TN||oUjP6A07*qoM6N<$f|?Wmk^lez literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_inner_side.png b/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_inner_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c81f1996e8618265823159e0918e8c5ec18481f4 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyU#$oBdHG#ZVC@$JGrFT;CM4tyhUVx|ySCs^Zkd*#bA#L~=h?ewJ9aT;|#T zXY-Gz?7p3?<2=1fvO&D{*ds5kEo&GVTxUs^>{~qb5a%C$h6B<1|GQH=r*-|A#AL$A zaP;dn{V=Xrtvdz(&TVC2xVP-B%XQ=D&zDSm&%zLL-1%~($m4ZlYj?#lI83t@*KSeh z*_FM_xxvuzg#$+-`w4$em%{aL9UZPOa$~OZPht5{$CrHIweDI5zX#FXjB<}xx!S+V S{ZR(=5re0zpUXO@geCw)$7urq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_side.png b/src/main/resources/assets/hbm/textures/blocks/capacitor_schrabidate_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c70303bb14c15c860743b968897d0ae1a157069d GIT binary patch literal 328 zcmV-O0k{5%P)62$tiP|9K^~6yonMAf{+ckD^R*= zlq$>4YW^Q-{+khP+a~^4-h0&AyjxXO0U)1E=bUiPiFNo&1BkY5llPuy^PLkm0&A^U zO>3=qr9VcXo`rKx0IW-Y(;p-F|A9vwPN#Ig-!aBe6a}~2jXcj;mIWy##u%iO^nDLN zS(X5V5U|#whGF1*J~PiV07@yQX(GnRZnq=G$T*JVc}|QGtu;ajs;c7gc%aI%q^@h4 zrumVwEDIrojbt20>bhna20{qz_j@jv3*zf|OxNp`7$e3QQc7FWnyj^^>pHa78zDfJ aWqboyB=nTkXnkG)0000z({>D!Sf19IMTh*38;v zt#bC`*Z73e*5f*R{%}>_NqYE+<#E~^;Tncs{U)8zA2${PUBlq%>gTe~DWM4fCqqoP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/pump.png b/src/main/resources/assets/hbm/textures/models/machines/pump.png new file mode 100644 index 0000000000000000000000000000000000000000..57b8c9d99c5a767c42966326f8d0cc7029a5a668 GIT binary patch literal 937 zcmeAS@N?(olHy`uVBq!ia0vp^8-TchgAGWoKKuAHkYXuz@(kesf*OvL4h9D11Wy;o zkcv5P@A~@*2QnQ0Xx`R*!0k@@2l@m+&%kmUAr-}@L8Ui*RL*0l^QbJntrzXRbkC* zdgg%h&UxqMrwPCIS@zjT@NK}E16$`wKQ{Wdy6nKgIdY8GZ+&%*{%;tnqnH(Ide;8h z!P#ebEjwdXy=N*=XXG)9%w^Z%{^dVzCB29w&XhE6pYvo?Y4XsDpZ%cGw0htFt?!?fl=j}N-*fT3WBcQpgd43$ z4h1vketn;QH}vh_Bgw1({))V6FJE#0_aQ7kjruCLqV|E6_5J;~_wQR<{qOdv*V*&` z7YBd;pU;L8B4ATP=W}1=Gw4XZX8-=%g>4q`+p}u6-(O}reR}!bUk~TbpTEBL|Lkwq zZ+*<)b&m%T(%`@V2DmBg^(5F8flio@ey#$FVdlUi{1Y YwPeA@?T22)0rMV%r>mdKI;Vst0NcpNCIA2c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/pump_electric.png b/src/main/resources/assets/hbm/textures/models/machines/pump_electric.png new file mode 100644 index 0000000000000000000000000000000000000000..a54bf774f55e4649122361e85fcc9aae682aaf13 GIT binary patch literal 5288 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 literal 0 HcmV?d00001