Files
netease-bedrock-wiki/mcguide/20-玩法开发/13-模组SDK编程/2-Python脚本开发/101-3.2版本物品id变更.md
2025-07-31 17:53:14 +08:00

203 lines
10 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.
# 3.2版本物品id变更
## 简介
微软在1.20.50继续修改了部分方块ID取消了附加值相关链接请参阅[基岩版扁平化](https://zh.minecraft.wiki/w/%E5%AE%98%E6%96%B9%E9%A1%B5%E9%9D%A2/%E5%9F%BA%E5%B2%A9%E7%89%88%E6%89%81%E5%B9%B3%E5%8C%96),请开发者注意适配。
## 处理方法
在ModSDK的接口与事件中我们针对上述情况做了以下处理
1. 对于返回物品信息字典的接口与事件:
newItemName及newAuxValue返回新版名称与附加值。
原字段itemName及auxValue返回旧版名称与附加值。
2. 对于接受物品信息字典的接口与事件:
当字典存在newItemName及newAuxValue时使用这两个字段。
不存在时使用旧字段itemName及auxValue。
## 注意事项
* 通过附加值获取获取方块状态接口没有做兼容例如GetBlockAuxValueFromStates、GetBlockStatesFromAuxValue、GetBlockStates、SetBlockStates如果您的组件对此有依赖则需要对这次的改动自行做兼容处理。
* **开发完成或正在开发的组件建议统一采用newItemName及newAuxValue字段也不要新旧字段混用。**
* 某些写法可能会失效,例如
```python
# 获取itemDict然后在他基础上修改itemName或auxValue后再用来生成
itemdict = GetPlayerItem()
itemdict['itemName'] = 'xxx'
itemdict['auxValue'] = itemdict['auxValue']+1
SpawnItemToPlayerInv(itemdict)
```
因为GetPlayerItem返回的itemDict含有新字段再传入SpawnItemToPlayerInv时会读取新字段生成物品因此对原字段的修改无效。
## 物品名称变更表
以下为3.2版本变更了名称的物品列表表格内的名称省略了minecraft命名空间。
| 中文名称 | 旧命名 | 旧附加值 | 新命名 |
| :------- | ------ | -------- | ------ |
| 花岗岩 | stone | 1 | granite |
| 磨制花岗岩 | stone | 2 | polished_granite |
| 闪长岩 | stone | 3 | diorite |
| 磨制闪长岩 | stone | 4 | polished_diorite |
| 安山岩 | stone | 5 | andesite |
| 磨制安山岩 | stone | 6 | polished_andesite |
| 云杉树木板 | planks | 1 | spruce_planks |
| 白桦木板 | planks | 2 | birch_planks |
| 丛林树木板 | planks | 3 | jungle_planks |
| 金合欢木板 | planks | 4 | acacia_planks |
| 深色橡木板 | planks | 5 | dark_oak_planks |
| 橙色玻璃 | stained_glass | 1 | orange_stained_glass |
| 品红色玻璃 | stained_glass | 2 | magenta_stained_glass |
| 淡蓝色玻璃 | stained_glass | 3 | light_blue_stained_glass |
| 黄色玻璃 | stained_glass | 4 | yellow_stained_glass |
| 黄绿色玻璃 | stained_glass | 5 | lime_stained_glass |
| 粉红色玻璃 | stained_glass | 6 | pink_stained_glass |
| 灰色玻璃 | stained_glass | 7 | gray_stained_glass |
| 淡灰色玻璃 | stained_glass | 8 | light_gray_stained_glass |
| 青色玻璃 | stained_glass | 9 | cyan_stained_glass |
| 紫色玻璃 | stained_glass | 10 | purple_stained_glass |
| 蓝色玻璃 | stained_glass | 11 | blue_stained_glass |
| 棕色玻璃 | stained_glass | 12 | brown_stained_glass |
| 绿色玻璃 | stained_glass | 13 | green_stained_glass |
| 红色玻璃 | stained_glass | 14 | red_stained_glass |
| 黑色玻璃 | stained_glass | 15 | black_stained_glass |
| 橙色玻璃板 | stained_glass_pane | 1 | orange_stained_glass_pane |
| 品红色玻璃板 | stained_glass_pane | 2 | magenta_stained_glass_pane |
| 淡蓝色玻璃板 | stained_glass_pane | 3 | light_blue_stained_glass_pane |
| 黄色玻璃板 | stained_glass_pane | 4 | yellow_stained_glass_pane |
| 黄绿色玻璃板 | stained_glass_pane | 5 | lime_stained_glass_pane |
| 粉红色玻璃板 | stained_glass_pane | 6 | pink_stained_glass_pane |
| 灰色玻璃板 | stained_glass_pane | 7 | gray_stained_glass_pane |
| 淡灰色玻璃板 | stained_glass_pane | 8 | light_gray_stained_glass_pane |
| 青色玻璃板 | stained_glass_pane | 9 | cyan_stained_glass_pane |
| 紫色玻璃板 | stained_glass_pane | 10 | purple_stained_glass_pane |
| 蓝色玻璃板 | stained_glass_pane | 11 | blue_stained_glass_pane |
| 棕色玻璃板 | stained_glass_pane | 12 | brown_stained_glass_pane |
| 绿色玻璃板 | stained_glass_pane | 13 | green_stained_glass_pane |
| 红色玻璃板 | stained_glass_pane | 14 | red_stained_glass_pane |
| 黑色玻璃板 | stained_glass_pane | 15 | black_stained_glass_pane |
| 橙色陶瓦 | stained_hardened_clay | 1 | orange_terracotta |
| 品红色陶瓦 | stained_hardened_clay | 2 | magenta_terracotta |
| 淡蓝色陶瓦 | stained_hardened_clay | 3 | light_blue_terracotta |
| 黄色陶瓦 | stained_hardened_clay | 4 | yellow_terracotta |
| 黄绿色陶瓦 | stained_hardened_clay | 5 | lime_terracotta |
| 粉红色陶瓦 | stained_hardened_clay | 6 | pink_terracotta |
| 灰色陶瓦 | stained_hardened_clay | 7 | gray_terracotta |
| 淡灰色陶瓦 | stained_hardened_clay | 8 | light_gray_terracotta |
| 青色陶瓦 | stained_hardened_clay | 9 | cyan_terracotta |
| 紫色陶瓦 | stained_hardened_clay | 10 | purple_terracotta |
| 蓝色陶瓦 | stained_hardened_clay | 11 | blue_terracotta |
| 棕色陶瓦 | stained_hardened_clay | 12 | brown_terracotta |
| 绿色陶瓦 | stained_hardened_clay | 13 | green_terracotta |
| 红色陶瓦 | stained_hardened_clay | 14 | red_terracotta |
| 黑色陶瓦 | stained_hardened_clay | 15 | black_terracotta |
| 橙色混凝土粉末 | concretepowder | 1 | orange_concrete_powder |
| 品红色混凝土粉末 | concretepowder | 2 | magenta_concrete_powder |
| 淡蓝色混凝土粉末 | concretepowder | 3 | light_blue_concrete_powder |
| 黄色混凝土粉末 | concretepowder | 4 | yellow_concrete_powder |
| 黄绿色混凝土粉末 | concretepowder | 5 | lime_concrete_powder |
| 粉红色混凝土粉末 | concretepowder | 6 | pink_concrete_powder |
| 灰色混凝土粉末 | concretepowder | 7 | gray_concrete_powder |
| 淡灰色混凝土粉末 | concretepowder | 8 | light_gray_concrete_powder |
| 青色混凝土粉末 | concretepowder | 9 | cyan_concrete_powder |
| 紫色混凝土粉末 | concretepowder | 10 | purple_concrete_powder |
| 蓝色混凝土粉末 | concretepowder | 11 | blue_concrete_powder |
| 棕色混凝土粉末 | concretepowder | 12 | brown_concrete_powder |
| 绿色混凝土粉末 | concretepowder | 13 | green_concrete_powder |
| 红色混凝土粉末 | concretepowder | 14 | red_concrete_powder |
| 黑色混凝土粉末 | concretepowder | 15 | black_concrete_powder |
为方便开发者转换数据下面提供了一个Python函数该函数根据旧命名和旧附加值返回新命名。将以下代码保存在一个py文件中导入后调用其中的get_new_name函数即可
```python
# -*- coding: utf-8 -*-
# 定义旧命名和新命名的映射关系
mapping = {
('stone', 1): 'granite',
('stone', 2): 'polished_granite',
('stone', 3): 'diorite',
('stone', 4): 'polished_diorite',
('stone', 5): 'andesite',
('stone', 6): 'polished_andesite',
('planks', 1): 'spruce_planks',
('planks', 2): 'birch_planks',
('planks', 3): 'jungle_planks',
('planks', 4): 'acacia_planks',
('planks', 5): 'dark_oak_planks',
('stained_glass', 1): 'orange_stained_glass',
('stained_glass', 2): 'magenta_stained_glass',
('stained_glass', 3): 'light_blue_stained_glass',
('stained_glass', 4): 'yellow_stained_glass',
('stained_glass', 5): 'lime_stained_glass',
('stained_glass', 6): 'pink_stained_glass',
('stained_glass', 7): 'gray_stained_glass',
('stained_glass', 8): 'light_gray_stained_glass',
('stained_glass', 9): 'cyan_stained_glass',
('stained_glass', 10): 'purple_stained_glass',
('stained_glass', 11): 'blue_stained_glass',
('stained_glass', 12): 'brown_stained_glass',
('stained_glass', 13): 'green_stained_glass',
('stained_glass', 14): 'red_stained_glass',
('stained_glass', 15): 'black_stained_glass',
('stained_glass_pane', 1): 'orange_stained_glass_pane',
('stained_glass_pane', 2): 'magenta_stained_glass_pane',
('stained_glass_pane', 3): 'light_blue_stained_glass_pane',
('stained_glass_pane', 4): 'yellow_stained_glass_pane',
('stained_glass_pane', 5): 'lime_stained_glass_pane',
('stained_glass_pane', 6): 'pink_stained_glass_pane',
('stained_glass_pane', 7): 'gray_stained_glass_pane',
('stained_glass_pane', 8): 'light_gray_stained_glass_pane',
('stained_glass_pane', 9): 'cyan_stained_glass_pane',
('stained_glass_pane', 10): 'purple_stained_glass_pane',
('stained_glass_pane', 11): 'blue_stained_glass_pane',
('stained_glass_pane', 12): 'brown_stained_glass_pane',
('stained_glass_pane', 13): 'green_stained_glass_pane',
('stained_glass_pane', 14): 'red_stained_glass_pane',
('stained_glass_pane', 15): 'black_stained_glass_pane',
('stained_hardened_clay', 1): 'orange_terracotta',
('stained_hardened_clay', 2): 'magenta_terracotta',
('stained_hardened_clay', 3): 'light_blue_terracotta',
('stained_hardened_clay', 4): 'yellow_terracotta',
('stained_hardened_clay', 5): 'lime_terracotta',
('stained_hardened_clay', 6): 'pink_terracotta',
('stained_hardened_clay', 7): 'gray_terracotta',
('stained_hardened_clay', 8): 'light_gray_terracotta',
('stained_hardened_clay', 9): 'cyan_terracotta',
('stained_hardened_clay', 10): 'purple_terracotta',
('stained_hardened_clay', 11): 'blue_terracotta',
('stained_hardened_clay', 12): 'brown_terracotta',
('stained_hardened_clay', 13): 'green_terracotta',
('stained_hardened_clay', 14): 'red_terracotta',
('stained_hardened_clay', 15): 'black_terracotta',
('concretepowder', 1): 'orange_concrete_powder',
('concretepowder', 2): 'magenta_concrete_powder',
('concretepowder', 3): 'light_blue_concrete_powder',
('concretepowder', 4): 'yellow_concrete_powder',
('concretepowder', 5): 'lime_concrete_powder',
('concretepowder', 6): 'pink_concrete_powder',
('concretepowder', 7): 'gray_concrete_powder',
('concretepowder', 8): 'light_gray_concrete_powder',
('concretepowder', 9): 'cyan_concrete_powder',
('concretepowder', 10): 'purple_concrete_powder',
('concretepowder', 11): 'blue_concrete_powder',
('concretepowder', 12): 'brown_concrete_powder',
('concretepowder', 13): 'green_concrete_powder',
('concretepowder', 14): 'red_concrete_powder',
('concretepowder', 15): 'black_concrete_powder'
}
def get_new_name(old_name, old_aux):
# 根据旧命名和旧附加值返回新命名
return mapping.get((old_name, old_aux), old_name)
```
这个函数 `get_new_name` 接受两个参数:`old_name` 和 `old_aux`,并返回对应的新命名。如果输入的旧命名和旧附加值在映射表中找不到,会返回 `old_name`。