✦ CuriosPaper ✦
The Ultimate Custom Accessory Inventory System for Paper & Spigot
Rings · Necklaces · Capes · Crowns · Belts · Charms — and more.
Fully server-side. No mods required. Bedrock Edition compatible. Powerful developer API.
Think of it as Baubles / Curios — but for Paper & Spigot, with 3D models, loot tables, GUI editors, Bedrock container support, and a full plugin API.
🧩 What is CuriosPaper?
CuriosPaper adds a complete accessory slot system to your Minecraft server. Players can equip rings, necklaces, capes, belts, charms, and more through a clean, tiered GUI — with full support for Java and Bedrock Edition players.

The main accessory menu with all 9 slot types
⚡ Features
🎒 Core Accessory System
| Feature | Description | |
|---|---|---|
| 💍 | 9 Slot Types | Head, Necklace, Back, Body, Belt, Hands, Bracelet, Ring, Charm |
| ✨ | Ability System | Potion effects & player attribute modifiers with custom operations |
| ⚡ | Quick Equip | Shift + Right-Click to instantly equip accessories from your hand |
| 🎹 | Hotkey System | Configurable sneak keybind to open the accessory GUI — no commands needed |
| 🪂 | Elytra Back Slot | Equip elytra in the back accessory slot (1.21.3+) |
| ☠️ | Death Behavior | Keep, drop, or auto-detect accessories on death — fully configurable |
| 📱 | Bedrock Support | Native Geyser & Floodgate support with custom Anvil & Smithing GUIs |
🎨 3D Model System
Attach custom 3D models directly to the player's body when accessories are equipped. Models are rendered using synchronized invisible armor stands — visible to all nearby players.
- 🔄 Tracks player movement, rotation, sneaking, swimming, flying, and spectator mode
- 👁️ Smart visibility culling — hide models from wearer's first-person view or during flight/dismount
- 🔱 Trident & Elytra compatibility — models auto-hide during throws, riptide, and elytra flight
- 🧟 Mob models — mobs can visually wear items they'll drop
- 🎮 Per-item toggle — players can right-click to show/hide their models
- 🚪 GUI Dismount Protection — models temporarily dismount when opening inventories to prevent visual overlap
🛠️ In-Game GUI Editors
Create and configure everything visually — no manual YAML editing required:
| Editor | What It Does |
|---|---|
| Item Editor | Set name, material, lore, model data, slot type |
| Ability Editor | Configure potion effects & attribute modifiers with operations (ADD_NUMBER, ADD_SCALAR, MULTIPLY_SCALAR_1) |
| Recipe Editor | Shaped, shapeless, furnace, blast, smoker, anvil & smithing recipes |
| Loot Table Editor | Browse all server loot tables, add items to dungeon chests with presets |
| Mob Drop Editor | Configure which mobs drop your items and at what chance |
| Trade Editor | Set up villager trades with professions and price ranges |
| 3D Model Editor | Configure body-mounted 3D models with pitch limits |

