From 0412ac6154f4d390c8b32b9c5ba15ffba7301f36 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 18 Apr 2022 22:52:07 +0200 Subject: [PATCH 1/5] 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 Date: Tue, 19 Apr 2022 14:28:41 +0200 Subject: [PATCH 2/5] why is it called a quarternion when you quarter in the cold food out hot eat the food? --- .../java/com/hbm/animloader/Transform.java | 101 +++++++++++++----- .../hbm/blocks/machine/MachineChungus.java | 9 +- .../tileentity/machine/TileEntityChungus.java | 45 ++++++-- 3 files changed, 116 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/hbm/animloader/Transform.java b/src/main/java/com/hbm/animloader/Transform.java index 2461fcb39..6d0948ccd 100644 --- a/src/main/java/com/hbm/animloader/Transform.java +++ b/src/main/java/com/hbm/animloader/Transform.java @@ -2,6 +2,7 @@ package com.hbm.animloader; import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; import org.lwjgl.util.vector.Matrix4f; import org.lwjgl.util.vector.Quaternion; @@ -10,6 +11,15 @@ import com.hbm.util.BobMathUtil; import net.minecraft.client.renderer.GLAllocation; import net.minecraft.util.Vec3; +/** + * Bob: + * Ported from 1.12.2. + * Mostly gibberish to me, probably written in the ancient egyptian language. + * Any unmarked code comments are probably from Drillgon or code I had to throw out myself. + * + * @author Drillgon200 for the most part + * + */ public class Transform { protected static FloatBuffer auxGLMatrix = GLAllocation.createDirectFloatBuffer(16); @@ -49,37 +59,70 @@ public class Transform { } public void interpolateAndApply(Transform other, float inter){ - Vec3 trans = BobMathUtil.interpVec(this.translation, other.translation, inter); //ORIGINAL: translation.interpolate(other.translation, inter); - Vec3 scale = BobMathUtil.interpVec(this.scale, other.scale, inter); //ORIGINAL: this.scale.interpolate(other.scale, inter); + Vec3 trans = BobMathUtil.interpVec(this.translation, other.translation, inter); + Vec3 scale = BobMathUtil.interpVec(this.scale, other.scale, inter); Quaternion rot = slerp(rotation, other.rotation, inter); - //GlStateManager.quatToGlMatrix(auxGLMatrix, rot); TODO: find implementation + quatToGlMatrix(auxGLMatrix, rot); scale(auxGLMatrix, scale); auxGLMatrix.put(12, (float) trans.xCoord); auxGLMatrix.put(13, (float) trans.yCoord); auxGLMatrix.put(14, (float) trans.zCoord); - //for(int i = 0; i < 16; i ++){ - //System.out.print(auxGLMatrix.get(i) + " "); - //} - //System.out.println(); - //GlStateManager.multMatrix(auxGLMatrix); TODO: find implementation + GL11.glMultMatrix(auxGLMatrix); } - private void scale(FloatBuffer matrix, Vec3 scale){ - matrix.put(0, (float) (matrix.get(0)*scale.xCoord)); - matrix.put(4, (float) (matrix.get(4)*scale.xCoord)); - matrix.put(8, (float) (matrix.get(8)*scale.xCoord)); - matrix.put(12, (float) (matrix.get(12)*scale.xCoord)); + public static FloatBuffer quatToGlMatrix(FloatBuffer buf, Quaternion q) { + buf.clear(); + float xx = q.x * q.x; + float xy = q.x * q.y; + float xz = q.x * q.z; + float xw = q.x * q.w; + float yy = q.y * q.y; + float yz = q.y * q.z; + float yw = q.y * q.w; + float zz = q.z * q.z; + float zw = q.z * q.w; - matrix.put(1, (float) (matrix.get(1)*scale.yCoord)); - matrix.put(5, (float) (matrix.get(5)*scale.yCoord)); - matrix.put(9, (float) (matrix.get(9)*scale.yCoord)); - matrix.put(13, (float) (matrix.get(13)*scale.yCoord)); + //Bob: i may not know what a quarternion is but grouping these in parts of 4 looks nice + buf.put(1.0F - 2.0F * (yy + zz)); + buf.put(2.0F * (xy + zw)); + buf.put(2.0F * (xz - yw)); + buf.put(0.0F); - matrix.put(2, (float) (matrix.get(2)*scale.zCoord)); - matrix.put(6, (float) (matrix.get(6)*scale.zCoord)); - matrix.put(10, (float) (matrix.get(10)*scale.zCoord)); - matrix.put(14, (float) (matrix.get(14)*scale.zCoord)); + buf.put(2.0F * (xy - zw)); + buf.put(1.0F - 2.0F * (xx + zz)); + buf.put(2.0F * (yz + xw)); + buf.put(0.0F); + + buf.put(2.0F * (xz + yw)); + buf.put(2.0F * (yz - xw)); + buf.put(1.0F - 2.0F * (xx + yy)); + buf.put(0.0F); + + buf.put(0.0F); + buf.put(0.0F); + buf.put(0.0F); + buf.put(1.0F); + + buf.rewind(); + return buf; + } + + private void scale(FloatBuffer matrix, Vec3 scale) { + matrix.put(0, (float) (matrix.get(0) * scale.xCoord)); + matrix.put(4, (float) (matrix.get(4) * scale.xCoord)); + matrix.put(8, (float) (matrix.get(8) * scale.xCoord)); + matrix.put(12, (float) (matrix.get(12) * scale.xCoord)); + + matrix.put(1, (float) (matrix.get(1) * scale.yCoord)); + matrix.put(5, (float) (matrix.get(5) * scale.yCoord)); + matrix.put(9, (float) (matrix.get(9) * scale.yCoord)); + matrix.put(13, (float) (matrix.get(13) * scale.yCoord)); + + matrix.put(2, (float) (matrix.get(2) * scale.zCoord)); + matrix.put(6, (float) (matrix.get(6) * scale.zCoord)); + matrix.put(10, (float) (matrix.get(10) * scale.zCoord)); + matrix.put(14, (float) (matrix.get(14) * scale.zCoord)); } //Thanks, wikipedia @@ -116,18 +159,18 @@ public class Transform { } // Since dot is in range [0, DOT_THRESHOLD], acos is safe - double theta_0 = Math.acos(dot); // theta_0 = angle between input vectors - double theta = theta_0*t; // theta = angle between v0 and result - double sin_theta = Math.sin(theta); // compute this value only once - double sin_theta_0 = Math.sin(theta_0); // compute this value only once + double theta_0 = Math.acos(dot); // theta_0 = angle between input vectors + double theta = theta_0*t; // theta = angle between v0 and result + double sin_theta = Math.sin(theta); // compute this value only once + double sin_theta_0 = Math.sin(theta_0); // compute this value only once float s0 = (float) (Math.cos(theta) - dot * sin_theta / sin_theta_0); // == sin(theta_0 - theta) / sin(theta_0) float s1 = (float) (sin_theta / sin_theta_0); - return new Quaternion(s0*v0.x + s1*v1.x, - s0*v0.y + s1*v1.y, - s0*v0.z + s1*v1.z, - s0*v0.w + s1*v1.w); + return new Quaternion(s0 * v0.x + s1 * v1.x, + s0 * v0.y + s1 * v1.y, + s0 * v0.z + s1 * v1.z, + s0 * v0.w + s1 * v1.w); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineChungus.java b/src/main/java/com/hbm/blocks/machine/MachineChungus.java index eb7edb807..7277ca8a2 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineChungus.java +++ b/src/main/java/com/hbm/blocks/machine/MachineChungus.java @@ -57,6 +57,8 @@ public class MachineChungus extends BlockDummyable { if(!world.isRemote) { FluidType type = entity.tanks[0].getTankType(); + entity.onLeverPull(type); + if(type == Fluids.STEAM) { entity.tanks[0].setTankType(Fluids.HOTSTEAM); entity.tanks[1].setTankType(Fluids.STEAM); @@ -78,7 +80,6 @@ public class MachineChungus extends BlockDummyable { entity.tanks[0].setFill(Math.min(entity.tanks[0].getFill() * 1000, entity.tanks[0].getMaxFill())); entity.tanks[1].setFill(0); } - entity.markDirty(); } @@ -108,10 +109,10 @@ public class MachineChungus extends BlockDummyable { MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 10, -7, 1, 1}, this, dir); world.setBlock(x + dir.offsetX, y + 2, z + dir.offsetZ, this, dir.ordinal(), 3); - this.makeExtra(world, x + dir.offsetX, y + 2, z + dir.offsetZ); - this.makeExtra(world, x + dir.offsetX * (o - 10), y, z + dir.offsetZ * (o - 10)); + this.makeExtra(world, x + dir.offsetX, y + 2, z + dir.offsetZ); //front connector + this.makeExtra(world, x + dir.offsetX * (o - 10), y, z + dir.offsetZ * (o - 10)); //back connector ForgeDirection side = dir.getRotation(ForgeDirection.UP); - this.makeExtra(world, x + dir.offsetX * o + side.offsetX * 2 , y, z + dir.offsetZ * o + side.offsetZ * 2); + this.makeExtra(world, x + dir.offsetX * o + side.offsetX * 2 , y, z + dir.offsetZ * o + side.offsetZ * 2); //side connectors this.makeExtra(world, x + dir.offsetX * o - side.offsetX * 2 , y, z + dir.offsetZ * o - side.offsetZ * 2); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index eb7c80bb8..028080a73 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -16,8 +16,10 @@ import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.energy.IEnergyGenerator; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -26,7 +28,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver { +public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, INBTPacketReceiver, IFluidStandardTransceiver { public long power; public static final long maxPower = 100000000000L; @@ -75,6 +77,11 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc 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.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), dir); + } + if(power > maxPower) power = maxPower; @@ -119,6 +126,22 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc } } + public void onLeverPull(FluidType previous) { + for(BlockPos pos : getConPos()) { + this.tryUnsubscribe(previous, worldObj, pos.getX(), pos.getY(), pos.getZ()); + } + } + + public BlockPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new BlockPos[] { + new BlockPos(xCoord - dir.offsetX * 4, yCoord + 2, zCoord - dir.offsetZ * 4), + new BlockPos(xCoord + rot.offsetX * 3, yCoord, zCoord + rot.offsetZ * 3), + new BlockPos(xCoord - rot.offsetZ * 3, yCoord, zCoord - rot.offsetZ * 3) + }; + } + public void networkPack(NBTTagCompound nbt, int range) { PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); } @@ -168,17 +191,17 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc @Override public void setFluidFill(int i, FluidType type) { - if(type.name().equals(tanks[0].getTankType().name())) + if(type == tanks[0].getTankType()) tanks[0].setFill(i); - else if(type.name().equals(tanks[1].getTankType().name())) + else if(type == tanks[1].getTankType()) tanks[1].setFill(i); } @Override public int getFluidFill(FluidType type) { - if(type.name().equals(tanks[0].getTankType().name())) + if(type == tanks[0].getTankType()) return tanks[0].getFill(); - else if(type.name().equals(tanks[1].getTankType().name())) + else if(type == tanks[1].getTankType()) return tanks[1].getFill(); return 0; @@ -186,7 +209,7 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc @Override public int getMaxFluidFill(FluidType type) { - if(type.name().equals(tanks[0].getTankType().name())) + if(type == tanks[0].getTankType()) return tanks[0].getMaxFill(); return 0; @@ -244,4 +267,14 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc public void setPower(long power) { this.power = power; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tanks[1]}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tanks[0]}; + } } From 2387cc13e7f972601ff754538669a0effecd5e54 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 19 Apr 2022 16:16:04 +0200 Subject: [PATCH 3/5] some more fluid IO work --- .../hbm/fluid/IFluidStandardTransceiver.java | 4 +- src/main/java/api/hbm/fluid/IFluidUser.java | 8 ++++ .../java/com/hbm/inventory/FluidTank.java | 18 ++++++-- .../machine/TileEntityCondenser.java | 16 ++++++- .../machine/TileEntityDeuteriumExtractor.java | 19 ++++++-- .../machine/TileEntityDeuteriumTower.java | 42 ++++++++++++++---- .../machine/TileEntityMachineDiesel.java | 7 +-- .../hbm/textures/blocks/deep_cobble.png | Bin 0 -> 876 bytes .../textures/blocks/deep_cobble_burning.png | Bin 0 -> 958 bytes 9 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/deep_cobble.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/deep_cobble_burning.png diff --git a/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java b/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java index ab9ff9816..63f82526f 100644 --- a/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java +++ b/src/main/java/api/hbm/fluid/IFluidStandardTransceiver.java @@ -7,8 +7,8 @@ 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. + * 2. A combined radio transmitter and receiver. + * 3. A device that performs transmitting and receiving functions, especially if using common components. * * The American Heritage® Dictionary of the English Language, 5th Edition. * diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java index 9c79cb70c..402b8ceb4 100644 --- a/src/main/java/api/hbm/fluid/IFluidUser.java +++ b/src/main/java/api/hbm/fluid/IFluidUser.java @@ -64,12 +64,20 @@ public interface IFluidUser extends IFluidConnector { public default long getTotalFluidForSend(FluidType type) { return 0; } public default void removeFluidForTransfer(FluidType type, long amount) { } + public default void subscribeToAllAround(FluidType type, TileEntity te) { + subscribeToAllAround(type, te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord); + } + 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, TileEntity te) { + unsubscribeToAllAround(type, te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord); + } + public default void unsubscribeToAllAround(FluidType type, World world, int x, int y, int z) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) diff --git a/src/main/java/com/hbm/inventory/FluidTank.java b/src/main/java/com/hbm/inventory/FluidTank.java index 32271f1f1..fe64aa718 100644 --- a/src/main/java/com/hbm/inventory/FluidTank.java +++ b/src/main/java/com/hbm/inventory/FluidTank.java @@ -233,12 +233,18 @@ public class FluidTank { } } - public void setType(int in, ItemStack[] slots) { - setType(in, in, slots); + public boolean setType(int in, ItemStack[] slots) { + return setType(in, in, slots); } - //Changes tank type - public void setType(int in, int out, ItemStack[] slots) { + /** + * Changes the tank type and returns true if successful + * @param in + * @param out + * @param slots + * @return + */ + public boolean setType(int in, int out, ItemStack[] slots) { if(slots[in] != null && slots[in].getItem() instanceof ItemFluidIdentifier) { @@ -248,6 +254,7 @@ public class FluidTank { if(type != newType) { type = newType; fluid = 0; + return true; } } else if(slots[out] == null) { @@ -257,9 +264,12 @@ public class FluidTank { slots[out] = slots[in].copy(); slots[in] = null; fluid = 0; + return true; } } } + + return false; } /** diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index 21e1bc9b8..f47981b5c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -11,12 +11,13 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; import com.hbm.main.ModEventHandler; +import api.hbm.fluid.IFluidStandardTransceiver; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, IFluidSource { +public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver { public int age = 0; public FluidTank[] tanks; @@ -53,6 +54,9 @@ public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, I tanks[1].setFill(tanks[1].getFill() + convert); } + this.subscribeToAllAround(tanks[0].getTankType(), this); + this.sendFluidToAll(tanks[1].getTankType(), this); + fillFluidInit(tanks[1].getTankType()); } else { @@ -148,4 +152,14 @@ public class TileEntityCondenser extends TileEntity implements IFluidAcceptor, I public void clearFluidList(FluidType type) { list.clear(); } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tanks [1]}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tanks [0]}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index da47131a8..33be2eabb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -14,11 +14,13 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IEnergyUser { +public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, IEnergyUser, IFluidStandardTransceiver { public int age = 0; public long power = 0; @@ -61,8 +63,9 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen data.setLong("power", power); this.networkPack(data, 25); } - - + + this.subscribeToAllAround(tanks[0].getTankType(), this); + this.sendFluidToAll(tanks[1].getTankType(), this); if(power < 0) power = 0; @@ -196,4 +199,14 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen public long getMaxPower() { return maxPower; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tanks [1]}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tanks [0]}; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumTower.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumTower.java index 62b3f97f1..8df9cc3e5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumTower.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumTower.java @@ -4,10 +4,13 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.inventory.FluidTank; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.util.fauxpointtwelve.BlockPos; 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 TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor { @@ -71,6 +74,27 @@ public class TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor { } protected void updateConnections() { + + for(BlockPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN); + } + } + + public void subscribeToAllAround(FluidType type, World world, int x, int y, int z) { + + for(BlockPos pos : getConPos()) { + this.trySubscribe(type, world, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN); + } + } + + public void sendFluidToAll(FluidType type, TileEntity te) { + + for(BlockPos pos : getConPos()) { + this.sendFluid(type, worldObj, pos.getX(), pos.getY(), pos.getZ(), ForgeDirection.UNKNOWN); + } + } + + private BlockPos[] getConPos() { int offsetX = 0; int offsetZ = 0; @@ -85,14 +109,16 @@ public class TileEntityDeuteriumTower extends TileEntityDeuteriumExtractor { offsetZ = dir.offsetZ; } - this.trySubscribe(worldObj, this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 1, ForgeDirection.UNKNOWN); //TODO: figure this one out without dying - this.trySubscribe(worldObj, this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 0, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord + offsetX * 1, this.yCoord, this.zCoord - offsetZ * 2, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord + offsetX * 0, this.yCoord, this.zCoord - offsetZ * 2, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord + offsetX * 1, this.yCoord, this.zCoord + offsetZ * 1, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord + offsetX * 0, this.yCoord, this.zCoord + offsetZ * 1, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord - offsetX * 1, this.yCoord, this.zCoord + offsetZ * 0, ForgeDirection.UNKNOWN); - this.trySubscribe(worldObj, this.xCoord - offsetX * 1, this.yCoord, this.zCoord - offsetZ * 1, ForgeDirection.UNKNOWN); + return new BlockPos[] { + new BlockPos(this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 1), + new BlockPos(this.xCoord + offsetX * 2, this.yCoord, this.zCoord - offsetZ * 0), + new BlockPos(this.xCoord + offsetX * 1, this.yCoord, this.zCoord - offsetZ * 2), + new BlockPos(this.xCoord + offsetX * 0, this.yCoord, this.zCoord - offsetZ * 2), + new BlockPos(this.xCoord + offsetX * 1, this.yCoord, this.zCoord + offsetZ * 1), + new BlockPos(this.xCoord + offsetX * 0, this.yCoord, this.zCoord + offsetZ * 1), + new BlockPos(this.xCoord - offsetX * 1, this.yCoord, this.zCoord + offsetZ * 0), + new BlockPos(this.xCoord - offsetX * 1, this.yCoord, this.zCoord - offsetZ * 1) + }; } AxisAlignedBB bb = null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 945e46afe..dc3ca8f13 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -101,13 +101,14 @@ 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.subscribeToAllAround(Fluids.WATER, worldObj, xCoord, yCoord, zCoord); //Tank Management - tank.setType(3, 4, slots); + FluidType last = tank.getTankType(); + if(tank.setType(3, 4, slots)) this.unsubscribeToAllAround(last, this); tank.loadTank(0, 1, slots); tank.updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); + + this.subscribeToAllAround(tank.getTankType(), this); FluidType type = tank.getTankType(); if(type == Fluids.NITAN) diff --git a/src/main/resources/assets/hbm/textures/blocks/deep_cobble.png b/src/main/resources/assets/hbm/textures/blocks/deep_cobble.png new file mode 100644 index 0000000000000000000000000000000000000000..bf059e3cb4a1874c0caca3699486e8e1e5e36b77 GIT binary patch literal 876 zcmV-y1C#uTP) z|G;0sfAOk^o;>v8g>g_ADHbTmMSx(OWCPs|u(XS|0b^#EJm0dph_$f!_O++CHK)q1` zK#>fN%3E)TLK4?&peh-*-u%YBktJ@Lm&5_K4`1@ZtqH;~pyk?#f=JVT zD*Z()Ca`dK1%Un2bqN$fgH5Ds3XfMV24@K+CnM+C>1Y z>r+%IjhN8~I4EwAGl!X<_!_t4ph!CFJHJpke?`_9-rcoJ;>#C0jqvWO3l*sJ;ErUWbFZ<%4z(di>eqLmpAEj+r$=UR--Tq z2}2*Nc7h-D-bqU^Is7^KzA=iG*OaX{Bt!{KF{#v!k&_y-q$8-Zu{J;Pgk0th!-Mk( zf{5!iS$^<6e$YcsYGm{QG$l>jYcP8IQ_NHz$E_2DJ|aNjVuz%t(DhwZIgQ(Cvhn%_ zie!);%>hupJRq&-_+#f+Qd%F2)2jf)@_l2GlvEiXTA&fyrg99aVI~GDjN(B&M`IeB^$dh0Puqz5g~2whEin@ z;pxL4*Ak*cqgBK69J)Q1M!UvgaRaa0!gegYu7jM^X?r(sdqSh;T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/deep_cobble_burning.png b/src/main/resources/assets/hbm/textures/blocks/deep_cobble_burning.png new file mode 100644 index 0000000000000000000000000000000000000000..9c87700af561f8e86164557831ad3558e8f7ed63 GIT binary patch literal 958 zcmV;v13~A+ zjt@q^Kj4>7=x#lrM-u@Cn!HTdj$~qBcQwirALW~GUF{1NeDMV;JN?%70vr9p0pJ>4>Z(>m#1hYQQ%vG_kqm$`H zAK=5#-!{Rp`Uc+64ENm&`K)`Gd?dxyY(MF2l2~+sfh%R4?3(4^tty0%4xZNU&Cg+# z<21Xv$>!6TB!#_I*LhOO@$vOi+8Xwe&L(*1TmAn?5@o{ck1%dyJ!>}Ec-J+_XtWt$ zIEZg`g)y&_W>bKt6D!o)-CTQQLor!VxAQ1+Detw6u*Vri=xTXQ*K`d{Q@Pl17p1O@ zl3k6kt#RhEjdFV}!HAnf6;qrVe;l)H=VJXm0$GW3o(6=W!*%-axwrVQsl_Eubk1-) z{wDEMgo0KJz-hOd#SWm3OkawT`%IFmuar05w%WN8?1}ETKOaFv;y~<;vOJ=442FmfngXvdam! zZ7Pvu5s=`+x^axooyX6LqJ(!fi;)CB-i>p#;%{Dv4|8=zAQanRBbDb)po}hypCPY| zsmM%0&GF8mBE)&`D3a8Qy|jYhTAWPI&R5SmtT&oyBXjE!7)@i#mx(@3I>TwKCn`yFD*5H}qk@J;e%F2#De;QE Date: Wed, 20 Apr 2022 16:53:55 +0200 Subject: [PATCH 4/5] suit charger (not the HEV yet) --- .../java/com/hbm/blocks/machine/Charger.java | 14 ++ src/main/java/com/hbm/main/ClientProxy.java | 8 +- .../hbm/render/tileentity/RenderCharger.java | 11 +- .../com/hbm/render/util/RenderInfoSystem.java | 144 ++++++++++++++++++ .../tileentity/machine/TileEntityCharger.java | 105 ++++++++++++- 5 files changed, 273 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/hbm/render/util/RenderInfoSystem.java diff --git a/src/main/java/com/hbm/blocks/machine/Charger.java b/src/main/java/com/hbm/blocks/machine/Charger.java index a152b2201..282a0b225 100644 --- a/src/main/java/com/hbm/blocks/machine/Charger.java +++ b/src/main/java/com/hbm/blocks/machine/Charger.java @@ -7,7 +7,9 @@ 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.AxisAlignedBB; import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class Charger extends BlockContainer { @@ -54,4 +56,16 @@ public class Charger extends BlockContainer { world.setBlockMetadataWithNotify(x, y, z, 4, 2); } } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + float f = 0.0625F; + this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + this.setBlockBoundsBasedOnState(world, x, y, z); + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 0efd061b8..df9837621 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -69,6 +69,8 @@ import com.hbm.render.item.weapon.*; import com.hbm.render.loader.HmfModelLoader; import com.hbm.render.tileentity.*; import com.hbm.render.util.MissilePart; +import com.hbm.render.util.RenderInfoSystem; +import com.hbm.render.util.RenderInfoSystem.InfoEntry; import com.hbm.sound.AudioWrapper; import com.hbm.sound.AudioWrapperClient; import com.hbm.sound.nt.ISoundSourceTE; @@ -93,11 +95,14 @@ import cpw.mods.fml.relauncher.ReflectionHelper; public class ClientProxy extends ServerProxy { + public RenderInfoSystem theInfoSystem = new RenderInfoSystem(); + @Override public void registerRenderInfo() { registerClientEventHandler(new ModEventHandlerClient()); registerClientEventHandler(new ModEventHandlerRenderer()); + registerClientEventHandler(theInfoSystem); AdvancedModelLoader.registerModelHandler(new HmfModelLoader()); ResourceManager.loadAnimatedModels(); @@ -1623,8 +1628,9 @@ public class ClientProxy extends ServerProxy { @Override public void displayTooltip(String msg) { + //Minecraft.getMinecraft().ingameGUI.func_110326_a(msg, false); - Minecraft.getMinecraft().ingameGUI.func_110326_a(msg, false); + this.theInfoSystem.push(new InfoEntry(msg, 1000)); } @Override diff --git a/src/main/java/com/hbm/render/tileentity/RenderCharger.java b/src/main/java/com/hbm/render/tileentity/RenderCharger.java index 246fe883f..f7ce54d3a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCharger.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCharger.java @@ -3,6 +3,7 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.TileEntityCharger; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -28,12 +29,12 @@ public class RenderCharger extends TileEntitySpecialRenderer { bindTexture(ResourceManager.charger_tex); ResourceManager.charger.renderPart("Base"); - int time = (int) (System.currentTimeMillis() % 2000); - if(time >= 1000) - time = 1000 - (time - 1000); + TileEntityCharger charger = (TileEntityCharger) tile; - double extend = Math.min(time, 500) / 500D; - double swivel = Math.max(time - 500, 0) / 500D; + double time = (charger.lastUsingTicks + (charger.lastUsingTicks - charger.lastUsingTicks) * interp) / (double) charger.delay; + + double extend = Math.min(1, time * 2); + double swivel = Math.max(0, (time - 0.5) * 2); GL11.glPushMatrix(); diff --git a/src/main/java/com/hbm/render/util/RenderInfoSystem.java b/src/main/java/com/hbm/render/util/RenderInfoSystem.java new file mode 100644 index 000000000..405847c08 --- /dev/null +++ b/src/main/java/com/hbm/render/util/RenderInfoSystem.java @@ -0,0 +1,144 @@ +package com.hbm.render.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; + +public class RenderInfoSystem { + + private static Random rand = new Random(); + private static HashMap inbox = new HashMap(); + private static HashMap messages = new HashMap(); + + @SubscribeEvent + public void clentTick(ClientTickEvent event) { + messages.putAll(inbox); + inbox.clear(); + + List keys = new ArrayList(messages.keySet()); + + for(int i = 0; i < keys.size(); i++) { + Integer key = keys.get(i); + InfoEntry entry = messages.get(key); + + if(entry.start + entry.millis < System.currentTimeMillis()) { + messages.remove(key); + i--; + } + } + } + + @SubscribeEvent + public void onOverlayRender(RenderGameOverlayEvent.Pre event) { + + if(event.type != ElementType.CROSSHAIRS) + return; + + Minecraft mc = Minecraft.getMinecraft(); + ScaledResolution resolution = event.resolution; + + int pX = 15; //resolution.getScaledWidth() / 2 + 8; + int pZ = 15; //resolution.getScaledHeight() / 2; + + List entries = new ArrayList(messages.entrySet()); + Collections.sort(entries); + + GL11.glPushMatrix(); + + int off = 0; + long now = System.currentTimeMillis(); + + for(InfoEntry entry : messages.values()) { + + int elapsed = (int) (now - entry.start); + + int alpha = Math.min(510 * (entry.millis - elapsed) / entry.millis, 255); //smoothly scales down from 510 to 0, then caps at 255 + int color = entry.color + (alpha << 24 & -0xffffff); + mc.fontRenderer.drawString(entry.text, pX, pZ + off, color); + + off += 10; + } + + /*mc.fontRenderer.drawString(title, pX + 1, pZ - 9, bgCol); + mc.fontRenderer.drawString(title, pX, pZ - 10, titleCol); + + try { + for(String line : text) { + + int color = 0xFFFFFF; + if(line.startsWith("&[")) { + int end = line.lastIndexOf("&]"); + color = Integer.parseInt(line.substring(2, end)); + line = line.substring(end + 2); + } + + mc.fontRenderer.drawStringWithShadow(line, pX, pZ, color); + pZ += 10; + } + } catch(Exception ex) { + mc.fontRenderer.drawStringWithShadow(ex.getClass().getSimpleName(), pX, pZ + 10, 0xff0000); + }*/ + + GL11.glDisable(GL11.GL_BLEND); + GL11.glColor3f(1F, 1F, 1F); + + GL11.glPopMatrix(); + Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons); + } + + public static void push(InfoEntry entry) { + push(entry, rand.nextInt()); //range is so large, collisions are unlikely and if they do occur, not a big deal + } + + public static void push(InfoEntry entry, int id) { + inbox.put(id, entry); + } + + public static class InfoEntry implements Comparable { + + String text; + int color = 0xffffff; + long start; + int millis; + + public InfoEntry(String text) { + this(text, 3000); + } + + public InfoEntry(String text, int millis) { + this.text = text; + this.millis = millis; + this.start = System.currentTimeMillis(); + } + + public InfoEntry withColor(int color) { + this.color = color; + return this; + } + + @Override + public int compareTo(Object o) { + + if(!(o instanceof InfoEntry)) { + return 0; + } + + InfoEntry other = (InfoEntry) o; + + return this.millis < other.millis ? -1 : this.millis > other.millis ? 1 : 0; + } + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java index 1699d646a..a19bedc7d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -1,10 +1,83 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; +import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUser { +public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUser, INBTPacketReceiver { + + private List players = new ArrayList(); + private long charge = 0; + + long lastOp = 0; + boolean particles = false; + + public int usingTicks; + public int lastUsingTicks; + public static final int delay = 20; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir); + + players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(1, 0.5, 1)); + + charge = 0; + + for(EntityPlayer player : players) { + + for(int i = 0; i < 5; i++) { + + ItemStack stack = player.getEquipmentInSlot(i); + + if(stack != null && stack.getItem() instanceof IBatteryItem) { + IBatteryItem battery = (IBatteryItem) stack.getItem(); + charge += Math.min(battery.getMaxCharge() - battery.getCharge(stack), battery.getChargeRate()); + } + } + } + + NBTTagCompound data = new NBTTagCompound(); + data.setLong("c", charge); + data.setBoolean("p", worldObj.getTotalWorldTime() - lastOp < 4); + INBTPacketReceiver.networkPack(this, data, 50); + } + + lastUsingTicks = usingTicks; + + if(charge > 0 && usingTicks < delay) + usingTicks++; + if(charge <= 0 && usingTicks > 0) + usingTicks--; + + if(particles) { + Random rand = worldObj.rand; + worldObj.spawnParticle("magicCrit", xCoord + 0.25 + rand.nextDouble() * 0.5, yCoord + rand.nextDouble() * 0.5, zCoord + 0.25 + rand.nextDouble() * 0.5, 0.0, 0.0, 0.0); + } + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.charge = nbt.getLong("c"); + this.particles = nbt.getBoolean("p"); + } @Override public long getPower() { @@ -13,11 +86,37 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUs @Override public long getMaxPower() { - return 0; + return charge; } @Override - public void setPower(long power) { + public void setPower(long power) { } + + @Override + public long transferPower(long power) { + if(this.usingTicks < delay || power == 0) + return power; + + lastOp = worldObj.getTotalWorldTime(); + + for(EntityPlayer player : players) { + + for(int i = 0; i < 5; i++) { + + ItemStack stack = player.getEquipmentInSlot(i); + + if(stack != null && stack.getItem() instanceof IBatteryItem) { + IBatteryItem battery = (IBatteryItem) stack.getItem(); + + long toCharge = Math.min(battery.getMaxCharge() - battery.getCharge(stack), battery.getChargeRate()); + toCharge = Math.min(toCharge, power); + battery.chargeBattery(stack, toCharge); + power -= toCharge; + } + } + } + + return power; } } From a6e1d49861f76f591468ca9f1733d00e22b5fd71 Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 20 Apr 2022 22:31:18 +0200 Subject: [PATCH 5/5] finished charger, nicer HUD overlay text --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../com/hbm/blocks/generic/BarbedWire.java | 6 +- .../java/com/hbm/blocks/machine/Charger.java | 9 +- .../java/com/hbm/extprop/HbmPlayerProps.java | 8 +- .../handler/guncfg/GunDetonatorFactory.java | 3 +- .../com/hbm/handler/nei/FuelPoolHandler.java | 102 +----------------- .../handler/nei/SolidificationHandler.java | 2 - .../com/hbm/items/tool/ItemColtanCompass.java | 2 +- .../hbm/items/tool/ItemLaserDetonator.java | 4 +- .../java/com/hbm/items/tool/ItemWiring.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 10 +- .../java/com/hbm/main/CraftingManager.java | 2 + .../java/com/hbm/main/ModEventHandler.java | 2 +- .../com/hbm/main/ModEventHandlerClient.java | 2 +- src/main/java/com/hbm/main/ServerProxy.java | 16 ++- .../com/hbm/packet/PlayerInformPacket.java | 9 +- .../hbm/render/tileentity/RenderCharger.java | 2 +- .../com/hbm/render/util/RenderInfoSystem.java | 47 ++++++-- .../tileentity/machine/TileEntityCharger.java | 38 +++++-- 19 files changed, 125 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 2502fa972..f347d2abd 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2012,7 +2012,7 @@ 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"); + charger = new Charger(Material.iron).setBlockName("charger").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); tesla = new MachineTesla(Material.iron).setBlockName("tesla").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":tesla"); diff --git a/src/main/java/com/hbm/blocks/generic/BarbedWire.java b/src/main/java/com/hbm/blocks/generic/BarbedWire.java index b52d5ff46..4bd8aa73b 100644 --- a/src/main/java/com/hbm/blocks/generic/BarbedWire.java +++ b/src/main/java/com/hbm/blocks/generic/BarbedWire.java @@ -27,11 +27,11 @@ public class BarbedWire extends Block { public void onEntityCollidedWithBlock(World p_149670_1_, int x, int y, int z, Entity ent) { - //ent.setInWeb(); + ent.setInWeb(); - ent.motionX *= 0.25D; + ent.motionX *= 0.15D; ent.motionY *= 0.1D; - ent.motionZ *= 0.25D; + ent.motionZ *= 0.15D; if(this == ModBlocks.barbed_wire) { ent.attackEntityFrom(DamageSource.cactus, 2.0F); diff --git a/src/main/java/com/hbm/blocks/machine/Charger.java b/src/main/java/com/hbm/blocks/machine/Charger.java index 282a0b225..4ae72544b 100644 --- a/src/main/java/com/hbm/blocks/machine/Charger.java +++ b/src/main/java/com/hbm/blocks/machine/Charger.java @@ -60,7 +60,14 @@ public class Charger extends BlockContainer { @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { float f = 0.0625F; - this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); + + switch(world.getBlockMetadata(x, y, z)) { + case 2: this.setBlockBounds(5 * f, 0.25F, 12 * f, 11 * f, 0.75F, 1F); break; + case 3: this.setBlockBounds(5 * f, 0.25F, 0F, 11 * f, 0.75F, 4 * f); break; + case 4: this.setBlockBounds(12 * f, 0.25F, 5 * f, 1F, 0.75F, 11 * f); break; + case 5: this.setBlockBounds(0F, 0.25F, 5 * f, 4 * f, 0.75F, 11 * f); break; + default: this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); break; + } } @Override diff --git a/src/main/java/com/hbm/extprop/HbmPlayerProps.java b/src/main/java/com/hbm/extprop/HbmPlayerProps.java index f504db0b7..2e991b86e 100644 --- a/src/main/java/com/hbm/extprop/HbmPlayerProps.java +++ b/src/main/java/com/hbm/extprop/HbmPlayerProps.java @@ -60,17 +60,17 @@ public class HbmPlayerProps implements IExtendedEntityProperties { this.enableBackpack = !this.enableBackpack; if(this.enableBackpack) - MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Jetpack ON"); + MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "Jetpack ON", MainRegistry.proxy.ID_JETPACK); else - MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Jetpack OFF"); + MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Jetpack OFF", MainRegistry.proxy.ID_JETPACK); } if(key == EnumKeybind.TOGGLE_HEAD) { this.enableHUD = !this.enableHUD; if(this.enableHUD) - MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "HUD ON"); + MainRegistry.proxy.displayTooltip(EnumChatFormatting.GREEN + "HUD ON", MainRegistry.proxy.ID_HUD); else - MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "HUD OFF"); + MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "HUD OFF", MainRegistry.proxy.ID_HUD); } } diff --git a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java index 6861e80ff..2d373c7ad 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb.BombReturnCode; +import com.hbm.main.MainRegistry; import com.hbm.interfaces.IBulletImpactBehavior; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.PlayerInformPacket; @@ -101,7 +102,7 @@ public class GunDetonatorFactory { if(ret.wasSuccessful() && bullet.shooter instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP) bullet.shooter; world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(EnumChatFormatting.YELLOW).flush()), (EntityPlayerMP) player); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(EnumChatFormatting.YELLOW).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player); } } } diff --git a/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java b/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java index 6adfde2da..cdbce5b5c 100644 --- a/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java +++ b/src/main/java/com/hbm/handler/nei/FuelPoolHandler.java @@ -1,108 +1,16 @@ package com.hbm.handler.nei; -import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; - -import java.util.Arrays; -import java.util.List; -import java.util.Map.Entry; - import com.hbm.blocks.ModBlocks; -import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.recipes.FuelPoolRecipes; -import com.hbm.lib.RefStrings; -import codechicken.nei.NEIServerUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.TemplateRecipeHandler; -import net.minecraft.item.ItemStack; +public class FuelPoolHandler extends NEIUniversalHandler { -public class FuelPoolHandler extends TemplateRecipeHandler { - - public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { - - PositionedStack input; - PositionedStack output; - - public RecipeSet(ItemStack in, ItemStack out) { - this.input = new PositionedStack(in, 48, 24); - this.output = new PositionedStack(out, 102, 24); - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 48, Arrays.asList(input)); - } - - @Override - public PositionedStack getResult() { - return output; - } - - @Override - public List getOtherStacks() { - return Arrays.asList(new PositionedStack(new ItemStack(ModBlocks.machine_waste_drum), 75, 31)); - } + public FuelPoolHandler() { + super("Spent Fuel Pool Drum", ModBlocks.machine_waste_drum, FuelPoolRecipes.recipes); } @Override - public String getRecipeName() { - return "Spent Fuel Pool Drum"; - } - - @Override - public String getGuiTexture() { - return RefStrings.MODID + ":textures/gui/nei/gui_nei.png"; - } - - @Override - public void drawBackground(int recipe) { - super.drawBackground(recipe); - drawTexturedModalRect(47, 23, 5, 87, 18, 18); - drawTexturedModalRect(101, 23, 5, 87, 18, 18); - drawTexturedModalRect(74, 14, 59, 87, 18, 38); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - - if(outputId.equals("ntmSpentDrum")) { - - for(Entry recipe : FuelPoolRecipes.recipes.entrySet()) { - this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue())); - } - - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - - for(Entry recipe : FuelPoolRecipes.recipes.entrySet()) { - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getValue(), result)) { - this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue())); - } - } - } - - @Override - public void loadUsageRecipes(String inputId, Object... ingredients) { - - if(inputId.equals("ntmSpentDrum")) { - loadCraftingRecipes("ntmSpentDrum", new Object[0]); - } else { - super.loadUsageRecipes(inputId, ingredients); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - - for(Entry recipe : FuelPoolRecipes.recipes.entrySet()) { - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey().toStack(), ingredient)) { - this.arecipes.add(new RecipeSet(recipe.getKey().toStack(), recipe.getValue())); - } - } + public String getKey() { + return "ntmSpentDrum"; } } diff --git a/src/main/java/com/hbm/handler/nei/SolidificationHandler.java b/src/main/java/com/hbm/handler/nei/SolidificationHandler.java index 96a066b03..181f7dfa8 100644 --- a/src/main/java/com/hbm/handler/nei/SolidificationHandler.java +++ b/src/main/java/com/hbm/handler/nei/SolidificationHandler.java @@ -3,8 +3,6 @@ package com.hbm.handler.nei; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.recipes.SolidificationRecipes; -import codechicken.nei.recipe.TemplateRecipeHandler; - public class SolidificationHandler extends NEIUniversalHandler { public SolidificationHandler() { diff --git a/src/main/java/com/hbm/items/tool/ItemColtanCompass.java b/src/main/java/com/hbm/items/tool/ItemColtanCompass.java index 7fbf14af9..0d2739cf9 100644 --- a/src/main/java/com/hbm/items/tool/ItemColtanCompass.java +++ b/src/main/java/com/hbm/items/tool/ItemColtanCompass.java @@ -34,7 +34,7 @@ public class ItemColtanCompass extends Item { lease = System.currentTimeMillis() + 1000; Vec3 vec = Vec3.createVectorHelper(entity.posX - lastX, 0, entity.posZ - lastZ); - MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m"); + MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m", MainRegistry.proxy.ID_COMPASS); } if(ItemColtanCompass.this.lease < System.currentTimeMillis()) { diff --git a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java index 263c5510c..4fee946c8 100644 --- a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java +++ b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java @@ -47,11 +47,11 @@ public class ItemLaserDetonator extends Item implements IHoldableWeapon { MainRegistry.logger.log(Level.INFO, "[DET] Tried to detonate block at " + x + " / " + y + " / " + z + " by " + player.getDisplayName() + "!"); world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(ret.wasSuccessful() ? EnumChatFormatting.YELLOW : EnumChatFormatting.RED).flush()), (EntityPlayerMP) player); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(ret.getUnlocalizedMessage()).color(ret.wasSuccessful() ? EnumChatFormatting.YELLOW : EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player); } else { world.playSoundAtEntity(player, "hbm:item.techBoop", 1.0F, 1.0F); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(BombReturnCode.ERROR_NO_BOMB.getUnlocalizedMessage()).color(EnumChatFormatting.RED).flush()), (EntityPlayerMP) player); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(BombReturnCode.ERROR_NO_BOMB.getUnlocalizedMessage()).color(EnumChatFormatting.RED).flush(), MainRegistry.proxy.ID_DETONATOR), (EntityPlayerMP) player); } } else { diff --git a/src/main/java/com/hbm/items/tool/ItemWiring.java b/src/main/java/com/hbm/items/tool/ItemWiring.java index 04c8455af..fc694ee82 100644 --- a/src/main/java/com/hbm/items/tool/ItemWiring.java +++ b/src/main/java/com/hbm/items/tool/ItemWiring.java @@ -111,7 +111,7 @@ public class ItemWiring extends Item { entity.posY - stack.stackTagCompound.getInteger("y"), entity.posZ - stack.stackTagCompound.getInteger("z")); - MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m"); + MainRegistry.proxy.displayTooltip(((int) vec.lengthVector()) + "m", MainRegistry.proxy.ID_CABLE); } } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index df9837621..14ae1a1f6 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1625,12 +1625,14 @@ public class ClientProxy extends ServerProxy { @Override public void playSound(String sound, Object data) { } - + @Override - public void displayTooltip(String msg) { - //Minecraft.getMinecraft().ingameGUI.func_110326_a(msg, false); + public void displayTooltip(String msg, int time, int id) { - this.theInfoSystem.push(new InfoEntry(msg, 1000)); + if(id != 0) + this.theInfoSystem.push(new InfoEntry(msg, time), id); + else + this.theInfoSystem.push(new InfoEntry(msg, time)); } @Override diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 653ebc302..8dd1dbdbc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -871,6 +871,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.RBMK.ordinal()), new Object[] { Items.book, Items.potato }); addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.HADRON.ordinal()), new Object[] { Items.book, ModItems.fuse }); addShapelessAuto(new ItemStack(ModItems.book_guide, 1, BookType.STARTER.ordinal()), new Object[] { Items.book, Items.iron_ingot }); + + addRecipeAuto(new ItemStack(ModBlocks.charger), new Object[] { "IGI", "ICI", "PDP", 'I', STEEL.ingot(), 'G', Items.glowstone_dust, 'C', ModBlocks.red_wire_coated, 'P', IRON.plate(), 'D', ModItems.coil_copper }); addShapelessAuto(new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_RESTORED.ordinal()), new Object[] { new ItemStack(ModItems.holotape_image, 1, EnumHoloImage.HOLO_DIGAMMA.ordinal()), KEY_TOOL_SCREWDRIVER, ModItems.ducttape, ModItems.armor_polish }); addShapelessAuto(new ItemStack(ModItems.holotape_damaged), new Object[] { DictFrame.fromOne(ModItems.holotape_image, EnumHoloImage.HOLO_RESTORED), ModBlocks.muffler, ModItems.crt_display, ModItems.gem_alexandrite /* placeholder for amplifier */ }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index fb18842c8..bb60e0c64 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -178,7 +178,7 @@ public class ModEventHandler { } if(MobConfig.enableDucks && event.player instanceof EntityPlayerMP && !event.player.getEntityData().getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG).getBoolean("hasDucked")) - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("Press O to Duck!"), (EntityPlayerMP) event.player); + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("Press O to Duck!", MainRegistry.proxy.ID_DUCK), (EntityPlayerMP) event.player); } } diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index d7bea7ba1..3b83da3af 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -686,7 +686,7 @@ public class ModEventHandlerClient { } if(ArmorUtil.isWearingEmptyMask(mc.thePlayer)) { - MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Your mask has no filter!"); + MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Your mask has no filter!", MainRegistry.proxy.ID_FILTER); } } } diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 8dfa85cbb..fb26309d9 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -10,6 +10,15 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; public class ServerProxy { + + //sort by estimated time of display. longer lasting ones should be sortet at the top. + public static final int ID_DUCK = 0; + public static final int ID_FILTER = 1; + public static final int ID_COMPASS = 2; + public static final int ID_CABLE = 3; + public static final int ID_JETPACK = 4; + public static final int ID_HUD = 5; + public static final int ID_DETONATOR = 6; public void registerRenderInfo() { } public void registerTileEntitySpecialRenderer() { } @@ -28,8 +37,11 @@ public class ServerProxy { public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { return null; } public void playSound(String sound, Object data) { } - - public void displayTooltip(String msg) { } + + public void displayTooltip(String msg, int id) { + displayTooltip(msg, 1000, id); + } + public void displayTooltip(String msg, int time, int id) { } public boolean getIsKeyPressed(EnumKeybind key) { return false; diff --git a/src/main/java/com/hbm/packet/PlayerInformPacket.java b/src/main/java/com/hbm/packet/PlayerInformPacket.java index 659f70a6d..2acf83998 100644 --- a/src/main/java/com/hbm/packet/PlayerInformPacket.java +++ b/src/main/java/com/hbm/packet/PlayerInformPacket.java @@ -15,22 +15,24 @@ public class PlayerInformPacket implements IMessage { boolean fancy; private String dmesg = ""; + private int id; private IChatComponent component; public PlayerInformPacket() { } - public PlayerInformPacket(String dmesg) { + public PlayerInformPacket(String dmesg, int id) { this.fancy = false; this.dmesg = dmesg; } - public PlayerInformPacket(IChatComponent component) { + public PlayerInformPacket(IChatComponent component, int id) { this.fancy = true; this.component = component; } @Override public void fromBytes(ByteBuf buf) { + id = buf.readInt(); fancy = buf.readBoolean(); if(!fancy) { @@ -42,6 +44,7 @@ public class PlayerInformPacket implements IMessage { @Override public void toBytes(ByteBuf buf) { + buf.writeInt(id); buf.writeBoolean(fancy); if(!fancy) { ByteBufUtils.writeUTF8String(buf, dmesg); @@ -57,7 +60,7 @@ public class PlayerInformPacket implements IMessage { public IMessage onMessage(PlayerInformPacket m, MessageContext ctx) { try { - MainRegistry.proxy.displayTooltip(m.fancy ? m.component.getFormattedText() : m.dmesg); + MainRegistry.proxy.displayTooltip(m.fancy ? m.component.getFormattedText() : m.dmesg, m.id); } catch (Exception x) { } return null; diff --git a/src/main/java/com/hbm/render/tileentity/RenderCharger.java b/src/main/java/com/hbm/render/tileentity/RenderCharger.java index f7ce54d3a..ed2b52bd5 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderCharger.java +++ b/src/main/java/com/hbm/render/tileentity/RenderCharger.java @@ -31,7 +31,7 @@ public class RenderCharger extends TileEntitySpecialRenderer { TileEntityCharger charger = (TileEntityCharger) tile; - double time = (charger.lastUsingTicks + (charger.lastUsingTicks - charger.lastUsingTicks) * interp) / (double) charger.delay; + double time = (charger.lastUsingTicks + (charger.usingTicks - charger.lastUsingTicks) * interp) / (double) charger.delay; double extend = Math.min(1, time * 2); double swivel = Math.max(0, (time - 0.5) * 2); diff --git a/src/main/java/com/hbm/render/util/RenderInfoSystem.java b/src/main/java/com/hbm/render/util/RenderInfoSystem.java index 405847c08..e91907868 100644 --- a/src/main/java/com/hbm/render/util/RenderInfoSystem.java +++ b/src/main/java/com/hbm/render/util/RenderInfoSystem.java @@ -14,12 +14,14 @@ import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; public class RenderInfoSystem { - private static Random rand = new Random(); + private static int nextID = 1000; private static HashMap inbox = new HashMap(); private static HashMap messages = new HashMap(); @@ -36,6 +38,7 @@ public class RenderInfoSystem { if(entry.start + entry.millis < System.currentTimeMillis()) { messages.remove(key); + keys = new ArrayList(messages.keySet()); i--; } } @@ -46,17 +49,46 @@ public class RenderInfoSystem { if(event.type != ElementType.CROSSHAIRS) return; + + if(this.messages.isEmpty()) + return; Minecraft mc = Minecraft.getMinecraft(); ScaledResolution resolution = event.resolution; - - int pX = 15; //resolution.getScaledWidth() / 2 + 8; - int pZ = 15; //resolution.getScaledHeight() / 2; - List entries = new ArrayList(messages.entrySet()); + List entries = new ArrayList(messages.values()); Collections.sort(entries); GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + + int longest = 0; + + for(InfoEntry entry : messages.values()) { + int length = mc.fontRenderer.getStringWidth(entry.text); + + if(length > longest) + longest = length; + } + + int mode = 0; + + int pX = mode == 0 ? 15 : mode == 1 ? (resolution.getScaledWidth() - longest - 15) : mode == 2 ? (resolution.getScaledWidth() / 2 + 7) : (resolution.getScaledWidth() / 2 - longest - 6); + int pZ = mode == 0 ? 15 : mode == 1 ? 15 : resolution.getScaledHeight() / 2 + 7; + + int side = pX + 5 + longest; + int height = messages.size() * 10 + pZ + 2; + int z = 0; + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + tess.setColorRGBA_F(0.5F, 0.5F, 0.5F, 0.5F); + tess.addVertex(pX - 5, pZ - 5, z); + tess.addVertex(pX - 5, height, z); + tess.addVertex(side, height, z); + tess.addVertex(side, pZ - 5, z); + tess.draw(); int off = 0; long now = System.currentTimeMillis(); @@ -65,7 +97,7 @@ public class RenderInfoSystem { int elapsed = (int) (now - entry.start); - int alpha = Math.min(510 * (entry.millis - elapsed) / entry.millis, 255); //smoothly scales down from 510 to 0, then caps at 255 + int alpha = Math.max(Math.min(510 * (entry.millis - elapsed) / entry.millis, 255), 5); //smoothly scales down from 510 to 0, then caps at 255 int color = entry.color + (alpha << 24 & -0xffffff); mc.fontRenderer.drawString(entry.text, pX, pZ + off, color); @@ -92,7 +124,6 @@ public class RenderInfoSystem { mc.fontRenderer.drawStringWithShadow(ex.getClass().getSimpleName(), pX, pZ + 10, 0xff0000); }*/ - GL11.glDisable(GL11.GL_BLEND); GL11.glColor3f(1F, 1F, 1F); GL11.glPopMatrix(); @@ -100,7 +131,7 @@ public class RenderInfoSystem { } public static void push(InfoEntry entry) { - push(entry, rand.nextInt()); //range is so large, collisions are unlikely and if they do occur, not a big deal + push(entry, nextID++); //range is so large, collisions are unlikely and if they do occur, not a big deal } public static void push(InfoEntry entry, int id) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java index a19bedc7d..c1f8294c5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCharger.java @@ -9,8 +9,6 @@ import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -32,12 +30,12 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUs @Override public void updateEntity() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); + if(!worldObj.isRemote) { - - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ, dir); - players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(1, 0.5, 1)); + players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord, zCoord + 0.5, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5).expand(0.5, 0.0, 0.5)); charge = 0; @@ -54,22 +52,42 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUs } } + particles = worldObj.getTotalWorldTime() - lastOp < 4; + + if(particles) { + + if(worldObj.getTotalWorldTime() % 20 == 0) + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "random.fizz", 0.2F, 0.5F); + } + NBTTagCompound data = new NBTTagCompound(); data.setLong("c", charge); - data.setBoolean("p", worldObj.getTotalWorldTime() - lastOp < 4); + data.setBoolean("p", particles); INBTPacketReceiver.networkPack(this, data, 50); } lastUsingTicks = usingTicks; - if(charge > 0 && usingTicks < delay) + if((charge > 0 || particles) && usingTicks < delay) { usingTicks++; - if(charge <= 0 && usingTicks > 0) + if(usingTicks == 2) + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.out", 0.5F, 0.5F); + } + if((charge <= 0 && !particles) && usingTicks > 0) { usingTicks--; + if(usingTicks == 4) + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "tile.piston.in", 0.5F, 0.5F); + } if(particles) { Random rand = worldObj.rand; - worldObj.spawnParticle("magicCrit", xCoord + 0.25 + rand.nextDouble() * 0.5, yCoord + rand.nextDouble() * 0.5, zCoord + 0.25 + rand.nextDouble() * 0.5, 0.0, 0.0, 0.0); + worldObj.spawnParticle("magicCrit", + xCoord + 0.5 + rand.nextDouble() * 0.0625 + dir.offsetX * 0.75, + yCoord + 0.1, + zCoord + 0.5 + rand.nextDouble() * 0.0625 + dir.offsetZ * 0.75, + -dir.offsetX + rand.nextGaussian() * 0.1, + 0, + -dir.offsetZ + rand.nextGaussian() * 0.1); } } @@ -110,7 +128,7 @@ public class TileEntityCharger extends TileEntityLoadedBase implements IEnergyUs IBatteryItem battery = (IBatteryItem) stack.getItem(); long toCharge = Math.min(battery.getMaxCharge() - battery.getCharge(stack), battery.getChargeRate()); - toCharge = Math.min(toCharge, power); + toCharge = Math.min(toCharge, power / 5); battery.chargeBattery(stack, toCharge); power -= toCharge; }