public void onBlockRemoval(World world, int i, int j, int k) {
   super.onBlockRemoval(world, i, j, k);
   if (world.multiplayerWorld) {
     return;
   }
   world.notifyBlocksOfNeighborChange(i, j + 1, k, blockID);
   world.notifyBlocksOfNeighborChange(i, j - 1, k, blockID);
   updateAndPropagateCurrentStrength(world, i, j, k);
   notifyWireNeighborsOfNeighborChange(world, i - 1, j, k);
   notifyWireNeighborsOfNeighborChange(world, i + 1, j, k);
   notifyWireNeighborsOfNeighborChange(world, i, j, k - 1);
   notifyWireNeighborsOfNeighborChange(world, i, j, k + 1);
   if (world.isBlockOpaqueCube(i - 1, j, k)) {
     notifyWireNeighborsOfNeighborChange(world, i - 1, j + 1, k);
   } else {
     notifyWireNeighborsOfNeighborChange(world, i - 1, j - 1, k);
   }
   if (world.isBlockOpaqueCube(i + 1, j, k)) {
     notifyWireNeighborsOfNeighborChange(world, i + 1, j + 1, k);
   } else {
     notifyWireNeighborsOfNeighborChange(world, i + 1, j - 1, k);
   }
   if (world.isBlockOpaqueCube(i, j, k - 1)) {
     notifyWireNeighborsOfNeighborChange(world, i, j + 1, k - 1);
   } else {
     notifyWireNeighborsOfNeighborChange(world, i, j - 1, k - 1);
   }
   if (world.isBlockOpaqueCube(i, j, k + 1)) {
     notifyWireNeighborsOfNeighborChange(world, i, j + 1, k + 1);
   } else {
     notifyWireNeighborsOfNeighborChange(world, i, j - 1, k + 1);
   }
 }
  private void func_21030_a(World world, int i, int j, int k, int l, int i1, int j1) {
    int k1 = world.getBlockMetadata(i, j, k);
    int l1 = 0;
    wiresProvidePower = false;
    boolean flag = world.isBlockIndirectlyGettingPowered(i, j, k);
    wiresProvidePower = true;
    if (flag) {
      l1 = 15;
    } else {
      for (int i2 = 0; i2 < 4; i2++) {
        int k2 = i;
        int i3 = k;
        if (i2 == 0) {
          k2--;
        }
        if (i2 == 1) {
          k2++;
        }
        if (i2 == 2) {
          i3--;
        }
        if (i2 == 3) {
          i3++;
        }
        if (k2 != l || j != i1 || i3 != j1) {
          l1 = getMaxCurrentStrength(world, k2, j, i3, l1);
        }
        if (world.isBlockOpaqueCube(k2, j, i3) && !world.isBlockOpaqueCube(i, j + 1, k)) {
          if (k2 != l || j + 1 != i1 || i3 != j1) {
            l1 = getMaxCurrentStrength(world, k2, j + 1, i3, l1);
          }
          continue;
        }
        if (!world.isBlockOpaqueCube(k2, j, i3) && (k2 != l || j - 1 != i1 || i3 != j1)) {
          l1 = getMaxCurrentStrength(world, k2, j - 1, i3, l1);
        }
      }

      if (l1 > 0) {
        l1--;
      } else {
        l1 = 0;
      }
    }
    if (k1 != l1) {
      world.field_1043_h = true;
      world.setBlockMetadataWithNotify(i, j, k, l1);
      world.markBlocksDirty(i, j, k, i, j, k);
      world.field_1043_h = false;
      for (int j2 = 0; j2 < 4; j2++) {
        int l2 = i;
        int j3 = k;
        int k3 = j - 1;
        if (j2 == 0) {
          l2--;
        }
        if (j2 == 1) {
          l2++;
        }
        if (j2 == 2) {
          j3--;
        }
        if (j2 == 3) {
          j3++;
        }
        if (world.isBlockOpaqueCube(l2, j, j3)) {
          k3 += 2;
        }
        int l3 = 0;
        l3 = getMaxCurrentStrength(world, l2, j, j3, -1);
        l1 = world.getBlockMetadata(i, j, k);
        if (l1 > 0) {
          l1--;
        }
        if (l3 >= 0 && l3 != l1) {
          func_21030_a(world, l2, j, j3, i, j, k);
        }
        l3 = getMaxCurrentStrength(world, l2, k3, j3, -1);
        l1 = world.getBlockMetadata(i, j, k);
        if (l1 > 0) {
          l1--;
        }
        if (l3 >= 0 && l3 != l1) {
          func_21030_a(world, l2, k3, j3, i, j, k);
        }
      }

      if (k1 == 0 || l1 == 0) {
        field_21031_b.add(new ChunkPosition(i, j, k));
        field_21031_b.add(new ChunkPosition(i - 1, j, k));
        field_21031_b.add(new ChunkPosition(i + 1, j, k));
        field_21031_b.add(new ChunkPosition(i, j - 1, k));
        field_21031_b.add(new ChunkPosition(i, j + 1, k));
        field_21031_b.add(new ChunkPosition(i, j, k - 1));
        field_21031_b.add(new ChunkPosition(i, j, k + 1));
      }
    }
  }
 public boolean canPlaceBlockAt(World world, int i, int j, int k) {
   return world.isBlockOpaqueCube(i, j - 1, k);
 }