Bedrock Wiki
  • Discord
  • Contribute
  • bedrock.dev
  • MS Learn
Beginner's Guide
  • Guide
    • 1. Introduction
      guide
    • 2. Add-Ons Explained
    • 3. Software & Preparation
    • 4. Project Setup
    • 5. Create a Custom Item
    • 6. Create a Custom Entity
    • 7. Blockbench: Modeling, Texturing & Animating
    • 8. Adding a Loot Table, Spawn Rule & Crafting Recipe
  • Extra
    • a. Understanding JSON
    • b. Download Example Packs
    • c. Troubleshooting
      help
    • d. Advanced Manifest
    • e. Format Versions
    • f. Project Setup Android
Animation Controllers
  • Intro to Animation Controllers
    guide
  • Entity Commands
  • AFK Detector
  • Death Commands
  • Molang into Scoreboard
  • Respawn Commands
Blocks
  • General
    • Intro to Blocks
      guide
    • Block Components
    • Block Tags
    • Block States
    • Block Traits
    • Block Permutations
    • Block Events
      Scripts
    • Block Event Migration
      help
    • Blocks as Items
    • Troubleshooting Blocks
      help
  • Visuals
    • Block Culling
    • Block Models
      guide
    • Block Texture Animation
    • Block Texture Variation
    • Block Tinting
  • Tutorials
    • Applying Constant Effects
      Scripts
    • Avoiding State Limit
    • Fake Blocks
    • Ore Loot Tables
      Scripts
    • Precise Interaction
      Scripts
    • Precise Rotation
      Scripts
    • Rotatable Blocks
  • Vanilla Re-Creations
    • Custom Crops
      Scripts
    • Custom Glass
    • Custom Glazed Terracotta
    • Custom Trapdoors
      Scripts
  • Documentation
    • Block Format History
    • Block Shapes
    • Block Sounds
    • Vanilla Block Models
Commands
  • General
    • Intro to Command Blocks
    • Functions
    • Block States
    • Coordinate System
    • NBT Commands
    • Scoreboard Operations
    • Understanding Selectors
  • Commands
    • Damage
    • Execute
    • Playanimation
    • Playsound
  • On Event Systems
    • On Player First Join
    • On Player Join
    • On Player Leave
    • On Player Death
    • On Player Respawn
    • On First World Load
  • Scoreboard Systems
    • Entity Counter
    • Scoreboard Timers
    • Comparing And Retrieving Scores
  • Techniques
    • Execute Logic Gates
    • MBE - Max's Block Entity
    • FMBE - A New Way to Create Display Entities
    • Look Detection
    • Movement Detections
    • Orbital Camera
  • Useful Creations
    • Custom Crafter
    • Multiplayer Position Rearrangement
      function
Concepts
  • contents.json
  • Emojis & Symbols
  • Molang
  • Namespaces
  • Overwriting Assets
  • Raw Text
  • Shaders
  • Sounds
  • Subpacks
  • Text and Localization
  • Texture Atlases
  • textures_list.json
Documentation
  • Shared Constructs
  • Advanced Molang
  • File Types
  • Fog IDs
  • Material Configuration Description
  • Menu Categories
  • Molang Queries
  • Pack Folder Structure
  • Sound Definitions
  • Vanilla Materials
Entities
  • General
    • Intro to Entities BP
      guide
    • Intro to Entities RP
      guide
    • Troubleshooting Entities
      help
    • Entity Events
    • Entity Properties
    • NPC Dialogues
    • Render Controllers
    • Spawn Rules
  • Tutorials
    • Convert Points Between Any Space (World, Entity, Bones)
    • Creating Boats
    • Detecting Other Entities
    • Disabling Team Damage
    • Dummy Entities
    • Entity Attacks
    • Entity Holds Item
    • Entity Movement
    • Entity Timers
    • Flying Entities
    • Introduction to AOE Clouds
    • Invulnerable Entities
    • Look at Entity
    • Sleeping Entities
    • Solid Entities
    • Spawning Tamed Entities
      Scripts
    • Village Mechanic
  • Documentation
    • Dummy Components
    • Non-Mob Runtime Identifiers
    • Projectiles
    • Runtime Identifiers
    • Vanilla Usage Components
    • Vanilla Usage Spawn Rules
