The short answer
A custom Bedrock item needs an item definition in the Behavior Pack. If it has its own icon or display name, it also needs matching Resource Pack files. Four values must agree: the item identifier, the minecraft:icon value, the key in item_texture.json, and the PNG path.
We will build Ruby Apple, an edible item with the identifier icedfox:ruby_apple. The same foundation works for materials, quest items, tools, weapons, gadgets, food, or scripted objects.
Before you start
- A working Behavior Pack and Resource Pack with valid manifests.
- A code editor such as Visual Studio Code.
- A square PNG icon. A 16x16 or 32x32 transparent image is a sensible starting point.
- Minecraft Bedrock with both development packs active in a test world.
Use this exact file structure
Keep behavior and presentation separate. The Behavior Pack tells the game what the item does; the Resource Pack tells the client what it looks like and what it is called.
RubyApple_BP/
manifest.json
items/
ruby_apple.json
RubyApple_RP/
manifest.json
textures/
item_texture.json
items/
ruby_apple.png
texts/
en_US.lang
languages.jsonFolder names are case-sensitive on some platforms and servers. Pick lowercase file names, use underscores consistently, and do not silently change ruby_apple to RubyApple in one file.
Step 1: create the item JSON
Create RubyApple_BP/items/ruby_apple.json. This complete example places the item in the Creative inventory and makes it edible.
{
"format_version": "1.21.90",
"minecraft:item": {
"description": {
"identifier": "icedfox:ruby_apple",
"menu_category": {
"category": "items",
"group": "minecraft:itemGroup.name.food"
}
},
"components": {
"minecraft:icon": "ruby_apple",
"minecraft:max_stack_size": 64,
"minecraft:use_animation": "eat",
"minecraft:use_modifiers": {
"use_duration": 1.6,
"movement_modifier": 0.35
},
"minecraft:food": {
"nutrition": 6,
"saturation_modifier": 0.8,
"can_always_eat": false
}
}
}
}What each important field does
identifieris the permanent namespaced ID used by commands, recipes, loot tables, and scripts.menu_categorymakes the item discoverable in Creative mode.minecraft:iconpoints to a texture key, not directly to a PNG file.minecraft:foodmakes the item edible and controls hunger and saturation.minecraft:use_modifierscontrols use time and movement while the item is being used.
If you want a simple material instead of food, remove minecraft:food, minecraft:use_animation, and minecraft:use_modifiers. Keep the identifier, icon, category, and stack size.
Step 2: register the icon texture
Save the icon as RubyApple_RP/textures/items/ruby_apple.png. Then create or extend textures/item_texture.json:
{
"resource_pack_name": "Ruby Apple Resources",
"texture_name": "atlas.items",
"texture_data": {
"ruby_apple": {
"textures": "textures/items/ruby_apple"
}
}
}The key ruby_apple matches the value used by minecraft:icon. The texture path excludes .png. If either string differs by one character, the item can exist and function while its icon remains missing.
Step 3: add the display name
Create texts/languages.json and declare the language files included by the Resource Pack:
[
"en_US"
]Then add the item name to texts/en_US.lang:
item.icedfox:ruby_apple.name=Ruby AppleFor a public addon, add more language files rather than hard-coding several names in JSON. The en_US file also works as the normal fallback when another translation is unavailable.
Step 4: test one layer at a time
- Activate the Behavior Pack and its linked Resource Pack in a disposable test world.
- Run
/give @s icedfox:ruby_apple. - Confirm the name and icon in the hotbar.
- Switch to Survival, reduce hunger, and eat the item.
- Check the Creative inventory category and search for "Ruby Apple".
- Leave and reload the world once to catch pack-cache problems.
If the command says the item is unknown, debug the Behavior Pack. If the item is given but has no name or icon, debug the Resource Pack. That distinction cuts the problem in half immediately.
Turn the basic item into a real addon feature
Once the static item works, extend it deliberately:
- Add a shaped or shapeless survival recipe with the custom recipes guide.
- Use durability, repairability, damage, digger, wearable, throwable, shooter, or cooldown components where the item type calls for them.
- Use a custom component and Script API only for behavior that data-driven components cannot express cleanly.
- Add the item to loot tables, trades, mob drops, structures, or progression instead of leaving it Creative-only.
- Test multiplayer behavior and item persistence before publishing.
A good item is more than a JSON file. Players need to understand how to obtain it, why it matters, and where it sits in the addon progression.
Common custom item problems
The item is unknown in the /give command
Confirm the Behavior Pack is active, the item file is inside items/, the JSON parses, and the identifier includes your namespace. Open the Content Log before changing random fields.
The item is invisible or uses the missing-texture icon
Compare minecraft:icon, the texture_data key, and the PNG path character by character. Confirm the file is a real PNG and the Resource Pack is active.
The item name shows a translation key
Check the line in en_US.lang, verify languages.json, and make sure both are inside the Resource Pack texts/ folder.
The icon works but the item cannot be eaten
The Behavior Pack is loading, so focus on the use components. Keep minecraft:food, minecraft:use_modifiers, and minecraft:use_animation together, then check the Content Log for a version or schema error.
The item works only in an old test world
Development pack caches can hide changes. Increase the pack version when distributing an update, remove duplicate imported copies, and retest in a clean world.
Frequently asked questions
Do custom items need both a Behavior Pack and Resource Pack?
The definition belongs in a Behavior Pack. Add a Resource Pack when the item has a custom icon, model, attachable, sounds, or translated name.
Can I create the item with Blockbench instead?
Yes. The Minecraft Item Wizard can generate a useful starting pack and is especially helpful for 3D held items. You should still understand the exported files so you can maintain the addon after the wizard step.
Why should I use my own namespace?
A namespace prevents collisions with vanilla content and other addons. Do not create custom content under minecraft:; use a stable studio or project namespace.
Official sources checked
- Microsoft Learn: How to Add Custom Items
- Microsoft Learn: Minecraft Item Wizard
- Microsoft Learn: Item Components Reference
- Microsoft Learn: Troubleshooting Add-on Bugs