CustomCraft
A custom crafting and furnace recipe plugin for Nukkit-MOT
Features
- Supports shapeless crafting (similar to dye crafting)
- Supports shaped crafting (similar to tool crafting, requires a specific pattern)
- Supports craft count limits
- Supports extra output items
- Supports NBT items as crafting inputs or outputs
- Provides convenient in-game commands to add item configurations
Installation
- Download the CustomCraft plugin
.jar file
- Place the jar file into the
plugins folder of your Nukkit-MOT server
- Restart the server
- The plugin will automatically generate configuration files in
plugins/CustomCraft
Configuration Guide
craft.json - Crafting Recipe Configuration
Config file location: plugins/CustomCraft/craft.json
Configuration Fields
| Field |
Type |
Description |
| type |
Integer |
Recipe type: 0 = shapeless, 1 = shaped |
| maxCraftCount |
Integer |
Maximum craft count: -1 = unlimited, other values = specific limit (feature not fully implemented yet) |
| input |
Array/Object |
Input materials (see formats below) |
| output |
String |
Output item (format: ItemID:Damage:Amount) |
| shape |
Array |
Required for shaped recipes, defines crafting grid pattern |
| extraOutput |
Array |
Optional, list of additional output items |
Item Format Description
The plugin supports three item formats:
1. Normal Item Format
- Format:
ItemID:Damage:Amount
- Example:
58:0:1 → 1 crafting table (ID: 58, damage: 0)
- Example:
3:0 → dirt (ID: 3, damage: 0), amount defaults to 1
- Example:
35:14:5 → 5 red wool (ID: 35, damage: 14)
2. NBT Item Format (Items with Special Attributes)
Used for items with enchantments, custom names, lore, or other NBT data.
- Reference format:
ItemName@nbt
- Usage steps:
- Hold the item in-game and run
/craft add <name> to save it
- Reference it in recipes using
Name@nbt
Examples:
- Input reference:
"input": ["GodSword@nbt"]
- Output reference:
"output": "GodSword@nbt"
Notes:
- Actual NBT data is stored in
nbtItems.json in the format
ItemID:Damage:Amount:NBTData (auto-generated, no manual editing required)
- If the item changes (enchantments, name, lore, etc.), you must re-run
/craft add <name>
- If you don’t know the numeric ID or damage value, you can still use
/craft add <name> and treat it as an NBT item
3. Namespaced Item Format (Custom Items)
Used for modern namespaced IDs:
- Format:
namespace:item:amount
- Examples:
minecraft:diamond_sword:1
minecraft:netherite_ingot:1
Mixed Item Format Example
{
"type": 1,
"maxCraftCount": -1,
"input": {
"A": "GodSword@nbt",
"B": "minecraft:diamond:0:1",
"C": "minecraft:netherite_ingot:1"
},
"shape": [
"ABA",
"BCB",
"ABA"
],
"output": "SuperGodSword@nbt"
}
Recipe Examples
Shapeless Recipe Example
(Converting dirt into a crafting table)
{
"recipes": [
{
"type": 0,
"maxCraftCount": -1,
"input": [
"3:0"
],
"output": "58:0:1"
}
]
}
Shaped Recipe Example
(9 dirt arranged in a 3×3 grid to craft a table, plus 1 extra dirt)
{
"recipes": [
{
"type": 1,
"maxCraftCount": -1,
"input": {
"A": "3:0"
},
"shape": [
"AAA",
"AAA",
"AAA"
],
"output": "58:0:1",
"extraOutput": [
"3:0:1"
]
}
]
}
Shaped Recipe Pattern Explanation
The shape array defines the layout of items in the crafting grid:
"AAA" → all three slots filled with material A
"A A" → left and right slots filled, middle empty
" A " → only the center slot filled
Multiple materials can be defined:
{
"type": 1,
"input": {
"A": "5:0",
"B": "280:0"
},
"shape": [
"AAA",
" B ",
" B "
],
"output": "269:0:1"
}
This example crafts a wooden pickaxe using planks and sticks.
nbtItems.json - NBT Item Configuration
If you want to use items with special attributes (enchantments, custom names, etc.) as inputs or outputs, use in-game commands to add them.
File location: plugins/CustomCraft/nbtItems.json
NBT Item Format
This file is maintained automatically and usually should not be edited manually:
{
"ItemName": "ItemID:Damage:Amount:NBTData"
}
Field Description:
ItemName: Custom identifier used in recipes
ItemID: Numeric ID or namespaced ID
Damage: Item damage / metadata
Amount: Item amount
NBTData: Base64-encoded NBT data, or not if none
Example
{
"GodSword": "276:0:1:CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAA==",
"NormalDiamond": "264:0:1:not",
"CustomItem": "minecraft:diamond_sword:1:nbt"
}
Usage
- Add via command (recommended):
/craft add GodSword
- Reference in recipes:
{
"type": 0,
"input": ["GodSword@nbt", "diamond:0:8"],
"output": "SuperGodSword@nbt"
}
Notes:
- NBT items must match exactly (enchantments, names, lore, etc.)
- Using commands avoids manual configuration errors
Usage Guide
1. Add Simple Recipes
Edit craft.json, add recipes following the format above, then reload the plugin with /reload.
2. Create Advanced Recipes Using NBT Items
NBT items preserve all special attributes, including:
- Enchantments
- Custom names and lore
- Hidden flags
- Other NBT data
Steps
- Prepare your special item
- Example: a Sharpness V diamond sword named "GodSword"
- Save the item
- Hold the item
- Run
/craft add GodSword
- Use it in recipes
- Format:
ItemName@nbt
- As input:
"input": ["GodSword@nbt"]
- As output:
"output": "GodSword@nbt"
Full Example - Craft a Special Item
{
"type": 1,
"maxCraftCount": 1,
"input": {
"A": "diamond:0",
"B": "emerald:0"
},
"shape": [
"AAA",
"ABA",
"AAA"
],
"output": "GodSword@nbt"
}
Full Example - Upgrade a Special Item
{
"type": 0,
"maxCraftCount": -1,
"input": ["GodSword@nbt", "nether_star:0:1"],
"output": "SuperGodSword@nbt"
}
Important Notes:
- Player items must match saved NBT data exactly
- Use clear, recognizable names for NBT items
- View all saved items in
nbtItems.json
Testing Recipes
- Save configuration files
- Reload the plugin using
/reload
- Open a crafting table and test the recipe
Commands
| Command |
Description |
Permission |
/craft add <name> |
Save the held item to nbtItems configuration |
customcraft.craft |
Permission Notes:
customcraft.craft is granted to OPs by default
FAQ
Q: Changes don’t take effect?
A: Restart the server after editing configuration files.
Q: How do I use enchanted items as ingredients?
A: Save them with /craft add <name> and reference them using name@nbt.
Q: Is the @nbt suffix required?
A: Yes, it is mandatory when referencing items from nbtItems.json.
Q: What’s the difference between normal and namespaced item formats?
A:
- Normal:
ID:Damage:Amount (e.g. 276:0:1)
- Namespaced:
minecraft:item_name (e.g. minecraft:diamond_sword)
Q: What is extraOutput used for?
A: It allows additional items to be given alongside the main output.
Q: Does maxCraftCount = 1 mean only one player can craft it?
A: No, it limits crafting per player, not globally.
Q: How do I view saved NBT items?
A: Open plugins/CustomCraft/nbtItems.json.
Feedback & Support
If you encounter issues or have suggestions, feel free to submit an issue: