/** ********** BOXES ********** */
  @Override
  @SuppressWarnings({"rawtypes", "unchecked"})
  public void addCollisionBoxesToList(
      World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity entity) {
    final boolean flag = this.canConnectRopeTo(world, x, y, z - 1);
    final boolean flag1 = this.canConnectRopeTo(world, x, y, z + 1);
    final boolean flag2 = this.canConnectRopeTo(world, x - 1, y, z);
    final boolean flag3 = this.canConnectRopeTo(world, x + 1, y, z);
    float f = 0.375F;
    float f1 = 0.625F;
    float f2 = 0.375F;
    float f3 = 0.625F;

    if (flag) {
      f2 = 0.0F;
    }

    if (flag1) {
      f3 = 1.0F;
    }

    if (flag || flag1) {
      this.setBlockBounds(f, 0.4375F, f2, f1, 0.5625F, f3);
      super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity);
    }

    f2 = 0.375F;
    f3 = 0.625F;

    if (flag2) {
      f = 0.0F;
    }

    if (flag3) {
      f1 = 1.0F;
    }

    if (flag2 || flag3 || !flag && !flag1) {
      this.setBlockBounds(f, 0.4375F, f2, f1, 0.5625F, f3);
      super.addCollisionBoxesToList(world, x, y, z, aabb, list, entity);
    }

    if (flag) {
      f2 = 0.0F;
    }

    if (flag1) {
      f3 = 1.0F;
    }

    this.setBlockBoundsBasedOnState(world, x, y, z);
  }
  public void addCollisionBoxesToList(
      World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List list, Entity entity) {
    if (world.getBlockMetadata(x, y, z) == 0) {
      this.setBlockBounds(0F, 0F, 0F, 1F, 0.5F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(1F, 0F, 0F, 0.5F, 1F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
    }

    if (world.getBlockMetadata(x, y, z) == 1) {
      this.setBlockBounds(0F, 0F, 0F, 1F, 0.5F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(1F, 0F, 0F, 0.5F, 1F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
    }

    if (world.getBlockMetadata(x, y, z) == 2) {
      this.setBlockBounds(0F, 0F, 0F, 1F, 0.5F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(1F, 0F, 0F, 0.5F, 1F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
    }

    if (world.getBlockMetadata(x, y, z) == 3) {
      this.setBlockBounds(0F, 0F, 0F, 1F, 0.5F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(1F, 0F, 0F, 0.5F, 1F, 1F);
      super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
    }
  }
 @Override
 public void addCollisionBoxesToList(
     World world,
     BlockPos pos,
     IBlockState state,
     AxisAlignedBB mask,
     List list,
     Entity collidingEntity) {
   setBlockBounds(0.25F, 0.0F, 0.25F, 0.75F, 0.35F, 0.75F);
   super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity);
 }
 /**
  * Adds all intersecting collision boxes to a list. (Be sure to only add boxes to the list if they
  * intersect the mask.) Parameters: World, X, Y, Z, mask, list, colliding entity
  */
 public void addCollisionBoxesToList(
     World par1World,
     int par2,
     int par3,
     int par4,
     AxisAlignedBB par5AxisAlignedBB,
     List par6List,
     Entity par7Entity) {
   this.setBlockBoundsBasedOnState(par1World, par2, par3, par4);
   super.addCollisionBoxesToList(
       par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
 }
  @SuppressWarnings("rawtypes")
  @Override
  public void addCollisionBoxesToList(
      World world, int x, int y, int z, AxisAlignedBB axisalignedbb, List list, Entity entity) {
    TileEntity tileentity = world.getTileEntity(x, y, z);
    if (tileentity != null && tileentity instanceof TileEntityLittleChunk) {
      TileEntityLittleChunk tile = (TileEntityLittleChunk) tileentity;

      float m = ConfigurationLib.littleBlocksSize;

      AxisAlignedBB bb =
          AxisAlignedBB.getBoundingBox(
              axisalignedbb.minX * m,
              axisalignedbb.minY * m,
              axisalignedbb.minZ * m,
              axisalignedbb.maxX * m,
              axisalignedbb.maxY * m,
              axisalignedbb.maxZ * m);
      List<AxisAlignedBB> bbs = new ArrayList<AxisAlignedBB>();
      for (int xx = 0; xx < tile.size; xx++) {
        for (int yy = 0; yy < tile.size; yy++) {
          for (int zz = 0; zz < tile.size; zz++) {
            if (tile.getBlock(xx, yy, zz) != Blocks.air) {
              Block block = tile.getBlock(xx, yy, zz);
              if (block != null) {
                block.addCollisionBoxesToList(
                    (World) tile.getLittleWorld(),
                    (x << 3) + xx,
                    (y << 3) + yy,
                    (z << 3) + zz,
                    bb,
                    bbs,
                    entity);
              }
            }
          }
        }
      }
      for (AxisAlignedBB aabb : bbs) {
        aabb.setBounds(
            aabb.minX / m,
            aabb.minY / m,
            aabb.minZ / m,
            aabb.maxX / m,
            aabb.maxY / m,
            aabb.maxZ / m);
        list.add(aabb);
      }
    }
  }