From 3d765347dc6615ee3fb77c37c052a55108b092dd Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 9 Oct 2022 21:00:50 +0200 Subject: [PATCH] redid all the turbines with the new fluid traits, electric heater --- src/main/java/com/hbm/blocks/ModBlocks.java | 9 +- .../com/hbm/blocks/generic/BlockBobble.java | 4 +- .../hbm/blocks/machine/HeaterElectric.java | 55 + .../hbm/blocks/machine/MachineChungus.java | 11 +- .../hbm/blocks/machine/MachineHeatBoiler.java | 14 +- .../blocks/machine/MachineLargeTurbine.java | 11 +- .../hbm/blocks/machine/MachineTurbine.java | 8 +- .../hbm/blocks/network/BlockConveyorLift.java | 9 +- .../com/hbm/blocks/turret/TurretArty.java | 3 +- .../com/hbm/blocks/turret/TurretBrandon.java | 2 +- .../com/hbm/blocks/turret/TurretChekhov.java | 5 +- .../com/hbm/blocks/turret/TurretFriendly.java | 2 +- .../com/hbm/blocks/turret/TurretFritz.java | 2 +- .../com/hbm/blocks/turret/TurretHIMARS.java | 3 +- .../com/hbm/blocks/turret/TurretHoward.java | 2 +- .../com/hbm/blocks/turret/TurretJeremy.java | 2 +- .../com/hbm/blocks/turret/TurretMaxwell.java | 2 +- .../com/hbm/blocks/turret/TurretRichard.java | 2 +- .../java/com/hbm/inventory/fluid/Fluids.java | 10 +- .../inventory/fluid/trait/FT_Coolable.java | 6 +- .../hbm/inventory/recipes/MachineRecipes.java | 11 - .../inventory/recipes/anvil/AnvilRecipes.java | 7 + .../recipes/anvil/AnvilSmithingHotRecipe.java | 1 - .../recipes/anvil/AnvilSmithingRecipe.java | 1 - .../anvil/AnvilSmithingRenameRecipe.java | 1 - src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../hbm/render/block/RenderConveyorLift.java | 3 +- .../hbm/render/tileentity/RenderBoiler.java | 1 + .../tileentity/RenderElectricHeater.java | 55 + .../java/com/hbm/tileentity/TileMappings.java | 1 + .../tileentity/machine/TileEntityChungus.java | 45 +- .../machine/TileEntityHeatBoiler.java | 18 + .../machine/TileEntityHeaterElectric.java | 34 + .../machine/TileEntityMachineBoiler.java | 3 +- .../TileEntityMachineLargeTurbine.java | 45 +- .../machine/TileEntityMachineTurbine.java | 40 +- src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../hbm/models/machines/electric_heater.obj | 1140 +++++++++++++++++ .../models/machines/electric_heater.png | Bin 0 -> 2249 bytes 41 files changed, 1463 insertions(+), 116 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/HeaterElectric.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderElectricHeater.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java create mode 100644 src/main/resources/assets/hbm/models/machines/electric_heater.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/electric_heater.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 96a928f25..af554d68b 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -645,6 +645,7 @@ public class ModBlocks { public static Block heater_firebox; public static Block heater_oilburner; + public static Block heater_electric; public static Block furnace_iron; public static Block furnace_steel; @@ -1840,6 +1841,7 @@ public class ModBlocks { heater_firebox = new HeaterFirebox().setBlockName("heater_firebox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); heater_oilburner = new HeaterOilburner().setBlockName("heater_oilburner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + heater_electric = new HeaterElectric().setBlockName("heater_electric").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); furnace_iron = new FurnaceIron().setBlockName("furnace_iron").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); furnace_steel = new FurnaceSteel().setBlockName("furnace_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3036,6 +3038,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName()); register(heater_firebox); register(heater_oilburner); + register(heater_electric); register(furnace_iron); register(furnace_steel); register(machine_stirling); @@ -3218,9 +3221,9 @@ public class ModBlocks { GameRegistry.registerBlock(machine_boiler_on, machine_boiler_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_boiler_electric_on, machine_boiler_electric_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_boiler_electric_off, machine_boiler_electric_off.getUnlocalizedName()); - GameRegistry.registerBlock(machine_turbine, machine_turbine.getUnlocalizedName()); - GameRegistry.registerBlock(machine_large_turbine, machine_large_turbine.getUnlocalizedName()); - GameRegistry.registerBlock(machine_chungus, machine_chungus.getUnlocalizedName()); + register(machine_turbine); + register(machine_large_turbine); + register(machine_chungus); GameRegistry.registerBlock(machine_condenser, machine_condenser.getUnlocalizedName()); GameRegistry.registerBlock(machine_tower_small, machine_tower_small.getUnlocalizedName()); GameRegistry.registerBlock(machine_tower_large, machine_tower_large.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index c154fc950..72f9a7bf2 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -181,14 +181,14 @@ public class BlockBobble extends BlockContainer { PU238( "Pu-238", "Pu-238", "Improved Tom impact mechanics", null, false, ScrapType.CPU_REGISTER), VT( "VT-6/24", "VT-6/24", "Balefire warhead model and general texturework", "You cannot unfuck a horse.", true, ScrapType.CPU_EXT), DOC( "The Doctor", "Doctor17PH", "Russian localization, lunar miner", "Perhaps the moon rocks were too expensive", true, ScrapType.CPU_CACHE), - BLUEHAT( "The Blue Hat", "The Blue Hat", "Textures", "there's a listening device in this bobblehead$don't touch it thanks", true, ScrapType.MEM_16K_A), + BLUEHAT( "The Blue Hat", "The Blue Hat", "Textures", "payday 2's deagle freeaim champ of the year 2022", true, ScrapType.MEM_16K_A), PHEO( "Pheo", "Pheonix", "Deuterium machines, tantalium textures, Reliant Rocket", "RUN TO THE BEDROOM, ON THE SUITCASE ON THE LEFT,$YOU'LL FIND MY FAVORITE AXE", true, ScrapType.MEM_16K_B), ADAM29( "Adam29", "Adam29", "Ethanol, liquid petroleum gas", "You know, nukes are really quite beatiful.$It's like watching a star be born for a split second.", true, ScrapType.MEM_16K_C), UFFR( "UFFR", "UFFR", "All sorts of things from his PR", "fried shrimp", false, ScrapType.MEM_SOCKET), VAER( "vaer", "vaer", "ZIRNOX", "taken de family out to the weekend cigarette festival", true, ScrapType.MEM_16K_D), NOS( "Dr Nostalgia", "Dr Nostalgia", "SSG and Vortex models", "Take a picture, I'ma pose, paparazzi$I've been drinking, moving like a zombie", true, ScrapType.BOARD_TRANSISTOR), DRILLGON( "Drillgon200", "Drillgon200", "1.12 Port", null, false, ScrapType.CPU_LOGIC), - CIRNO( "Cirno", "Cirno", "being a dumb ice fairy", "No brain. Head empty.", true, ScrapType.BOARD_BLANK); + CIRNO( "Cirno", "Cirno", "the only multi layered skin i had", "No brain. Head empty.", true, ScrapType.BOARD_BLANK); public String name; //the title of the tooltip public String label; //the name engraved in the socket diff --git a/src/main/java/com/hbm/blocks/machine/HeaterElectric.java b/src/main/java/com/hbm/blocks/machine/HeaterElectric.java new file mode 100644 index 000000000..40afaef4f --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/HeaterElectric.java @@ -0,0 +1,55 @@ +package com.hbm.blocks.machine; + +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityHeaterElectric; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class HeaterElectric extends BlockDummyable implements ITooltipProvider { + + public HeaterElectric() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + + if(meta >= 12) + return new TileEntityHeaterElectric(); + + if(hasExtra(meta)) + return new TileEntityProxyCombo().power(); + + return null; + } + + @Override + public int[] getDimensions() { + return new int[] {0, 0, 1, 2, 1, 1}; + } + + @Override + public int getOffset() { + return 2; + } + + @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, y, z); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index 7277ca8a2..957169a40 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -1,6 +1,9 @@ package com.hbm.blocks.machine; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -9,11 +12,12 @@ import com.hbm.tileentity.machine.TileEntityChungus; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineChungus extends BlockDummyable { +public class MachineChungus extends BlockDummyable implements ITooltipProvider { public MachineChungus(Material mat) { super(mat); @@ -126,4 +130,9 @@ public class MachineChungus extends BlockDummyable { return true; } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java b/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java index 91963722a..c4d6bdc67 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java +++ b/src/main/java/com/hbm/blocks/machine/MachineHeatBoiler.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ILookOverlay; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.trait.FT_Heatable; @@ -28,7 +29,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class MachineHeatBoiler extends BlockDummyable implements ILookOverlay { +public class MachineHeatBoiler extends BlockDummyable implements ILookOverlay, IBlockMulti { public MachineHeatBoiler() { super(Material.iron); @@ -168,10 +169,15 @@ public class MachineHeatBoiler extends BlockDummyable implements ILookOverlay { if(boiler.hasExploded) return; List text = new ArrayList(); - text.add(boiler.heat + "TU"); - text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + I18nUtil.resolveKey(boiler.tanks[0].getTankType().getUnlocalizedName()) + ": " + boiler.tanks[0].getFill() + " / " + boiler.tanks[0].getMaxFill() + "mB"); - text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + I18nUtil.resolveKey(boiler.tanks[1].getTankType().getUnlocalizedName()) + ": " + boiler.tanks[1].getFill() + " / " + boiler.tanks[1].getMaxFill() + "mB"); + text.add(String.format("%,d", boiler.heat) + "TU"); + text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + I18nUtil.resolveKey(boiler.tanks[0].getTankType().getUnlocalizedName()) + ": " + String.format("%,d", boiler.tanks[0].getFill()) + " / " + String.format("%,d", boiler.tanks[0].getMaxFill()) + "mB"); + text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + I18nUtil.resolveKey(boiler.tanks[1].getTankType().getUnlocalizedName()) + ": " + String.format("%,d", boiler.tanks[1].getFill()) + " / " + String.format("%,d", boiler.tanks[1].getMaxFill()) + "mB"); ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } + + @Override + public int getSubCount() { + return 0; + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java index 1e38531fb..dfa8d83d6 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineLargeTurbine.java @@ -1,6 +1,9 @@ package com.hbm.blocks.machine; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityProxyCombo; @@ -12,12 +15,11 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class MachineLargeTurbine extends BlockDummyable { +public class MachineLargeTurbine extends BlockDummyable implements ITooltipProvider { public MachineLargeTurbine(Material mat) { super(mat); @@ -98,4 +100,9 @@ public class MachineLargeTurbine extends BlockDummyable { this.makeExtra(world, xc + dir2.offsetX, y, zc + dir2.offsetZ); this.makeExtra(world, xc - dir2.offsetX, y, zc - dir2.offsetZ); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineTurbine.java b/src/main/java/com/hbm/blocks/machine/MachineTurbine.java index 6a1c25eae..a28b911f9 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineTurbine.java +++ b/src/main/java/com/hbm/blocks/machine/MachineTurbine.java @@ -1,7 +1,9 @@ package com.hbm.blocks.machine; +import java.util.List; import java.util.Random; +import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -23,7 +25,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; -public class MachineTurbine extends BlockContainer { +public class MachineTurbine extends BlockContainer implements ITooltipProvider { private final Random field_149933_a = new Random(); @SideOnly(Side.CLIENT) @@ -123,4 +125,8 @@ public class MachineTurbine extends BlockContainer { super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); } + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java index 574e28634..a2dfa5de1 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java @@ -1,6 +1,7 @@ package com.hbm.blocks.network; import api.hbm.conveyor.IConveyorBelt; +import api.hbm.conveyor.IEnterableBlock; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -16,7 +17,7 @@ public class BlockConveyorLift extends BlockConveyorBase { public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); - boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom; + boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); if(!top) { return ForgeDirection.DOWN; @@ -29,7 +30,7 @@ public class BlockConveyorLift extends BlockConveyorBase { public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); - boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom; + boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); if(!top) { return Vec3.createVectorHelper(x + 0.5, itemPos.yCoord, z + 0.5); @@ -42,7 +43,7 @@ public class BlockConveyorLift extends BlockConveyorBase { public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); - boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom; + boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); if(top) this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); @@ -54,7 +55,7 @@ public class BlockConveyorLift extends BlockConveyorBase { public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); - boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom; + boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); if(top) return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 0.5, z + 1); diff --git a/src/main/java/com/hbm/blocks/turret/TurretArty.java b/src/main/java/com/hbm/blocks/turret/TurretArty.java index b23775fa1..cf4fef31e 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretArty.java +++ b/src/main/java/com/hbm/blocks/turret/TurretArty.java @@ -20,8 +20,7 @@ public class TurretArty extends BlockDummyable { if(meta >= 12) return new TileEntityTurretArty(); - - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretBrandon.java b/src/main/java/com/hbm/blocks/turret/TurretBrandon.java index ace62a7bb..173bd2a83 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretBrandon.java +++ b/src/main/java/com/hbm/blocks/turret/TurretBrandon.java @@ -22,7 +22,7 @@ public class TurretBrandon extends TurretBaseNT { if(meta >= 12) return new TileEntityTurretBrandon(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretChekhov.java b/src/main/java/com/hbm/blocks/turret/TurretChekhov.java index 3ccb43269..5bc73f004 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretChekhov.java +++ b/src/main/java/com/hbm/blocks/turret/TurretChekhov.java @@ -26,10 +26,7 @@ public class TurretChekhov extends BlockDummyable { if(meta >= 12) return new TileEntityTurretChekhov(); - if(meta >= 6) - return new TileEntityProxyCombo(true, true, false); - - return null; + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretFriendly.java b/src/main/java/com/hbm/blocks/turret/TurretFriendly.java index 6a50de4fe..2918d4826 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretFriendly.java +++ b/src/main/java/com/hbm/blocks/turret/TurretFriendly.java @@ -25,7 +25,7 @@ public class TurretFriendly extends BlockDummyable { if(meta >= 12) return new TileEntityTurretFriendly(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretFritz.java b/src/main/java/com/hbm/blocks/turret/TurretFritz.java index 1a35c02eb..e3686656a 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretFritz.java +++ b/src/main/java/com/hbm/blocks/turret/TurretFritz.java @@ -22,7 +22,7 @@ public class TurretFritz extends TurretBaseNT { if(meta >= 12) return new TileEntityTurretFritz(); - return new TileEntityProxyCombo(true, true, true); + return new TileEntityProxyCombo().inventory().power().fluid(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretHIMARS.java b/src/main/java/com/hbm/blocks/turret/TurretHIMARS.java index f75837099..18ea44e7a 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretHIMARS.java +++ b/src/main/java/com/hbm/blocks/turret/TurretHIMARS.java @@ -20,8 +20,7 @@ public class TurretHIMARS extends BlockDummyable { if(meta >= 12) return new TileEntityTurretHIMARS(); - - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretHoward.java b/src/main/java/com/hbm/blocks/turret/TurretHoward.java index 685fcd339..fd26fb693 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretHoward.java +++ b/src/main/java/com/hbm/blocks/turret/TurretHoward.java @@ -25,7 +25,7 @@ public class TurretHoward extends BlockDummyable { if(meta >= 12) return new TileEntityTurretHoward(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretJeremy.java b/src/main/java/com/hbm/blocks/turret/TurretJeremy.java index 94a5f5a69..167164d16 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretJeremy.java +++ b/src/main/java/com/hbm/blocks/turret/TurretJeremy.java @@ -25,7 +25,7 @@ public class TurretJeremy extends BlockDummyable { if(meta >= 12) return new TileEntityTurretJeremy(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretMaxwell.java b/src/main/java/com/hbm/blocks/turret/TurretMaxwell.java index 33937ce33..26b36167d 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretMaxwell.java +++ b/src/main/java/com/hbm/blocks/turret/TurretMaxwell.java @@ -22,7 +22,7 @@ public class TurretMaxwell extends TurretBaseNT { if(meta >= 12) return new TileEntityTurretMaxwell(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/blocks/turret/TurretRichard.java b/src/main/java/com/hbm/blocks/turret/TurretRichard.java index b3cbd0715..5526d06b2 100644 --- a/src/main/java/com/hbm/blocks/turret/TurretRichard.java +++ b/src/main/java/com/hbm/blocks/turret/TurretRichard.java @@ -25,7 +25,7 @@ public class TurretRichard extends BlockDummyable { if(meta >= 12) return new TileEntityTurretRichard(); - return new TileEntityProxyCombo(true, true, false); + return new TileEntityProxyCombo().inventory().power(); } @Override diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 1f2ae0fd5..00991409b 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -8,6 +8,7 @@ import com.hbm.inventory.fluid.FluidType.ExtContainer; import com.hbm.inventory.fluid.trait.*; import com.hbm.inventory.fluid.trait.FluidTraitSimple.*; import com.hbm.inventory.fluid.trait.FT_Combustible.FuelGrade; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.render.util.EnumSymbol; @@ -300,7 +301,7 @@ public class Fluids { metaOrder.add(PLASMA_DH3); metaOrder.add(PLASMA_XM); metaOrder.add(PLASMA_BF); - + double eff_steam_boil = 1.0D; double eff_steam_heatex = 0.25D; @@ -314,6 +315,13 @@ public class Fluids { HOTSTEAM.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, eff_steam_boil).setEff(HeatingType.HEATEXCHANGER, eff_steam_heatex).addStep(18, 10, SUPERHOTSTEAM, 1)); SUPERHOTSTEAM.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, eff_steam_boil).setEff(HeatingType.HEATEXCHANGER, eff_steam_heatex).addStep(120, 10, ULTRAHOTSTEAM, 1)); + double eff_steam_turbine = 1.0D; + double eff_steam_cool = 0.5D; + STEAM.addTraits(new FT_Coolable(SPENTSTEAM, 100, 1, 200).setEff(CoolingType.TURBINE, eff_steam_turbine).setEff(CoolingType.HEATEXCHANGER, eff_steam_cool)); + HOTSTEAM.addTraits(new FT_Coolable(STEAM, 1, 10, 2).setEff(CoolingType.TURBINE, eff_steam_turbine).setEff(CoolingType.HEATEXCHANGER, eff_steam_cool)); + SUPERHOTSTEAM.addTraits(new FT_Coolable(HOTSTEAM, 1, 10, 18).setEff(CoolingType.TURBINE, eff_steam_turbine).setEff(CoolingType.HEATEXCHANGER, eff_steam_cool)); + ULTRAHOTSTEAM.addTraits(new FT_Coolable(SUPERHOTSTEAM, 1, 10, 120).setEff(CoolingType.TURBINE, eff_steam_turbine).setEff(CoolingType.HEATEXCHANGER, eff_steam_cool)); + OIL.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, 1.0D).setEff(HeatingType.HEATEXCHANGER, 1.0D).addStep(10, 1, HOTOIL, 1)); CRACKOIL.addTraits(new FT_Heatable().setEff(HeatingType.BOILER, 1.0D).setEff(HeatingType.HEATEXCHANGER, 1.0D).addStep(10, 1, HOTCRACKOIL, 1)); diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java index a936a44d5..25bd1488d 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Coolable.java @@ -12,10 +12,14 @@ public class FT_Coolable extends FluidTrait { protected HashMap efficiency = new HashMap(); public final FluidType coolsTo; + public int amountReq; + public int amountProduced; public final int heatEnergy; - public FT_Coolable(FluidType type, int heat) { + public FT_Coolable(FluidType type, int req, int prod, int heat) { this.coolsTo = type; + this.amountReq = req; + this.amountProduced = prod; this.heatEnergy = heat; } diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index 6cfbc51ae..e770043aa 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -36,17 +36,6 @@ public class MachineRecipes { return null; } - - //return: FluidType, amount produced, amount required, HE produced - public static Object[] getTurbineOutput(FluidType type) { - - if(type == Fluids.STEAM) return new Object[] { Fluids.SPENTSTEAM, 5, 500, 50 }; - if(type == Fluids.HOTSTEAM) return new Object[] { Fluids.STEAM, 50, 5, 100 }; - if(type == Fluids.SUPERHOTSTEAM) return new Object[] { Fluids.HOTSTEAM, 50, 5, 150 }; - if(type == Fluids.ULTRAHOTSTEAM) return new Object[] { Fluids.SUPERHOTSTEAM, 50, 5, 250 }; - - return null; - } public static ItemStack getCyclotronOutput(ItemStack part, ItemStack item) { 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 84c875858..abc5b698a 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -285,6 +285,13 @@ public class AnvilRecipes { new OreDictStack(STEEL.plate(), 8) }, new AnvilOutput(new ItemStack(ModBlocks.machine_crucible))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new OreDictStack(STEEL.ingot(), 4), + new OreDictStack(CU.plate(), 16), + new ComparableStack(ModItems.plate_polymer, 8) + }, new AnvilOutput(new ItemStack(ModBlocks.machine_boiler))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new OreDictStack(STEEL.ingot(), 6), diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingHotRecipe.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingHotRecipe.java index 31642ef4f..c3cb7f520 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingHotRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingHotRecipe.java @@ -3,7 +3,6 @@ package com.hbm.inventory.recipes.anvil; import java.util.Arrays; import java.util.List; -import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.items.special.ItemHot; diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRecipe.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRecipe.java index 9677efdc9..566434ce6 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRecipe.java @@ -3,7 +3,6 @@ package com.hbm.inventory.recipes.anvil; import java.util.List; import com.hbm.config.GeneralConfig; -import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.AStack; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRenameRecipe.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRenameRecipe.java index 3bb25ab6c..2817e8d0b 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRenameRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingRenameRecipe.java @@ -1,6 +1,5 @@ package com.hbm.inventory.recipes.anvil; -import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.ComparableStack; import net.minecraft.init.Items; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 5b28543ec..9c5228c6c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -262,6 +262,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceSteel.class, new RenderFurnaceSteel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterFirebox.class, new RenderFirebox()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterOilburner.class, new RenderOilburner()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterElectric.class, new RenderElectricHeater()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStirling.class, new RenderStirling()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySawmill.class, new RenderSawmill()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCrucible.class, new RenderCrucible()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index c2b066ff3..1e7e355f6 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -60,6 +60,7 @@ public class ResourceManager { //Heaters public static final IModelCustom heater_firebox = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/firebox.obj")); public static final IModelCustom heater_oilburner = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/oilburner.obj")); + public static final IModelCustom heater_electric = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/electric_heater.obj"), false); //Heat Engines public static final IModelCustom stirling = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/stirling.obj")); @@ -383,6 +384,7 @@ public class ResourceManager { //Heaters public static final ResourceLocation heater_firebox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/firebox.png"); public static final ResourceLocation heater_oilburner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/oilburner.png"); + public static final ResourceLocation heater_electric_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/electric_heater.png"); //Heat Engines public static final ResourceLocation stirling_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/stirling.png"); diff --git a/src/main/java/com/hbm/render/block/RenderConveyorLift.java b/src/main/java/com/hbm/render/block/RenderConveyorLift.java index badb6ee35..bc604fad2 100644 --- a/src/main/java/com/hbm/render/block/RenderConveyorLift.java +++ b/src/main/java/com/hbm/render/block/RenderConveyorLift.java @@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.network.BlockConveyorLift; import api.hbm.conveyor.IConveyorBelt; +import api.hbm.conveyor.IEnterableBlock; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -74,7 +75,7 @@ public class RenderConveyorLift implements ISimpleBlockRenderingHandler { if(y < 255) { Block above = world.getBlock(x, y + 1, z); - isTop = !(above instanceof IConveyorBelt) && !isBottom; + isTop = !(above instanceof IConveyorBelt) && !isBottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); } double minOuter = 0.0; diff --git a/src/main/java/com/hbm/render/tileentity/RenderBoiler.java b/src/main/java/com/hbm/render/tileentity/RenderBoiler.java index 65bbbed75..7c9c0899c 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBoiler.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBoiler.java @@ -58,6 +58,7 @@ public class RenderBoiler extends TileEntitySpecialRenderer implements IItemRend GL11.glScaled(3, 3, 3); } public void renderCommonWithStack(ItemStack item) { + GL11.glRotatef(90, 0F, 1F, 0F); GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.boiler_tex); if(item.getItemDamage() == 1) diff --git a/src/main/java/com/hbm/render/tileentity/RenderElectricHeater.java b/src/main/java/com/hbm/render/tileentity/RenderElectricHeater.java new file mode 100644 index 000000000..9ae8998cf --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderElectricHeater.java @@ -0,0 +1,55 @@ +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 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 RenderElectricHeater 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); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + + bindTexture(ResourceManager.heater_electric_tex); + ResourceManager.heater_electric.renderAll(); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.heater_electric); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glScaled(3, 3, 3); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glTranslated(-0.5, 0, 0); + bindTexture(ResourceManager.heater_electric_tex); + ResourceManager.heater_electric.renderAll(); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 3f5dc6b93..26d78aa94 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -246,6 +246,7 @@ public class TileMappings { private static void putMachines() { put(TileEntityHeaterFirebox.class, "tileentity_firebox"); put(TileEntityHeaterOilburner.class, "tileentity_oilburner"); + put(TileEntityHeaterElectric.class, "tileentity_electric_heater"); put(TileEntityFurnaceIron.class, "tileentity_furnace_iron"); put(TileEntityFurnaceSteel.class, "tileentity_furnace_steel"); put(TileEntityStirling.class, "tileentity_stirling"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 44d3f3441..80a35fdeb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -10,7 +10,8 @@ import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.recipes.MachineRecipes; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.lib.Library; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; @@ -53,33 +54,35 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc if(!worldObj.isRemote) { - Object[] outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType()); - - //some funky crashfixing for unlikely cases - if(outs == null) { - tanks[0].setTankType(Fluids.STEAM); - tanks[1].setTankType(Fluids.SPENTSTEAM); - outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType()); + boolean operational = false; + FluidType in = tanks[0].getTankType(); + boolean valid = false; + if(in.hasTrait(FT_Coolable.class)) { + FT_Coolable trait = in.getTrait(FT_Coolable.class); + double eff = trait.getEfficiency(CoolingType.TURBINE); //100% efficiency + if(eff > 0) { + tanks[1].setTankType(trait.coolsTo); + int inputOps = tanks[0].getFill() / trait.amountReq; + int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; + int ops = Math.min(inputOps, outputOps); + tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); + tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); + this.power += (ops * trait.heatEnergy * eff); + valid = true; + operational = ops > 0; + } } - tanks[1].setTankType((FluidType) outs[0]); + //if(this.tanks[1].getFill() > 0) System.out.println(this.tanks[1].getTankType().name()); - int processMax = (int) Math.ceil(tanks[0].getFill() / (Integer)outs[2]); //the maximum amount of cycles total - int processSteam = tanks[0].getFill() / (Integer)outs[2]; //the maximum amount of cycles depending on steam - int processWater = (tanks[1].getMaxFill() - tanks[1].getFill()) / (Integer)outs[1]; //the maximum amount of cycles depending on water - - int cycles = Math.min(processMax, Math.min(processSteam, processWater)); - - tanks[0].setFill(tanks[0].getFill() - (Integer)outs[2] * cycles); - tanks[1].setFill(tanks[1].getFill() + (Integer)outs[1] * cycles); - - power += (Integer)outs[3] * cycles; + if(!valid) tanks[1].setTankType(Fluids.NONE); + if(power > maxPower) power = maxPower; ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); this.sendPower(worldObj, xCoord - dir.offsetX * 11, yCoord, zCoord - dir.offsetZ * 11, dir); for(BlockPos pos : this.getConPos()) { - this.sendFluid(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir); //TODO: there's no directions for this yet because idc + this.sendFluid(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir); this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir); } @@ -88,7 +91,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc turnTimer--; - if(cycles > 0) + if(operational) turnTimer = 25; this.fillFluidInit(tanks[1].getTankType()); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index 7d2ca6e8b..dacc1993f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -182,6 +182,24 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid new DirPos(xCoord, yCoord + 4, zCoord, Library.POS_Y), }; } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + tanks[0].readFromNBT(nbt, "water"); + tanks[1].readFromNBT(nbt, "steam"); + heat = nbt.getInteger("heat"); + hasExploded = nbt.getBoolean("exploded"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + tanks[0].writeToNBT(nbt, "water"); + tanks[1].writeToNBT(nbt, "steam"); + nbt.setInteger("heat", heat); + nbt.setBoolean("exploded", hasExploded); + } @Override public void setFluidFill(int fill, FluidType type) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java new file mode 100644 index 000000000..6092d5a11 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterElectric.java @@ -0,0 +1,34 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityLoadedBase; + +import api.hbm.energy.IEnergyUser; +import api.hbm.tile.IHeatSource; + +public class TileEntityHeaterElectric extends TileEntityLoadedBase implements IHeatSource, IEnergyUser { + + @Override + public long getPower() { + return 0; + } + + @Override + public long getMaxPower() { + return 0; + } + + @Override + public void setPower(long power) { + + } + + @Override + public int getHeatStored() { + return 0; + } + + @Override + public void useUpHeat(int heat) { + + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoiler.java index 9f47277bd..54f3691a0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBoiler.java @@ -207,8 +207,7 @@ public class TileEntityMachineBoiler extends TileEntity implements ISidedInvento boolean mark = false; - if(!worldObj.isRemote) - { + if(!worldObj.isRemote) { this.subscribeToAllAround(tanks[0].getTankType(), this); this.sendFluidToAll(tanks[1].getTankType(), this); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 8bf45b2f1..6e27ca1bf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -10,7 +10,8 @@ import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.recipes.MachineRecipes; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; @@ -70,30 +71,26 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme boolean operational = false; - Object[] outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType()); - - if(outs == null) { - tanks[1].setTankType(Fluids.NONE); - } else { - tanks[1].setTankType((FluidType) outs[0]); - - int processMax = (int) Math.ceil(Math.ceil(tanks[0].getFill() / 5F) / (Integer)outs[2]); //the maximum amount of cycles based on the 20% cap - int processSteam = tanks[0].getFill() / (Integer)outs[2]; //the maximum amount of cycles depending on steam - int processWater = (tanks[1].getMaxFill() - tanks[1].getFill()) / (Integer)outs[1]; //the maximum amount of cycles depending on water - - int cycles = Math.min(processMax, Math.min(processSteam, processWater)); - - tanks[0].setFill(tanks[0].getFill() - (Integer)outs[2] * cycles); - tanks[1].setFill(tanks[1].getFill() + (Integer)outs[1] * cycles); - - power += ((Integer)outs[3] * cycles) * 1.25; //yields a 25% power conversion bonus - - if(power > maxPower) - power = maxPower; - - if(cycles > 0) - operational = true; + FluidType in = tanks[0].getTankType(); + boolean valid = false; + if(in.hasTrait(FT_Coolable.class)) { + FT_Coolable trait = in.getTrait(FT_Coolable.class); + double eff = trait.getEfficiency(CoolingType.TURBINE); //100% efficiency + if(eff > 0) { + tanks[1].setTankType(trait.coolsTo); + int inputOps = tanks[0].getFill() / trait.amountReq; + int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; + int cap = 6_000 / trait.amountReq; + int ops = Math.min(inputOps, Math.min(outputOps, cap)); + tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); + tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); + this.power += (ops * trait.heatEnergy * eff); + valid = true; + operational = ops > 0; + } } + if(!valid) tanks[1].setTankType(Fluids.NONE); + if(power > maxPower) power = maxPower; tanks[1].unloadTank(5, 6, slots); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 64a8fe472..b2a065e2a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -9,6 +9,8 @@ import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.fluid.trait.FT_Coolable; +import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.recipes.MachineRecipes; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; @@ -232,27 +234,25 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS tanks[0].loadTank(2, 3, slots); power = Library.chargeItemsFromTE(slots, 4, power, maxPower); - Object[] outs = MachineRecipes.getTurbineOutput(tanks[0].getTankType()); - - if(outs == null) { - tanks[1].setTankType(Fluids.NONE); - } else { - tanks[1].setTankType((FluidType) outs[0]); - - int processMax = 1200; //the maximum amount of cycles based on the 1.2k cycle cap (subject to change) - int processSteam = tanks[0].getFill() / (Integer)outs[2]; //the maximum amount of cycles depending on steam - int processWater = (tanks[1].getMaxFill() - tanks[1].getFill()) / (Integer)outs[1]; //the maximum amount of cycles depending on water - - int cycles = Math.min(processMax, Math.min(processSteam, processWater)); - - tanks[0].setFill(tanks[0].getFill() - (Integer)outs[2] * cycles); - tanks[1].setFill(tanks[1].getFill() + (Integer)outs[1] * cycles); - - power += (Integer)outs[3] * cycles; - - if(power > maxPower) - power = maxPower; + FluidType in = tanks[0].getTankType(); + boolean valid = false; + if(in.hasTrait(FT_Coolable.class)) { + FT_Coolable trait = in.getTrait(FT_Coolable.class); + double eff = trait.getEfficiency(CoolingType.TURBINE) * 0.85D; //small turbine is only 85% efficient + if(eff > 0) { + tanks[1].setTankType(trait.coolsTo); + int inputOps = tanks[0].getFill() / trait.amountReq; + int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; + int cap = 6_000 / trait.amountReq; + int ops = Math.min(inputOps, Math.min(outputOps, cap)); + tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); + tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); + this.power += (ops * trait.heatEnergy * eff); + valid = true; + } } + if(!valid) tanks[1].setTankType(Fluids.NONE); + if(power > maxPower) power = maxPower; this.sendFluidToAll(tanks[1].getTankType(), this); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 255ebd870..a8088b0ba 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3466,6 +3466,7 @@ tile.machine_autocrafter.name=Automatische Werkbank tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energiespeicherblock tile.machine_battery_potato.name=Kartoffelbatterieblock +tile.machine_boiler.name=Boiler tile.machine_boiler_electric_off.name=Elektrischer Boiler tile.machine_boiler_electric_on.name=Elektrischer Boiler tile.machine_boiler_off.name=Dampfkessel @@ -3475,6 +3476,7 @@ tile.machine_centrifuge.name=Zentrifuge tile.machine_chemfac.name=Chemiefabrik tile.machine_chemplant.name=Chemiewerk tile.machine_chungus.name=Leviathan-Dampfturbine +tile.machine_chungus.desc=Effizienz: 85%% tile.machine_coal_off.name=Verbrennungsgenerator tile.machine_coal_on.name=Verbrennungsgenerator tile.machine_combine_factory.name=CMB-Stahl Hochofen @@ -3511,6 +3513,7 @@ tile.machine_geo.name=Gepthermiegenerator tile.machine_industrial_generator.name=Industrieller Generator tile.machine_keyforge.name=Schlossertisch tile.machine_large_turbine.name=Industrielle Dampfturbine +tile.machine_large_turbine.desc=Effizienz: 100%% tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock tile.machine_microwave.name=Mikrowelle tile.machine_mining_laser.name=Bergbaulaser @@ -3566,6 +3569,7 @@ tile.machine_transformer_20.name=10k-1Hz-Transformator tile.machine_transformer_dnt.name=DNT-20Hz-Transformator tile.machine_transformer_dnt_20.name=DNT-1Hz-Transformator tile.machine_turbine.name=Dampfturbine +tile.machine_turbine.desc=Effizienz: 85%% tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranhexafluorid-Tank tile.machine_waste_drum.name=Abklingbecken-Trommel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 57ab1c9c6..9e11ff5f8 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3904,6 +3904,7 @@ tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block +tile.machine_boiler.name=Boiler tile.machine_boiler_electric_off.name=Electric Boiler tile.machine_boiler_electric_on.name=Electric Boiler tile.machine_boiler_off.name=Boiler @@ -3913,6 +3914,7 @@ tile.machine_centrifuge.name=Centrifuge tile.machine_chemfac.name=Chemical Factory tile.machine_chemplant.name=Chemical Plant tile.machine_chungus.name=Leviathan Steam Turbine +tile.machine_chungus.desc=Efficiency: 85%% tile.machine_coal_off.name=Combustion Generator tile.machine_coal_on.name=Combustion Generator tile.machine_combine_factory.name=CMB Steel Furnace @@ -3949,6 +3951,7 @@ tile.machine_geo.name=Geothermal Electric Generator tile.machine_industrial_generator.name=Industrial Generator tile.machine_keyforge.name=Locksmith Table tile.machine_large_turbine.name=Industrial Steam Turbine +tile.machine_large_turbine.desc=Efficiency: 100%% tile.machine_liquefactor.name=Industrial Liquefaction Machine tile.machine_liquefactor.desc=Powerful universal machine to turn items into fluids.$Comes with versatile catalytic components, heating elements$and a built-in hydrator for petrochemical liquefaction. tile.machine_lithium_battery.name=Li-Ion Energy Storage Block @@ -4007,6 +4010,7 @@ tile.machine_transformer_20.name=10k-1Hz Transformer tile.machine_transformer_dnt.name=DNT-20Hz Transformer tile.machine_transformer_dnt_20.name=DNT-1Hz Transformer tile.machine_turbine.name=Steam Turbine +tile.machine_turbine.desc=Efficiency: 85%% tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranium Hexafluoride Tank tile.machine_waste_drum.name=Spent Fuel Pool Drum diff --git a/src/main/resources/assets/hbm/models/machines/electric_heater.obj b/src/main/resources/assets/hbm/models/machines/electric_heater.obj new file mode 100644 index 000000000..df504a052 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/electric_heater.obj @@ -0,0 +1,1140 @@ +# Blender v2.79 (sub 0) OBJ File: 'electric_heater.blend' +# www.blender.org +o Plane +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 -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v -0.500000 0.937500 -0.500000 +v -0.500000 0.937500 0.500000 +v 0.500000 0.937500 0.500000 +v 0.500000 0.937500 -0.500000 +v -0.437500 0.937500 -0.437500 +v -0.437500 0.937500 0.437500 +v 0.437500 0.937500 0.437500 +v 0.437500 0.937500 -0.437500 +v -0.437500 1.000000 -0.437500 +v -0.437500 1.000000 0.437500 +v 0.437500 1.000000 0.437500 +v 0.437500 1.000000 -0.437500 +v 1.250000 0.125000 -1.500000 +v -1.250000 0.125000 -1.500000 +v 1.250000 0.875000 -1.500000 +v -1.250000 0.875000 -1.500000 +v -1.500000 0.125000 -1.250000 +v -1.500000 0.125000 1.250000 +v -1.500000 0.875000 -1.250000 +v -1.500000 0.875000 1.250000 +v -1.250000 0.125000 1.500000 +v 1.250000 0.125000 1.500000 +v -1.250000 0.875000 1.500000 +v 1.250000 0.875000 1.500000 +v 1.250000 0.125000 -1.250000 +v -1.250000 0.125000 -1.250000 +v 1.250000 0.875000 -1.250000 +v -1.250000 0.875000 -1.250000 +v -1.250000 0.125000 -1.250000 +v -1.250000 0.125000 1.250000 +v -1.250000 0.875000 -1.250000 +v -1.250000 0.875000 1.250000 +v -1.250000 0.125000 1.250000 +v 1.250000 0.125000 1.250000 +v -1.250000 0.875000 1.250000 +v 1.250000 0.875000 1.250000 +v -1.000000 0.531250 -1.250000 +v 1.000000 0.531250 -1.250000 +v -1.000000 0.468750 -1.250000 +v 1.000000 0.468750 -1.250000 +v -1.000000 0.468750 -1.625000 +v -1.000000 0.531250 -1.625000 +v 1.000000 0.531250 -1.625000 +v 1.000000 0.468750 -1.625000 +v -1.000000 0.625000 -1.250000 +v 1.000000 0.625000 -1.250000 +v -1.000000 0.562500 -1.250000 +v 1.000000 0.562500 -1.250000 +v -1.000000 0.562500 -1.625000 +v -1.000000 0.625000 -1.625000 +v 1.000000 0.625000 -1.625000 +v 1.000000 0.562500 -1.625000 +v -1.000000 0.437500 -1.250000 +v 1.000000 0.437500 -1.250000 +v -1.000000 0.375000 -1.250000 +v 1.000000 0.375000 -1.250000 +v -1.000000 0.375000 -1.625000 +v -1.000000 0.437500 -1.625000 +v 1.000000 0.437500 -1.625000 +v 1.000000 0.375000 -1.625000 +v -1.000000 0.343750 -1.250000 +v 1.000000 0.343750 -1.250000 +v -1.000000 0.281250 -1.250000 +v 1.000000 0.281250 -1.250000 +v -1.000000 0.281250 -1.625000 +v -1.000000 0.343750 -1.625000 +v 1.000000 0.343750 -1.625000 +v 1.000000 0.281250 -1.625000 +v -1.000000 0.250000 -1.250000 +v 1.000000 0.250000 -1.250000 +v -1.000000 0.187500 -1.250000 +v 1.000000 0.187500 -1.250000 +v -1.000000 0.187500 -1.625000 +v -1.000000 0.250000 -1.625000 +v 1.000000 0.250000 -1.625000 +v 1.000000 0.187500 -1.625000 +v -1.000000 0.812500 -1.250000 +v 1.000000 0.812500 -1.250000 +v -1.000000 0.750000 -1.250000 +v 1.000000 0.750000 -1.250000 +v -1.000000 0.750000 -1.625000 +v -1.000000 0.812500 -1.625000 +v 1.000000 0.812500 -1.625000 +v 1.000000 0.750000 -1.625000 +v -1.000000 0.718750 -1.250000 +v 1.000000 0.718750 -1.250000 +v -1.000000 0.656250 -1.250000 +v 1.000000 0.656250 -1.250000 +v -1.000000 0.656250 -1.625000 +v -1.000000 0.718750 -1.625000 +v 1.000000 0.718750 -1.625000 +v 1.000000 0.656250 -1.625000 +v -1.250000 0.531250 1.000000 +v -1.250000 0.531250 -1.000000 +v -1.250000 0.468750 1.000000 +v -1.250000 0.468750 -1.000000 +v -1.625000 0.468750 1.000000 +v -1.625000 0.531250 1.000000 +v -1.625000 0.531250 -1.000000 +v -1.625000 0.468750 -1.000000 +v -1.250000 0.625000 1.000000 +v -1.250000 0.625000 -1.000000 +v -1.250000 0.562500 1.000000 +v -1.250000 0.562500 -1.000000 +v -1.625000 0.562500 1.000000 +v -1.625000 0.625000 1.000000 +v -1.625000 0.625000 -1.000000 +v -1.625000 0.562500 -1.000000 +v -1.250000 0.437500 1.000000 +v -1.250000 0.437500 -1.000000 +v -1.250000 0.375000 1.000000 +v -1.250000 0.375000 -1.000000 +v -1.625000 0.375000 1.000000 +v -1.625000 0.437500 1.000000 +v -1.625000 0.437500 -1.000000 +v -1.625000 0.375000 -1.000000 +v -1.250000 0.343750 1.000000 +v -1.250000 0.343750 -1.000000 +v -1.250000 0.281250 1.000000 +v -1.250000 0.281250 -1.000000 +v -1.625000 0.281250 1.000000 +v -1.625000 0.343750 1.000000 +v -1.625000 0.343750 -1.000000 +v -1.625000 0.281250 -1.000000 +v -1.250000 0.250000 1.000000 +v -1.250000 0.250000 -1.000000 +v -1.250000 0.187500 1.000000 +v -1.250000 0.187500 -1.000000 +v -1.625000 0.187500 1.000000 +v -1.625000 0.250000 1.000000 +v -1.625000 0.250000 -1.000000 +v -1.625000 0.187500 -1.000000 +v -1.250000 0.812500 1.000000 +v -1.250000 0.812500 -1.000000 +v -1.250000 0.750000 1.000000 +v -1.250000 0.750000 -1.000000 +v -1.625000 0.750000 1.000000 +v -1.625000 0.812500 1.000000 +v -1.625000 0.812500 -1.000000 +v -1.625000 0.750000 -1.000000 +v -1.250000 0.718750 1.000000 +v -1.250000 0.718750 -1.000000 +v -1.250000 0.656250 1.000000 +v -1.250000 0.656250 -1.000000 +v -1.625000 0.656250 1.000000 +v -1.625000 0.718750 1.000000 +v -1.625000 0.718750 -1.000000 +v -1.625000 0.656250 -1.000000 +v 1.000000 0.531250 1.250000 +v -1.000000 0.531250 1.250000 +v 1.000000 0.468750 1.250000 +v -1.000000 0.468750 1.250000 +v 1.000000 0.468750 1.625000 +v 1.000000 0.531250 1.625000 +v -1.000000 0.531250 1.625000 +v -1.000000 0.468750 1.625000 +v 1.000000 0.625000 1.250000 +v -1.000000 0.625000 1.250000 +v 1.000000 0.562500 1.250000 +v -1.000000 0.562500 1.250000 +v 1.000000 0.562500 1.625000 +v 1.000000 0.625000 1.625000 +v -1.000000 0.625000 1.625000 +v -1.000000 0.562500 1.625000 +v 1.000000 0.437500 1.250000 +v -1.000000 0.437500 1.250000 +v 1.000000 0.375000 1.250000 +v -1.000000 0.375000 1.250000 +v 1.000000 0.375000 1.625000 +v 1.000000 0.437500 1.625000 +v -1.000000 0.437500 1.625000 +v -1.000000 0.375000 1.625000 +v 1.000000 0.343750 1.250000 +v -1.000000 0.343750 1.250000 +v 1.000000 0.281250 1.250000 +v -1.000000 0.281250 1.250000 +v 1.000000 0.281250 1.625000 +v 1.000000 0.343750 1.625000 +v -1.000000 0.343750 1.625000 +v -1.000000 0.281250 1.625000 +v 1.000000 0.250000 1.250000 +v -1.000000 0.250000 1.250000 +v 1.000000 0.187500 1.250000 +v -1.000000 0.187500 1.250000 +v 1.000000 0.187500 1.625000 +v 1.000000 0.250000 1.625000 +v -1.000000 0.250000 1.625000 +v -1.000000 0.187500 1.625000 +v 1.000000 0.812500 1.250000 +v -1.000000 0.812500 1.250000 +v 1.000000 0.750000 1.250000 +v -1.000000 0.750000 1.250000 +v 1.000000 0.750000 1.625000 +v 1.000000 0.812500 1.625000 +v -1.000000 0.812500 1.625000 +v -1.000000 0.750000 1.625000 +v 1.000000 0.718750 1.250000 +v -1.000000 0.718750 1.250000 +v 1.000000 0.656250 1.250000 +v -1.000000 0.656250 1.250000 +v 1.000000 0.656250 1.625000 +v 1.000000 0.718750 1.625000 +v -1.000000 0.718750 1.625000 +v -1.000000 0.656250 1.625000 +v 1.750000 0.000000 1.500000 +v 1.750000 0.000000 -1.500000 +v 1.750000 1.000000 1.500000 +v 1.750000 1.000000 -1.500000 +v 2.250000 0.000000 1.500000 +v 2.250000 0.000000 -1.500000 +v 2.250000 1.000000 1.500000 +v 2.250000 1.000000 -1.500000 +v 2.312500 0.687500 0.187500 +v 2.312500 0.312500 0.187500 +v 2.312500 0.687500 -0.187500 +v 2.312500 0.312500 -0.187500 +v 2.500000 0.687500 -0.187500 +v 2.500000 0.687500 0.187500 +v 2.500000 0.312500 0.187500 +v 2.500000 0.312500 -0.187500 +v 2.250000 0.750000 0.250000 +v 2.250000 0.250000 0.250000 +v 2.250000 0.750000 -0.250000 +v 2.250000 0.250000 -0.250000 +v 2.312500 0.750000 -0.250000 +v 2.312500 0.750000 0.250000 +v 2.312500 0.250000 0.250000 +v 2.312500 0.250000 -0.250000 +v 1.750000 0.125000 1.250000 +v 1.750000 0.125000 -1.250000 +v 1.750000 0.875000 1.250000 +v 1.750000 0.875000 -1.250000 +v 1.500000 0.125000 1.250000 +v 1.500000 0.125000 -1.250000 +v 1.500000 0.875000 1.250000 +v 1.500000 0.875000 -1.250000 +v 2.250000 0.875000 1.375000 +v 2.250000 0.125000 1.375000 +v 2.250000 0.875000 0.625000 +v 2.250000 0.125000 0.625000 +v 2.375000 0.875000 0.625000 +v 2.375000 0.875000 1.375000 +v 2.375000 0.125000 1.375000 +v 2.375000 0.125000 0.625000 +v 2.250000 0.875000 -0.625000 +v 2.250000 0.125000 -0.625000 +v 2.250000 0.875000 -1.375000 +v 2.250000 0.125000 -1.375000 +v 2.375000 0.875000 -1.375000 +v 2.375000 0.875000 -0.625000 +v 2.375000 0.125000 -0.625000 +v 2.375000 0.125000 -1.375000 +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v -0.500000 0.062500 -0.500000 +v -0.500000 0.062500 0.500000 +v 0.500000 0.062500 0.500000 +v 0.500000 0.062500 -0.500000 +v -0.437500 0.062500 -0.437500 +v -0.437500 0.062500 0.437500 +v 0.437500 0.062500 0.437500 +v 0.437500 0.062500 -0.437500 +v -0.437500 0.000000 -0.437500 +v -0.437500 0.000000 0.437500 +v 0.437500 0.000000 0.437500 +v 0.437500 0.000000 -0.437500 +vt 0.000000 0.375000 +vt 0.285714 0.250000 +vt 0.428571 0.375000 +vt 0.285714 0.625000 +vt 0.000000 0.500000 +vt 0.428571 0.500000 +vt 0.428571 0.875000 +vt 0.035714 0.890625 +vt 0.000000 0.875000 +vt 0.428571 1.000000 +vt 0.392857 0.890625 +vt 0.428571 0.875000 +vt 0.000000 0.875000 +vt 0.035714 0.984375 +vt 0.000000 1.000000 +vt 0.607143 0.804687 +vt 0.598214 0.679687 +vt 0.607143 0.679687 +vt 0.285714 0.750000 +vt 0.142857 0.750000 +vt 0.142857 0.625000 +vt 0.589286 0.671875 +vt 0.455357 0.679687 +vt 0.446429 0.671875 +vt 0.428571 0.679687 +vt 0.437500 0.804688 +vt 0.428571 0.804688 +vt 0.589286 0.664062 +vt 0.446429 0.664062 +vt 0.446429 0.820312 +vt 0.589286 0.812500 +vt 0.589286 0.820312 +vt 0.580357 0.679687 +vt 0.455357 0.687500 +vt 0.446429 0.812500 +vt 0.580357 0.804688 +vt 0.598214 0.804688 +vt 0.589286 0.687500 +vt 0.437500 0.679687 +vt 0.446429 0.796875 +vt 0.580357 0.796875 +vt 0.455357 0.796875 +vt 0.455357 0.804688 +vt 0.589286 0.796875 +vt 0.580357 0.687500 +vt 0.446429 0.687500 +vt 0.857143 0.601562 +vt 0.821429 0.507812 +vt 0.857143 0.507812 +vt 0.000000 0.875000 +vt 0.035714 0.984375 +vt 0.000000 1.000000 +vt 0.035714 0.890625 +vt 0.392857 0.984375 +vt 0.464286 0.632812 +vt 0.821429 0.601562 +vt 0.821429 0.632812 +vt 0.000000 1.000000 +vt 0.392857 0.984375 +vt 0.428571 1.000000 +vt 0.392857 0.890625 +vt 0.035714 0.984375 +vt 0.428571 0.507812 +vt 0.464286 0.601562 +vt 0.428571 0.601562 +vt 0.428571 0.875000 +vt 0.035714 0.890625 +vt 0.392857 0.984375 +vt 0.428571 1.000000 +vt 0.392857 0.890625 +vt 0.464286 0.601562 +vt 0.821429 0.601562 +vt 0.464286 0.632812 +vt 0.821429 0.632812 +vt 0.428571 0.507812 +vt 0.428571 0.601562 +vt 0.821429 0.476562 +vt 0.464286 0.507812 +vt 0.464286 0.476562 +vt 0.464286 0.601562 +vt 0.821429 0.507812 +vt 0.857143 0.601562 +vt 0.857143 0.507812 +vt 0.821429 0.476562 +vt 0.464286 0.507812 +vt 0.464286 0.476562 +vt 0.428571 0.507812 +vt 0.428571 0.601562 +vt 0.821429 0.507812 +vt 0.464286 0.507812 +vt 0.464286 0.632812 +vt 0.821429 0.601562 +vt 0.821429 0.632812 +vt 0.857143 0.601562 +vt 0.857143 0.507812 +vt 0.821429 0.476562 +vt 0.464286 0.476562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.767857 -0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.482143 0.054688 +vt 0.767857 0.046875 +vt 0.767857 0.054688 +vt 0.428571 0.046875 +vt 0.428571 0.054688 +vt 0.821429 0.054688 +vt 0.821429 0.046875 +vt 0.482143 0.000000 +vt 0.482143 0.046875 +vt 0.482143 0.101562 +vt 0.767857 0.101562 +vt 0.500000 0.351562 +vt 0.928571 0.476562 +vt 0.500000 0.476562 +vt 0.928571 0.164062 +vt 0.500000 0.289062 +vt 0.500000 0.164062 +vt 0.428571 0.164062 +vt 0.428571 0.289062 +vt 0.928571 0.289062 +vt 0.928571 0.351562 +vt 1.000000 0.289062 +vt 1.000000 0.164062 +vt 0.928571 0.101562 +vt 0.500000 0.101562 +vt 0.892857 0.632812 +vt 0.785714 0.664062 +vt 0.785714 0.632812 +vt 0.776786 0.687500 +vt 0.830357 0.734375 +vt 0.776786 0.734375 +vt 0.830357 0.664062 +vt 0.776786 0.664062 +vt 0.776786 0.757812 +vt 0.830357 0.757812 +vt 0.857143 0.734375 +vt 0.830357 0.687500 +vt 0.857143 0.687500 +vt 0.750000 0.687500 +vt 0.750000 0.734375 +vt 0.758929 0.765625 +vt 0.830357 0.828125 +vt 0.758929 0.828125 +vt 0.839286 0.828125 +vt 0.830357 0.765625 +vt 0.839286 0.765625 +vt 0.750000 0.765625 +vt 0.750000 0.828125 +vt 0.830357 0.757812 +vt 0.758929 0.757812 +vt 0.758929 0.835938 +vt 0.830357 0.835938 +vt 0.785714 0.632812 +vt 0.428571 0.664062 +vt 0.428571 0.632812 +vt 0.892857 0.632812 +vt 0.785714 0.664062 +vt 0.428571 0.632812 +vt 0.625000 0.679688 +vt 0.732143 0.773438 +vt 0.625000 0.773438 +vt 0.750000 0.773438 +vt 0.732143 0.679688 +vt 0.750000 0.679688 +vt 0.607143 0.679688 +vt 0.607143 0.773438 +vt 0.732143 0.664062 +vt 0.625000 0.664062 +vt 0.625000 0.789062 +vt 0.732143 0.789062 +vt 0.625000 0.679688 +vt 0.732143 0.773438 +vt 0.625000 0.773438 +vt 0.750000 0.773438 +vt 0.732143 0.679688 +vt 0.750000 0.679688 +vt 0.607143 0.679688 +vt 0.607143 0.773438 +vt 0.732143 0.664062 +vt 0.625000 0.664062 +vt 0.625000 0.789062 +vt 0.732143 0.789062 +vt 0.428571 0.679687 +vt 0.437500 0.804688 +vt 0.428571 0.804688 +vt 0.285714 0.125000 +vt 0.428571 -0.000000 +vt 0.142857 0.125000 +vt 0.000000 -0.000000 +vt 0.142857 0.250000 +vt 0.589286 0.671875 +vt 0.455357 0.679687 +vt 0.446429 0.671875 +vt 0.607143 0.804687 +vt 0.598214 0.679687 +vt 0.607143 0.679687 +vt 0.589286 0.664062 +vt 0.446429 0.664062 +vt 0.446429 0.820312 +vt 0.589286 0.812500 +vt 0.589286 0.820312 +vt 0.446429 0.687500 +vt 0.455357 0.796875 +vt 0.446429 0.796875 +vt 0.446429 0.812500 +vt 0.580357 0.804688 +vt 0.437500 0.679687 +vt 0.598214 0.804688 +vt 0.589286 0.687500 +vt 0.580357 0.687500 +vt 0.580357 0.796875 +vt 0.589286 0.796875 +vt 0.580357 0.679687 +vt 0.455357 0.687500 +vt 0.455357 0.804688 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.767857 0.000000 +vt 0.892857 0.664062 +vt 0.892857 0.664062 +vt 0.428571 0.664062 +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 2/1/1 268/2/1 4/3/1 +f 12/4/2 7/5/2 8/6/2 +f 4/3/3 7/5/3 2/1/3 +f 5/7/4 32/8/4 6/9/4 +f 4/10/5 27/11/5 8/12/5 +f 7/13/6 34/14/6 2/15/6 +f 11/16/6 16/17/6 12/18/6 +f 11/19/2 8/6/2 5/7/2 +f 9/20/2 5/7/2 6/9/2 +f 10/21/2 6/9/2 7/5/2 +f 16/22/2 19/23/2 15/24/2 +f 10/25/5 14/26/5 9/27/5 +f 12/28/4 15/24/4 10/29/4 +f 9/30/3 13/31/3 11/32/3 +f 20/33/3 23/34/3 19/23/3 +f 14/35/2 17/36/2 13/31/2 +f 13/37/2 20/38/2 16/17/2 +f 15/39/2 18/40/2 14/26/2 +f 23/34/2 21/41/2 22/42/2 +f 18/43/4 21/41/4 17/36/4 +f 17/44/5 24/45/5 20/38/5 +f 19/46/6 22/42/6 18/40/6 +f 25/47/4 39/48/4 27/49/4 +f 5/50/5 26/51/5 3/52/5 +f 8/12/5 28/53/5 5/50/5 +f 3/52/5 25/54/5 4/10/5 +f 30/55/2 41/56/2 29/57/2 +f 1/58/4 29/59/4 3/60/4 +f 3/60/4 31/61/4 5/7/4 +f 6/9/4 30/62/4 1/58/4 +f 33/63/3 47/64/3 35/65/3 +f 6/66/6 36/67/6 7/13/6 +f 2/15/6 33/68/6 1/69/6 +f 1/69/6 35/70/6 6/66/6 +f 38/71/5 39/48/5 37/72/5 +f 26/73/2 37/72/2 25/74/2 +f 28/75/3 38/71/3 26/76/3 +f 27/77/1 40/78/1 28/79/1 +f 42/80/4 43/81/4 41/56/4 +f 29/82/6 43/81/6 31/83/6 +f 31/84/1 44/85/1 32/86/1 +f 32/87/5 42/80/5 30/88/5 +f 46/89/6 47/64/6 45/90/6 +f 35/91/1 48/92/1 36/93/1 +f 36/94/4 46/89/4 34/95/4 +f 34/96/2 45/90/2 33/97/2 +f 63/98/5 61/99/5 62/100/5 +f 55/101/5 53/102/5 54/103/5 +f 52/104/3 55/101/3 50/105/3 +f 49/106/4 53/102/4 51/107/4 +f 51/108/1 56/109/1 52/110/1 +f 50/111/2 54/103/2 49/112/2 +f 60/113/3 63/98/3 58/114/3 +f 57/115/4 61/99/4 59/116/4 +f 59/117/1 64/118/1 60/119/1 +f 58/120/2 62/100/2 57/121/2 +f 71/122/5 69/123/5 70/124/5 +f 68/125/3 71/122/3 66/126/3 +f 65/127/4 69/123/4 67/128/4 +f 67/129/1 72/130/1 68/131/1 +f 66/132/2 70/124/2 65/133/2 +f 79/134/5 77/135/5 78/136/5 +f 76/137/3 79/134/3 74/138/3 +f 73/139/4 77/135/4 75/140/4 +f 75/141/1 80/142/1 76/143/1 +f 74/144/2 78/136/2 73/145/2 +f 87/146/5 85/147/5 86/148/5 +f 84/149/3 87/146/3 82/150/3 +f 81/151/4 85/147/4 83/152/4 +f 83/153/1 88/154/1 84/155/1 +f 82/156/2 86/148/2 81/157/2 +f 95/158/5 93/159/5 94/160/5 +f 92/161/3 95/158/3 90/162/3 +f 89/163/4 93/159/4 91/164/4 +f 91/165/1 96/166/1 92/167/1 +f 90/168/2 94/160/2 89/169/2 +f 103/170/5 101/171/5 102/172/5 +f 100/173/3 103/170/3 98/174/3 +f 97/175/4 101/171/4 99/176/4 +f 99/177/1 104/178/1 100/179/1 +f 98/180/2 102/172/2 97/181/2 +f 119/182/4 117/183/4 118/184/4 +f 111/185/4 109/186/4 110/187/4 +f 108/188/5 111/185/5 106/189/5 +f 105/190/6 109/186/6 107/191/6 +f 107/192/1 112/193/1 108/194/1 +f 106/195/2 110/187/2 105/196/2 +f 116/197/5 119/182/5 114/198/5 +f 113/199/6 117/183/6 115/200/6 +f 115/201/1 120/202/1 116/203/1 +f 114/204/2 118/184/2 113/205/2 +f 127/206/4 125/207/4 126/208/4 +f 124/209/5 127/206/5 122/210/5 +f 121/211/6 125/207/6 123/212/6 +f 123/213/1 128/214/1 124/215/1 +f 122/216/2 126/208/2 121/217/2 +f 135/218/4 133/219/4 134/220/4 +f 132/221/5 135/218/5 130/222/5 +f 129/223/6 133/219/6 131/224/6 +f 131/225/1 136/226/1 132/227/1 +f 130/228/2 134/220/2 129/229/2 +f 143/230/4 141/231/4 142/232/4 +f 140/233/5 143/230/5 138/234/5 +f 137/235/6 141/231/6 139/236/6 +f 139/237/1 144/238/1 140/239/1 +f 138/240/2 142/232/2 137/241/2 +f 151/242/4 149/243/4 150/244/4 +f 148/245/5 151/242/5 146/246/5 +f 145/247/6 149/243/6 147/248/6 +f 147/249/1 152/250/1 148/251/1 +f 146/252/2 150/244/2 145/253/2 +f 159/254/4 157/255/4 158/256/4 +f 156/257/5 159/254/5 154/258/5 +f 153/259/6 157/255/6 155/260/6 +f 155/261/1 160/262/1 156/263/1 +f 154/264/2 158/256/2 153/265/2 +f 175/266/6 173/267/6 174/268/6 +f 167/269/6 165/270/6 166/271/6 +f 164/272/4 167/269/4 162/273/4 +f 161/274/3 165/270/3 163/275/3 +f 164/276/1 165/270/1 168/277/1 +f 162/278/2 166/271/2 161/279/2 +f 172/280/4 175/266/4 170/281/4 +f 169/282/3 173/267/3 171/283/3 +f 172/284/1 173/267/1 176/285/1 +f 170/286/2 174/268/2 169/287/2 +f 183/288/6 181/289/6 182/290/6 +f 180/291/4 183/288/4 178/292/4 +f 177/293/3 181/289/3 179/294/3 +f 180/295/1 181/289/1 184/296/1 +f 178/297/2 182/290/2 177/298/2 +f 191/299/6 189/300/6 190/301/6 +f 188/302/4 191/299/4 186/303/4 +f 185/304/3 189/300/3 187/305/3 +f 188/306/1 189/300/1 192/307/1 +f 186/308/2 190/301/2 185/309/2 +f 199/310/6 197/311/6 198/312/6 +f 196/313/4 199/310/4 194/314/4 +f 193/315/3 197/311/3 195/316/3 +f 196/317/1 197/311/1 200/318/1 +f 194/319/2 198/312/2 193/320/2 +f 207/321/6 205/322/6 206/323/6 +f 204/324/4 207/321/4 202/325/4 +f 201/326/3 205/322/3 203/327/3 +f 204/328/1 205/322/1 208/329/1 +f 202/330/2 206/323/2 201/331/2 +f 215/332/6 213/333/6 214/334/6 +f 212/335/4 215/332/4 210/336/4 +f 209/337/3 213/333/3 211/338/3 +f 212/339/1 213/333/1 216/340/1 +f 210/341/2 214/334/2 209/342/2 +f 219/343/4 218/344/4 217/345/4 +f 222/346/3 223/347/3 221/348/3 +f 217/349/6 223/347/6 219/350/6 +f 219/343/2 224/351/2 220/352/2 +f 220/353/5 222/346/5 218/354/5 +f 218/355/1 221/348/1 217/356/1 +f 242/357/5 248/358/5 244/359/5 +f 231/360/3 229/361/3 230/362/3 +f 228/363/1 231/360/1 226/364/1 +f 225/365/2 229/361/2 227/366/2 +f 227/367/5 232/368/5 228/369/5 +f 226/370/6 230/362/6 225/371/6 +f 239/372/3 237/373/3 238/374/3 +f 235/375/5 240/376/5 236/377/5 +f 234/378/6 238/374/6 233/379/6 +f 236/380/1 239/372/1 234/381/1 +f 233/382/2 237/373/2 235/383/2 +f 241/384/1 246/385/1 242/386/1 +f 243/387/6 245/388/6 241/384/6 +f 248/358/2 243/389/2 244/359/2 +f 255/390/3 253/391/3 254/392/3 +f 251/393/5 256/394/5 252/395/5 +f 250/396/6 254/392/6 249/397/6 +f 252/398/1 255/390/1 250/399/1 +f 249/400/2 253/391/2 251/401/2 +f 263/402/3 261/403/3 262/404/3 +f 259/405/5 264/406/5 260/407/5 +f 258/408/6 262/404/6 257/409/6 +f 260/410/1 263/402/1 258/411/1 +f 257/412/2 261/403/2 259/413/2 +f 268/414/6 269/415/6 267/416/6 +f 4/3/1 267/417/1 3/418/1 +f 3/418/1 265/419/1 1/420/1 +f 1/420/1 266/421/1 2/1/1 +f 271/422/1 276/423/1 272/424/1 +f 265/425/5 271/426/5 266/427/5 +f 266/428/4 272/424/4 268/429/4 +f 267/430/3 270/431/3 265/432/3 +f 276/433/5 277/434/5 273/435/5 +f 269/436/1 274/437/1 270/431/1 +f 272/438/1 273/435/1 269/415/1 +f 270/439/1 275/440/1 271/426/1 +f 277/434/1 279/441/1 278/442/1 +f 274/443/6 279/441/6 275/440/6 +f 275/444/3 280/445/3 276/423/3 +f 273/446/4 278/442/4 274/437/4 +f 2/1/1 266/421/1 268/2/1 +f 12/4/2 10/21/2 7/5/2 +f 4/3/3 8/6/3 7/5/3 +f 5/7/4 31/61/4 32/8/4 +f 4/10/5 25/54/5 27/11/5 +f 7/13/6 36/67/6 34/14/6 +f 11/16/6 13/37/6 16/17/6 +f 11/19/2 12/4/2 8/6/2 +f 9/20/2 11/19/2 5/7/2 +f 10/21/2 9/20/2 6/9/2 +f 16/22/2 20/33/2 19/23/2 +f 10/25/5 15/39/5 14/26/5 +f 12/28/4 16/22/4 15/24/4 +f 9/30/3 14/35/3 13/31/3 +f 20/33/3 24/45/3 23/34/3 +f 14/35/2 18/43/2 17/36/2 +f 13/37/2 17/44/2 20/38/2 +f 15/39/2 19/46/2 18/40/2 +f 23/34/2 24/45/2 21/41/2 +f 18/43/4 22/42/4 21/41/4 +f 17/44/5 21/41/5 24/45/5 +f 19/46/6 23/34/6 22/42/6 +f 25/47/4 37/72/4 39/48/4 +f 5/50/5 28/53/5 26/51/5 +f 8/12/5 27/11/5 28/53/5 +f 3/52/5 26/51/5 25/54/5 +f 30/55/2 42/80/2 41/56/2 +f 1/58/4 30/62/4 29/59/4 +f 3/60/4 29/59/4 31/61/4 +f 6/9/4 32/8/4 30/62/4 +f 33/63/3 45/90/3 47/64/3 +f 6/66/6 35/70/6 36/67/6 +f 2/15/6 34/14/6 33/68/6 +f 1/69/6 33/68/6 35/70/6 +f 38/71/5 40/78/5 39/48/5 +f 26/73/2 38/71/2 37/72/2 +f 28/75/3 40/78/3 38/71/3 +f 27/77/1 39/48/1 40/78/1 +f 42/80/4 44/85/4 43/81/4 +f 29/82/6 41/56/6 43/81/6 +f 31/84/1 43/81/1 44/85/1 +f 32/87/5 44/85/5 42/80/5 +f 46/89/6 48/92/6 47/64/6 +f 35/91/1 47/64/1 48/92/1 +f 36/94/4 48/92/4 46/89/4 +f 34/96/2 46/89/2 45/90/2 +f 63/98/5 64/118/5 61/99/5 +f 55/101/5 56/109/5 53/102/5 +f 52/104/3 56/109/3 55/101/3 +f 49/106/4 54/103/4 53/102/4 +f 51/108/1 53/102/1 56/109/1 +f 50/111/2 55/101/2 54/103/2 +f 60/113/3 64/118/3 63/98/3 +f 57/115/4 62/100/4 61/99/4 +f 59/117/1 61/99/1 64/118/1 +f 58/120/2 63/98/2 62/100/2 +f 71/122/5 72/130/5 69/123/5 +f 68/125/3 72/130/3 71/122/3 +f 65/127/4 70/124/4 69/123/4 +f 67/129/1 69/123/1 72/130/1 +f 66/132/2 71/122/2 70/124/2 +f 79/134/5 80/142/5 77/135/5 +f 76/137/3 80/142/3 79/134/3 +f 73/139/4 78/136/4 77/135/4 +f 75/141/1 77/135/1 80/142/1 +f 74/144/2 79/134/2 78/136/2 +f 87/146/5 88/154/5 85/147/5 +f 84/149/3 88/154/3 87/146/3 +f 81/151/4 86/148/4 85/147/4 +f 83/153/1 85/147/1 88/154/1 +f 82/156/2 87/146/2 86/148/2 +f 95/158/5 96/166/5 93/159/5 +f 92/161/3 96/166/3 95/158/3 +f 89/163/4 94/160/4 93/159/4 +f 91/165/1 93/159/1 96/166/1 +f 90/168/2 95/158/2 94/160/2 +f 103/170/5 104/178/5 101/171/5 +f 100/173/3 104/178/3 103/170/3 +f 97/175/4 102/172/4 101/171/4 +f 99/177/1 101/171/1 104/178/1 +f 98/180/2 103/170/2 102/172/2 +f 119/182/4 120/202/4 117/183/4 +f 111/185/4 112/193/4 109/186/4 +f 108/188/5 112/193/5 111/185/5 +f 105/190/6 110/187/6 109/186/6 +f 107/192/1 109/186/1 112/193/1 +f 106/195/2 111/185/2 110/187/2 +f 116/197/5 120/202/5 119/182/5 +f 113/199/6 118/184/6 117/183/6 +f 115/201/1 117/183/1 120/202/1 +f 114/204/2 119/182/2 118/184/2 +f 127/206/4 128/214/4 125/207/4 +f 124/209/5 128/214/5 127/206/5 +f 121/211/6 126/208/6 125/207/6 +f 123/213/1 125/207/1 128/214/1 +f 122/216/2 127/206/2 126/208/2 +f 135/218/4 136/226/4 133/219/4 +f 132/221/5 136/226/5 135/218/5 +f 129/223/6 134/220/6 133/219/6 +f 131/225/1 133/219/1 136/226/1 +f 130/228/2 135/218/2 134/220/2 +f 143/230/4 144/238/4 141/231/4 +f 140/233/5 144/238/5 143/230/5 +f 137/235/6 142/232/6 141/231/6 +f 139/237/1 141/231/1 144/238/1 +f 138/240/2 143/230/2 142/232/2 +f 151/242/4 152/250/4 149/243/4 +f 148/245/5 152/250/5 151/242/5 +f 145/247/6 150/244/6 149/243/6 +f 147/249/1 149/243/1 152/250/1 +f 146/252/2 151/242/2 150/244/2 +f 159/254/4 160/262/4 157/255/4 +f 156/257/5 160/262/5 159/254/5 +f 153/259/6 158/256/6 157/255/6 +f 155/261/1 157/255/1 160/262/1 +f 154/264/2 159/254/2 158/256/2 +f 175/266/6 176/285/6 173/267/6 +f 167/269/6 168/277/6 165/270/6 +f 164/272/4 168/277/4 167/269/4 +f 161/274/3 166/271/3 165/270/3 +f 164/276/1 163/447/1 165/270/1 +f 162/278/2 167/269/2 166/271/2 +f 172/280/4 176/285/4 175/266/4 +f 169/282/3 174/268/3 173/267/3 +f 172/284/1 171/448/1 173/267/1 +f 170/286/2 175/266/2 174/268/2 +f 183/288/6 184/296/6 181/289/6 +f 180/291/4 184/296/4 183/288/4 +f 177/293/3 182/290/3 181/289/3 +f 180/295/1 179/449/1 181/289/1 +f 178/297/2 183/288/2 182/290/2 +f 191/299/6 192/307/6 189/300/6 +f 188/302/4 192/307/4 191/299/4 +f 185/304/3 190/301/3 189/300/3 +f 188/306/1 187/450/1 189/300/1 +f 186/308/2 191/299/2 190/301/2 +f 199/310/6 200/318/6 197/311/6 +f 196/313/4 200/318/4 199/310/4 +f 193/315/3 198/312/3 197/311/3 +f 196/317/1 195/451/1 197/311/1 +f 194/319/2 199/310/2 198/312/2 +f 207/321/6 208/329/6 205/322/6 +f 204/324/4 208/329/4 207/321/4 +f 201/326/3 206/323/3 205/322/3 +f 204/328/1 203/452/1 205/322/1 +f 202/330/2 207/321/2 206/323/2 +f 215/332/6 216/340/6 213/333/6 +f 212/335/4 216/340/4 215/332/4 +f 209/337/3 214/334/3 213/333/3 +f 212/339/1 211/453/1 213/333/1 +f 210/341/2 215/332/2 214/334/2 +f 219/343/4 220/352/4 218/344/4 +f 222/346/3 224/351/3 223/347/3 +f 217/349/6 221/348/6 223/347/6 +f 219/343/2 223/347/2 224/351/2 +f 220/353/5 224/351/5 222/346/5 +f 218/355/1 222/346/1 221/348/1 +f 242/357/5 246/454/5 248/358/5 +f 231/360/3 232/368/3 229/361/3 +f 228/363/1 232/368/1 231/360/1 +f 225/365/2 230/362/2 229/361/2 +f 227/367/5 229/361/5 232/368/5 +f 226/370/6 231/360/6 230/362/6 +f 239/372/3 240/376/3 237/373/3 +f 235/375/5 237/373/5 240/376/5 +f 234/378/6 239/372/6 238/374/6 +f 236/380/1 240/376/1 239/372/1 +f 233/382/2 238/374/2 237/373/2 +f 241/384/1 245/388/1 246/385/1 +f 243/387/6 247/455/6 245/388/6 +f 248/358/2 247/456/2 243/389/2 +f 255/390/3 256/394/3 253/391/3 +f 251/393/5 253/391/5 256/394/5 +f 250/396/6 255/390/6 254/392/6 +f 252/398/1 256/394/1 255/390/1 +f 249/400/2 254/392/2 253/391/2 +f 263/402/3 264/406/3 261/403/3 +f 259/405/5 261/403/5 264/406/5 +f 258/408/6 263/402/6 262/404/6 +f 260/410/1 264/406/1 263/402/1 +f 257/412/2 262/404/2 261/403/2 +f 268/414/6 272/438/6 269/415/6 +f 4/3/1 268/2/1 267/417/1 +f 3/418/1 267/417/1 265/419/1 +f 1/420/1 265/419/1 266/421/1 +f 271/422/1 275/444/1 276/423/1 +f 265/425/5 270/439/5 271/426/5 +f 266/428/4 271/422/4 272/424/4 +f 267/430/3 269/436/3 270/431/3 +f 276/433/5 280/445/5 277/434/5 +f 269/436/1 273/446/1 274/437/1 +f 272/438/1 276/433/1 273/435/1 +f 270/439/1 274/443/1 275/440/1 +f 277/434/1 280/445/1 279/441/1 +f 274/443/6 278/442/6 279/441/6 +f 275/444/3 279/441/3 280/445/3 +f 273/446/4 277/434/4 278/442/4 diff --git a/src/main/resources/assets/hbm/textures/models/machines/electric_heater.png b/src/main/resources/assets/hbm/textures/models/machines/electric_heater.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd971aa114af01e34fc4f5bb05fecf4f1607b4d GIT binary patch literal 2249 zcmZ{mdpHyN8^G6?&F#44ej5`zq>w{6Be@$tmqj`ZNe8VM;<%GEms;wHPK6a3a%q_R ziKd#I<~B_TTm2?;*+z3&x&PMh-{1LtpXYmdzwh&X-{*bb=XpQhLSJt;St$)E001EC z;qHtQ?Qx=c4I&|0843I!7vfhPJ^Ue}kpa0_002O)c{rc;PbudUMlWj)YWJP8cri*b z2=-q7?&cX9HoM@I>QZ8y^b^irrqV#({heN(RvN9Ht|L_$^(`A>XYU^EDQ)+~7jg_i zlTMPWQMwuLt{HTc9QJq~ZqvcTB&VHw-uh=CIjiwG;X}spAkUqMo+kvt*2vJv%{y3h zU^LSBK3gt3!!V6d6na5yXn1(jRy*d5@qPDNMz6Q)Xv-cBRVOaLb97rcYyk2-{@}KQ zgV6R+-ijH}asV=}rSE$c?=Wos4}xaTAM}K78Hd?)_->*Gg6D7SVoR`+eNzfcQd#&` zv0-7=$KgaaF~+Rw{Ash^k{jR}R9$Gz)0p>5Z3+c-ILsY|XEwr*4QkT{Wy4mo{Sy-t zFwKqxEtx_Xd7w< zp=9Ld1Kcvr(l?))EuEZ$U**HVKkHJU#p9goAY*LWC{D6tW z#%3mNmfKf4Vp=z6m@m~y+%@j}YQ1CS-+?uTzLua(LvdZ4gON|UslfEqPUZIeUuRiG z9$v@B?}d^y)iw1j&GAaW!Fnc4%-FL(lSQ$*r35q*2dD3_Y?C_2c9K`0oh@6Y&7a8L z<~7-M0~Ph?WRq(VMhEEhclVE~6H{uvkyxXHG;pAi_;qY%)Z;gMV!AzAybi*51g$4c zQBS@{3v%AmhkXuHGF0t{u8u?F3_$5Gz!`hfW`O)1u*{4~N6ESOFCbby<&*COd;EO? zJIvqseoeS@Nur4vEfgP{u1qYMLir{sJ3@G+LzIJ<+@&QC^t_~r(oI0d`po3_DpX~C z3Eb2-Sl0d*22!6A=Hye$C_x&C>g{Y*7BK8gxUBo>C%=sgH~RDVup4~=;+WE`M-Zo{ zZ-^H9JigA?SGy2!I#|ZN(Bb?f&Arp`rQdd`!o;%`Y1(`OCNAzP6`P-*PuMG#UEEfg zj`?@y!HV{Wn5OH$|28!2U8RKgDKhJQa>zj{4&6V!ED=WNr4D@<)Z#<0iF>B8K|tK= zBqr%Sy#Ujmc6?{k!%H0!ieIp>G9MbhFEdxHKNMh?8Zs3go%ry8ldPtu{x-hX7uaV5 zO=i8+UfBJ^+fjVmMv^6|byv|-stB1+eCztCJL?hQB=%6V{1vRSIuts$z8j3@Lb{YZ zf)cuC3z2ujoP_aO3sl>NhK3O4D@A>JLzlY*(OK$rfRPjq7WQ{YO)b2R2Nk9CPkD$@ zijOQgOi0sTl5w6Wx3ac&Zx8B^*D@Jow_*|bOQ6+(*S06ERPJQA@>hJaVd9R*My@Km zH=Q`MMSh(R&ALrvDKG*ptZ6TNM$o-OWd|9lnDkTlg7PKMca|M?ive#|;IACkrzd@4 zc899|k>aD$GJCova=@s^7)H$H)(1IY3DYn4&(=y8%Ku#LjLgBY`LQ@T&O-C$mJrTb z^rDr;YE;VJDtik~YF?Q~WIyV6PsZk|ayJrE!j%RBN&RKJI;8enX9jP#S`_;Wi-M-@ z8@YAGiJ&>eKzvtAi&|IAah*w|_CO&q50g8oHWO>2^80E^=fDHh+87N>ZH1Z|Ey?H} za?^oTI}j9LUc*J}W3*N3+S;0cr%E6WLYX>^0h|OIWy89e(x|&d`O2<#jZKWXoxS95 zE6g(#+l}C}=+$LXJAG@uOdeQ09v{2@>oq7Mr9#IpEs;%RQPSPoOLvgfs5e>EW-}O4 z(N6-%Tg_kzI_4$HIv9lUf^FYdkj6Q|+yDlHxyk3p)YR12vPONf_M02bEh&&T*!N2x zSu6?NBbo3bWps9GYWMS*1|e{L3xT4|jatil9gd6KUY^8)`JmX?*b@ju#;!W}`X%6q zSJ>V*zoNGerdqtgDv&Xpxsx38b3Vzw%g~6i)#PB&5JY_%p2)+8@6z`ngm^4HrR|Q zjOViI7m7da+fVO15a8*unwAsTs|BT7j+XHFb)2xwpT8re5NOsDBmQ zway9ur7Yw4NZSd6LIt&mAcbgP>OX=-8xsqW?Yjh@klD^5by zT*Q;=k+uqwxkYRk^n zEoX)h)00uH8}KUg8OZpD5mz^kiHgVl0Mi@Uyog_@ayeFx^7 zg2*E)dpY51IT~a#xhkPsi_7Jjn3w?2Q)|o1#&S@5d}1um^&t|^5j~6$|8FFP^V zTQ10I#r_KlpB*2VO7TIY#zrbxuhQ?YDiQ%>+B_z?)IN1fO218Y3h!m;WJ@qCeg{A= tuDOI8oBuH5ZIY*~VLLFST5odzo-LINubth<75z;B9xmR_B**jD{{s@3OoRXc literal 0 HcmV?d00001