/**
   * Drawbacks: - The instrument doesn't work - forge sets it itself on function run.
   *
   * @throws IllegalArgumentException - if the instrument is invalid
   */
  public boolean play(Instrument instrument, Note note) throws IllegalArgumentException {
    Block block = getBlock();

    synchronized (block) {
      if (block.getType() == Material.NOTE_BLOCK) {
        // BlockNote nb = (BlockNote) block;
        TileEntityNote t =
            (TileEntityNote)
                ((BukkitWorld) block.getWorld()).getTileEntityAt(getX(), getY(), getZ());
        byte oldNote = t.note;
        t.note = note.getId();
        net.minecraft.src.Block targ;
        switch (instrument.getType()) {
          case 1:
            targ = net.minecraft.src.Block.stone;
            break;
          case 2:
            targ = net.minecraft.src.Block.sand;
            break;
          case 4:
            targ = net.minecraft.src.Block.wood;
            break;
          case 3:
            targ = net.minecraft.src.Block.glass;
            break;
          default:
            throw new IllegalArgumentException("Invalid instrument: " + instrument.getType());
        }
        ((BukkitWorld) block.getWorld())
            .getHandle()
            .setBlock(getX(), getY() - 1, getZ(), targ.blockID);
        t.triggerNote(((BukkitWorld) block.getWorld()).getHandle(), getX(), getY(), getZ());
        t.note = oldNote;
        // world.getHandle().playNote(getX(), getY(), getZ(), block.getTypeId(),
        // instrument.getType(), note.getId());
        return true;
      } else {
        return false;
      }
    }
  }
  public boolean play() {
    Block block = getBlock();

    synchronized (block) {
      if (block.getType() == Material.NOTE_BLOCK) {
        note.triggerNote(world.getHandle(), getX(), getY(), getZ());
        return true;
      } else {
        return false;
      }
    }
  }
 public void setRawNote(byte n) {
   note.note = n;
 }
 public void setNote(Note n) {
   note.note = n.getId();
 }