@Override
  public void onRegistered() {
    List<RecipeBook> books = RecipeBooks.getInstance().getBooksPartialMatch(getBookID());

    if (books.isEmpty()) {
      ErrorReporter.getInstance()
          .warning(
              "Flag "
                  + getFlagType()
                  + " could not find book ID containing '"
                  + bookID
                  + "', flag ignored.");
      remove();
      return;
    }

    RecipeBook book = books.get(0);

    if (books.size() > 1) {
      ErrorReporter.getInstance()
          .warning(
              "Flag "
                  + getFlagType()
                  + " found "
                  + books.size()
                  + " books matching ID '"
                  + bookID
                  + "', using first: "
                  + book.getTitle());
    }
  }
  @Override
  public void onPrepare(Args a) {
    if (getBookID() == null) {
      a.addCustomReason("Book ID not set!");
      return;
    }

    if (!a.hasResult()) {
      a.addCustomReason("Need result!");
      return;
    }

    List<RecipeBook> books = RecipeBooks.getInstance().getBooksPartialMatch(getBookID());

    if (books.isEmpty()) {
      return;
    }

    RecipeBook book = books.get(0);

    a.result().setItemMeta(book.getBookItem(volume).getItemMeta());
  }