RecipeBook

Recipe Browser & Quick Craft System

Overview

RecipeBook is an interactive recipe browsing and quick-crafting plugin for Minecraft servers. It provides players with a beautiful GUI interface to explore recipes, view required materials, and craft items with a single click.

Key Features

  • Interactive GUI recipe browser with pagination
  • Hierarchical category system (categories within categories)
  • One-click quick crafting with bulk support
  • EcoShop integration for automatic material purchasing
  • Support for vanilla and custom items (EcoItems, Oraxen, etc.)
  • VaultPack backpack recipe support
  • Per-recipe permission locking
  • Full developer API with events
  • Folia compatible

Installation

  1. Download RecipeBook from your BuiltByBit purchase
  2. Download and install the eco framework (required dependency)
  3. Stop your Minecraft server
  4. Place both JAR files in your server's plugins/ directory
  5. Start your server
  6. Configure the plugin in plugins/RecipeBook/config.yml
  7. Use /recipebook reload to apply changes

Requirements: Paper/Spigot/Folia 1.21+, Java 21+, and eco framework

Optional Dependencies

  • EcoShop - Enables automatic material purchasing during crafting
  • VaultPack - Adds support for backpack recipes

Commands

Base command: /recipebook (alias: /rbook)

Player Commands

CommandDescription
/recipebookOpen the default recipe category menu
/recipebook lookup <item>Look up a specific item's crafting recipe
/recipebook open <category>Open a specific category menu

Admin Commands

CommandDescription
/recipebook reloadReload configuration and categories from disk
/recipebook open <category> <player>Open a category menu for another player

Permissions

Command Permissions

PermissionDescriptionDefault
recipebook.command.recipebookAccess to base /recipebook commandOP
recipebook.command.reloadReload plugin configurationOP
recipebook.command.lookupUse the lookup commandOP
recipebook.command.openOpen specific categoriesOP
recipebook.open.othersOpen menus for other playersOP

Feature Permissions

PermissionDescription
recipebook.quickcraftUse the quick-craft feature (when require-permission is enabled)
<custom>Per-recipe permissions can be set in category configs

Configuration

Main configuration file: plugins/RecipeBook/config.yml

Shop Integration

# EcoShop integration settings
shop-integration:
  # Enable automatic material purchasing
  enabled: true
  # Show item prices in quick-craft lore
  show-prices: true

Default Category

# Category to open when using /recipebook with no args
default-category: "main"

Crafting Restrictions

craft-gui:
  restrictions:
    # Seconds between crafts (0 = disabled)
    cooldown: 0
    # Max items per bulk craft (0 = unlimited)
    max-bulk: 64
    # Require recipebook.quickcraft permission
    require-permission: false
    # Check for inventory space before crafting
    check-inventory-space: true

Language Messages

Customize messages in plugins/RecipeBook/lang.yml

messages:
  prefix: "&a&lRecipeBook&r &8» &r"
  no-permission: "&cYou don't have permission to do this!"
  craft-success: "&aSuccessfully crafted &f%amount%x %item%&a!"
  craft-insufficient: "&cYou don't have enough materials!"
  craft-no-space: "&cYou don't have enough inventory space!"
  craft-cooldown: "&cPlease wait before crafting again!"
  craft-purchased-materials: "&aPurchased missing materials from shop!"

Categories

Categories define how recipes are organized in the GUI. You can create categories in the main config.yml or as individual files in plugins/RecipeBook/categories/.

Category Types

  • categories - Contains sub-categories (for navigation)
  • items - Contains craftable items

Example Category File

# plugins/RecipeBook/categories/weapons.yml
id: "weapons"

icon:
  item: "diamond_sword name:\"&b⚔ Weapons\""
  lore:
    - "&7Browse weapon recipes"

type: "items"

# Optional: Filter by namespace
namespaces:
  - "ecoitems"

# Items in this category
items:
  - item: "ecoitems:crystal_sword"
    permission: "recipes.crystal_sword"
    display-no-perm: true
    no-perm-item:
      item: "gray_dye"
      name: "&c???"
      lore:
        - "&7Requires VIP rank!"

  - item: "diamond_sword"
  - item: "netherite_sword"

# GUI layout configuration
gui:
  title: "&8Weapons | Page &6%page%"
  mask:
    items:
      - "black_stained_glass_pane"
    pattern:
      - "111111111"
      - "1iiiiiii1"
      - "1iiiiiii1"
      - "1iiiiiii1"
      - "111010111"
  buttons:
    back:
      row: 5
      column: 5
      item: "barrier name:\"&cBack\""
      click_sound: "ui.button_click"
    next-page:
      row: 5
      column: 6
      item:
        active: "orange_stained_glass_pane name:\"&aNext Page\""
        inactive: "gray_stained_glass_pane name:\"&7Next Page\""
    prev-page:
      row: 5
      column: 4
      item:
        active: "orange_stained_glass_pane name:\"&aPrevious Page\""
        inactive: "gray_stained_glass_pane name:\"&7Previous Page\""
    quick-craft:
      row: 5
      column: 3
      item: "crafting_table name:\"&aQuick Craft\""
      lore:
        - ""
        - "&7Materials:"
        - "%materials%"
        - ""
        - "&bLeft Click&f to craft"
        - "&bShift Click&f to craft max"
      success_sound: "entity.player.levelup"
      fail_sound: "entity.villager.no"

Material Display Format

The %materials% placeholder shows material requirements with color coding:

  • ✓ 64/32 Diamond - Player has enough (green)
  • ✗ 0/16 Emerald - Player is missing (red)
  • ✗ 0/16 Emerald $1,600.00 - Shows shop price if enabled

Developer API

RecipeBook provides a comprehensive API for other plugins to integrate with.

CraftingManager

// Check materials for crafting
val materials: List<MaterialInfo> = CraftingManager.checkMaterials(
    player,
    recipeItems,
    amount
)

// MaterialInfo contains:
// - item: ItemStack
// - has: Int (amount player has)
// - needs: Int (amount required)
// - isSufficient: Boolean

// Calculate max craftable amount
val maxAmount = CraftingManager.calculateMaxCraftable(player, recipeItems)

// Craft an item
val result: CraftResult = CraftingManager.craftItem(
    player,
    recipeItems,
    resultItem,
    amount
)

// CraftResult contains:
// - success: Boolean
// - messageKey: String
// - amount: Int (items crafted)
// - purchasedFromShop: Boolean

RecipeCraftEvent

Listen to crafting events and modify or cancel them:

@EventHandler
fun onRecipeCraft(event: RecipeCraftEvent) {
    val player = event.player
    val result = event.result
    val materials = event.materials

    // Cancel the crafting
    if (shouldCancel) {
        event.isCancelled = true
        return
    }

    // Modify the amount (e.g., double for VIPs)
    if (player.hasPermission("vip.doublecraft")) {
        event.amount *= 2
    }
}

Category API

// Get a category by ID
val category = RecipeCategories.getById("weapons")

// Open a category for a player
category?.gui?.open(player, page = 1, prevMenu = null)

Ready to use RecipeBook?

Give your players an intuitive way to explore and craft recipes with RecipeBook!