English version -> [Intelligent component processing system in recipe]
自24w10a时起,配方的输出(result)受到更改,采取物品堆叠组件格式,支持了components的输入。而配方的输入则依旧采取着以往的模式,指定某个id,指定某个id列表或者某个物品标签。这样在处理数据组件上显得十分死板,缺乏灵活性。
因此我认为在新版本应当对其做出一些调整,以在处理数据组件上更加灵活且智能化。我将会从“带组件输入”,“组件处理系统”,“回调系统”三个方面进行阐述。
【1】带组件输入
在配方的输入中采取和"result"相同的结构。
例如在有序配方中,映射表中的每一个映射应该为数组,数组的每一个元素都是物品堆叠组件格式的一个对象,采取与输出相似的如下形式:
{
"key":{
"X":[
{
"id" : <string : id>
"components" : <object : components>
},
......
]
}
}
这样,只要包含这些数据值的物品就可以被放入合成表。
【2】组件处理系统
对于输出,除了指定输出的components以外,可以加入一个可选的数据值处理的功能。输出的物品既可以指定数据组件,也可以经由输入的物品的组件修改而来。如此一来,配方的组件处理将会变得更加智能化与可控化。
示例如下:
"result":{
"id" : <string : id>
"components" : <object : components>
},
"component_process":[
{ //一项修改信息
"type":"replace" / "add" / "cover", // 替换/追加/覆盖
"origin":"input" / "definition",
"value": <object> / <string> / <integer> //由origin的值确定
},
...
]
1、若origin的值为definition,则value可以视作result中的components,是玩家定义的组件。
"origin":"definition",
"value": : <object : components>
2、若origin的值为input,则value的值依据配方类型决定:
- 若类型为crafting_shaped,则value的值类型为string,表示一个合成材料映射。
- 若类型为crafting_shapeless,则value的值为integer,表示合成材料的索引。
- 若类型为blasting、campfire_cooking等合成材料唯一的时候,不需要value的值。
【3】回调系统
在配方中可以加入一个可选的回调函数指定,此回调函数在玩家合成时触发,执行玩家为合成物品的玩家,地点为玩家所在地点,朝向为玩家的朝向。
"on_crafting":{
"function" : <string : functionName>
"additional_data" : <object : custonData>
}
如上,function指函数名称,表示调用该函数。additional_data是执行函数附带的额外数据值,用以兼容1.21.5中的宏函数。
Please sign in to leave a comment.
1 Comments