Items
  • General
    • Intro to Items
      guide
    • Item Components
    • Item Tags
    • Item Events
      Scripts
    • Item Event Migration
      help
    • Troubleshooting Items
      help
  • Tutorials
    • Custom Armor
    • Custom Food
      Scripts
    • Custom Pottery Sherds
    • Custom Weapons
    • Equipment-Based Commands
    • High Resolution Items
    • Spawning Items
    • Throwable Items
  • Documentation
    • Enchantments
    • Attachables
    • Item Format History
    • Numerical Item IDs
    • Vanilla Item Identifiers
    • Vanilla Usage Components
JSON UI
  • General
    • Intro to JSON UI
      guide
    • Best Practices
      guide
  • Tutorials
    • Adding HUD Elements
    • Aseprite Animations
    • Buttons and Toggles
    • Modifying Server Forms
    • Preserve Title Texts
    • String to Number
  • Documentation
    • JSON UI Documentation
Loot, Recipes & Trading
  • General
    • Trading Behavior
  • Documentation
    • Loot Tables
    • Trade Tables
    • Recipes
    • Item Functions
  • Tutorials
    • Randomized Structure Loot
Meta
  • Add-On Performance
  • Style Guide
  • Useful Links
  • Using Schemas
  • Version Control
  • Q&A
    • Blocks and Items Q&A 2024/08/30
    • Deferred Technical Preview Q&A 2024/02/23
    • GameTest Q&A 2021/08/06
    • Scripting and Editor Q&A 2023/09/22
    • World Generation Q&A 2024/11/15
NBT
  • General
    • .mcstructure
  • Tutorials
    • Experiments in Education Edition
    • Extending Structure Limits
  • NBT in Depth
    • About NBT (Named Binary Tag)
    • NBT Libraries
    • Reading NBT Example
Particles
  • General
    • Intro to Particles
      guide
  • Tutorials
    • Disabling Particles
  • Documentation
    • Vanilla Particles
Scripting
  • General
    • Intro to Scripting
    • What is Script API?
    • API Modules
  • Tutorials
    • Block Placement Prevention
    • GameTests
    • Script Core Features
    • Script Forms
    • Script Requests API
    • Simple Chat Commands
  • Documentation
    • Engine Environment
    • Script Resources
    • Script Watchdog
    • Troubleshooting JavaScript
    • TypeScript
Servers
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet Protocol
    • RakNet Protocol
Visuals
  • General
    • Introduction to Entity Visuals
      guide
    • Bedrock Modeling
    • Custom Death Animations
    • Effects in Animations
    • Material Creations
    • Materials
    • Math-Based Animations
    • Skin Packs
  • Tutorials
    • Entity Texture Animation
    • Glowing Entity Texture
    • Hurt Animations
    • Leash Position
    • Player Geometry
    • Remove Entity Shadows
    • Retexturing Spawn Eggs
  • Ideas
    • Structure Presentation
World Generation
  • General
    • Intro to World Generation
      guide
    • Biomes
      guide
    • Feature Types
  • Tutorials
    • Block Conditions for Features
    • Generating Custom Ores
    • Generating Custom Structures
    • Generating Patches
    • Heightmap Noise
  • Documentation
    • Biome Tags

Create a Custom Item

Create a Custom Item
  • Item Behavior
    • Components
    • Identifier
    • Item File
  • Item Visuals
    • Texture
    • Shortname
    • Icon
    • Item Name
  • Overview
  • Your Progress So Far

In Minecraft, we can create custom items, which can be dropped, traded, crafted, and otherwise used like a normal item. There is a lot of power in the system, including the ability to make food, fuel, and tools.

In this tutorial we are going to learn how to create a simple "ectoplasm" item, which we will later use as a loot-table drop for our ghost entity.

Conceptually, items are made up of two parts:

  • The visuals (texture, name)
  • The behaviors (how the item should behave)

First, we will learn how to create a new simple item & define its behaviors. In the next section we will assign a texture to this item, so you can see it in game.

Item Behavior ​

To make an item we will need a way to identify it and define how we want it to behave. To do this we will be making a file which tell Minecraft to apply certain behaviors to a specific item of our choice.

At the end of this section we will have fully defined the behavior of our item.

