BookEditor
Professional Interactive Books
Professional Interactive Books
────────────────────────────
────────────────────────────
────────────────────────────
BookEditor is a professional framework that lets you create complex, fully interactive books with clickable actions — all managed through a modern in-game GUI.
No more manual YML editing or plugin reloads. With BookEditor, you can design and manage your server’s books — from welcome guides and rulebooks to command menus and tutorials — entirely inside Minecraft.
⚡ Why Choose BookEditor
- Full In-Game GUI Editor – Manage everything using /be menu. Create, delete, or configure books through a clean and intuitive interface.
- Advanced Action System – Add interactivity with dozens of supported actions:
[player_command], [console_command], [message], [sound], [money], [give_item], [particle], [firework], [open_book], [close_book] - MiniMessage Formatting – Use gradients, hover/click events, bold, italics, and much more across all texts.
- PlaceholderAPI & Vault Support – Seamless integration for placeholders and economy actions. Both are optional!
- Keep Books Open – Prevent books from closing automatically with close-on-click: false.
- Auto Open Books – Show specific books automatically when players join or on their first login.
- Multi-Language Ready – Comes with English & Spanish translations (you can add more).
Getting Started
Method 1 (Recommended): GUI
- Run /be menu
- Click Book Management
- Create a new book
- Add actions, pages, and settings directly in-game
Method 2: Commands
- /be create <id>
- Write and sign your book
- /be save <id>
- Edit it later using /be menu
Commands & Permissions
| Command | Permission | Description |
| /be menu | bookeditor.admin | Opens the main in-game GUI editor. |
| /be reload | bookeditor.admin.reload | Reloads the plugin configuration. |
| /be list | bookeditor.admin.list | Lists all loaded books. |
| /be open <player> <id> | bookeditor.admin.open | Force a book open for a player. |
| /be give <player> <id> [amt] | bookeditor.admin.give | Give a player a book item. |
| /be create <id> | bookeditor.admin.create | Create a new book from a writable book. |
| /be save <id> | bookeditor.admin.save | Save the book you're holding. |
| /be delete <id> | bookeditor.admin.delete | Delete a book file. |
Permission “bookeditor.admin” grants full access.
⚙️ Configuration (config.yml)
Spoiler: config.yml
settings:
language : "en" # Default language
check-for-updates : true
debug-mode : false
hooks:
use-placeholderapi : true
use-vault : true
features:
enable-open-on-join : true
enable-open-on-first-join : true
Code (YAML):
settings:
language : "en" # Default language
check-for-updates : true
debug-mode : false
hooks:
use-placeholderapi : true
use-vault : true
features:
enable-open-on-join : true
enable-open-on-first-join : true
Example Book (books/test.yml)
Spoiler: test.yml
###################################################################################
# BookEditor - Book Configuration File
# ID: test
#
# This file serves as a comprehensive test case and example guide
# for the BookEditor plugin's features.
###################################################################################
# This is the unique identifier for the book.
# It is used in commands like /be open <player> test and in click events.
# It MUST match the filename (test.yml).
book-id : "test"
###################################################################################
# ITEM SECTION
# This section defines the visual appearance of the book item itself.
###################################################################################
item :
# The material of the item. Can be WRITTEN_BOOK, WRITABLE_BOOK, or any other item.
material : "WRITTEN_BOOK"
# The display name of the item, which also serves as the book's title when opened.
# This field supports MiniMessage formatting for gradients, colors, etc.
title : "<gradient:#00C6FF:#0072FF><b>Plugin Test Menu</b></gradient>"
# The author's name, displayed in the book's UI.
# This field also supports MiniMessage formatting.
author : "<gold>BookEditor</gold>"
# The "generation" of the book.
# 0 = Original, 1 = Copy of Original, 2 = Copy of Copy, 3 = Tattered.
# For most uses, '0' is standard.
generation : 0
###################################################################################
# SETTINGS SECTION
# This section controls the plugin's automatic opening features for this book.
###################################################################################
settings :
# If true, the plugin will automatically open this book for a player
# the very first time they join the server.
open-on-first-join : false
# If true, the plugin will automatically open this book for a player
# *every* time they join the server (except the first if the above is true).
open-on-join : false
###################################################################################
# PAGES SECTION
# This is the main content of your book.
# Each entry that starts with a hyphen ('-') represents one new page.
###################################################################################
pages :
# This is Page 1.
- |
# The pipe character '|' is a YAML feature called a "Literal Block Scalar."
# It allows you to write a multi-line string easily without needing quotes ("").
# All text indented below it will be treated as a single string,
# preserving all your line breaks exactly as you see them.
# This is the recommended way to write book pages.
# All text in pages is parsed using the MiniMessage format.
<dark_aqua><b>TEST MENU - CORE</b></dark_aqua >
<dark_gray><st> </st></dark_gray >
# Placeholders from PlaceholderAPI (like %player_name%) are supported
# if you have PlaceholderAPI installed.
<gray>Welcome, <aqua> %player_name%</aqua>!</gray>
<gray>Select an action to test.</gray><reset >
# This line demonstrates a "hover" and "click" event.
# <hover:show_text:'...'>: Shows 'TEXT' when a player hovers their mouse over it.
# <click:run_command:'...'>: Executes a command when the text is clicked.
#
# The command '/be action test action-command' tells BookEditor to find the
# book with ID 'test' and execute the action with ID 'action-command'.
<hover:show_text:'<green>Test [player_command]<newline>Runs the command : /help'><click:run_command:'/be action test action-command'><aqua>► Test Player Command (/help )</aqua></click></hover><reset >
<hover:show_text:'<gold>Test [money ] (Requires Vault )<newline><gray>Book will NOT close.'><click:run_command:'/be action test action-get-money'><gold>► Test Economy ( No Close )</gold></click></hover><reset>
<hover:show_text:'<blue>Test "close-on-click : true "<newline><gray>Book WILL close on click.'><click:run_command:'/be action test action-tp-spawn'><blue>► Test Teleport (Closes)</blue></click></hover><reset>
<hover:show_text:'<light_purple>Test [give_item]<newline>Gives 1 Nether Star.'><click:run_command:'/be action test action-give-item'><light_purple>► Test Give Item</light_purple></click></hover><reset>
<newline>
# '<click:change_page:2>' is a built-in MiniMessage tag for books.
# It navigates the player directly to the specified page number (Page 2).
<hover:show_text:'<gray>View Page 2 (Effects)'><click:change_page:2><gray>[Next Page →]</gray></click></hover>
# This is Page 2.
- |
<dark_aqua><b>TEST MENU - ADVANCED</b></dark_aqua>
<dark_gray><st> </st></dark_gray>
<gray>Test visual and advanced actions.</gray><reset>
<hover:show_text:'<yellow>Test [firework]<newline>Launches a firework.'><click:run_command:'/be action test action-firework'><yellow>► Test Firework Effect</yellow></click></hover><reset>
<hover:show_text:'<blue>Test [particle]<newline>Spawns 50 flame particles.'><click:run_command:'/be action test action-particle'><blue>► Test Particle Effect</blue></click></hover><reset>
<hover:show_text:'<dark_purple>Test [console_command]<newline>Runs /say from console.'><click:run_command:'/be action test action-console-cmd'><dark_purple>► Test Console Command</dark_purple></click></hover><reset>
# This action is linked to 'action-permission-test' which requires a permission.
<hover:show_text:'<red>Test Permission Node<newline>Requires: <yellow>bookeditor.test.testpermission</yellow>'><click:run_command:'/be action test action-permission-test'><red>► Test Permission (Fails)</red></click></hover><reset>
<newline>
<hover:show_text:'<gray>View Page 1'><click:change_page:1><gray>[← Previous Page]</gray></click></hover>
###################################################################################
# ACTIONS SECTION
# This section defines what happens when a player clicks a linked action.
# The ID here (e.g., "action-command: ") MUST match the ID from the
# <click:run_command:'/be action test ID_HERE'> event in the pages section.
###################################################################################
actions:
# ID: action-command
# Demonstrates a basic player command and a feedback message.
action-command:
# "execute " is a list of all actions to run, in order, when triggered.
execute:
- " [player_command ] help " # [player_command]: Runs the command as if the player typed it.
- " [message ] <green>Ran /help command. " # [message]: Sends a MiniMessage-formatted message to the player.
# ID: action-get-money
# Demonstrates Vault integration, multiple commands, and the 'close-on-click' feature.
action-get-money:
# This is a key feature. If 'false', the plugin will actively prevent
# the client from closing the book after the action. This is perfect for menus.
# If 'true' or omitted, the book closes normally.
close-on-click: false
execute:
- " [money ] 1000 " # [money]: Gives (or takes if negative) money. Requires Vault.
- " [message ] <gold>You received <yellow>$1,000</yellow>!</gold> "
- " [sound ] ENTITY_PLAYER_LEVELUP " # [sound]: Plays a sound for the player.
# (Optional) The player must have this permission node to run this action.
permission: bookeditor.test.testmoney
# ID: action-tp-spawn
# Demonstrates a standard action that closes the book.
action-tp-spawn:
close-on-click: true # Book will close as normal.
execute:
- " [player_command ] tp @p 0 100 0 "
- " [message ] <aqua>Teleported to 0, 100, 0!</aqua> "
- " [sound ] ENTITY_ENDERMAN_TELEPORT "
permission: bookeditor.test.testtp
# ID: action-give-item
# Demonstrates giving an item with a custom name and lore.
action-give-item:
execute:
# [give_item]: Gives an item.
# Format: [give_item] <MATERIAL> <Amount> [name:<name>] [lore:<line1|line2...>]
#
# IMPORTANT: The pipe character '|' used inside the 'lore:' tag is a
# *separator* for new lines in the item's lore.
# This is different from the YAML '|' character used for multi-line strings.
- " [give_item ] NETHER_STAR 1 name:<gradient:blue:aqua>Test_Star lore:<gray>Line_1|&cLine_2_with_legacy "
- " [message ] <light_purple>You received 1x <aqua>Test Star</aqua>!</light_purple> "
permission: bookeditor.test.testitem
# ID: action-firework
# Demonstrates the [firework] visual effect.
action-firework:
execute:
- " [firework ] " # [firework]: Spawns a default firework at the player's location.
- " [message ] <yellow>Launched a firework!</yellow> " # This message was "Pew pew! "
# ID: action-particle
# Demonstrates the [particle] visual effect.
action-particle:
execute:
- " [particle ] FLAME 50 " # [particle]: Spawns particles. Format: [particle] <PARTICLE_TYPE> <Amount>
- " [message ] <blue>Spawned flame particles.</blue> " # This message was "Woosh! "
# ID: action-console-cmd
# Demonstrates running a command from the server console.
action-console-cmd:
execute:
# [console_command]: Runs the command as the server console.
# It supports %player_name% and other PAPI placeholders.
- " [console_command ] say Player %player_name% tested the console action!"
- "[message] <dark_purple>Console command executed. Check the console.</dark_purple>"
# ID: action-permission-test
# Demonstrates a custom permission message for a failed action.
action-permission-test:
execute :
- "[message] <green>You have the permission!</green>" # This only runs if the check passes.
permission : bookeditor.test.testpermission
# (Optional) If 'permission:' is set and the player lacks it, this
# 'permission-message' will be sent instead of running the 'execute' list.
# If this is not set, the action will just fail silently.
permission-message : "<red><b>[!]</b> You lack the required permission: <yellow>bookeditor.test.testpermission</yellow></red>"
Code (YAML):
###################################################################################
# BookEditor - Book Configuration File
# ID: test
#
# This file serves as a comprehensive test case and example guide
# for the BookEditor plugin's features.
###################################################################################
# This is the unique identifier for the book.
# It is used in commands like /be open <player> test and in click events.
# It MUST match the filename (test.yml).
book-id : "test"
###################################################################################
# ITEM SECTION
# This section defines the visual appearance of the book item itself.
###################################################################################
item :
# The material of the item. Can be WRITTEN_BOOK, WRITABLE_BOOK, or any other item.
material : "WRITTEN_BOOK"
# The display name of the item, which also serves as the book's title when opened.
# This field supports MiniMessage formatting for gradients, colors, etc.
title : "<gradient:#00C6FF:#0072FF><b>Plugin Test Menu</b></gradient>"
# The author's name, displayed in the book's UI.
# This field also supports MiniMessage formatting.
author : "<gold>BookEditor</gold>"
# The "generation" of the book.
# 0 = Original, 1 = Copy of Original, 2 = Copy of Copy, 3 = Tattered.
# For most uses, '0' is standard.
generation : 0
###################################################################################
# SETTINGS SECTION
# This section controls the plugin's automatic opening features for this book.
###################################################################################
settings :
# If true, the plugin will automatically open this book for a player
# the very first time they join the server.
open-on-first-join : false
# If true, the plugin will automatically open this book for a player
# *every* time they join the server (except the first if the above is true).
open-on-join : false
###################################################################################
# PAGES SECTION
# This is the main content of your book.
# Each entry that starts with a hyphen ('-') represents one new page.
###################################################################################
pages :
# This is Page 1.
- |
# The pipe character '|' is a YAML feature called a "Literal Block Scalar."
# It allows you to write a multi-line string easily without needing quotes ("").
# All text indented below it will be treated as a single string,
# preserving all your line breaks exactly as you see them.
# This is the recommended way to write book pages.
# All text in pages is parsed using the MiniMessage format.
<dark_aqua><b>TEST MENU - CORE</b></dark_aqua >
<dark_gray><st> </st></dark_gray >
# Placeholders from PlaceholderAPI (like %player_name%) are supported
# if you have PlaceholderAPI installed.
<gray>Welcome, <aqua> %player_name%</aqua>!</gray>
<gray>Select an action to test.</gray><reset >
# This line demonstrates a "hover" and "click" event.
# <hover:show_text:'...'>: Shows 'TEXT' when a player hovers their mouse over it.
# <click:run_command:'...'>: Executes a command when the text is clicked.
#
# The command '/be action test action-command' tells BookEditor to find the
# book with ID 'test' and execute the action with ID 'action-command'.
<hover:show_text:'<green>Test [player_command]<newline>Runs the command : /help'><click:run_command:'/be action test action-command'><aqua>► Test Player Command (/help )</aqua></click></hover><reset >
<hover:show_text:'<gold>Test [money ] (Requires Vault )<newline><gray>Book will NOT close.'><click:run_command:'/be action test action-get-money'><gold>► Test Economy ( No Close )</gold></click></hover><reset>
<hover:show_text:'<blue>Test "close-on-click : true "<newline><gray>Book WILL close on click.'><click:run_command:'/be action test action-tp-spawn'><blue>► Test Teleport (Closes)</blue></click></hover><reset>
<hover:show_text:'<light_purple>Test [give_item]<newline>Gives 1 Nether Star.'><click:run_command:'/be action test action-give-item'><light_purple>► Test Give Item</light_purple></click></hover><reset>
<newline>
# '<click:change_page:2>' is a built-in MiniMessage tag for books.
# It navigates the player directly to the specified page number (Page 2).
<hover:show_text:'<gray>View Page 2 (Effects)'><click:change_page:2><gray>[Next Page →]</gray></click></hover>
# This is Page 2.
- |
<dark_aqua><b>TEST MENU - ADVANCED</b></dark_aqua>
<dark_gray><st> </st></dark_gray>
<gray>Test visual and advanced actions.</gray><reset>
<hover:show_text:'<yellow>Test [firework]<newline>Launches a firework.'><click:run_command:'/be action test action-firework'><yellow>► Test Firework Effect</yellow></click></hover><reset>
<hover:show_text:'<blue>Test [particle]<newline>Spawns 50 flame particles.'><click:run_command:'/be action test action-particle'><blue>► Test Particle Effect</blue></click></hover><reset>
<hover:show_text:'<dark_purple>Test [console_command]<newline>Runs /say from console.'><click:run_command:'/be action test action-console-cmd'><dark_purple>► Test Console Command</dark_purple></click></hover><reset>
# This action is linked to 'action-permission-test' which requires a permission.
<hover:show_text:'<red>Test Permission Node<newline>Requires: <yellow>bookeditor.test.testpermission</yellow>'><click:run_command:'/be action test action-permission-test'><red>► Test Permission (Fails)</red></click></hover><reset>
<newline>
<hover:show_text:'<gray>View Page 1'><click:change_page:1><gray>[← Previous Page]</gray></click></hover>
###################################################################################
# ACTIONS SECTION
# This section defines what happens when a player clicks a linked action.
# The ID here (e.g., "action-command: ") MUST match the ID from the
# <click:run_command:'/be action test ID_HERE'> event in the pages section.
###################################################################################
actions:
# ID: action-command
# Demonstrates a basic player command and a feedback message.
action-command:
# "execute " is a list of all actions to run, in order, when triggered.
execute:
- " [player_command ] help " # [player_command]: Runs the command as if the player typed it.
- " [message ] <green>Ran /help command. " # [message]: Sends a MiniMessage-formatted message to the player.
# ID: action-get-money
# Demonstrates Vault integration, multiple commands, and the 'close-on-click' feature.
action-get-money:
# This is a key feature. If 'false', the plugin will actively prevent
# the client from closing the book after the action. This is perfect for menus.
# If 'true' or omitted, the book closes normally.
close-on-click: false
execute:
- " [money ] 1000 " # [money]: Gives (or takes if negative) money. Requires Vault.
- " [message ] <gold>You received <yellow>$1,000</yellow>!</gold> "
- " [sound ] ENTITY_PLAYER_LEVELUP " # [sound]: Plays a sound for the player.
# (Optional) The player must have this permission node to run this action.
permission: bookeditor.test.testmoney
# ID: action-tp-spawn
# Demonstrates a standard action that closes the book.
action-tp-spawn:
close-on-click: true # Book will close as normal.
execute:
- " [player_command ] tp @p 0 100 0 "
- " [message ] <aqua>Teleported to 0, 100, 0!</aqua> "
- " [sound ] ENTITY_ENDERMAN_TELEPORT "
permission: bookeditor.test.testtp
# ID: action-give-item
# Demonstrates giving an item with a custom name and lore.
action-give-item:
execute:
# [give_item]: Gives an item.
# Format: [give_item] <MATERIAL> <Amount> [name:<name>] [lore:<line1|line2...>]
#
# IMPORTANT: The pipe character '|' used inside the 'lore:' tag is a
# *separator* for new lines in the item's lore.
# This is different from the YAML '|' character used for multi-line strings.
- " [give_item ] NETHER_STAR 1 name:<gradient:blue:aqua>Test_Star lore:<gray>Line_1|&cLine_2_with_legacy "
- " [message ] <light_purple>You received 1x <aqua>Test Star</aqua>!</light_purple> "
permission: bookeditor.test.testitem
# ID: action-firework
# Demonstrates the [firework] visual effect.
action-firework:
execute:
- " [firework ] " # [firework]: Spawns a default firework at the player's location.
- " [message ] <yellow>Launched a firework!</yellow> " # This message was "Pew pew! "
# ID: action-particle
# Demonstrates the [particle] visual effect.
action-particle:
execute:
- " [particle ] FLAME 50 " # [particle]: Spawns particles. Format: [particle] <PARTICLE_TYPE> <Amount>
- " [message ] <blue>Spawned flame particles.</blue> " # This message was "Woosh! "
# ID: action-console-cmd
# Demonstrates running a command from the server console.
action-console-cmd:
execute:
# [console_command]: Runs the command as the server console.
# It supports %player_name% and other PAPI placeholders.
- " [console_command ] say Player %player_name% tested the console action!"
- "[message] <dark_purple>Console command executed. Check the console.</dark_purple>"
# ID: action-permission-test
# Demonstrates a custom permission message for a failed action.
action-permission-test:
execute :
- "[message] <green>You have the permission!</green>" # This only runs if the check passes.
permission : bookeditor.test.testpermission
# (Optional) If 'permission:' is set and the player lacks it, this
# 'permission-message' will be sent instead of running the 'execute' list.
# If this is not set, the action will just fail silently.
permission-message : "<red><b>[!]</b> You lack the required permission: <yellow>bookeditor.test.testpermission</yellow></red>"
Dependencies
- Vault (optional) – Required for [money] actions
- PlaceholderAPI (optional) – Enables support for placeholders like %player_name%
Support
If you have questions or issues, please use the Discussion tab or open an Issue on our tracker before leaving a negative review.
Thank you for using BookEditor!
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft version listed: 1.21
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
BookEditor - The Easiest Way to Create Interactive Books is a free Minecraft Java mod. Compatible with Minecraft 1.21. Downloaded 130 times (via Spigot). Download it and open it directly in the game.