Files
netease-bedrock-wiki/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/3-特殊方块/11-自定义容器.md
2025-07-31 17:53:14 +08:00

309 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
hard: 入门
time: 分钟
---
# 自定义容器
## 概述
该功能类似自定义箱子使用原生c++驱动背包界面,实现自定义容器界面的方块。
包含长按分堆、双击合堆、右键拖放等功能方块破坏后内部物品会掉落方便开发者制作自定义熔炉等界面而无需考虑复杂的UI逻辑数据同步逻辑等。
## base_block新增netease_container
base_block指定现在可以指定为netease_container
## netease:block_container
| 键 | 类型 | 默认值 | 解释 |
| ----- | ---- | -------- | -------------- |
| custom_description | str | 容器名 | 容器ui打开时的title复用原版ui时生效|
| screen_name | str | ui名 | 交互方块时打开的ui形如namespace.screenName |
| container_size | int | 容器容量 | 方块容器能够存放的物品槽位数量取值范围1-108需与ui槽位匹配。若ui槽位大于配置容量超过配置的部分无法放入物品若ui槽位小于配置容量按shift可放入但无法在ui中显示 |
### 注意事项
- netease_container的size限定为1-108不在该范围会导致注册失败需在组件中配置
- netease_ui_container的size为108ui中如果指定了大于108的slot将无法放入物品无需配置
## 自定义容器事件
1. PlayerTryPutCustomContainerItemServerEvent事件玩家尝试改变自定义容器物品时触发该事件开发者可以监听该事件实现其他逻辑
## 示例
自定义容器方块配置:
```json
{
"format_version": "1.16.100",
"minecraft:block": {
"components": {
"netease:block_container": {
"custom_description": "自定义方块容器",
"screen_name": "netease_container.netease_custom_container_screen", // 交互该方块时打开的ui
"container_size": 27 // 关闭后保存在方块中的容器size对应ui中的netease_container扩展写法
}
},
"description": {
"base_block": "netease_container",
"category": "construction",
"identifier": "test:my_custom_container"
}
}
}
```
ui配置
> 此处以原版箱子的json为基础进行修改
注意:
- collection_name指定为netease_container
- ui的grid空格数量如果大于组件中设置的size那超出的那一部分无法放置物品
```json
{
"namespace": "netease_container",
"test_collection": {
"type": "stack_panel",
"size": [ "100%", "100%c" ],
"controls": [
{
"row_1": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", "100%cm" ],
"collection_name": "netease_container",
"controls": [
{
"a@netease_container.custom_grid_item": {
"collection_index": 27
}
},
{
"padding": {
"type": "panel",
"size": [ 4, 0 ]
}
},
{
"b@netease_container.custom_grid_item": {
"collection_index": 28
}
}
]
}
},
{
"padding_1": {
"type": "panel",
"size": [ "100%", 4 ]
}
},
{
"row_2": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", "100%cm" ],
"collection_name": "netease_container",
"controls": [
{
"c@netease_container.custom_grid_item": {
"collection_index": 29
}
},
{
"padding": {
"type": "panel",
"size": [ 4, 0 ]
}
},
{
"d@netease_container.custom_grid_item": {
"collection_index": 30
}
}
]
}
},
{
"padding_2": {
"type": "panel",
"size": [ "100%", 4 ]
}
}
]
},
"custom_grid_item@common.container_item": {
"$item_collection_name": "netease_container"
},
"custom_drop_grid_item@common.container_item": {
"$item_collection_name": "netease_ui_container"
},
"netease_custom_container_grid": {
"type": "grid",
"size": [ 162, "100.0%c" ],
"anchor_from": "top_left",
"anchor_to": "top_left",
"grid_dimensions": [ 9, 3 ],
"grid_item_template": "netease_container.custom_grid_item",
"collection_name": "netease_container",
"maximum_grid_items": 27
},
"netease_drop_container_grid": {
"type": "grid",
"size": [ 162, "100.0%c" ],
"anchor_from": "top_left",
"anchor_to": "top_left",
"grid_dimensions": [ 9, 2 ],
"grid_item_template": "netease_container.custom_drop_grid_item",
"collection_name": "netease_ui_container",
"maximum_grid_items": 18
},
"container_label": {
"type": "label",
"offset": [ 7, -1 ],
"anchor_from": "top_left",
"anchor_to": "top_left",
"text": "$container_title",
"size": [ "90%", "default" ],
"color": "$title_text_color",
"layer": 2
},
"selected_item_details@common.selected_item_details": {
"offset": [ 0, 0 ]
},
"netease_custom_container_panel_top_half": {
"type": "panel",
"size": [ "100%", "100.0%c" ],
"offset": [ 0, 11 ],
"anchor_to": "top_left",
"anchor_from": "top_left",
"controls": [
{
"container_label@netease_container.container_label": {}
},
{
"netease_custom_container_grid1@netease_container.netease_custom_container_grid": {
"offset": [ 7, 10 ]
}
},
{
"netease_custom_container_grid2@netease_container.netease_drop_container_grid": {
"offset": [ 7, 70 ]
}
}
]
},
"netease_custom_container_panel": {
"type": "panel",
"controls": [
{
"container_gamepad_helpers@common.container_gamepad_helpers": {}
},
{
"flying_item_renderer@common.flying_item_renderer": {
"layer": 11
}
},
{
"selected_item_details_factory@common.selected_item_details_factory": {
"control_name": "@netease_container.selected_item_details"
}
},
{
"item_lock_notification_factory@common.item_lock_notification_factory": {
"control_name": "@common.item_lock_notification"
}
},
{
"root_panel@common.root_panel": {
"size": [ 176, 220 ],
"layer": 1,
"controls": [
{
"common_panel@common.common_panel": {
"size": [ "100%", "100.0%c" ],
"$dialog_background|default": "common.dialog_background_opaque",
"controls": [
{
"bg_image@$dialog_background": {
"size": [ "100%", "100.0%c+-37.0px" ],
"layer": 1,
"controls": [
{
"chest_panel": {
"type": "panel",
"layer": 5,
"size": [ "100%", "100.0%c+-7.0px" ],
"controls": [
{
"netease_custom_container_panel_top_half@netease_container.netease_custom_container_panel_top_half": {}
},
{
"inventory_panel_bottom_half_with_label@common.inventory_panel_bottom_half_with_label": {}
},
{
"hotbar_grid@common.hotbar_grid_template": {}
}
]
}
},
{
"inventory_selected_icon_button@common.inventory_selected_icon_button": {}
},
{
"gamepad_cursor@common.gamepad_cursor_button": {}
},
{
"close@common.close_button": {
"layer": "$close_button_layer",
"offset": "$close_button_offset",
"ignored": "$use_compact_close_button"
}
},
{
"compact_close@common.compact_close_button": {
"layer": "$close_button_layer",
"offset": "$close_button_offset",
"ignored": "(not $use_compact_close_button)"
}
}
],
"bindings": [
{
"binding_name": "$close_button_visible_binding_name",
"binding_name_override": "#visible"
}
]
}
}
]
}
}
]
}
}
]
},
"netease_custom_container_screen@common.inventory_screen_common": {
"$close_on_player_hurt|default": true,
"close_on_player_hurt": "$close_on_player_hurt",
"variables": [
{
"requires": "$desktop_screen",
"$screen_content": "netease_container.netease_custom_container_panel",
"$screen_bg_content": "common.screen_background",
"$screen_background_alpha": 0.4
},
{
"requires": "$pocket_screen",
"$screen_content": "netease_container_pocket.netease_custom_container_panel"
}
]
}
}
```