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
- Download RecipeBook from your BuiltByBit purchase
- Download and install the eco framework (required dependency)
- Stop your Minecraft server
- Place both JAR files in your server's
plugins/directory - Start your server
- Configure the plugin in
plugins/RecipeBook/config.yml - Use
/recipebook reloadto 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
| Command | Description |
|---|---|
/recipebook | Open 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
| Command | Description |
|---|---|
/recipebook reload | Reload configuration and categories from disk |
/recipebook open <category> <player> | Open a category menu for another player |
Permissions
Command Permissions
| Permission | Description | Default |
|---|---|---|
recipebook.command.recipebook | Access to base /recipebook command | OP |
recipebook.command.reload | Reload plugin configuration | OP |
recipebook.command.lookup | Use the lookup command | OP |
recipebook.command.open | Open specific categories | OP |
recipebook.open.others | Open menus for other players | OP |
Feature Permissions
| Permission | Description |
|---|---|
recipebook.quickcraft | Use 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: trueDefault 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: trueLanguage 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: BooleanRecipeCraftEvent
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!