Components ​

Different items behave differently; you can eat a porkchop, enchanted items glow & eggs can only stack to 16. These are all examples of how the item behaves. We are able to define how our custom item will behave by using behavior components.

Example Components
BP/items/example.json/components/
json
"minecraft:food":
"minecraft:glint": true,
"minecraft:max_stack_size": 16
1
2
3

Components contain information which tells the game what our item should do. For example the component "minecraft:glint" determines whether the item should have an enchanted glint to it, so setting it to true will apply it. All components have a value attached to it which we can edit to get the behaviour we want.

For our ectoplasm, we will set it to have a stack size of 16, similar to eggs. To do this we use the component "minecraft:max_stack_size" and set its value to 16.

Identifier ​

In order for the game to apply the correct components to the correct item, we need to be able to tell the game which item is ours. We do this by defining an identifier for our item.

An identifier is a name unique to this item. For a vanilla minecraft egg it's identifier is minecraft:egg. An identifier is made of two parts,

  • The namespace (minecraft)
  • The id (egg)

The namespace is unique to your add-on and you will use it throughout the project. This is to reduce issues if someone adds two packs to your game which both add an ectoplasm item; the namespace reduces the chance of the identifier being the same. The namespace that Minecraft use is minecraft. Your namespace should be unique to you, for example the authors initials or an abbreviation of the pack name. We will use the namespace wiki in our example; for more information on making a namespace check out our page here.

The id is an informative shorthand name for your item. Here we will use ectoplasm.

Together our custom identifier becomes wiki:ectoplasm. Note that we use a colon, :, to spilt the namespace and id. When we want to reference our item we will use this identifier, for example using the /give command.

Item File ​

Now that we have our components and identifier, we can now start defining our item. We define an item by creating an item definition file in our behavior pack. This is where all our information will go.

All item definitions go in BP/items/. The name of your file doesn't affect anything, but for ease of navigation it's recommend to name it after your id. We will create a file BP/items/ectoplasm.json. Here is the the basic layout of the file:

BP/items/ectoplasm.json
json
{
	"format_version": "1.21.70",
	"minecraft:item": {
		"description": { ... },
		"components": { ... }
	}
}
1
2
3
4
5
6
7

Most files in your pack will have 2 top level definitions, "format_version" and "minecraft:<file_type>". The format version defines which version of the Add-on system Minecraft will use to read this file. For our item, we will be using 1.21.70 to allow us to use the newest features. For more information on format versions you can check here.

The second definitions defines what kind of file this is. In our case, as this is an item definition, it is minecraft:item. Under this is where we will put all our information. This will always contain a description key.

Let us look closer at the "description":

ectoplasm.json/minecraft:item/
json
"description": {
	"identifier": "wiki:ectoplasm",
	"menu_category": {
        "category": "items"
    }
},
1
2
3
4
5
6

The description key contains the identifier and any other information required. The identifier allows the file to know which item to apply the components to. The category key defines which tab of the creative inventory / recipe book the item would show up in. There are four tabs to choose from: "construction", "equipment", "items" and "nature". If this key is not included, then the item will not show in the creative inventory, but you can still get the item by using /give.

Now we can actually define the behavior of our item, under components. Here we simply place any components we want our item to have. This will be our "minecraft:max_stack_size" component. For other components you can use, check out our more in depth guide on Items here.

ectoplasm.json/minecraft:item/
json
"components": {
	"minecraft:max_stack_size": 16
}
1
2
3

With that, we have now fully defined our item's behavior. This is what your file should currently look like.