Slot inventory with accessories equipped
📦 Item Distribution
| Channel | Description |
|---|---|
| Crafting Recipes | 7 recipe types — shaped, shapeless, furnace, blast, smoker, anvil, smithing |
| Loot Tables | Items appear in dungeon chests, mineshafts, temples, strongholds, and more |
| Mob Drops | Any mob type can drop accessories with configurable chance & amount |
| Villager Trades | Accessories appear in villager trade pools by profession and level |
| Commands | /curios give <item> [player] [amount] for direct distribution |
🔌 Developer API
A comprehensive API for other plugins to integrate with CuriosPaper:
CuriosPaperAPI api = CuriosPaper.getInstance().getCuriosPaperAPI();
// Tag any item as an accessory
ItemStack ring = api.tagAccessoryItem(myItem, "ring");
// Check what a player is wearing
List<ItemStack> rings = api.getEquippedItems(player, "ring");
boolean hasRing = api.hasEquippedItems(player, "ring");
int count = api.countEquippedItems(player, "ring");
// Register slots, items, recipes, loot tables at runtime
api.registerSlot("earring", "Earring", "DIAMOND", 2);
api.registerItemLootTable("my_ring", new LootTableData("minecraft:chests/simple_dungeon", 0.25));
api.setItemModelConfig("my_cape", true, "LEATHER_HORSE_ARMOR", null, "myplugin:cape", 45f, 30f);
// Contribute resource pack assets from your plugin's JAR
api.registerResourcePackAssetsFromJar(myPlugin);
Custom Events:
| Event | When It Fires |
|---|---|
AccessoryEquipEvent |
Player equips, unequips, or swaps an accessory |
CuriosLootGenerateEvent |
Custom item generated in a loot container (cancellable) |
CuriosMobDropEvent |
Custom item dropped by a mob (cancellable) |
CuriosRecipeTransferEvent |
Custom item crafted via a recipe (data transfer) |
CuriosCraftEvent |
Custom item created via craft/smelt/smith (final) |
CuriosModelEquipEvent |
3D model about to be displayed on player |
CuriosMobModelEquipEvent |
3D model about to be displayed on mob |
PlayerDeathCurioDropEvent |
Fired on player death to filter/cancel curio drops |
🛠️ Configuration Showcase & Setup Instructions
⚙️ Click to Expand Setup & Configuration Files
1. Installation & Initial Setup
- Download
CuriosPaper.jarand place it into your server'splugins/directory. - Start the server to generate default configuration files (
config.yml,messages.yml,items.yml, etc.). - Choose your desired Resource Pack Delivery Mode in
config.yml:SELF: CuriosPaper hosts the resource pack on an embedded HTTP server (port: 8080).LINK: Serve your resource pack via an external URL (e.g. Modrinth, Dropbox, or web host).NONE: Disable automatic resource pack prompt completely.
2. Bedrock & Geyser Integration Setup
CuriosPaper includes automatic detection and support for Bedrock Edition players connecting via GeyserMC / Floodgate.
- Automatic Setup (Geyser on same server):
CuriosPaper automatically detects Geyser, extracts
CuriosPaper_Geyser.zipandCuriosPaper_mappings.jsonintoplugins/CuriosPaper/geyser/, and copies them to Geyser'spacks/andcustom_mappings/folders. - Bedrock Custom Containers:
Bedrock players cannot natively use Java Anvil/Smithing container packets without glitches. CuriosPaper provides native 3-row Chest GUIs (
BedrockAnvilGUIandBedrockSmithingGUI) for Bedrock players, supporting 1.20+ template smithing and XP repair/renaming.
3. Main Plugin Config (/plugins/CuriosPaper/config.yml)
# Configuration for CuriosPaper Custom Accessory Slots
version: "2.0.1"
# Update Checker
updates:
check-for-updates: true
# Storage Engine Settings
storage:
# Selected engine: YAML (flatfile), SQLITE, MYSQL, or MONGODB
engine: "YAML"
mysql:
host: "localhost"
port: 3306
database: "minecraft"
username: "root"
password: ""
table-prefix: "curios_"
mongodb:
connection-string: "mongodb://localhost:27017"
database: "minecraft"
collection: "curios_playerdata"
# Resource Pack Settings
resource-pack:
# Mode: SELF (embedded HTTP host), LINK (external URL), or NONE
mode: SELF
port: 8080
host-ip: "123.45.67.89"
url: ""
hash: ""
force-pack: false
prompt-message: "Please accept the resource pack to view custom accessories!"
# Feature Toggles
features:
# Allow elytra equipping in back slots
allow-elytra-on-back-slot: true
# Custom Bedrock GUIs for Anvils and Smithing Tables
use-custom-smithing-gui: true
use-custom-anvil-gui: true
# Display empty accessory slots in GUI
show-empty-slots: true
# Keep Curios on Death: Always, Auto (follows keepInventory), or Never
keep-curio-inventory:
type: "Auto"
# Sneak keybind hotkey to open accessory menu
hotkey:
enabled: true
slot: 8
sneak-type: "double" # single, double, or hold
4. Messages Configuration (/plugins/CuriosPaper/messages.yml)
# Message customization with legacy (&a) and HEX (<#FF5555>) color support
prefix: "&6[CuriosPaper] "
items:
quick-equip-lore: "&8▶ Shift + Right Click to equip"
slot-lore: "&6Slot: &e{slots}"
ability-when-worn: "&7When worn:"
ability-potion-effect: "&9{effect} {level}"
# Attribute Modifier Operation Lore Formatting (v2.0.1)
ability-attribute-positive: "&9+{value} {attribute}"
ability-attribute-negative: "&c-{value} {attribute}"
ability-attribute-scalar-positive: "&9+{value}% {attribute}"
ability-attribute-scalar-negative: "&c-{value}% {attribute}"
ability-attribute-multiply-positive: "&9x{value} {attribute}"
ability-attribute-multiply-negative: "&cx{value} {attribute}"
🎮 How It Works
1. /baubles → Opens the accessory menu
2. Click a slot icon → Opens that slot's inventory
3. Place an accessory → Abilities activate instantly!
Or use Quick Equip: Hold a tagged item + Shift + Right-Click to equip instantly.
Or use the Hotkey: Select a hotbar slot + Double-Sneak to open the menu.
📊 Stats
🔧 Compatibility
| Requirements | |
|---|---|
| Minecraft | 1.14.4 — 1.21+ |
| Server | Spigot, Paper, Purpur, Folia* |
| Java | 8+ |
| GeyserMC | Supported (custom Bedrock resource pack & mappings included) |
| Dependencies | None (standalone) |
*Folia support is experimental
🌐 Geyser & Bedrock Edition Support
CuriosPaper provides full GUI slot icon and custom container support for Bedrock Edition players joining via GeyserMC.
- Automatic Setup: If Geyser is running on the same server, CuriosPaper will automatically detect Geyser's folder on startup, extract the mappings and resource pack, and copy them directly to Geyser's
packs/andcustom_mappings/folders. - Custom Bedrock GUIs (Anvil & Smithing): Bedrock players get dedicated 3-row chest interfaces for Anvils (repair, rename, combine) and Smithing Tables (supports 1.20+ Netheriite templates and legacy recipes).
- Manual Setup (Proxy/Separate Server):
- Retrieve files from your server's
plugins/CuriosPaper/geyser/directory. - Copy
CuriosPaper_Geyser.zipinto your Geyserpacks/folder. - Copy
CuriosPaper_mappings.jsoninto your Geysercustom_mappings/folder. - Ensure
enable-custom-contentis set totruein Geyser'sconfig.ymland restart Geyser.
- Retrieve files from your server's
📥 Quick Start
# 1. Download CuriosPaper.jar from Modrinth or GitHub Releases
# 2. Drop it into your server's plugins/ folder
# 3. Start the server
# 4. Done! Use /baubles in-game
First Accessory in 60 Seconds
/curios create speed_ring # Create a new item
In the GUI: set the name, material, slot type → add a Speed ability → add a recipe → done.
/curios give speed_ring # Get the item
/baubles # Open accessory menu
Place it in a ring slot — Speed I activates! 🏃
📖 Documentation
The full documentation site covers:
| Section | Topics |
|---|---|
| Getting Started | Installation, concepts, first accessory walkthrough |
| Configuration | Slots, features, abilities, performance, databases & Bedrock GUIs |
| Systems | Accessories, abilities, recipes, loot tables, mob drops, trades, 3D models, Bedrock support, hotkeys, death behavior |
| GUI Editors | Item, ability, recipe, loot table, mob drop, trade, 3D model editors |
| Developer API | Getting the API, accessories, loot tables, 3D models, resource packs, events |
| Examples | Complete plugin examples with loot tables, abilities, and recipes |
🆕 What's New in v2.0.1
- 📱 Bedrock Anvil & Smithing GUIs — Dedicated 3-row chest interfaces for Bedrock Edition players to access Anvil (combining, repairing, renaming with XP cost) and Smithing Tables (1.20+ templates & legacy smithing).
- 📊 Attribute Modifier Operations — Configure player modifier abilities with specific operations:
ADD_NUMBER(flat value),ADD_SCALAR(percentage%), andMULTIPLY_SCALAR_1(multiplierx). - ✈️ Flight & Spectator Model Auto-Hiding — ArmorStand 3D models automatically hide when players toggle flight (
isFlying), enter spectator mode, or enter special poses (SWIMMING,FALL_FLYING,SPIN_ATTACK). - 🚪 Inventory Dismount Safety — 3D models temporarily dismount when opening inventories and auto-remount 2 ticks after close to eliminate visual GUI overlaps.
- 🛠️ Flexible Server Version Parsing — Improved version parsing regex in
VersionUtilfor non-standard Paper dev builds (e.g.26.2.build.48-alpha). - 💬 Command & GUI Improvements — Fixed
givecommand messaging targeting and case-insensitive color-stripped GUI title matching.
Full changelog → CHANGELOGS.md
💬 Community
Get help · Report bugs · Suggest features · Stay updated
☕ Support the Project
If CuriosPaper has been useful to you, consider leaving a tip — it helps keep the project alive!
🤝 For Developers
Maven
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.Brothergaming52</groupId>
<artifactId>CuriosPaper</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
plugin.yml
depend: [CuriosPaper]
Full API docs → curiospaper.run.place/api
All Versions
+ Add Version### 📱 Bedrock Edition & Geyser Integration
CuriosPaper now includes native container support and automatic detection for Bedrock Edition players connecting via GeyserMC and Floodgate:
- Automatic Geyser Detection & Setup (
BedrockUtil):** Detects Bedrock players via Floodgate API, Geyser API, or offline Floodgate UUID prefixes (00000000-0000-0000-...). On startup, CuriosPaper automatically extracts and copiesCuriosPaper_Geyser.zipandCuriosPaper_mappings.jsoninto Geyser'spacks/andcustom_mappings/folders. - Custom Bedrock Anvil GUI (
BedrockAnvilGUI):** Bedrock players opening an Anvil receive a dedicated 3-row Chest GUI allowing combination, repair, and renaming with accurate XP cost and level calculation. - Custom Bedrock Smithing GUI (
BedrockSmithingGUI):** Bedrock players opening a Smithing Table receive a dedicated 3-row Chest GUI supporting 1.20+ Template Smithing (Template + Base + Addition) and pre-1.20 legacy Smithing (Base + Addition). - New Feature Config Toggles:** Added
features.use-custom-anvil-gui(default:true) andfeatures.use-custom-smithing-gui(default:true) inconfig.yml.
### 📊 Attribute Modifier Operations & Lore Formatting
- Attribute Operations Support:**
AbilityDataandAbilityEditorGUInow support three distinct attribute modifier operations: ADD_NUMBER— Flat value addition/subtraction (e.g.+5or-5).ADD_SCALAR— Percentage scalar based on base attribute (e.g.+0.20formats as+20%,-0.15formats as-15%).MULTIPLY_SCALAR_1— Multiplier size (e.g.1.20formats asx1.20).- Lore Formatting & Message Customization:** Updated
updateAbilityLoreto format positive and negative values according to the operation type, adding%for scalar operations andxmultiplier prefixes for multiply operations. - New Message Keys in
messages.yml:** Addeditems.ability-attribute-scalar-positive,items.ability-attribute-scalar-negative,items.ability-attribute-multiply-positive, anditems.ability-attribute-multiply-negative.
### ✈️ 3D Model Display (ArmorStand) Improvements & Dismount Safety
- Flight & Spectator Model Auto-Hiding:** ArmorStand models automatically hide when players toggle flight (
isFlying(),PlayerToggleFlightEvent), enter Spectator mode (GameMode.SPECTATOR), or perform special poses (Pose.SWIMMING,Pose.FALL_FLYING,Pose.SPIN_ATTACK). - Inventory Dismount Safety:** 3D models temporarily dismount when players open any inventory (
InventoryOpenEvent) and automatically remount 2 ticks after inventory closure (InventoryCloseEvent), preventing visual model overlaps in GUIs.
### 🛠️ Compatibility, Performance & Bug Fixes
- Flexible Version Parsing (
VersionUtil):** Upgraded version parsing regex ((\\d+)\\.(\\d+)(?:\\.(\\d+))?) to gracefully handle non-standard Paper build strings (e.g. Paper dev builds like26.2.build.48-alphaor custom server forks). - Case-Insensitive GUI Title Matching (
AccessoryGUI):** Fixed title comparison logic to use color-stripped case-insensitive matching (equalsIgnoreCase), preventing GUI title bugs caused by legacy color codes. - Give Command Target Message Fix (
CuriosCommand):** Fixed output message target calculation when giving items to other players.
CuriosPaper now supports multiple robust database engines for player accessory storage alongside standard flat-file YAML:
- SQLite Backend:** Perfect for single-server setups, storing accessory data in a local, optimized database file (
storage/curiospaper.db). - MySQL Backend:** Recommended for BungeeCord/Velocity proxy networks to share accessory inventories across multiple server instances with HikariCP connection pooling.
- MongoDB Backend:** Recommended for large-scale deployments, using a native document-oriented Mongo client.
- Automatic Migration:** On first boot with a database backend configured, CuriosPaper will automatically parse and migrate all legacy
.ymlfiles in theplayerdata/folder into the database tables, renaming migrated files to.yml.migrated.
### 🧬 Dynamic Resource Pack & Model Customization
- Programmatic Custom Model Overrides:** Added
CuriosPaperAPI#registerItemModelOverride(String material, int customModelData, String modelPath)allowing other plugins to dynamically inject model predicates (e.g. intocarrot_on_a_stick.json) without editing raw assets by hand. - Combined Elytra Asset Generator:** If a custom Elytra item (possessing a custom equippable asset ID) is placed in the back slot, CuriosPaper scans the resource pack and automatically builds merged humanoid/wings JSON files combining chestplate textures with the custom wings layer. This ensures proper custom textures are displayed on the player model during flight.
### 🔌 API & Event System Extensions
- New PlayerDeathCurioDropEvent:** Fired when a player dies. Implements
Cancellable, permitting developers to prevent specific accessories from dropping on death, keeping them equipped (e.g., for keep-inventory perks or specific soulbound items). - Addon Storage API Hook:** Added
CuriosPaperAPI#getStorageAPI()which returns theCuriosStorageAPIinstance. This allows third-party addon plugins to save, query, and delete custom data asynchronously using CuriosPaper's configured database backend.
### ⚡ Performance & Quality of Life
- Asynchronous Resource Pack Rebuilds:** The
/curios rp rebuildcommand execution has been offloaded to an asynchronous Bukkit task to prevent main-thread freezing on servers with large packs or extensive asset overrides. - Enhanced Elytra Slot Listeners:** Added additional
InventoryDragEventandInventoryCloseEventlogic to protect slot 38 (armor slot) from ghost items, duplications, and glitched secret elytras. - Paper AsyncScheduler Support:** Uses Paper's native region-aware threaded
AsyncSchedulervia reflection on Minecraft 1.20.6+ servers, falling back to standard Bukkit schedulers on older servers. - Improved JVM Version Detection:** Version utility improved to correctly resolve Java execution runtimes for compatibility handling.
- Mob Drop Model Cleanup:** Fixed passenger armor stands occasionally leaving persistent ghost stands upon entity death.
#### Admin Inspect Command (
/curios inspect)- NEW:** Added
/curios inspect <player> [slot]to inspect and manage other players' accessories (works for both online and offline players). - If no slot is specified, it opens a read-only **Overview GUI** showcasing all equipped slots and their item counts. Admins can click a slot button to open the detailed slot GUI.
- If a slot is specified, opens a **Slot Detail GUI** where admins can add, remove, or swap accessories directly. Saving automatically invokes equip events and updates 3D models for online players.
- Requires
curiospaper.adminpermission.
#### Custom NBT & Enchants Editor GUI
- NEW:** Added an **NBT & Enchants Editor** button (Command Block) in the main Custom Item Editor (slot 21).
- Manage NBT (PDC Keys):** Interactively add or delete custom NBT tags stored in the item's Persistent Data Container (PDC) via simple chat input (
key = type:value, e.g.,myplugin:power = int:42). - NBT Key Suggester:** Browse and select existing NBT keys from standard Minecraft data components, other custom items, or the admin's inventory.
- Supported PDC types:
string,int,double,float,byte,short,long. - Manage Enchantments:** Add or remove enchantments on the custom item with configurable levels.
- Hide Enchantments:** Toggle whether enchantment tooltips are hidden from lore (glint only) via
ItemFlag.HIDE_ENCHANTS. - Unbreakable Toggle:** Easily make the custom item unbreakable.
- Placeable Toggle:** Prevent players from placing custom blocks or custom player heads on the ground (cancelled via
BlockPlaceEvent).
### 📦 Compatibility & Networking
#### Random Teleport (RTP) Compatibility / Dismount System
- NEW:** Added a temporary dismount mechanism to resolve passenger teleportation failures during random teleports (RTP) or portal transitions.
- RTP Command Recording:** Interactively record sequences (commands, stepped-on blocks, clicked levers/buttons, entity/NPC clicks, and GUI clicks) using
/curios recordrtp. - When a player triggers an RTP interaction, their 3D model armor stands are temporarily dismounted. Once the teleport completes and the player moves again, the armor stands are seamlessly remounted at the destination.
- Configurable under
features.rtpinconfig.yml. Can be disabled entirely viafeatures.rtp.enabled: false.
#### Resource Pack Hosting Modes
- NEW:** Added
resource-pack.modesetting supporting three hosting modes: SELF— Host the pack locally on the Minecraft server using the built-in Netty HTTP server.LINK— Provide a direct download link (resource-pack.url) for external hosting.NONE— Completely disable automatic resource pack hosting/delivery.- Query Parameter Cache-Busting:** On player join, the resource pack URL is automatically appended with
?v=<hash>(or&v=<hash>if a query string already exists) to bust the client cache and force the Minecraft client to redownload the resource pack when it is updated.
### 🧪 Crafting & Recipe Logic
#### Strict Crafting with ExactChoice
- Upgraded custom recipe ingredient resolution to use
RecipeChoice.ExactChoicefor shaped, furnace, smoker, blasting, campfire, smithing, and shapeless recipes (if supported by server). - This ensures recipes strictly require the exact custom Curios item instead of just any item matching the base material.
- Added strict crafting protection: custom Curios items can no longer be used in vanilla recipes (clears craft results or cancels
CraftItemEvent/PrepareItemCraftEvent).
### ⚡ Performance & API Enhancements
#### Ability Modifier Reconciliation Task
- NEW:** Added a background task (
ModifierReconciliationTask) that runs every 5 seconds to automatically detect and remove orphaned/stale attribute modifiers from players. - Fully strips all CuriosPaper-related modifiers (
curiospaper_ability_) from players on plugin shutdown/reload to prevent persistent attributes across reloads. - Upgraded item ID lookup in
AbilityListenerto prioritize PDC metadata (curiospaper:item_id) over display name lookup, making tracking much more robust.
#### Custom PLAYER_HEAD Skin Support
- NEW:** Setting
item-modelto a base64 skin texture or skin URL on aPLAYER_HEADcustom item now automatically downloads and applies the texture using reflection (supporting 1.14-1.21+). - Added
ItemStack createBase64Skull(String base64)toCuriosPaperAPIfor developers to programmatically create player heads with custom skins.
#### Consolidated Command System
- NEW:** The
/editcommand has been merged into/curiosfor a more unified administrative experience. - All management actions are now subcommands of
/curios: /curios list— Opens the new Paginated Item Browser/curios create <id>— Create a new custom item/curios edit <id>— Open the editor for an existing item/curios delete <id>— Delete a custom item/curios give <id> [player] [amount]— Distribute custom items/curios reload— Reload configuration and messages- Command aliases updated:
/cp,/curiospaper. - Permission node
curiospaper.edithas been merged intocuriospaper.admin.
#### Paginated Item Browser (
ItemListGUI)- NEW:** A dedicated GUI to browse all custom items in a paginated view.
- Supports left-click to view item recipes and right-click to jump directly into the item editor.
- Navigation buttons for previous/next pages and a close button.
#### Localization & Messaging (
MessagesManager)- NEW:** Added
messages.ymlfor full customization of all plugin messages and GUI titles. - Supports Hex colors and legacy color codes.
- Messages can be reloaded on the fly using
/curios reload.
#### Auto-Update Checker (
UpdateChecker)- NEW:** Built-in update checker that notifies administrators of new releases on startup and login.
- Can be toggled in
config.yml.
### ✨ API & Event Enhancements
#### New Events
- NEW:**
CuriosCraftEvent— Fired when a custom item is created via crafting, smelting, smithing, or anvil repair. Allows final modification of the result item. - NEW:**
CuriosModelEquipEvent— Fired when a 3D model is about to be displayed on a player. Allows modifying the model material, CMD, or item model on the fly. - NEW:**
CuriosMobModelEquipEvent— Fired when a 3D model is about to be displayed on a mob.
#### API Improvements
- Added
CuriosPaperAPI#reload()to trigger a full plugin reload from other plugins. - Enhanced
ItemDatawith visibility flags to support hidden items in the browser.
### ⚙️ Configuration Changes
#### New Config File:
messages.yml- Contains all user-facing strings, categorized by system (commands, GUI, errors, etc.).
#### Updated
config.yml- Added
features.update-checkertoggle. - Removed hardcoded message strings (moved to
messages.yml).
### 🐛 Bug Fixes & Refinement
- Fixed an issue where the Elytra model would occasionally fail to sync after teleportation.
- Improved
ModelStandManagerperformance during high-frequency movement. - Standardized all GUI titles to use the new messaging system.
- Refactored
CuriosCommandto handle the expanded subcommand set with better tab-completion.
## CuriosPaper v1.3.0
- Release Date:** 2026-04-27
### ✨ New Features
- 3D Model System** — Accessories now render as 3D models on players using invisible armor stands. Supports sneaking, swimming, gliding, scaling, and trident compatibility. Players can toggle visibility per-item.
- Quick Equip** — Shift + Right-Click to instantly equip accessories into the first available slot.
- Accessory Hotkey** — Configurable sneak-based hotkey to open the accessory GUI (single, double, or hold sneak modes).
- Keep Curio Inventory on Death** — Three modes:
Always,Auto(follows keepInventory gamerule), orNever. - Loot Table Editor GUI** — Complete 3-screen rewrite with browsing, filtering, and quick config presets.
- 3D Model Config GUIs** — In-game editors for item and mob drop 3D model settings.
- Custom Events** —
CuriosLootGenerateEventandCuriosMobDropEventfor intercepting and modifying generated items.
### 🔧 API Additions
countEquippedItems,unregisterSlot,registerItemRecipe,registerItemLootTable,registerItemMobDrop,registerItemVillagerTradegetItemData,createItem,saveItemData,deleteItemsetItemModelConfig,setMobDropModelConfigregisterResourcePackAssets,registerResourcePackAssetsFromJar- New/updated data classes:
LootTableData,MobDropData,ItemData
### ⚙️ Configuration
- New:
features.hotkey,features.keep-curio-inventory,resource-pack.combine-external-rp - Simplified slot display names (removed decorative Unicode)
- GUI size is now auto-calculated (
gui.main-slotsandgui.main-layoutremoved)
### 🐛 Fixes & Improvements
- Improved loot table injection and mob drop logic
- Better external resource pack combining
- Codebase reformatted to 2-space indentation
- fixed smithing table recipe related bugs
- fixed the broken resource pack pipeline
- fixed a error in the api
- optimized the plugin for better performance
# ✦ CuriosPaper ✦
- Custom Accessory Inventory System for Spigot & Paper**
1.14.4 — 1.21+ · Lightweight · Developer API · Fully Configurable</div>
- Added support for MC version 1.14 to 1.21
- Works with spigot, paper, and purpur
- Added a new /curios editmenu command to rearrange the bbag menu as you wish
- Updated the documentation with latest info
- Minor API changes you can check the documentation for it
- Minor bug fixes report by our respected Discord members
## ✅ CuriosPaper v1.1.2 – Bug Fix Update
- Fixed**
- 🛠️ Resolved issues in the **recipe system** that could cause incorrect behavior or failures.
- 🪂 Fixed bugs in the **Elytra back slot system** to ensure proper equipping and functionality.
- Credits**
- Help Improve CuriosPaper**
The faster issues are reported, the faster they get fixed.
👉 *Join the Discord & help make CuriosPaper better.*
This update expands CuriosPaper beyond basic crafting by introducing **full vanilla recipe support**, safer item upgrades, and tighter server control over in-game editors.
## 🚀 **Major Features**
### **Expanded Recipe System**
CuriosPaper now supports **non-crafting recipe mechanics**, enabling real progression and upgrade systems.
- New supported recipe types:**
- FURNACE** — Smelting with configurable time & XP
- BLAST_FURNACE** — Fast smelting
- SMOKER** — Food cooking
- ANVIL** — Item combination & upgrade recipes with XP cost
- SMITHING** — Base / addition / template based upgrades
This unlocks:
- Tiered item upgrades
- Anvil-based enhancements
- Smithing-table item evolution
- Smelting-based custom materials
### **NEW: CuriosRecipeTransferEvent**
A new **cancelable event** fired whenever CuriosPaper transfers custom item data during any recipe operation.
- Purpose:**
This event gives addons **full control** over how data moves from source → result.
- Key points:**
- Fires for **ALL recipe types**
- Provides
sourceandresultItemStack - Allows safe upgrades (e.g. backpack tiers)
- Can cancel crafting if transfer fails
## 🔧 **API Enhancements**
### **RecipeData Expansion**
RecipeData now supports **all recipe types** with strict validation.- New fields include:**
- Furnace / Smoker / Blast Furnace**
inputItemcookingTime(ticks, default 200)experience
- Anvil**
leftInputrightInputexperience(XP cost)
- Smithing**
baseItemadditionItemtemplateItem(optional, version-safe)
- Validation**
isValid()now validates per recipe type- Prevents invalid or partial registrations
### **CuriosPaperAPI Improvements**
- New registration methods for all recipe types
- Stronger validation & error feedback
- Automatic integration with
CuriosRecipeTransferEvent - Safer addon-facing API boundaries
## ⚙ **Configuration Changes**
### **Item Editor Toggle (NEW)**
A new config option allows **server owners to completely disable all in-game item editors**.
``
yml
item-editor:
enabled: true
`
- When set to
false:**
/edit and related item editor commands are disabledAll item editor GUIs are blocked API functionality remains fully usable for addons Ideal for production servers that only want addon-defined items
## 🧰 **Commands & Permissions**
### **Commands**
/edit
- Alias:
itemeditOpens the in-game item editor (if enabled)
### **Permissions**
curiospaper.admin — Full admin accesscuriospaper.edit — Item editor access (default: OP)
## 🛠 **Internal Improvements**
### **RecipeListener (Refactored)**
- Unified handling for all recipe types
- Reliable data transfer pipeline
- Safer failure handling (no silent corruption)
- Faster recipe lookups
### **RecipeEditorGUI**
- Support for all new recipe types
- Furnace time & XP configuration
- Anvil input & XP cost handling
- Smithing base/addition/template UI
- Improved validation feedback
### **ItemDataManager**
- Improved serialization & deserialization
- More reliable autosave logic
- Better external plugin compatibility
## 🐛 **Fixes & Stability**
- Fixed recipe data persistence issues
- Fixed edge cases in recipe validation
- Improved slot manager stability
- More reliable autosave behavior
## ⚡ **Performance Improvements**
- Faster recipe lookup & caching
- Optimized inventory event handling
- Reduced memory footprint for recipe data
- Improved async save operations
## 🔄 **Compatibility**
- Fully backward compatible with **v1.1.0**
- Existing SHAPED & SHAPELESS recipes continue to work
- No migration required
- Addons automatically benefit from new recipe handling
## 🧭 **Addon Developer Notes**
CuriosRecipeTransferEvent now fires for **all recipe types**Use event.getRecipeType()` if logic differs per recipeThis update completely transforms CuriosPaper into a **full in-game custom item creation framework** — no more manual configs, no more external editors. Everything can now be created, edited, and managed directly inside the game.
## ⭐ **Major Additions**
### **✔ Full In-Game Custom Item Editor**
A complete GUI-driven system for creating and editing custom items:
- Set name, material, slot type, model
- Edit lore
- Real-time item previews
- Save or cancel changes safely
### **✔ New Data Systems**
New modular data models powering the editor:
- ItemData** – Core container for everything about a custom item
- RecipeData** – Shaped & shapeless recipes
- LootTableData** – Chest loot integration
- MobDropData** – Entity drop configuration
- VillagerTradeData** – Profession & level-based trading
- AbilityData** – Triggers & effects for equipped items
## ⭐ **New Editors / GUIs**
### **Item Editing System**
- EditGUI** — Central editor hub
- RecipeEditorGUI** — Drag-and-drop recipe builder
- LootTableBrowser** — Browse, add, and configure loot sources
- MobDropEditor** — Configure drops for every entity type
- TradeEditor** — Build villager trades with full control
- AbilityEditorGUI** — Add potion effects or attribute modifiers with EQUIP/UNEQUIP/WHILE_EQUIPPED triggers
## ⭐ **New Gameplay Systems**
### **Ability System**
Items can now apply:
- Potion effects
- Attribute modifiers (health, armor, speed, etc.)
Full trigger support:
- EQUIP**
- DE_EQUIP**
- WHILE_EQUIPPED** (auto-refreshing every second)
### **Loot Table Injection**
- Works with all vanilla & custom tables
- Smart matching ("dungeon" → all dungeon loot)
- Fully configurable chance & amount
### **Mob Drop System**
- Supports all mobs
- Chance, min/max amounts
- Looting enchantment support
### **Villager Trade System**
- Profession & level filtering
- Wandering trader support
- 1–2 cost items
- Prevents duplicate trades
## ⭐ **API Expansion**
CuriosPaperAPI now includes:
### **Item Management**
getItemData(id)createItem(id)saveItemData(id)deleteItem(id)
### **Integration Registration**
registerItemReciperegisterItemLootTableregisterItemMobDropregisterItemVillagerTrade
### **Accessory Utilities**
- Tagging & validation for accessory slot types
## ⭐ **Improved Infrastructure**
- Better error handling & validation
- Improved CustomModelData + NamespacedKey model support
- Cleanup tasks on plugin shutdown
- New event listeners for abilities, recipes, mob drops, trades
## 🐛 **Fixes & Stability Improvements**
- More reliable accessory slot tagging
- Fixed duplicate registrations for trades/drops/loot
- Better debug logging across all systems
- File saving/loading is now far more robust
## 📁 **File System Changes**
- All custom items now stored cleanly in
/items/ - Automatic serialization via YAML
- No breaking changes — older setups continue to work
The entire resource pack pipeline has been redesigned for stability, performance, and extensibility.
### **✔ Dirty-Flag Build System**
- Pack now builds **only once** after plugins finish registering.
- No more multiple rebuilds spamming your server startup.
/curios rp rebuildforces a rebuild when needed.
### **✔ Proper Namespace Enforcement**
- Reserved namespace **
curiospaper** is now locked.
- Addons attempting to use it are rejected (no crashes).
- Minecraft namespace (
minecraft:) is only allowed when enabled in config.
### **✔ Namespace Conflict Logging**
New conflict categories are now visible via:
``
/curios rp conflicts
`
Logs include:
- Reserved namespace violations
- Minecraft namespace violations
- Duplicate namespace owners
- Allowed (config-enabled) conflicts
### **✔ File Conflict Handling**
- Only curated files support JSON merging:
curios_item_base.jsoncurios_combined_override.jsonAll other files use **strict copy-or-skip** logic. Conflicting files are logged cleanly without stopping the build.
## 📦 **Resource Pack Delivery Improvements**
- Rebuilds now automatically **re-send** the updated pack to all online players.
- Clients receive the correct updated assets without needing to relog.
- Pack SHA1 hash is recalculated and applied correctly.
## 🛠 **New Admin Commands**
### **/curios rp info**
Shows:
- RP server status
- Host + port
- Pack size
- Hash
- Dirty state
- Registered namespaces
- Registered sources
### **/curios rp rebuild**
- Forces full rebuild
- Sends the updated pack to all online players
### **/curios rp conflicts**
- Shows namespace + file conflicts in one place
## 🐛 **Fixes**
- Plugin no longer crashes when addons misuse namespaces.
- CuriosPaper no longer blocks itself from using
curiospaper or minecraft`.## ❤️ **Developer Improvements**
- Added new getters for debugging and integration.
- Enforced consistent namespace ownership model.
- Simplified addon RP registration behavior.
- Removed fragile merging code in favor of predictable behavior.
# 🎉 Update Summary
CuriosPaper v1.0.2 is a **massive stability overhaul**, especially in how resource packs are validated, built, and distributed.
Addons are now safer, conflicts are predictable, and server owners have better control + visibility.
- Added Elytra support for the back slot**
now you can use the elytra and your chestplate at the same time enable this in the config
- First Release of the CuriosPaper Api**
1. Custom Gui
2. Automatic resource pack generation and server
3. Configurable slots
4. easy to use api [check the example pack for help with the api usage]