事件

*请区分脚本引擎中的“事件”

事件主要被用在实体、方块、物品的行为文件中,本文档主要是讲实体事件相关。
事件可用于添加或删除组件组

制作

事件Event处于行为文件的events对象内,在该对象里戳写事件

格式

  • (对象)事件名字(可使用中文,可不带命名空间,包含以下↓)
    • add:(对象)添加组件组
      • component_groups:(数组)
        • (字符串)组件组的名称
    • remove:(对象)删除组件组。
      • component_groups:(数组)
        • (字符串)组件组的名称
    • randomize:(数组)若干套操作。将会从定义的多套操作中随机执行一套操作。
      • (对象)一套操作
        • weight:(整数)执行这套操作的占比几率(总几率为该数组下所有操作的占比几率总和)。
        • 剩下的格式和事件 JSON 格式一样
    • sequence:(数组)若干套操作。这些操作将会被按顺序依次执行。
      • (对象)一套操作
        • filters:(对象,格式同滤器)一个滤器。只有该滤器测试通过后,才会执行数组内的其它操作
        • 剩下的格式和事件 JSON 格式一样

普通示例

{
    “events”: {
        “普通示例事件”: {//事件名字
            “add”: {//添加组件组
                "component_groups": [
                    "组件组1"
                ]
            },
            "remove": {//删除组件组
                "component_groups": [
                    "组件组2",
                    "组件组3"
                ]
            },
            "randomize": [
                {
                    “weight”: 20,//概率20
                    "add": {
                        "componen_groups": [
                            "组件组1"
                        ]
                    }
                },
                {
                    “weight”: 55,//概率55
                    "add": {
                        "componen_groups": [
                            "组件组1"
                        ]
                    }
                },
                {
                    “weight”: 25,//概率25
                    "add": {
                        "componen_groups": [
                            "组件组1"
                        ]
                    }
                }
            ],//该数组总几率为100,最有可能执行的是第二个操作 概率55%
            "sequence": [
                "filters": {//滤器
                    
                },//通过后执行↓
                "remove": {
                    "component_groups": [
                        "组件组3",
                        "组件组4",
                        "组件组5"
                    ]
                }
            ]
        }:
    }
}

对于add、remove、randomize、sequence这四者之间可以相互进行无限的套娃,以达到各种复杂的逻辑。

套娃示例
这或许是原版中最复杂的了....
entities/villager_v2.json

{
    "minecraft:entity_transformed": {
        "sequence": [
            //省略 2 套操作
            {
                "filters": { "test": "is_family", "subject": "other", "operator": "==", "value": "zombie_villager" }, 
                "sequence" : [
                    {
                        "filters": { "test": "is_skin_id", "subject": "other", "value": 0 },
                        "add": { "component_groups": [ "villager_skin_0" ] }
                    },
                    {
                        "filters": { "test": "is_skin_id", "subject": "other", "value": 1 },
                        "add": { "component_groups": [ "villager_skin_1" ] }
                    },
                    //省略 13 套操作
                ]
            },
            {
                "filters": { "test": "is_family", "subject": "other", "operator": "==", "value": "villager" }, 
                "sequence" : [
                    {
                        "randomize": [
                            {
                                "weight": 1,
                                "add": { "component_groups": [ "villager_skin_0" ] }
                            },
                            {
                                "weight": 1,
                                "add": { "component_groups": [ "villager_skin_1" ] }
                            },
                            //省略 4 套操作
                        ]
                    },
                    //省略 6 套操作
                ]
            }
        ]
    }
}

内置事件名

Minecraft 为我们提供了几个内置的事件名,这些名称的事件不需要我们手动调用,它们会在某些条件下自动触发。

*请前往>API文档>其它文档>事件 查看