Program: 83570
Project: 83570
Buggy source:
private void putBlock(int x,int y,int z,int id,byte data,Direction dir){
  if (id == -1) {
    return;
  }
  Block b=world.getBlockAt(x,y,z);
  if (b.getTypeId() == id && b.getData() == data) {
    return;
  }
  undo.putBlock(b);
  if (dir != Direction.NORTH) {
    if ((id == 50 || id == 75 || id == 76) && data != (byte)5) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)1) {
          data=(byte)4;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)1;
        }
      }
    }
    if ((id == 53 || id == 67 || id == 108 || id == 109)) {
      byte vrtdir=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
      data=(byte)(data | vrtdir);
    }
    if ((id == 23 || id == 54 || id == 61 || id == 62 || id == 65 || id == 68)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)5;
        }
 else         if (data == (byte)5) {
          data=(byte)4;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)2) {
          data=(byte)5;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
 else         if (data == (byte)5) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)5;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
 else         if (data == (byte)5) {
          data=(byte)2;
        }
      }
    }
    if (id == 77) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)1) {
          data=(byte)4;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
      }
    }
    if ((id == 86 || id == 91)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
    }
    if ((id == 93 || id == 94)) {
      byte tick=(byte)(0x03 & data);
      data=(byte)(0x0C & data);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
      data=(byte)(data | tick);
    }
    if (id == 96) {
      byte open=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
      data=(byte)(data | open);
    }
    if ((id == 29 || id == 33)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)2) {
          data=(byte)2;
        }
 else         if (data == (byte)3) {
          data=(byte)3;
        }
 else         if (data == (byte)4) {
          data=(byte)5;
        }
 else         if (data == (byte)5) {
          data=(byte)4;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)2) {
          data=(byte)5;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
 else         if (data == (byte)5) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)5;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
 else         if (data == (byte)5) {
          data=(byte)2;
        }
      }
    }
    if (id == 107) {
      byte open=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
      data=(byte)(data | open);
    }
  }
  b.setTypeIdAndData(id,data,false);
}

Fixed version (ground truth):
private void putBlock(int x,int y,int z,int id,byte data,Direction dir){
  if (id == -1) {
    return;
  }
  Block b=world.getBlockAt(x,y,z);
  if (b.getTypeId() == id && b.getData() == data) {
    return;
  }
  undo.putBlock(b);
  if (dir != Direction.NORTH) {
    if ((id == 50 || id == 75 || id == 76) && data != (byte)5) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)1) {
          data=(byte)4;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)1;
        }
      }
    }
    if ((id == 53 || id == 67 || id == 108 || id == 109 || id == 114)) {
      byte vrtdir=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
      data=(byte)(data | vrtdir);
    }
    if ((id == 23 || id == 54 || id == 61 || id == 62 || id == 65 || id == 68)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)5;
        }
 else         if (data == (byte)5) {
          data=(byte)4;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)2) {
          data=(byte)5;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
 else         if (data == (byte)5) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)5;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
 else         if (data == (byte)5) {
          data=(byte)2;
        }
      }
    }
    if (id == 77) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
 else         if (data == (byte)4) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)1) {
          data=(byte)4;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
      }
    }
    if ((id == 86 || id == 91)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
    }
    if ((id == 93 || id == 94)) {
      byte tick=(byte)(0x03 & data);
      data=(byte)(0x0C & data);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
      data=(byte)(data | tick);
    }
    if (id == 96) {
      byte open=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
      data=(byte)(data | open);
    }
    if ((id == 29 || id == 33)) {
      if (dir == Direction.SOUTH) {
        if (data == (byte)2) {
          data=(byte)2;
        }
 else         if (data == (byte)3) {
          data=(byte)3;
        }
 else         if (data == (byte)4) {
          data=(byte)5;
        }
 else         if (data == (byte)5) {
          data=(byte)4;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)2) {
          data=(byte)5;
        }
 else         if (data == (byte)3) {
          data=(byte)4;
        }
 else         if (data == (byte)4) {
          data=(byte)2;
        }
 else         if (data == (byte)5) {
          data=(byte)3;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)2) {
          data=(byte)4;
        }
 else         if (data == (byte)3) {
          data=(byte)5;
        }
 else         if (data == (byte)4) {
          data=(byte)3;
        }
 else         if (data == (byte)5) {
          data=(byte)2;
        }
      }
    }
    if (id == 107) {
      byte open=(byte)(data & 0x04);
      data=(byte)(data & 0x03);
      if (dir == Direction.SOUTH) {
        if (data == (byte)0) {
          data=(byte)2;
        }
 else         if (data == (byte)1) {
          data=(byte)3;
        }
 else         if (data == (byte)2) {
          data=(byte)0;
        }
 else         if (data == (byte)3) {
          data=(byte)1;
        }
      }
 else       if (dir == Direction.EAST) {
        if (data == (byte)0) {
          data=(byte)1;
        }
 else         if (data == (byte)1) {
          data=(byte)2;
        }
 else         if (data == (byte)2) {
          data=(byte)3;
        }
 else         if (data == (byte)3) {
          data=(byte)0;
        }
      }
 else       if (dir == Direction.WEST) {
        if (data == (byte)0) {
          data=(byte)3;
        }
 else         if (data == (byte)1) {
          data=(byte)0;
        }
 else         if (data == (byte)2) {
          data=(byte)1;
        }
 else         if (data == (byte)3) {
          data=(byte)2;
        }
      }
      data=(byte)(data | open);
    }
  }
  b.setTypeIdAndData(id,data,false);
}