Add-On实体Entity Properties的用法
本帖最后由 Ivon852 于 2021-8-11 03:27 编辑这篇文章参考自Bedrock Dev Wiki。
Mineraft基岩版1.16.230.52引入了"Entity properties"这个新功能,可以为Add-On的实体添加属性(property)。
这么一来,实体就能够储存变数,可以是数字、字串、布林值。
比起过去用行为包的各种组件伪装成「变数」,再用各种query侦测更方便的多;同样的,方块也有属性可以使用。
新建属性
属性要在行为包的实体档案的description物件进行注册,命名空间一律以property:开头。
在属性中枚举出一系列的数值,然后再进行操作。
{ "format_version": "1.16.0", "minecraft:entity": { "description": { "identifier": "kanmusu:boku", "is_spawnable": true, "is_summonable": true, "is_experimental": false, "properties": { //數字範圍的屬性 "property:number_range": { "values": { "min": 0, "max": 100 }, "client_sync": true }, //第二種數字範圍的屬性 "property:number_enum": { "values": [ 1, 2 }, //字串陣列的屬性 "property:string_enum": { "values": [ "在水中", "在陸地" }, //布林值的屬性 "property:boolean_enum": { "values": [ true, false } } }, "components": {}, "events": {} }}
针对每个新增的属性,还可以设定二个值:
default代表的是预设值,如果不填写,则会使用阵列第一个值。
"property:number_range": { "values": { "min": 0, "max": 100 }, "default": 0}
client_sync则是让资源包也能读到这个属性。
"property:number_range": { "values": { "min": 0, "max": 100 }, "client_sync": true}
存取、修改屬性
在行为包的event使用函数: "set_actor_property" 可修改属性的值。
"event:set_entity_property": { "set_actor_property": { "property:number_enum": 2, "property:string_enum": "'在水中'", "property:boolean_enum": "!query.actor_property('property:boolean_enum')" }}
別名 (Alias) 的用法可以为实体定义别名,用/summon就能够召唤预先设定好属性数值的实体。也可以单纯只是别名,而不赋值,例如下面的default_alias。目前新增别名,背包会出现多余的生怪蛋。
{ "format_version": "1.16.0", "minecraft:entity": { "description": { "identifier": "kanmusu:boku", "is_spawnable": true, "is_summonable": true, "is_experimental": false, "properties": { //字串陣列的屬性 "property:scale": { "values": [ "變大", "變小" } }, "aliases": { "entity:default_alias": {}, "entity:first_alias": { "property:scale": "變大" }, "entity:second_alias": { "property:scale": "變小" } } }, "components": {}, "events": {} }}
排序 (Permutation) 的用法permutation是位于minecraft:entity物件内,与components同层级。
{ "format_version": "1.16.0", "minecraft:entity": { "description": {}, "permutations": [ { //條件 "condition": "query.actor_property('property:scale') == '變大'", "components": { //內含的組件 "minecraft:scale": { "value": 10 } } }, { //條件 "condition": "query.actor_property('property:scale') == '變小'", "components": { //內含的組件 "minecraft:scale": { "value": 0.1 } } } ], "components": {}, "events": {} }}
实际应用例子整篇讲下来,让我们来看看实际例子。我制作的boku生物程式码如下:{ "format_version": "1.16.0", "minecraft:entity": {
"description": { "identifier": "kanmusu:boku", "is_spawnable": true, "is_summonable": true, "is_experimental": false, "properties": { //字串陣列的屬性 "property:scale": { "values": [ "正常", "變大", "變小" } },"aliases": { //別名1 "boku:big": { "property:scale": "變大" }, //別名2 "boku:small": { "property:scale": "變小" } } },"permutations": [ { //變大的條件 "condition": "query.actor_property('property:scale') == '變大'", "components": { //內含的組件 "minecraft:scale": { "value": 10 } } }, { //變小的條件 "condition": "query.actor_property('property:scale') == '變小'", "components": { //內含的組件 "minecraft:scale": { "value": 0.1 } } } ], "components": { //預設大小 "minecraft:scale": { "value": 1.0 } //...(其餘組件在此省略) },"events": { "boku:enlarge": { "set_actor_property": { "property:scale": "'變大'" } }, "boku:shrink": { "set_actor_property": { "property:scale": "'變小'" } } } }}
因为属性预设的值是"正常",permutation也没有写条件,所以正常生成是普通大小。
若使用/summon附加spawn event的指令,在召唤时执行赋值事件,这样会变大:/summon kanmusu:boku ~ ~ ~ boku:enlarge
而用这条召唤,他会变小:
/summon kanmusu:boku ~ ~ ~ boku:shrink
permutation侦测到值的变化,就会自动执行设定好的组件,给予boku指定的大小。当然我有定义别名,也可以直接用这二条: /summon boku:second_alias别名自动赋值,再交由permutation进行缩放。
页: [1]