-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: add advanced/block-and-item-id.md
- Loading branch information
Showing
3 changed files
with
67 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
--- | ||
comments: true | ||
--- | ||
|
||
# Block and Item Id | ||
|
||
This page will explain the id system of block and item. | ||
|
||
## Overview | ||
|
||
In Minecraft: Bedrock Edition, all blocks must have a correspond `hard block item`. But not every item have a correspond block. | ||
If an item does not have a correspond block, then we call it `pure item`. The texture of `hard block item` is decided by the block's | ||
texture and cannot be changed. To solve this problem, the vanilla also registered extra block item for some blocks (e.g. cake, | ||
cauldron, grass, kelp, bed, sugar cane, etc.). We called these extra block items `actual block item`. | ||
|
||
When a block only have one correspond block item, `hard block item` is equal to `actual block item`. Most of the blocks in vanilla | ||
are like this. | ||
|
||
## How Blocks & Items are Registered and How the Order Affect the Id | ||
|
||
The register order of blocks and items in vanilla: | ||
|
||
1. Register all `pure item` and `actual block item`. | ||
2. Register all blocks, and try to register `hard block item` with the same id of block for each block, and there are two cases: | ||
1. There is no `actual block item` that already registered with the same id, which means that this block only have one correspond block item. | ||
We can say that the `hard block item` is equal to the `actual block item` of this block. | ||
2. There is an `actual block item` that already registered with the same id, which means that the `hard block item` and `actual block item` | ||
of this block is different. **However, the `hard block item` will still be registered, and to solve the conflict, a perfix `item.` will | ||
be added to the path of the id**. | ||
|
||
Here, we will take cake (whose `hard block item` is different from its `actual block item`) as an example: | ||
|
||
1. Register the `actual block item`: `minecraft:cake`. | ||
2. Register the block: `minecarft:cake`. | ||
3. Try to register the `hard block item` with the same id of block: `minecraft:cake`. | ||
But there is already an `actual block item` with the same id, so the `hard block item` will be registered with the id `minecraft:item.cake`. | ||
|
||
## Special Cases | ||
|
||
Normally, for a block, you can find an item of the same block ID. But there are special cases here (for historical reasons): | ||
|
||
| Block Id | Actual Block Item Id | Hard Block Item Id | | ||
|-----------------|------------------------------------------|----------------------| | ||
| minecraft:reeds | ~~minecraft:reeds~~ minecraft:sugar_cane | minecraft:item.reeds | | ||
|
||
## How Allay Handles Block and Item Id | ||
|
||
To unify naming and reduce confusion. In Allay, we ensure that the `hard block item`'s id of the registered block is the same as the block's id | ||
without an id conflict. If you want to register extra block item for your block, please make sure that it has the same id of the blcok you want | ||
to register extra block item for. Later when registering the block, Allay will consider the item you registered as the `actual block item`, and | ||
register the `hard block item` with a `item.` prefix. | ||
|
||
The return value of `BlockType#getItemType()` will be the `actual block item` instead of the `hard block item` if the block has extra block item. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters