From 0412ac6154f4d390c8b32b9c5ba15ffba7301f36 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 18 Apr 2022 22:52:07 +0200 Subject: [PATCH] finished new RBMK column, more fluid IO stuff --- .../hbm/fluid/IFluidStandardTransceiver.java | 77 ++ src/main/java/api/hbm/fluid/IFluidUser.java | 8 +- src/main/java/com/hbm/blocks/ModBlocks.java | 7 + .../java/com/hbm/blocks/machine/Charger.java | 57 ++ .../hbm/blocks/machine/rbmk/RBMKHeater.java | 4 + .../entity/mob/siege/EntitySiegeCraft.java | 5 + .../com/hbm/inventory/gui/GUIRBMKConsole.java | 8 + src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/ResourceManager.java | 6 + .../hbm/render/tileentity/RenderCharger.java | 92 ++ .../hbm/tileentity/TileEntityProxyCombo.java | 39 +- .../java/com/hbm/tileentity/TileMappings.java | 4 +- .../tileentity/machine/TileEntityCharger.java | 23 + .../machine/TileEntityMachineCoal.java | 2 +- .../machine/TileEntityMachineDiesel.java | 2 +- .../machine/rbmk/TileEntityRBMKBase.java | 1 - .../machine/rbmk/TileEntityRBMKConsole.java | 7 + .../machine/rbmk/TileEntityRBMKHeater.java | 53 +- .../machine/rbmk/TileEntityRBMKOutlet.java | 1 - .../machine/storage/TileEntityBarrel.java | 27 +- .../storage/TileEntityMachineBAT9000.java | 25 + .../storage/TileEntityMachineOrbus.java | 34 +- .../assets/hbm/models/blocks/charger.obj | 903 ++++++++++++++++++ .../hbm/textures/models/machines/charger.png | Bin 0 -> 679 bytes .../textures/models/tank_label/tank_MUG.png | Bin 0 -> 1540 bytes .../models/tank_label/tank_MUG_HOT.png | Bin 0 -> 1661 bytes 26 files changed, 1357 insertions(+), 30 deletions(-) create mode 100644 src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java create mode 100644 src/main/java/com/hbm/blocks/machine/Charger.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderCharger.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java create mode 100644 src/main/resources/assets/hbm/models/blocks/charger.obj create mode 100644 src/main/resources/assets/hbm/textures/models/machines/charger.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_MUG.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank_label/tank_MUG_HOT.png diff --git a/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java b/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java new file mode 100644 index 000000000..ab9ff9816 --- /dev/null +++ b/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java @@ -0,0 +1,77 @@ +package api.hbm.fluid; + +import com.hbm.inventory.FluidTank; +import com.hbm.inventory.fluid.FluidType; + +/** + * transceiver [trăn-sē′vər], noun + * + * 1. A transmitter and receiver housed together in a single unit and having some circuits in common, often for portable or mobile use. + * 2. A combinedradiotransmitter and receiver. + * 3. A device that performs transmitting and receivingfunctions, especially if using commoncomponents. + * + * The American Heritage® Dictionary of the English Language, 5th Edition. + * + * @author hbm + * + */ +public interface IFluidStandardTransceiver extends IFluidUser { + + public FluidTank[] getSendingTanks(); + public FluidTank[] getReceivingTanks(); + + @Override + public default long getTotalFluidForSend(FluidType type) { + + for(FluidTank tank : getSendingTanks()) { + if(tank.getTankType() == type) { + return tank.getFill(); + } + } + + return 0; + } + + @Override + public default void removeFluidForTransfer(FluidType type, long amount) { + + for(FluidTank tank : getSendingTanks()) { + if(tank.getTankType() == type) { + tank.setFill(tank.getFill() - (int) amount); + return; + } + } + } + + @Override + public default long getDemand(FluidType type) { + + for(FluidTank tank : getReceivingTanks()) { + if(tank.getTankType() == type) { + return tank.getMaxFill() - tank.getFill(); + } + } + + return 0; + } + + @Override + public default long transferFluid(FluidType type, long amount) { + + for(FluidTank tank : getReceivingTanks()) { + if(tank.getTankType() == type) { + tank.setFill(tank.getFill() + (int) amount); + + if(tank.getFill() > tank.getMaxFill()) { + long overshoot = tank.getFill() - tank.getMaxFill(); + tank.setFill(tank.getMaxFill()); + return overshoot; + } + + return 0; + } + } + + return amount; + } +} \ No newline at end of file diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java index 154d234e2..9c79cb70c 100644 --- a/src/main/java/api/hbm/fluid/IFluidUser.java +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -64,9 +64,15 @@ public interface IFluidUser extends IFluidConnector { public default long getTotalFluidForSend(FluidType type) { return 0; } public default void removeFluidForTransfer(FluidType type, long amount) { } - public default void updateStandardPipes(FluidType type, World world, int x, int y, int z) { + public default void subscribeToAllAround(FluidType type, World world, int x, int y, int z) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.trySubscribe(type, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir); } + + public default void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) { + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + this.tryUnsubscribe(type, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); + } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7f093a977..2502fa972 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -558,6 +558,8 @@ public class ModBlocks { public static Block barbed_wire_ultradeath; public static Block spikes; + public static Block charger; + public static Block tesla; public static Block marker_structure; @@ -2010,6 +2012,8 @@ public class ModBlocks { barbed_wire_ultradeath = new BarbedWire(Material.iron).setBlockName("barbed_wire_ultradeath").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":barbed_wire_ultradeath_model"); spikes = new Spikes(Material.iron).setBlockName("spikes").setHardness(2.5F).setResistance(5.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":spikes"); + charger = new Charger(Material.iron).setBlockName("charger").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":charger"); + tesla = new MachineTesla(Material.iron).setBlockName("tesla").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":tesla"); marker_structure = new BlockMarker(Material.iron).setBlockName("marker_structure").setHardness(0.0F).setResistance(0.0F).setLightLevel(1.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":marker_structure"); @@ -2636,6 +2640,9 @@ public class ModBlocks { GameRegistry.registerBlock(spikes, spikes.getUnlocalizedName()); GameRegistry.registerBlock(tesla, tesla.getUnlocalizedName()); + //Charger + GameRegistry.registerBlock(charger, charger.getUnlocalizedName()); + //Siege blocks GameRegistry.registerBlock(siege_shield, ItemBlockLore.class, siege_shield.getUnlocalizedName()); GameRegistry.registerBlock(siege_internal, ItemBlockLore.class, siege_internal.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/Charger.java b/src/main/java/com/hbm/blocks/machine/Charger.java new file mode 100644 index 000000000..a152b2201 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/Charger.java @@ -0,0 +1,57 @@ +package com.hbm.blocks.machine; + +import com.hbm.tileentity.machine.TileEntityCharger; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class Charger extends BlockContainer { + + public Charger(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityCharger(); + } + + @Override + public int getRenderType(){ + return -1; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if(i == 0) { + world.setBlockMetadataWithNotify(x, y, z, 2, 2); + } + if(i == 1) { + world.setBlockMetadataWithNotify(x, y, z, 5, 2); + } + if(i == 2) { + world.setBlockMetadataWithNotify(x, y, z, 3, 2); + } + if(i == 3) { + world.setBlockMetadataWithNotify(x, y, z, 4, 2); + } + } +} diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKHeater.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKHeater.java index 51e438f1c..39e26d99f 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKHeater.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKHeater.java @@ -1,5 +1,6 @@ package com.hbm.blocks.machine.rbmk; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKHeater; import net.minecraft.entity.player.EntityPlayer; @@ -13,6 +14,9 @@ public class RBMKHeater extends RBMKBase { if(meta >= this.offset) return new TileEntityRBMKHeater(); + + if(hasExtra(meta)) + return new TileEntityProxyCombo(false, false, true); return null; } diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java index 7492c2a4c..2eb1afda9 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeCraft.java @@ -138,6 +138,11 @@ public class EntitySiegeCraft extends EntityUFOBase implements IBossDisplayData ); } + @Override + protected int getScanRange() { + return 100; + } + @Override protected int targetHeightOffset() { return 7 + rand.nextInt(5); diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 27fb510f9..1ac9e7503 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -210,6 +210,7 @@ public class GUIRBMKConsole extends GuiScreen { } } + @SuppressWarnings("incomplete-switch") //shut up protected void drawGuiContainerBackgroundLayer(float interp, int mX, int mY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); @@ -286,6 +287,13 @@ public class GUIRBMKConsole extends GuiScreen { drawTexturedModalRect(guiLeft + x + 4, guiTop + y + 7, 44, 189, 2, 2); break; + + case HEATEX: + int cc = (int)Math.ceil((col.data.getInteger("water")) * 8 / col.data.getDouble("maxWater")); + drawTexturedModalRect(guiLeft + x + 1, guiTop + y + size - cc - 1, 131, 191 - cc, 3, cc); + int hc = (int)Math.ceil((col.data.getInteger("steam")) * 8 / col.data.getDouble("maxSteam")); + drawTexturedModalRect(guiLeft + x + 6, guiTop + y + size - hc - 1, 136, 191 - hc, 3, hc); + break; } if(this.selection[i]) diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c98b15df3..0efd061b8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -271,6 +271,8 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConnector.class, new RenderConnector()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylonLarge.class, new RenderPylonLarge()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySubstation.class, new RenderSubstation()); + //chargers + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCharger.class, new RenderCharger()); //multiblocks ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStructureMarker.class, new RenderStructureMaker()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMultiblock.class, new RenderMultiblock()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 50a69059b..264e9ddbf 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -294,6 +294,9 @@ public class ResourceManager { //Electrolyser public static final IModelCustom electrolyser = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/electrolyser.obj")); + //Belt + public static final IModelCustom charger = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/charger.obj")); + ////Textures TEs public static final ResourceLocation universal = new ResourceLocation(RefStrings.MODID, "textures/models/TheGadget3_.png"); @@ -603,6 +606,9 @@ public class ResourceManager { //Electrolyser public static final ResourceLocation electrolyser_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/electrolyser.png"); + //Charger + public static final ResourceLocation charger_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/charger.png"); + ////Obj Items //Shimmer Sledge diff --git a/src/main/java/com/hbm/render/tileentity/RenderCharger.java b/src/main/java/com/hbm/render/tileentity/RenderCharger.java new file mode 100644 index 000000000..246fe883f --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderCharger.java @@ -0,0 +1,92 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderCharger extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glRotatef(90, 0F, 1F, 0F); + switch(tile.getBlockMetadata()) { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.charger_tex); + ResourceManager.charger.renderPart("Base"); + + int time = (int) (System.currentTimeMillis() % 2000); + if(time >= 1000) + time = 1000 - (time - 1000); + + double extend = Math.min(time, 500) / 500D; + double swivel = Math.max(time - 500, 0) / 500D; + + GL11.glPushMatrix(); + + GL11.glTranslated(-0.34375D, 0.25D, 0); + GL11.glRotated(10, 0, 0, 1); + GL11.glTranslated(0.34375D, -0.25D, 0); + + GL11.glTranslated(0, -0.25 * extend, 0); + + //ResourceManager.charger.renderPart("Slide"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.28D, 0); + GL11.glRotated(30 * swivel, 1, 0, 0); + GL11.glTranslated(0, -0.28D, 0); + ResourceManager.charger.renderPart("Left"); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.28D, 0); + GL11.glRotated(-30 * swivel, 1, 0, 0); + GL11.glTranslated(0, -0.28D, 0); + ResourceManager.charger.renderPart("Right"); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + + GL11.glColor3f(1F, 0.75F, 0F); + ResourceManager.charger.renderPart("Light"); + GL11.glColor3f(1F, 1F, 1F); + + GL11.glTranslated(-0.34375D, 0.25D, 0); + GL11.glRotated(10, 0, 0, 1); + GL11.glTranslated(0.34375D, -0.25D, 0); + GL11.glTranslated(0, -0.25 * extend, 0); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + ResourceManager.charger.renderPart("Slide"); + + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index e95a6f523..067f4f73c 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -7,6 +7,7 @@ import com.hbm.inventory.fluid.FluidType; import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidConnector; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -14,7 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory { +public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector { TileEntity tile; boolean inventory; @@ -400,4 +401,40 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy nbt.setBoolean("power", power); nbt.setBoolean("fluid", fluid); } + + @Override + public long transferFluid(FluidType type, long fluid) { + + if(!this.fluid) + return fluid; + + if(getTile() instanceof IFluidConnector) { + return ((IFluidConnector)getTile()).transferFluid(type, fluid); + } + return fluid; + } + + @Override + public long getDemand(FluidType type) { + + if(!this.fluid) + return 0; + + if(getTile() instanceof IFluidConnector) { + return ((IFluidConnector)getTile()).getDemand(type); + } + return 0; + } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + + if(!this.fluid) + return false; + + if(getTile() instanceof IFluidConnector) { + return ((IFluidConnector)getTile()).canConnect(type, dir); + } + return false; + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 10bac11a4..b71596055 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -193,8 +193,10 @@ public class TileMappings { put(TileEntityLoot.class, "tileentity_ntm_loot"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); put(TileEntityEmitter.class, "tileentity_ntm_emitter"); - + put(TileEntityDoorGeneric.class, "tileentity_ntm_door"); + + put(TileEntityCharger.class, "tileentity_ntm_charger"); put(TileEntityProxyInventory.class, "tileentity_proxy_inventory"); put(TileEntityProxyEnergy.class, "tileentity_proxy_power"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java new file mode 100644 index 000000000..1699d646a --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -0,0 +1,23 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityLoadedBase; + +import api.hbm.energy.IEnergyUser; + +public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUser { + + @Override + public long getPower() { + return 0; + } + + @Override + public long getMaxPower() { + return 0; + } + + @Override + public void setPower(long power) { + + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java index ac6e0f679..abeb01a6d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCoal.java @@ -226,7 +226,7 @@ public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISide for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - this.updateStandardPipes(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); + this.subscribeToAllAround(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); //Water tank.loadTank(0, 3, slots); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 8948ad2fb..945e46afe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -102,7 +102,7 @@ public class TileEntityMachineDiesel extends TileEntityMachineBase implements IE for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - this.updateStandardPipes(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); + this.subscribeToAllAround(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); //Tank Management tank.setType(3, 4, slots); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java index d38c0e3e7..8c876e14c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBase.java @@ -35,7 +35,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent; diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index 78150cdd7..8e87230c0 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -254,6 +254,13 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon case CONTROL_AUTO: stats.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("rbmk.control.level", ((int)((this.data.getDouble("level") * 100D))) + "%")); break; + + case HEATEX: + stats.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey(I18nUtil.resolveKey(Fluids.fromID(this.data.getShort("type")).getUnlocalizedName()) + " " + + this.data.getInteger("water") + "/" + this.data.getInteger("maxWater") + "mB")); + stats.add(EnumChatFormatting.RED + I18nUtil.resolveKey(I18nUtil.resolveKey(Fluids.fromID(this.data.getShort("hottype")).getUnlocalizedName()) + " " + + this.data.getInteger("steam") + "/" + this.data.getInteger("maxSteam") + "mB")); + break; } if(data.getBoolean("moderated")) diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index 1dd6fb692..1ee65fb2c 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.ModBlocks; +import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.FluidTank; @@ -12,6 +13,8 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; +import net.minecraft.nbt.NBTTagCompound; + public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements IFluidAcceptor, IFluidSource { public FluidTank feed; @@ -28,11 +31,6 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I public String getName() { return "container.rbmkHeater"; } - - @Override - public ColumnType getConsoleType() { - return ColumnType.HEATEX; - } @Override public void updateEntity() { @@ -166,4 +164,49 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I public void clearFluidList(FluidType type) { list.clear(); } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + feed.readFromNBT(nbt, "feed"); + steam.readFromNBT(nbt, "steam"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + feed.writeToNBT(nbt, "feed"); + steam.writeToNBT(nbt, "steam"); + } + + @Override + public void onMelt(int reduce) { + + int count = 1 + worldObj.rand.nextInt(2); + + for(int i = 0; i < count; i++) { + spawnDebris(DebrisType.BLANK); + } + + super.onMelt(reduce); + } + + @Override + public ColumnType getConsoleType() { + return ColumnType.HEATEX; + } + + @Override + public NBTTagCompound getNBTForConsole() { + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("water", this.feed.getFill()); + data.setInteger("maxWater", this.feed.getMaxFill()); + data.setInteger("steam", this.steam.getFill()); + data.setInteger("maxSteam", this.steam.getMaxFill()); + data.setShort("type", (short)this.feed.getTankType().getID()); + data.setShort("hottype", (short)this.steam.getTankType().getID()); + return data; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java index f815052df..63d3aee00 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutlet.java @@ -15,7 +15,6 @@ import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -import scala.actors.threadpool.Arrays; public class TileEntityRBMKOutlet extends TileEntity implements IFluidSource { diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 504372313..e954e41d8 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -14,13 +14,13 @@ import com.hbm.lib.Library; import com.hbm.main.ModEventHandler; import com.hbm.tileentity.TileEntityMachineBase; -import api.hbm.fluid.IFluidUser; +import api.hbm.fluid.IFluidStandardTransceiver; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; -public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IFluidUser { +public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver { public FluidTank tank; public short mode = 0; @@ -57,9 +57,11 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc this.sendFluidToAll(tank.getTankType(), this); } - /* - * TODO: these don't work as receivers yet, don't forget how the subscription system works - */ + if(this.mode == 0 || this.mode == 1) { + this.subscribeToAllAround(tank.getTankType(), worldObj, xCoord, yCoord, zCoord); + } else { + this.unsubscribeToAllAround(tank.getTankType(), worldObj, xCoord, yCoord, zCoord); + } age++; if(age >= 20) @@ -126,7 +128,6 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc } public void networkUnpack(NBTTagCompound data) { - mode = data.getShort("mode"); } @@ -211,18 +212,12 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc } @Override - public long transferFluid(FluidType type, long fluid) { - long toTransfer = Math.min(getDemand(type), fluid); - tank.setFill(tank.getFill() + (int) toTransfer); - return fluid - toTransfer; + public FluidTank[] getSendingTanks() { + return (mode == 1 || mode == 2) ? new FluidTank[] {tank} : new FluidTank[0]; } @Override - public long getDemand(FluidType type) { - - if(this.mode == 2 || this.mode == 3) - return 0; - - return type == tank.getTankType() ? tank.getMaxFill() - tank.getFill() : 0; + public FluidTank[] getReceivingTanks() { + return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0]; } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBAT9000.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBAT9000.java index 876ba7dda..2c64945ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBAT9000.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBAT9000.java @@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; public class TileEntityMachineBAT9000 extends TileEntityBarrel { @@ -28,6 +29,30 @@ public class TileEntityMachineBAT9000 extends TileEntityBarrel { } } + @Override + public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) { + this.trySubscribe(type, world, xCoord + 1, yCoord, zCoord + 3, Library.POS_Z); + this.trySubscribe(type, world, xCoord - 1, yCoord, zCoord + 3, Library.POS_Z); + this.trySubscribe(type, world, xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z); + this.trySubscribe(type, world, xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z); + this.trySubscribe(type, world, xCoord + 3, yCoord, zCoord + 1, Library.POS_X); + this.trySubscribe(type, world, xCoord - 3, yCoord, zCoord + 1, Library.POS_X); + this.trySubscribe(type, world, xCoord + 3, yCoord, zCoord - 1, Library.NEG_X); + this.trySubscribe(type, world, xCoord - 3, yCoord, zCoord - 1, Library.NEG_X); + } + + @Override + public void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) { + this.tryUnsubscribe(type, world, xCoord + 1, yCoord, zCoord + 3); + this.tryUnsubscribe(type, world, xCoord - 1, yCoord, zCoord + 3); + this.tryUnsubscribe(type, world, xCoord + 1, yCoord, zCoord - 3); + this.tryUnsubscribe(type, world, xCoord - 1, yCoord, zCoord - 3); + this.tryUnsubscribe(type, world, xCoord + 3, yCoord, zCoord + 1); + this.tryUnsubscribe(type, world, xCoord - 3, yCoord, zCoord + 1); + this.tryUnsubscribe(type, world, xCoord + 3, yCoord, zCoord - 1); + this.tryUnsubscribe(type, world, xCoord - 3, yCoord, zCoord - 1); + } + @Override public void fillFluidInit(FluidType type) { fillFluid(this.xCoord + 1, this.yCoord, this.zCoord + 3, getTact(), type); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java index 243b14f77..7fa054606 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineOrbus.java @@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineOrbus extends TileEntityBarrel { @@ -29,7 +30,7 @@ public class TileEntityMachineOrbus extends TileEntityBarrel { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); - for(int i = -1; i < 7; i += 7) { + for(int i = -1; i < 6; i += 6) { this.fillFluid(xCoord, yCoord + i, zCoord, this.getTact(), this.tank.getTankType()); this.fillFluid(xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, this.getTact(), this.tank.getTankType()); this.fillFluid(xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ, this.getTact(), this.tank.getTankType()); @@ -42,7 +43,7 @@ public class TileEntityMachineOrbus extends TileEntityBarrel { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); - for(int i = -1; i < 7; i += 7) { + for(int i = -1; i < 6; i += 6) { ForgeDirection out = i == -1 ? ForgeDirection.DOWN : ForgeDirection.UP; sendFluid(type, worldObj, xCoord, yCoord + i, zCoord, out); sendFluid(type, worldObj, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, out); @@ -50,6 +51,35 @@ public class TileEntityMachineOrbus extends TileEntityBarrel { sendFluid(type, worldObj, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ, out); } } + + @Override + public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + for(int i = -1; i < 6; i += 6) { + ForgeDirection out = i == -1 ? ForgeDirection.DOWN : ForgeDirection.UP; + this.trySubscribe(type, world, xCoord, yCoord + i, zCoord, out); + this.trySubscribe(type, world, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ, out); + this.trySubscribe(type, world, xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ, out); + this.trySubscribe(type, world, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ, out); + } + } + + @Override + public void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + for(int i = -1; i < 7; i += 7) { + this.tryUnsubscribe(type, world, xCoord, yCoord + i, zCoord); + this.tryUnsubscribe(type, world, xCoord + dir.offsetX, yCoord + i, zCoord + dir.offsetZ); + this.tryUnsubscribe(type, world, xCoord + rot.offsetX, yCoord + i, zCoord + rot.offsetZ); + this.tryUnsubscribe(type, world, xCoord + dir.offsetX + rot.offsetX, yCoord + i, zCoord + dir.offsetZ + rot.offsetZ); + } + } AxisAlignedBB bb = null; diff --git a/src/main/resources/assets/hbm/models/blocks/charger.obj b/src/main/resources/assets/hbm/models/blocks/charger.obj new file mode 100644 index 000000000..f792f4807 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/charger.obj @@ -0,0 +1,903 @@ +# Blender v2.79 (sub 0) OBJ File: 'charger.blend' +# www.blender.org +o Light +v -0.266762 0.501450 -0.023437 +v -0.269068 0.517861 -0.016573 +v -0.270024 0.524659 0.000000 +v -0.269068 0.517861 0.016573 +v -0.266762 0.501450 0.023438 +v -0.264455 0.485038 0.016573 +v -0.263500 0.478240 0.000000 +v -0.264455 0.485038 -0.016573 +vn 0.9903 0.1392 0.0000 +s off +f 3//1 5//1 7//1 +f 1//1 2//1 3//1 +f 3//1 4//1 5//1 +f 5//1 6//1 7//1 +f 7//1 8//1 1//1 +f 1//1 3//1 7//1 +o Left +v -0.406250 0.281250 0.000000 +v -0.387944 0.281250 0.044194 +v -0.343750 0.281250 0.062500 +v -0.299556 0.281250 0.044194 +v -0.281250 0.281250 0.000000 +v -0.375000 0.281250 0.000000 +v -0.365847 0.281250 0.022097 +v -0.343750 0.281250 0.031250 +v -0.321653 0.281250 0.022097 +v -0.312500 0.281250 0.000000 +v -0.387944 0.531250 0.044194 +v -0.406250 0.531250 0.000000 +v -0.343750 0.531250 0.062500 +v -0.299556 0.531250 0.044194 +v -0.281250 0.531250 0.000000 +v -0.365847 0.531250 0.022097 +v -0.375000 0.531250 0.000000 +v -0.343750 0.531250 0.031250 +v -0.321653 0.531250 0.022097 +v -0.312500 0.531250 0.000000 +v -0.406250 0.281250 0.000000 +v -0.387944 0.281250 0.044194 +v -0.343750 0.281250 0.062500 +v -0.299556 0.281250 0.044194 +v -0.281250 0.281250 0.000000 +v -0.375000 0.281250 0.000000 +v -0.365847 0.281250 0.022097 +v -0.343750 0.281250 0.031250 +v -0.321653 0.281250 0.022097 +v -0.312500 0.281250 0.000000 +v -0.387944 0.531250 0.044194 +v -0.406250 0.531250 0.000000 +v -0.343750 0.531250 0.062500 +v -0.299556 0.531250 0.044194 +v -0.281250 0.531250 0.000000 +v -0.365847 0.531250 0.022097 +v -0.375000 0.531250 0.000000 +v -0.343750 0.531250 0.031250 +v -0.321653 0.531250 0.022097 +v -0.312500 0.531250 0.000000 +vt 0.486486 0.026316 +vt 0.513514 -0.000000 +vt 0.540541 0.026316 +vt 0.378378 -0.000000 +vt 0.432432 0.026316 +vt 0.378378 0.026316 +vt 0.540541 -0.000000 +vt 0.594595 0.026316 +vt 0.459459 -0.000000 +vt 0.486486 0.236842 +vt 0.513514 0.263158 +vt 0.486486 0.263158 +vt 0.432432 0.236842 +vt 0.378378 0.263158 +vt 0.378378 0.236842 +vt 0.594595 0.236842 +vt 0.540541 0.263158 +vt 0.540541 0.236842 +vt 0.459459 0.263158 +vt 0.432432 0.263158 +vt 0.621622 0.026316 +vt 0.351351 0.236842 +vt 0.351351 0.026316 +vt 0.486486 -0.000000 +vt 0.405405 -0.000000 +vt 0.567568 -0.000000 +vt 0.432432 -0.000000 +vt 0.405405 0.263158 +vt 0.567568 0.263158 +vt 0.621622 0.236842 +vt 0.378378 0.473684 +vt 0.405405 0.263158 +vt 0.405405 0.473684 +vt 0.486486 0.026316 +vt 0.432432 0.236842 +vt 0.432432 0.026316 +vt 0.432432 0.473684 +vt 0.459459 0.263158 +vt 0.459459 0.473684 +vt 0.540541 0.026316 +vt 0.486486 0.236842 +vt 0.486486 0.473684 +vt 0.513514 0.263158 +vt 0.513514 0.473684 +vt 0.594595 0.026316 +vt 0.540541 0.236842 +vt 0.378378 0.236842 +vt 0.378378 0.026316 +vt 0.540541 0.473684 +vt 0.567568 0.263158 +vt 0.567568 0.473684 +vt 0.378378 0.263158 +vt 0.432432 0.263158 +vt 0.486486 0.263158 +vt 0.594595 0.236842 +vt 0.540541 0.263158 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.9239 0.0000 -0.3827 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 1.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.9239 0.0000 0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.9239 0.0000 -0.3827 +s off +f 11/1/2 17/2/2 12/3/2 +f 14/4/2 10/5/2 9/6/2 +f 17/7/2 13/8/2 12/3/2 +f 10/5/2 16/9/2 11/1/2 +f 21/10/3 27/11/3 26/12/3 +f 19/13/3 25/14/3 20/15/3 +f 23/16/3 27/17/3 22/18/3 +f 19/13/3 26/19/3 24/20/3 +f 18/21/4 23/16/4 13/8/4 +f 9/6/4 25/22/4 14/23/4 +f 11/1/2 16/24/2 17/2/2 +f 14/4/2 15/25/2 10/5/2 +f 17/7/2 18/26/2 13/8/2 +f 10/5/2 15/27/2 16/9/2 +f 21/10/3 22/18/3 27/11/3 +f 19/13/3 24/28/3 25/14/3 +f 23/16/3 28/29/3 27/17/3 +f 19/13/3 21/10/3 26/19/3 +f 18/21/4 28/30/4 23/16/4 +f 9/6/4 20/15/4 25/22/4 +s 1 +f 34/31/5 44/32/6 35/33/6 +f 31/34/7 39/35/8 30/36/8 +f 35/37/6 46/38/4 36/39/4 +f 32/40/9 41/41/7 31/34/7 +f 36/42/4 47/43/10 37/44/10 +f 33/45/11 42/46/9 32/40/9 +f 30/36/8 40/47/12 29/48/12 +f 37/49/10 48/50/13 38/51/13 +f 34/31/5 45/52/5 44/32/6 +f 31/34/7 41/41/7 39/35/8 +f 35/37/6 44/53/6 46/38/4 +f 32/40/9 42/46/9 41/41/7 +f 36/42/4 46/54/4 47/43/10 +f 33/45/11 43/55/11 42/46/9 +f 30/36/8 39/35/8 40/47/12 +f 37/49/10 47/56/10 48/50/13 +o Right +v -0.343750 0.281250 -0.062500 +v -0.387944 0.281250 -0.044194 +v -0.406250 0.281250 0.000000 +v -0.281250 0.281250 0.000000 +v -0.299556 0.281250 -0.044194 +v -0.343750 0.281250 -0.031250 +v -0.365847 0.281250 -0.022097 +v -0.375000 0.281250 0.000000 +v -0.312500 0.281250 0.000000 +v -0.321653 0.281250 -0.022097 +v -0.387944 0.531250 -0.044194 +v -0.343750 0.531250 -0.062500 +v -0.406250 0.531250 0.000000 +v -0.299556 0.531250 -0.044194 +v -0.281250 0.531250 0.000000 +v -0.365847 0.531250 -0.022097 +v -0.343750 0.531250 -0.031250 +v -0.375000 0.531250 0.000000 +v -0.321653 0.531250 -0.022097 +v -0.312500 0.531250 0.000000 +v -0.343750 0.281250 -0.031250 +v -0.365847 0.281250 -0.022097 +v -0.375000 0.281250 0.000000 +v -0.312500 0.281250 0.000000 +v -0.321653 0.281250 -0.022097 +v -0.365847 0.531250 -0.022097 +v -0.343750 0.531250 -0.031250 +v -0.375000 0.531250 0.000000 +v -0.321653 0.531250 -0.022097 +v -0.312500 0.531250 0.000000 +v -0.343750 0.281250 -0.062500 +v -0.387944 0.281250 -0.044194 +v -0.406250 0.281250 0.000000 +v -0.281250 0.281250 0.000000 +v -0.299556 0.281250 -0.044194 +v -0.387944 0.531250 -0.044194 +v -0.343750 0.531250 -0.062500 +v -0.406250 0.531250 0.000000 +v -0.299556 0.531250 -0.044194 +v -0.281250 0.531250 0.000000 +vt 0.486486 0.026316 +vt 0.513514 -0.000000 +vt 0.540541 0.026316 +vt 0.432432 -0.000000 +vt 0.432432 0.026316 +vt 0.567568 0.000000 +vt 0.594595 0.026316 +vt 0.378378 0.026316 +vt 0.405405 -0.000000 +vt 0.486486 0.236842 +vt 0.513514 0.263158 +vt 0.486486 0.263158 +vt 0.432432 0.263158 +vt 0.432432 0.236842 +vt 0.540541 0.236842 +vt 0.567568 0.263158 +vt 0.540541 0.263158 +vt 0.378378 0.236842 +vt 0.405405 0.263158 +vt 0.378378 0.263158 +vt 0.351351 0.236842 +vt 0.351351 0.026316 +vt 0.621622 0.026316 +vt 0.594595 0.236842 +vt 0.486486 -0.000000 +vt 0.459459 -0.000000 +vt 0.540541 0.000000 +vt 0.378378 -0.000000 +vt 0.459459 0.263158 +vt 0.621622 0.236842 +vt 0.594595 0.026316 +vt 0.540541 0.236842 +vt 0.540541 0.026316 +vt 0.486486 0.236842 +vt 0.486486 0.026316 +vt 0.432432 0.236842 +vt 0.432432 0.026316 +vt 0.378378 0.236842 +vt 0.378378 0.026316 +vt 0.378378 0.473684 +vt 0.405405 0.263158 +vt 0.405405 0.473684 +vt 0.432432 0.473684 +vt 0.459459 0.263158 +vt 0.459459 0.473684 +vt 0.486486 0.473684 +vt 0.513514 0.263158 +vt 0.513514 0.473684 +vt 0.540541 0.473684 +vt 0.567568 0.263158 +vt 0.567568 0.473684 +vt 0.594595 0.236842 +vt 0.378378 0.263158 +vt 0.432432 0.263158 +vt 0.486486 0.263158 +vt 0.540541 0.263158 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.9239 0.0000 -0.3827 +vn -0.7071 0.0000 -0.7071 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.9239 0.0000 -0.3827 +vn -0.9239 0.0000 0.3827 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.9239 0.0000 0.3827 +s off +f 49/57/14 55/58/14 50/59/14 +f 58/60/14 49/57/14 53/61/14 +f 50/59/14 56/62/14 51/63/14 +f 52/64/14 58/65/14 53/61/14 +f 60/66/15 64/67/15 65/68/15 +f 60/66/15 67/69/15 62/70/15 +f 59/71/15 66/72/15 64/73/15 +f 63/74/15 67/75/15 68/76/15 +f 52/64/16 68/77/16 57/78/16 +f 56/79/16 61/80/16 51/63/16 +f 49/57/14 54/81/14 55/58/14 +f 58/60/14 54/82/14 49/57/14 +f 50/59/14 55/83/14 56/62/14 +f 52/64/14 57/84/14 58/65/14 +f 60/66/15 59/71/15 64/67/15 +f 60/66/15 65/85/15 67/69/15 +f 59/71/15 61/80/15 66/72/15 +f 63/74/15 62/70/15 67/75/15 +f 52/64/16 63/74/16 68/77/16 +f 56/79/16 66/86/16 61/80/16 +s 1 +f 81/87/17 84/88/18 80/89/18 +f 80/89/18 85/90/19 79/91/19 +f 79/91/19 87/92/20 83/93/20 +f 83/93/20 88/94/21 82/95/21 +f 72/96/22 77/97/23 73/98/23 +f 73/99/23 75/100/16 69/101/16 +f 69/102/16 74/103/24 70/104/24 +f 70/105/24 76/106/25 71/107/25 +f 81/87/17 86/108/17 84/88/18 +f 80/89/18 84/88/18 85/90/19 +f 79/91/19 85/90/19 87/92/20 +f 83/93/20 87/92/20 88/94/21 +f 72/96/22 78/109/22 77/97/23 +f 73/99/23 77/110/23 75/100/16 +f 69/102/16 75/111/16 74/103/24 +f 70/105/24 74/112/24 76/106/25 +o Slide +v -0.343750 0.281250 -0.062500 +v -0.387944 0.281250 -0.044194 +v -0.406250 0.281250 0.000000 +v -0.387944 0.281250 0.044194 +v -0.343750 0.281250 0.062500 +v -0.299556 0.281250 0.044194 +v -0.281250 0.281250 0.000000 +v -0.299556 0.281250 -0.044194 +v -0.343750 0.250000 -0.062500 +v -0.387944 0.250000 -0.044194 +v -0.406250 0.250000 0.000000 +v -0.387944 0.250000 0.044194 +v -0.343750 0.250000 0.062500 +v -0.299556 0.250000 0.044194 +v -0.281250 0.250000 0.000000 +v -0.299556 0.250000 -0.044194 +v -0.343750 0.281250 -0.031250 +v -0.365847 0.281250 -0.022097 +v -0.375000 0.281250 0.000000 +v -0.365847 0.281250 0.022097 +v -0.343750 0.281250 0.031250 +v -0.321653 0.281250 0.022097 +v -0.312500 0.281250 0.000000 +v -0.321653 0.281250 -0.022097 +v -0.343750 0.656250 -0.031250 +v -0.365847 0.656250 -0.022097 +v -0.375000 0.656250 0.000000 +v -0.365847 0.656250 0.022097 +v -0.343750 0.656250 0.031250 +v -0.321653 0.656250 0.022097 +v -0.312500 0.656250 0.000000 +v -0.321653 0.656250 -0.022097 +v -0.343750 0.250000 -0.062500 +v -0.387944 0.250000 -0.044194 +v -0.406250 0.250000 0.000000 +v -0.387944 0.250000 0.044194 +v -0.343750 0.250000 0.062500 +v -0.299556 0.250000 0.044194 +v -0.281250 0.250000 0.000000 +v -0.299556 0.250000 -0.044194 +v -0.343750 0.281250 -0.062500 +v -0.387944 0.281250 -0.044194 +v -0.406250 0.281250 0.000000 +v -0.387944 0.281250 0.044194 +v -0.343750 0.281250 0.062500 +v -0.299556 0.281250 0.044194 +v -0.281250 0.281250 0.000000 +v -0.299556 0.281250 -0.044194 +v -0.343750 0.281250 -0.031250 +v -0.365847 0.281250 -0.022097 +v -0.375000 0.281250 0.000000 +v -0.365847 0.281250 0.022097 +v -0.343750 0.281250 0.031250 +v -0.321653 0.281250 0.022097 +v -0.312500 0.281250 0.000000 +v -0.321653 0.281250 -0.022097 +vt 0.151586 0.089245 +vt 0.136010 0.052632 +vt 0.242368 0.052632 +vt 0.189189 0.131579 +vt 0.216216 0.157895 +vt 0.189189 0.157895 +vt 0.162162 0.131579 +vt 0.135135 0.157895 +vt 0.135135 0.131579 +vt 0.297297 0.131579 +vt 0.324324 0.157895 +vt 0.297297 0.157895 +vt 0.270270 0.157895 +vt 0.270270 0.131579 +vt 0.243243 0.131579 +vt 0.216216 0.131579 +vt 0.162162 0.157895 +vt 0.324324 0.131579 +vt 0.351351 0.157895 +vt 0.243243 0.157895 +vt 0.151586 0.016018 +vt 0.189189 0.000852 +vt 0.226792 0.016018 +vt 0.226792 0.089245 +vt 0.189189 0.104411 +vt 0.351351 0.131579 +vt 0.135135 0.105263 +vt 0.162162 0.131579 +vt 0.135135 0.131579 +vt 0.297297 0.105263 +vt 0.324324 0.131579 +vt 0.297297 0.131579 +vt 0.270270 0.105263 +vt 0.270270 0.131579 +vt 0.216216 0.105263 +vt 0.243243 0.131579 +vt 0.216216 0.131579 +vt 0.162162 0.105263 +vt 0.189189 0.131579 +vt 0.324324 0.105263 +vt 0.351351 0.131579 +vt 0.243243 0.105263 +vt 0.189189 0.105263 +vt 0.162162 0.157895 +vt 0.135135 0.473684 +vt 0.135135 0.157895 +vt 0.324324 0.157895 +vt 0.297297 0.473684 +vt 0.297297 0.157895 +vt 0.270270 0.473684 +vt 0.270270 0.157895 +vt 0.243243 0.157895 +vt 0.216216 0.473684 +vt 0.216216 0.157895 +vt 0.189189 0.157895 +vt 0.162162 0.473684 +vt 0.351351 0.157895 +vt 0.324324 0.473684 +vt 0.243243 0.473684 +vt 0.189189 0.473684 +vt 0.351351 0.105263 +vt 0.351351 0.473684 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.0000 0.7071 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +s off +f 124/113/26 123/114/26 127/115/26 +f 133/116/27 142/117/27 141/118/27 +f 132/119/27 139/120/27 131/121/27 +f 129/122/27 138/123/27 137/124/27 +f 129/122/27 144/125/27 136/126/27 +f 135/127/27 142/117/27 134/128/27 +f 132/119/27 141/118/27 140/129/27 +f 130/130/27 139/131/27 138/123/27 +f 135/127/27 144/125/27 143/132/27 +f 123/114/26 122/133/26 127/115/26 +f 122/133/26 121/134/26 127/115/26 +f 121/134/26 128/135/26 127/115/26 +f 127/115/26 126/136/26 125/137/26 +f 125/137/26 124/113/26 127/115/26 +f 133/116/27 134/128/27 142/117/27 +f 132/119/27 140/129/27 139/120/27 +f 129/122/27 130/130/27 138/123/27 +f 129/122/27 137/124/27 144/125/27 +f 135/127/27 143/132/27 142/117/27 +f 132/119/27 133/116/27 141/118/27 +f 130/130/27 131/138/27 139/131/27 +f 135/127/27 136/126/27 144/125/27 +s 1 +f 99/139/28 92/140/29 91/141/28 +f 97/142/30 90/143/31 89/144/30 +f 104/145/32 89/144/30 96/146/32 +f 102/147/33 95/148/34 94/149/33 +f 100/150/29 93/151/35 92/140/29 +f 98/152/31 91/153/28 90/143/31 +f 103/154/34 96/146/32 95/148/34 +f 101/155/35 94/149/33 93/151/35 +f 108/156/29 115/157/28 107/158/28 +f 106/159/31 113/160/30 105/161/30 +f 105/161/30 120/162/32 112/163/32 +f 111/164/34 118/165/33 110/166/33 +f 109/167/35 116/168/29 108/156/29 +f 107/169/28 114/170/31 106/159/31 +f 112/163/32 119/171/34 111/164/34 +f 110/166/33 117/172/35 109/167/35 +f 99/139/28 100/150/29 92/140/29 +f 97/142/30 98/152/31 90/143/31 +f 104/145/32 97/142/30 89/144/30 +f 102/147/33 103/154/34 95/148/34 +f 100/150/29 101/155/35 93/151/35 +f 98/152/31 99/173/28 91/153/28 +f 103/154/34 104/145/32 96/146/32 +f 101/155/35 102/147/33 94/149/33 +f 108/156/29 116/168/29 115/157/28 +f 106/159/31 114/170/31 113/160/30 +f 105/161/30 113/160/30 120/162/32 +f 111/164/34 119/171/34 118/165/33 +f 109/167/35 117/172/35 116/168/29 +f 107/169/28 115/174/28 114/170/31 +f 112/163/32 120/162/32 119/171/34 +f 110/166/33 118/165/33 117/172/35 +o Base +v -0.375000 0.468750 -0.187500 +v -0.375000 0.468750 0.187500 +v -0.375000 0.531250 0.187500 +v -0.375000 0.531250 -0.187500 +v -0.500000 0.750000 0.187500 +v -0.500000 0.250000 0.187500 +v -0.500000 0.750000 -0.187500 +v -0.500000 0.250000 -0.187500 +v -0.437500 0.750000 -0.187500 +v -0.437500 0.750000 0.187500 +v -0.437500 0.250000 0.187500 +v -0.437500 0.250000 -0.187500 +v -0.437500 0.406250 -0.187500 +v -0.437500 0.406250 0.187500 +v -0.437500 0.593750 0.187500 +v -0.437500 0.593750 -0.187500 +v -0.437500 0.718750 0.125000 +v -0.437500 0.281250 0.125000 +v -0.437500 0.718750 -0.125000 +v -0.437500 0.281250 -0.125000 +v -0.375000 0.718750 -0.125000 +v -0.375000 0.718750 0.125000 +v -0.312500 0.281250 0.125000 +v -0.312500 0.281250 -0.125000 +v -0.268306 0.281250 -0.088388 +v -0.330806 0.718750 -0.088388 +v -0.250000 0.281250 0.000000 +v -0.312500 0.718750 0.000000 +v -0.268306 0.281250 0.088388 +v -0.330806 0.718750 0.088388 +v -0.437500 0.625000 -0.125000 +v -0.375000 0.625000 -0.125000 +v -0.437500 0.625000 -0.156250 +v -0.406250 0.625000 -0.156250 +v -0.375000 0.656250 -0.125000 +v -0.437500 0.656250 -0.156250 +v -0.406250 0.656250 -0.156250 +v -0.437500 0.656250 -0.125000 +v -0.437500 0.343750 -0.125000 +v -0.375000 0.343750 -0.125000 +v -0.437500 0.343750 -0.156250 +v -0.406250 0.343750 -0.156250 +v -0.375000 0.375000 -0.125000 +v -0.437500 0.375000 -0.156250 +v -0.406250 0.375000 -0.156250 +v -0.437500 0.375000 -0.125000 +v -0.437500 0.625000 0.125000 +v -0.375000 0.625000 0.125000 +v -0.437500 0.625000 0.156250 +v -0.406250 0.625000 0.156250 +v -0.375000 0.656250 0.125000 +v -0.437500 0.656250 0.156250 +v -0.406250 0.656250 0.156250 +v -0.437500 0.656250 0.125000 +v -0.437500 0.343750 0.125000 +v -0.375000 0.343750 0.125000 +v -0.437500 0.343750 0.156250 +v -0.406250 0.343750 0.156250 +v -0.375000 0.375000 0.125000 +v -0.437500 0.375000 0.156250 +v -0.406250 0.375000 0.156250 +v -0.437500 0.375000 0.125000 +v -0.297708 0.497101 -0.046875 +v -0.302321 0.529924 -0.033146 +v -0.304231 0.543519 0.000000 +v -0.302321 0.529924 0.033146 +v -0.297708 0.497101 0.046875 +v -0.293095 0.464278 0.033146 +v -0.291184 0.450682 0.000000 +v -0.293095 0.464278 -0.033146 +v -0.266762 0.501450 -0.046875 +v -0.271375 0.534273 -0.033146 +v -0.273285 0.547869 0.000000 +v -0.271375 0.534273 0.033146 +v -0.266762 0.501450 0.046875 +v -0.262149 0.468627 0.033146 +v -0.260238 0.455031 0.000000 +v -0.262149 0.468627 -0.033146 +v -0.437500 0.281250 0.125000 +v -0.437500 0.281250 -0.125000 +v -0.312500 0.281250 0.125000 +v -0.312500 0.281250 -0.125000 +v -0.268306 0.281250 -0.088388 +v -0.250000 0.281250 0.000000 +v -0.268306 0.281250 0.088388 +v -0.437500 0.718750 0.125000 +v -0.437500 0.718750 -0.125000 +v -0.375000 0.718750 -0.125000 +v -0.375000 0.718750 0.125000 +v -0.330806 0.718750 -0.088388 +v -0.312500 0.718750 0.000000 +v -0.330806 0.718750 0.088388 +v -0.375000 0.468750 -0.187500 +v -0.375000 0.468750 0.187500 +v -0.375000 0.531250 0.187500 +v -0.375000 0.531250 -0.187500 +v -0.437500 0.406250 -0.187500 +v -0.437500 0.406250 0.187500 +v -0.437500 0.593750 0.187500 +v -0.437500 0.593750 -0.187500 +v -0.266762 0.501450 -0.046875 +v -0.271375 0.534273 -0.033146 +v -0.273285 0.547869 0.000000 +v -0.271375 0.534273 0.033146 +v -0.266762 0.501450 0.046875 +v -0.262149 0.468627 0.033146 +v -0.260238 0.455031 0.000000 +v -0.262149 0.468627 -0.033146 +v -0.266762 0.501450 -0.023437 +v -0.269068 0.517861 -0.016573 +v -0.270024 0.524659 0.000000 +v -0.269068 0.517861 0.016573 +v -0.266762 0.501450 0.023438 +v -0.264455 0.485038 0.016573 +v -0.263500 0.478240 0.000000 +v -0.264455 0.485038 -0.016573 +vt 0.027027 0.263158 +vt 0.054054 0.289474 +vt 0.027027 0.289474 +vt 0.540541 0.947368 +vt 0.864865 0.526316 +vt 0.864865 0.947368 +vt 0.432432 0.526316 +vt 0.108108 0.657895 +vt 0.108108 0.526316 +vt 0.108108 0.815789 +vt 0.432432 0.947368 +vt 0.108108 0.947368 +vt 0.432432 0.710526 +vt 0.486486 0.815789 +vt 0.432432 0.763158 +vt 0.432432 0.473684 +vt 0.108108 0.473684 +vt 0.108108 1.000000 +vt 0.432432 1.000000 +vt 0.027027 0.447368 +vt 0.054054 0.421053 +vt 0.054054 0.447368 +vt 0.027027 0.421053 +vt 0.054054 0.394737 +vt 0.054054 0.815789 +vt 0.108108 0.710526 +vt 0.108108 0.763158 +vt 0.486486 0.657895 +vt 0.486486 0.526316 +vt 0.540541 0.526316 +vt 0.000000 0.526316 +vt 0.054054 0.657895 +vt 0.891892 0.447368 +vt 0.918919 0.473684 +vt 0.918919 0.526316 +vt 0.054054 0.263158 +vt 0.081081 0.289474 +vt 0.054054 0.315789 +vt 0.108108 0.289474 +vt 0.081081 0.315789 +vt 0.108108 0.263158 +vt 0.081081 0.263158 +vt 0.135135 0.263158 +vt 0.054054 0.263158 +vt 0.081081 0.289474 +vt 0.054054 0.315789 +vt 0.108108 0.289474 +vt 0.081081 0.315789 +vt 0.108108 0.263158 +vt 0.081081 0.263158 +vt 0.135135 0.263158 +vt 0.135135 0.263158 +vt 0.108108 0.289474 +vt 0.108108 0.263158 +vt 0.108108 0.315789 +vt 0.081081 0.289474 +vt 0.081081 0.263158 +vt 0.054054 0.263158 +vt 0.054054 0.315789 +vt 0.135135 0.263158 +vt 0.108108 0.289474 +vt 0.108108 0.263158 +vt 0.108108 0.315789 +vt 0.081081 0.289474 +vt 0.081081 0.263158 +vt 0.054054 0.263158 +vt 0.054054 0.315789 +vt 0.918919 0.184211 +vt 0.891892 0.210526 +vt 0.810811 0.236842 +vt 0.027027 0.315789 +vt 0.054054 0.342105 +vt 0.027027 0.342105 +vt 0.027027 0.394737 +vt 0.054054 0.368421 +vt 0.027027 0.473684 +vt 0.054054 0.473684 +vt 0.054054 0.315789 +vt 0.027027 0.368421 +vt 0.054054 0.263158 +vt 0.432432 0.657895 +vt 0.432432 0.815789 +vt 0.486486 0.947368 +vt 0.054054 0.947368 +vt 0.000000 0.947368 +vt 0.054054 0.526316 +vt 0.702703 0.526316 +vt 0.810811 0.421053 +vt 0.702703 0.473684 +vt 0.729730 0.447368 +vt 0.108108 0.315789 +vt 0.135135 0.315789 +vt 0.108108 0.315789 +vt 0.135135 0.315789 +vt 0.135135 0.315789 +vt 0.081081 0.315789 +vt 0.135135 0.315789 +vt 0.081081 0.315789 +vt 0.729730 0.210526 +vt 0.702703 0.184211 +vt 0.702703 0.078947 +vt 0.918919 0.078947 +vt 0.621622 0.236842 +vt 0.675676 0.421053 +vt 0.621622 0.421053 +vt 1.000000 0.236842 +vt 0.945946 0.421053 +vt 0.891892 0.236842 +vt 0.864865 0.236842 +vt 0.810811 0.421053 +vt 0.810811 0.236842 +vt 0.756757 0.236842 +vt 0.864865 0.421053 +vt 0.729730 0.236842 +vt 0.756757 0.421053 +vt 0.729730 0.421053 +vt 0.000000 0.447368 +vt 0.027027 0.473684 +vt 0.000000 0.473684 +vt 0.000000 0.315789 +vt 0.027027 0.289474 +vt 0.027027 0.315789 +vt 0.000000 0.368421 +vt 0.027027 0.342105 +vt 0.027027 0.368421 +vt 0.000000 0.394737 +vt 0.027027 0.421053 +vt 0.000000 0.421053 +vt 0.027027 0.447368 +vt 0.000000 0.289474 +vt 0.027027 0.263158 +vt 0.000000 0.342105 +vt 0.027027 0.394737 +vt 0.108108 0.710526 +vt 0.432432 0.763158 +vt 0.108108 0.763158 +vt 0.108108 0.657895 +vt 0.432432 0.710526 +vt 0.432432 0.815789 +vt 1.000000 0.421053 +vt 0.891892 0.421053 +vt 0.000000 0.263158 +vt 0.432432 0.657895 +vt 0.108108 0.815789 +vn 0.9903 0.1392 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 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.3111 0.0444 0.9493 +vn 0.3111 0.0444 -0.9493 +vn 0.3651 0.0522 -0.9295 +vn 0.8579 0.1225 -0.4989 +vn 0.9899 0.1414 0.0000 +vn 0.8579 0.1225 0.4989 +vn 0.8424 0.1203 -0.5253 +vn 0.3651 0.0522 0.9295 +vn 0.8424 0.1203 0.5253 +vn 0.0984 -0.7002 -0.7071 +vn 0.1392 -0.9903 0.0000 +vn 0.0984 -0.7002 0.7071 +vn -0.1392 0.9903 0.0000 +vn -0.0984 0.7002 0.7071 +vn -0.0984 0.7002 -0.7071 +vn 0.9239 -0.3827 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +s off +f 251/175/36 258/176/36 250/177/36 +f 151/178/37 150/179/37 149/180/37 +f 156/181/38 158/182/38 155/183/38 +f 159/184/38 153/185/38 154/186/38 +f 145/187/39 160/188/39 148/189/39 +f 152/190/40 155/183/40 150/191/40 +f 149/192/41 153/185/41 151/193/41 +f 252/194/36 253/195/36 260/196/36 +f 245/197/36 254/198/36 253/195/36 +f 159/199/42 146/200/42 147/201/42 +f 157/202/39 156/203/39 152/204/39 +f 150/205/42 158/206/42 159/199/42 +f 234/207/41 232/208/41 231/209/41 +f 175/210/40 178/211/40 176/212/40 +f 181/213/43 176/214/43 178/211/43 +f 180/215/39 178/211/39 177/216/39 +f 182/217/41 181/213/41 180/215/41 +f 183/218/40 186/219/40 184/220/40 +f 189/221/43 184/222/43 186/219/43 +f 188/223/39 186/219/39 185/224/39 +f 190/225/41 189/221/41 188/223/41 +f 191/226/40 194/227/40 193/228/40 +f 192/229/44 197/230/44 194/227/44 +f 194/227/42 196/231/42 193/228/42 +f 198/232/41 197/230/41 195/233/41 +f 199/234/40 202/235/40 201/236/40 +f 200/237/44 205/238/44 202/235/44 +f 202/235/42 204/239/42 201/236/42 +f 206/240/41 205/238/41 203/241/41 +f 226/242/40 227/243/40 228/244/40 +f 249/245/36 256/246/36 248/247/36 +f 246/248/36 255/249/36 254/198/36 +f 251/250/36 260/196/36 259/251/36 +f 250/177/36 257/252/36 249/245/36 +f 248/247/36 255/249/36 247/253/36 +f 251/175/36 259/254/36 258/176/36 +f 151/178/37 152/204/37 150/179/37 +f 156/181/38 157/255/38 158/182/38 +f 159/184/38 160/256/38 153/185/38 +f 145/187/39 157/202/39 160/188/39 +f 152/190/40 156/181/40 155/183/40 +f 149/192/41 154/186/41 153/185/41 +f 252/194/36 245/197/36 253/195/36 +f 245/197/36 246/248/36 254/198/36 +f 159/199/42 158/206/42 146/200/42 +f 152/204/39 151/178/39 160/188/39 +f 151/178/39 153/257/39 160/188/39 +f 160/188/39 157/202/39 152/204/39 +f 154/258/42 149/259/42 159/199/42 +f 149/259/42 150/205/42 159/199/42 +f 150/205/42 155/260/42 158/206/42 +f 231/209/41 230/261/41 235/262/41 +f 230/261/41 233/263/41 236/264/41 +f 235/262/41 230/261/41 236/264/41 +f 235/262/41 234/207/41 231/209/41 +f 175/210/40 177/216/40 178/211/40 +f 181/213/43 179/265/43 176/214/43 +f 180/215/39 181/213/39 178/211/39 +f 182/217/41 179/266/41 181/213/41 +f 183/218/40 185/224/40 186/219/40 +f 189/221/43 187/267/43 184/222/43 +f 188/223/39 189/221/39 186/219/39 +f 190/225/41 187/268/41 189/221/41 +f 191/226/40 192/269/40 194/227/40 +f 192/229/44 195/270/44 197/230/44 +f 194/227/42 197/230/42 196/231/42 +f 198/232/41 196/231/41 197/230/41 +f 199/234/40 200/271/40 202/235/40 +f 200/237/44 203/272/44 205/238/44 +f 202/235/42 205/238/42 204/239/42 +f 206/240/41 204/239/41 205/238/41 +f 229/273/40 225/274/40 228/244/40 +f 225/274/40 223/275/40 228/244/40 +f 223/275/40 224/276/40 228/244/40 +f 224/276/40 226/242/40 228/244/40 +f 249/245/36 257/252/36 256/246/36 +f 246/248/36 247/253/36 255/249/36 +f 251/250/36 252/194/36 260/196/36 +f 250/177/36 258/176/36 257/252/36 +f 248/247/36 256/246/36 255/249/36 +s 1 +f 162/277/42 166/278/45 161/279/42 +f 164/280/39 165/281/46 168/282/47 +f 169/283/48 172/284/49 171/285/49 +f 172/284/49 173/286/50 171/285/49 +f 168/282/47 170/287/51 169/283/48 +f 167/288/52 174/289/53 166/290/45 +f 214/291/54 221/292/55 213/293/55 +f 211/294/42 220/295/56 219/296/42 +f 209/297/57 218/298/58 217/299/57 +f 208/300/59 215/301/39 207/302/39 +f 214/291/54 215/301/39 222/303/54 +f 212/304/56 221/305/55 220/295/56 +f 211/294/42 218/298/58 210/306/58 +f 209/297/57 216/307/59 208/300/59 +f 238/308/60 240/309/61 239/310/61 +f 242/311/62 237/312/60 238/308/60 +f 244/313/63 239/310/61 240/309/61 +f 162/277/42 167/288/52 166/278/45 +f 164/280/39 163/314/39 165/281/46 +f 169/283/48 170/287/51 172/284/49 +f 172/284/49 174/289/53 173/286/50 +f 168/282/47 165/315/46 170/287/51 +f 167/288/52 173/286/50 174/289/53 +f 214/291/54 222/303/54 221/292/55 +f 211/294/42 212/304/56 220/295/56 +f 209/297/57 210/306/58 218/298/58 +f 208/300/59 216/307/59 215/301/39 +f 214/291/54 207/302/39 215/301/39 +f 212/304/56 213/316/55 221/305/55 +f 211/294/42 219/296/42 218/298/58 +f 209/297/57 217/299/57 216/307/59 +f 238/308/60 237/312/60 240/309/61 +f 242/311/62 241/317/62 237/312/60 +f 244/313/63 243/318/63 239/310/61 diff --git a/src/main/resources/assets/hbm/textures/models/machines/charger.png b/src/main/resources/assets/hbm/textures/models/machines/charger.png new file mode 100644 index 0000000000000000000000000000000000000000..e532892d5e3ea5bf9909af15458891a715f47ac4 GIT binary patch literal 679 zcmV;Y0$BZtP)GMx$fRzH3Id|A3-Ew->G|?(pMNCtN9=od_x#;^-+Mj=4fAO) z)@^z41HsCyH-SYNok7=V^J=|ql#GNWBUAUpWg{#>eb;gZ-NsHVebtS0rx7*{qm`sc zp&v@Xrr431PkXTxU0F?JiF|bB0sw5=1^{d}8vww~^`e-R6lj$Sl6$fa^3(eTynLMu z{ygCH?xfJC_3_IH0PyL)yWO2>tOMc=g73 zIs5zlMGU0HU8T>+J!+pCUAbiXq^4HuE!jLfs`DycUGB+B{psBa&Tbu?-8x2k0+i}g z36<5B9|%SjNl}#*l2Y-%f5@%u=&dAWHJJkGtFF(zYMW1caT!gSR&1VM-A^lj$Q{mk z%sJncvmXfNJqe5_=NM1U;XMiHV?Pk=+d~LH5G;zK7y$Gqh1GhSIcy zN=BCenZBl=Hq;{RscR2PDlKf0)0ES5t?W}rBPDMmCUd*=sTD|FypD-hrjM+M_%q^* z83zDN-X&2}$Lta;uO9(G7>49^#srnBuZWOb;|F2t&{-rK?Nh_ykhCwC%RQS)NWD7C zxx#-R41>N{&^OC|zfaorKBbe(C3W$GKflj-dTz$ydC9x$y5z^HNRNp+LHjnIc5kpC{qEk|JqFV5PSA-dXolcQZo%x+}erLYl-|u&3=5B+UAwkyd!=TWBM%_M`sLi3A_;c&(a$)coy9oFtgn>I^ z5ue_aWdUQ(J_uo;4oHxE=cPgEfgpntf=DTta>K4I@T1LGcQ9rZ_iy%z|z|bg~0CF2(XvFTbF$@e* zEK5W}FcNL4()|HMr#RpFzBnFzw!iOV7riNc^$0*k_eY!&3^4MPyUpAwgBX<{g(!K$ zz9!RS(Y5;(F^IO&k5tAY$vmQ?*hszK*{=)R)i0IJ+8fj_fW|%8jx**yVtBHby z*6H&!kDLS`1fmb7LBhoL%>TJ~RAP zt|Mv9T%!5yDL@jw^c>}#jz``gS)m@mH+PHZ=z?ezHj8=+FvfMh*O2hrX4vpk~bi~IwR^{`Xnq=tNdUQ!Uk>+OEo@&`zx4VkfT6k_$dNq-h<3Vl(kSf_9k>9ZlkBrs zt+{14#J|_?1PX-WO5DRFLC3=K=FB83eUmAHm!u_+!H5psc8f;7>TZu@3aNoZ~;Yy;Z zB%Oylj7L2qrAN~X`JdtB4Z}~f1VAtboBb zfEFc&)b8%LfLlNrX}3b=%|ab>F=ALsmKrqb`Bkv;qtMo22sXOyqv?7GzFAb27Hb~q zeOR8q3a)_9(b5lPnZaif*Pa2E6g77emURX&M4;l1COv~E{}TXr|21r|SnmHCros}! qa)3v~XQvCP){Sj3!2-2gd|1dQsw4 z<9+%^YlSNF_zm4~YCuBxt{9ffQc zW}nM+SG`sBPQB0jbX9fQLG@r&JFtjws&+s}l@2igVAGQoy0Ex#HlE8atMo%g6^KiryZVd(0TsRNipO1gyG{2x!DIdyrbq*>e!Llj_y)IclJ|_1lNWj$Kjorq7 zWrC!nx%K8^pRTL6rwQ*np+G-hs<7|A2RebUp{R&D+Wl?bv}sKsPYf0Ra2_VDA6( zPn-R+2$d56BL)}J%qv4D5CIah4gg7l_Ah7AI`S>Rc$vR@Cjg+ac`NGou2+K^8VC@E zYH$;Z_ROzn9XpzrrNk)^WL}g@O0nm&tRLs)?dAWcLR3$HkN`=N-%AtAzB&x&smBy^ zB?INmrwI^-@OHkL6?wbf0su5NJ)BE+Iz|u{eF=zaC;ao?-<{uU1OX`8vomP@cpL!G zd~TbllT?S!gYEhV&Z|3$V^)mH3E;o?4nQdyo4268b{#L2C3XK7aJD_0H_!tlXP!yc z0ifFjx*Y)0TEL_LQN&e14qm8@*Xc+%E+3!7@b-Spi{f5Z+qkce`s%xjYGDy7CxG{^ zkm&~=RD+vP08Bg%IM|2#gktc_D@<$@nFopDB5_Duw38JeRVAHN+4vCSyPP!X|JlDc zyKYRbH>;IJsGI;9qDYhJ`RtOt{Q;cUUy-uUl`>zN*fIqONS^U&Ai5ocomd3Qed?s@ zXaS{(`Eints}s*M*h7GT2>BJ6r)4*LW0$h^;&Lu*vTPkP5D7IafJ{PKvRmi`iYggx z1X`!sXt9&x4=gFbU<4sBcU3Jj$)=ong+9s@Ad~_t+Jy$PbV6WMBZ}TJPz<_KN6ia6Ky2^2YC98INK}+;T~!L}6t#@K@S3Pg;Ovuj z50=6n0)(WvU@~R7t_t$KDXRf4_l3Zk&H)H8Le$5QPO8E#gmU6!^*PblGcRTRI0yHb zeXAH25kQw;^VtBeqvmqca~<2v80Ukt03#@5%9uR>)s!ebVH$yK`t=zKG^p@wP3Y@Mll)6?I4eXC!Z*3|a#afGty1g%}ioL_ku@ z#s>gI1_jUq8|TX7&-|QSH&@)Fj%gw6AwWR#$xjhQ{A8^Y^_3I+CJkO}u9!I+uV$+4=imm_KG@4^;_>)r9 z0XrkIoO}l83oMnNP2viQA3#3=`RP zfeeP?XUjq;BZIBM2P`0f=~qfFejz?N?UfTd5v78OgMhN)QkIMf2z;K