package com.hbm.blocks.machine.rbmk; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.tileentity.machine.rbmk.TileEntityCraneConsole; import api.hbm.block.IToolable; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class RBMKCraneConsole extends BlockDummyable implements IToolable { public RBMKCraneConsole() { super(Material.iron); this.setHardness(3F); this.setResistance(30F); } @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= this.offset) return new TileEntityCraneConsole(); return null; } @Override public int[] getDimensions() { return new int[] {1, 0, 0, 0, 1, 1}; } @Override public int getOffset() { return 1; } @Override public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y, z + dir.offsetZ * o, new int[] {0, 0, 0, 1, 1, 1}, this, dir); } @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {0, 0, 0, 1, 1, 1}, x, y, z, dir)) return false; return super.checkRequirement(world, x, y, z, dir, o); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { if(world.getBlockMetadata(x, y, z) == ForgeDirection.UP.ordinal()) { return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 0.5F, z + 1); } else { return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); } } @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { if(world.getBlockMetadata(x, y, z) == ForgeDirection.UP.ordinal()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); } else { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } } @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { if(tool == ToolType.SCREWDRIVER) { if(world.isRemote) return true; int[] pos = findCore(world, x, y, z); TileEntityCraneConsole tile = (TileEntityCraneConsole) world.getTileEntity(pos[0], pos[1], pos[2]); tile.cycleCraneRotation(); tile.markDirty(); return true; } return false; } }