public boolean b(IBlockAccess iblockaccess, int i, int j, int k, int l) {
    if (!this.a) {
      return false;
    } else if (iblockaccess.getData(i, j, k) == 0) {
      return false;
    } else if (l == 1) {
      return true;
    } else {
      boolean flag =
          g(iblockaccess, i - 1, j, k, 1)
              || !iblockaccess.t(i - 1, j, k) && g(iblockaccess, i - 1, j - 1, k, -1);
      boolean flag1 =
          g(iblockaccess, i + 1, j, k, 3)
              || !iblockaccess.t(i + 1, j, k) && g(iblockaccess, i + 1, j - 1, k, -1);
      boolean flag2 =
          g(iblockaccess, i, j, k - 1, 2)
              || !iblockaccess.t(i, j, k - 1) && g(iblockaccess, i, j - 1, k - 1, -1);
      boolean flag3 =
          g(iblockaccess, i, j, k + 1, 0)
              || !iblockaccess.t(i, j, k + 1) && g(iblockaccess, i, j - 1, k + 1, -1);

      if (!iblockaccess.t(i, j + 1, k)) {
        if (iblockaccess.t(i - 1, j, k) && g(iblockaccess, i - 1, j + 1, k, -1)) {
          flag = true;
        }

        if (iblockaccess.t(i + 1, j, k) && g(iblockaccess, i + 1, j + 1, k, -1)) {
          flag1 = true;
        }

        if (iblockaccess.t(i, j, k - 1) && g(iblockaccess, i, j + 1, k - 1, -1)) {
          flag2 = true;
        }

        if (iblockaccess.t(i, j, k + 1) && g(iblockaccess, i, j + 1, k + 1, -1)) {
          flag3 = true;
        }
      }

      return !flag2 && !flag1 && !flag && !flag3 && l >= 2 && l <= 5
          ? true
          : (l == 2 && flag2 && !flag && !flag1
              ? true
              : (l == 3 && flag3 && !flag && !flag1
                  ? true
                  : (l == 4 && flag && !flag2 && !flag3
                      ? true
                      : l == 5 && flag1 && !flag2 && !flag3)));
    }
  }