BP/items/ectoplasm.json
json
{
    "format_version": "1.21.70",
    "minecraft:item": {
        "description": {
            "identifier": "wiki:ectoplasm",
            "menu_category": {
                "category": "items"
            }
        },
        "components": {
            "minecraft:max_stack_size": 16
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

If you open a world with your add-on, your item should be in the correct menu but invisible and have a strange name.

This is because we haven't defined the visuals yet. However, you should see that it does stack as expected. In the next section, we will define the items texture and assign it to our item.

Item Visuals ​

Now that we have an item that works, we want to add a texture and name to it.

Textures are stored in the resource pack under RP/textures as images. In order for Minecraft to know which texture to use where, we need to assign a shortname to it, so we can access it.

Texture ​

To start we need a texture for our item. For our ectoplasm, we will be using this image.

ectoplasm.png

Download texture here

All item textures are stored in RP/textures/items/. From here, you can create any subdirectories you wish. It's best to name your texture image files with the items' id, in our case it will be ectoplasm.png. It is recommended to have your images in .png format and be of size 16x16, though Minecraft will accept other formats such as .jpg or .tga.

Your folder layout should look like this:

        • 🖼️ectoplasm.png

Shortname ​

A shortname is essentially a name that is assigned to the folder path of the texture, so whenever we want to use a texture somewhere, we will use its shortname instead of its folder path.

All item shortnames are stored in one file called item_texture.json which is in RP/textures. This contains a list of shortnames and its assigned textures.

RP/textures/item_texture.json
json
{
	"resource_pack_name": "Ghostly Guide",
	"texture_name": "atlas.items",
	"texture_data": { ... }
}
1
2
3
4
5

Here we have 3 top level definitions, texture_data is where we will define our shortnames, the other two define the type of file this is. The resource_pack_name is simply our resource pack's name and texture_name is what kind of texture file this is. Since this is for items, this will always be set to atlas.items.

Under texture_data will our list of item shortname definitions. An example definition looks like this:

RP/textures/item_texture.json/texture_data
json
"wiki:ectoplasm": {
	"textures": "textures/items/ectoplasm"
}
1
2
3

Here wiki:ectoplasm is our shortname and under textures we have the path to our item. Notice that this is relative to the resource pack, and does not include the file extension. Your shortname should be short and unique. We recommend setting it as the namespace and id for the item we are assigning it to.

Now whenever we want to refer our image, we will use the shortname wiki:ectoplasm.

Icon ​

To finally apply our texture to our item, we add the minecraft:icon component to our item definition and set its value to our shortname.

ectoplasm.json/minecraft:item/
json
"components": {
	"minecraft:max_stack_size": 16,
	"minecraft:icon": "wiki:ectoplasm"
}
1
2
3
4

Now your texture should appear on your item.

Item Name ​

The last thing to add is a nice name to your item. Currently it will look like item.wiki:ectoplasm. This is the translation key for your item name, and it is used to allow for localization. To set it, we just have to define it in our language files.

We already created these files when making our RP and BP, so we just need to add to them.

RP/texts/en_US.lang
lang
item.wiki:ectoplasm=Ectoplasm
1

Now when you enter your world, your item should have a name.

Overview ​

Now your first custom item, Ectoplasm, is complete! If everything has been done correctly, the item should now be obtainable through the /give command in-game, as well as appearing in your creative inventory.

Your folder structure should look like this:

      • 📝item_texture.json
        • 🖼️ectoplasm.png
      • 🈵en_US.lang
      • 📝languages.json
    • 📝manifest.json
    • 🖼️pack_icon.png
      • 📝ectoplasm.json
      • 🈵en_US.lang
      • 📝languages.json
    • 📝manifest.json
    • 🖼️pack_icon.png
Full ectoplasm.json
BP/items/ectoplasm.json
json
{
    "format_version": "1.21.70",
    "minecraft:item": {
        "description": {
            "identifier": "wiki:ectoplasm",
            "menu_category": {
                "category": "items"
            }
        },
        "components": {
            "minecraft:max_stack_size": 16,
            "minecraft:icon": "wiki:ectoplasm"
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Full item_texture.json
RP/textures/item_texture.json
json
{
    "resource_pack_name": "Ghostly Guide",
    "texture_name": "atlas.items",
    "texture_data": {
        "wiki:ectoplasm": {
            "textures": "textures/items/ectoplasm"
        }
    }
}
1
2
3
4
5
6
7
8
9

If you're having some trouble, check the Troubleshooting page. If that doesn't help, compare your results with the example files.

Your Progress So Far ​

Contributors

Edit Create a Custom Item on GitHub

Bedrock Wiki by Bedrock OSS

"Minecraft" is a trademark of Mojang AB.

Bedrock OSS, Bedrock Wiki and bedrock.dev are not affiliated in any way with Microsoft or Mojang AB.

  • Privacy Policy
  • Join our Discord
  • Learn how to Contribute
  • Visit our Repository