方块服务端定义文件

Creative Commons License

方块服务端定义文件Block Server Definition File)用于定义各方块的服务端属性,位于行为包的blocks 通用netease_blocks 仅中国版 文件夹内,文件名可以自定义,其后缀名通常写为.json。注意,不同包中的同名的方块定义文件会出现相互覆盖的情况,请在命名时尽可能独一无二。

  • bp 行为包
    • blocks
      • <block_definition_file_name>.json
    • netease_blocks 会额外配合加载微缩方块相关定义 仅中国版
      • <block_definition_file_name>.json

版本化

方块服务端定义文件由格式版本控制,不同的格式版本控制不同的模式写法。

模式

object
{
    float "format_version" // 该文件的格式版本,会舍弃小数点后第二位及后面的所有位,并将整数位和小数点后第一位分别作为格式版本的主版本号和次版本号
    semver "format_version" // 该文件的格式版本,不支持`*`
    object "minecraft:block" // 方块模式标识符
    {
        block_description "description" // 方块描述
        block_permutations "permutations" // 方块置换
        block_components "components" // 方块组件
        block_events "events" // 方块组件
    }
}

semver

string <"*", /^(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*)(?:\-((?:(?:(?:(?:0[0-9]*[A-Za-z-])|[1-9A-Za-z-])[0-9A-Za-z-]*)|0)(?:\.(?:(?:(?:(?:0[0-9]*[A-Za-z-])|[1-9A-Za-z-])[0-9A-Za-z-]*)|0))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?)?)?/>
array [3]
{
    int "[0..0]"<0-*> // 主版本号
    int "[1..1]"<0-*> // 次版本号
    int "[2..2]"<0-*> // 修订版本号
}

block_description

本段落存在需要实验性玩法的内容。影响的内容:

1.19.40 - properties:假日创作者功能
0.0.0 - properties:假日创作者功能

object
{
    string "identifier" // 该方块类型的赋命名空间标识符
    object "menu_category" : opt // 该方块的创造分类和分组,默认为设置分类为`none`,分组不设置
    {
        enumerated_value "category"<"construction", "nature", "equipment", "items", "none", "custom"> : opt // 该方块的创造分类,默认为`none`,其中`custom`仅中国版支持
        string "group" : opt // 该方块的创造分分组,仅支持填写一个作用域化的创造分组,默认为没有分组
        bool "is_hidden_in_commands" : opt // 是否在命令中隐藏,默认为`false`
    }
    object "properties" : opt // 该方块上定义的方块状态组,又称方块属性,不再需要实验性玩法
    {
        array "<block_state_name>"<1,16> // 一个方块状态,数组内所有元素的数据类型应相同
        {
            int "<any array element>" // 整数方块状态枚举值
            string "<any array element>" // 字符串方块状态枚举值
            bool "<any array element>" // 布尔值方块状态枚举值
        }
        object "<block_state_name>" // 一个方块状态
        {
            array "values"<1,16> // 方块状态数组,数组内所有元素的数据类型应相同
            {
                int "<any array element>" // 整数方块状态枚举值
                string "<any array element>" // 字符串方块状态枚举值
                bool "<any array element>" // 布尔值方块状态枚举值
            }
            object "values" // 方块状态区间
            {
                int "min" : opt // 最小值,默认为`0`
                int "max" : opt // 最大值,默认为`0`
            }
        }
    }
    bool "register_to_creative_menu" : opt // 是否将该方块注册到创造模式物品栏,仅中国版支持
    enumerated_value "material_type"<"air", "dirt", "wood", "stone", "metal", "water", "lava", "leaves", "plant", "replaceable_plant", "sponge", "cloth", "bed", "fire", "sand", "decoration", "glass", "explosive", "ice", "packed_ice", "top_snow", "snow", "cactus", "clay", "vegetable", "portal", "cake", "web", "redstone_wire", "carpet", "buildable_glass", "slime", "piston", "allow", "deny", "nether_wart", "stone_decoration", "bubble", "egg", "barrier", "decoration_flammable", "surface_type_total"> : opt // 该方块的材料类型,仅中国版支持
    enumerated_value "base_block"<"mob_spawner", "portal", "custom_crop_block", "custom_heavy_block", "liquid", "flowing_liquid"> : opt // 该方块的基方块,仅中国版支持
    string "category" : opt // 该方块的中国版创造分类,支持填入中国版自定义的分类名,仅中国版支持
    string "micro_size" : opt // 该微缩方块的微缩尺寸,格式为`<x> <y> <z>`,默认为`1 1 1`,仅中国版支持
}
object
{
    string "identifier" // 该方块类型的赋命名空间标识符
    object "menu_category" : opt // 该方块的创造分类和分组,默认为设置分类为`none`,分组不设置
    {
        enumerated_value "category"<"construction", "nature", "equipment", "items", "none", "custom"> : opt // 该方块的创造分类,默认为`none`,其中`custom`仅中国版支持
        string "group" : opt // 该方块的创造分分组,仅支持填写一个作用域化的创造分组,默认为没有分组
        bool "is_hidden_in_commands" : opt // 是否在命令中隐藏,默认为`false`
    }
    object "properties" : opt // 该方块上定义的方块状态组,又称方块属性。除非开启“假日创作者功能”实验性玩法,否则该字段内容虽然会被正常解析,但不会应用
    {
        array "<block_state_name>"<1,16> // 一个方块状态,数组内所有元素的数据类型应相同
        {
            int "<any array element>" // 整数方块状态枚举值
            string "<any array element>" // 字符串方块状态枚举值
            bool "<any array element>" // 布尔值方块状态枚举值
        }
        object "<block_state_name>" // 一个方块状态
        {
            array "values"<1,16> // 方块状态数组,数组内所有元素的数据类型应相同
            {
                int "<any array element>" // 整数方块状态枚举值
                string "<any array element>" // 字符串方块状态枚举值
                bool "<any array element>" // 布尔值方块状态枚举值
            }
            object "values" // 方块状态区间
            {
                int "min" : opt // 最小值,默认为`0`
                int "max" : opt // 最大值,默认为`0`
            }
        }
    }
    bool "register_to_creative_menu" : opt // 是否将该方块注册到创造模式物品栏,仅中国版支持
    enumerated_value "material_type"<"air", "dirt", "wood", "stone", "metal", "water", "lava", "leaves", "plant", "replaceable_plant", "sponge", "cloth", "bed", "fire", "sand", "decoration", "glass", "explosive", "ice", "packed_ice", "top_snow", "snow", "cactus", "clay", "vegetable", "portal", "cake", "web", "redstone_wire", "carpet", "buildable_glass", "slime", "piston", "allow", "deny", "nether_wart", "stone_decoration", "bubble", "egg", "barrier", "decoration_flammable", "surface_type_total"> : opt // 该方块的材料类型,仅中国版支持
    enumerated_value "base_block"<"mob_spawner", "portal", "custom_crop_block", "custom_heavy_block", "liquid", "flowing_liquid"> : opt // 该方块的基方块,仅中国版支持
    string "category" : opt // 该方块的中国版创造分类,支持填入中国版自定义的分类名,仅中国版支持
    string "micro_size" : opt // 该微缩方块的微缩尺寸,格式为`<x> <y> <z>`,默认为`1 1 1`,仅中国版支持
}
object
{
    string "identifier" // 该方块类型的赋命名空间标识符
    object "menu_category" : opt // 该方块的创造分类和分组,默认为设置分类为`none`,分组不设置
    {
        enumerated_value "category"<"all", "construction", "nature", "equipment", "items", "commands", "none", "custom"> : opt // 该方块的创造分类,默认为`none`,其中`custom`仅中国版支持
        string "group" : opt // 该方块的创造分分组,仅支持填写一个作用域化的创造分组,默认为没有分组
        bool "is_hidden_in_commands" : opt // 是否在命令中隐藏,默认为`false`
    }
    object "properties" : opt // 该方块上定义的方块状态组,又称方块属性。除非开启“假日创作者功能”实验性玩法,否则该字段内容虽然会被正常解析,但不会应用
    {
        array "<block_state_name>"<1,16> // 一个方块状态,数组内所有元素的数据类型应相同
        {
            int "<any array element>" // 整数方块状态枚举值
            string "<any array element>" // 字符串方块状态枚举值
            bool "<any array element>" // 布尔值方块状态枚举值
        }
        object "<block_state_name>" // 一个方块状态
        {
            array "values"<1,16> // 方块状态数组,数组内所有元素的数据类型应相同
            {
                int "<any array element>" // 整数方块状态枚举值
                string "<any array element>" // 字符串方块状态枚举值
                bool "<any array element>" // 布尔值方块状态枚举值
            }
            object "values" // 方块状态区间
            {
                int "min" : opt // 最小值,默认为`0`
                int "max" : opt // 最大值,默认为`0`
            }
        }
    }
    bool "register_to_creative_menu" : opt // 是否将该方块注册到创造模式物品栏,仅中国版支持
    enumerated_value "material_type"<"air", "dirt", "wood", "stone", "metal", "water", "lava", "leaves", "plant", "replaceable_plant", "sponge", "cloth", "bed", "fire", "sand", "decoration", "glass", "explosive", "ice", "packed_ice", "top_snow", "snow", "cactus", "clay", "vegetable", "portal", "cake", "web", "redstone_wire", "carpet", "buildable_glass", "slime", "piston", "allow", "deny", "nether_wart", "stone_decoration", "bubble", "egg", "barrier", "decoration_flammable", "surface_type_total"> : opt // 该方块的材料类型,仅中国版支持
    enumerated_value "base_block"<"mob_spawner", "portal", "custom_crop_block", "custom_heavy_block", "liquid", "flowing_liquid"> : opt // 该方块的基方块,仅中国版支持
    string "category" : opt // 该方块的中国版创造分类,支持填入中国版自定义的分类名,仅中国版支持
    string "micro_size" : opt // 该微缩方块的微缩尺寸,格式为`<x> <y> <z>`,默认为`1 1 1`,仅中国版支持
}

0.0.0-->1.19.40:升级

  • menu_category字段进行如下升级:
    • 如果category不存在,加入is_hidden_in_commands,值为false
    • 如果category为空或解析失败,加入is_hidden_in_commands,值为true,并在加入is_hidden_in_commands后将category的值重置为none
    • 如果categoryallnone,加入is_hidden_in_commands值为true,其余情况值为false
    • 如果categoryallcommandsnone,在加入is_hidden_in_commands后将category的值重置为none

1.19.40-/->1.19.70:无升级

  • properties字段所定义的内容发挥功能不再需要实验性玩法。

block_permutations

本段落存在需要实验性玩法的内容。影响的内容:

1.19.60 - 根字段:假日创作者功能
0.0.0 - 根字段:假日创作者功能

array // 无需实验性玩法
{
    object "<any array element>" // 一个方块置换
    {
        molang "condition" // 该方块置换的条件,仅支持字符串形式的Molang表达式,其中目前在查询函数中仅支持使用`query.block_property`查询
        block_components "components" // 当条件成立时该方块额外具有的组件
    }
}
array // 若未开启“假日创作者功能”实验性玩法,该字段内所有内容都不会加载,且会触发内容日志错误
{
    object "<any array element>" // 一个方块置换
    {
        molang "condition" // 该方块置换的条件,其中目前在查询函数中仅支持使用`query.block_property`查询
        block_components "components" // 当条件成立时该方块额外具有的组件
    }
}
array // 除非开启“假日创作者功能”实验性玩法,否则该字段内容虽然会被正常解析,但不会应用
{
    object "<any array element>" // 一个方块置换
    {
        molang "condition" // 该方块置换的条件,其中目前在查询函数中仅支持使用`query.block_property`查询
        block_components "components" // 当条件成立时该方块额外具有的组件
    }
}

0.0.0-/->1.19.60:无升级

  • 只有当开启“假日创作者功能”实验性玩法时整个字段才会被加载,否则会报内容日志通知。

1.19.60-/->1.19.70:无升级

  • 整个字段被加载不再需要实验性玩法。
  • 整个字段所定义的内容发挥功能不再需要实验性玩法。
  • <any array element>/condition将只支持字符串类型的Molang表达式。

block_components

本段落存在需要实验性玩法的内容。影响的内容:

0.0.0 - <any block component>中的一部分:假日创作者功能

object
{
    some_component "<any block component>" : opt // 一个方块组件
}

关于各方块组件的模式详见组件段落。

block_events

object
{
    definition_event "<event name>" : opt // 一个方块事件,键名应填写一个赋命名空间标识符
}

definition_event

本段落存在需要实验性玩法的内容。影响的内容:

0.0.0 - <any event responce>:假日创作者功能

object
{
    float "weight" : opt // 该事件在事件合集的权重
    molang "condition" : opt // 该事件触发需满足的条件
    array "randomize" // 该事件作为一个枝节点定义一个随机事件合集,按照权重随机触发其中的一个事件
    {
        definition_event "<any array element>"
    }
    array "sequence" // 该事件作为一个枝节点定义一个序列事件合集,按顺序触发所有事件
    {
        definition_event "<any array element>"
    }
    definition_trigger "trigger" : opt // 触发另一个事件
    event_response "<any event responce>" : opt // 一个事件响应,仅当开启“假日创作者功能”实验性玩法时会正常加载并应用
}

关于各方块事件响应的模式详见事件响应段落。

molang

float // 浮点数形式,`0.0`为假,`1.0`为真
string // 字符串形式,Molang表达式的主要形式,真假由返回值决定
bool // 布尔值形式,`false`为假,`true`为真

枚举

影响字段枚举类型描述
description/menu_category/category
minecraft:creative_category/category
硬枚举创造分类
description/menu_category/group
minecraft:creative_category/group
软枚举创造分组
description/material_type硬枚举方块材料类型 仅中国版
description/base_block硬枚举自定义方块类型 仅中国版

组件

minecraft:destructible_by_mining

曾用名:

minecraft:destroy_time

bool "minecraft:destructible_by_mining" : opt // 设置方块是否可以被挖掘,默认为`true`
object "minecraft:destructible_by_mining" : opt // 设置方块的摧毁时间
{
    float "seconds_to_destroy"<0.0-*> : opt // 基摧毁时间,即硬度值,实际摧毁时间将根据基摧毁时间进行计算得到,默认为`0.0`
}
float "minecraft:destroy_time"<0.0-*> : opt // 设置方块的基摧毁时间,即硬度值,实际摧毁时间将根据基摧毁时间进行计算得到,默认为`0.0`
object "minecraft:destroy_time" : opt // 设置方块的摧毁时间
{
    float "destroy_time"<0.0-*> // 基摧毁时间,即硬度值,实际摧毁时间将根据基摧毁时间进行计算得到
}

0.0.0-->1.19.10:升级

  • destroy_time字段的值赋给整个minecraft:destroy_time字段。
    • 如果destroy_time不存在,将移除该组件,并报内容日志错误。

1.19.10-->1.19.20:升级

  • minecraft:destroy_time字段的值赋给seconds_to_destroy字段。
  • minecraft:destroy_time字段设置为对象并将seconds_to_destroy字段置于其内。
  • minecraft:destroy_time字段重命名为minecraft:destructible_by_mining

相关链接

minecraft:destructible_by_explosion

曾用名:

minecraft:explosion_resistance

bool "minecraft:destructible_by_explosion" : opt // 设置方块是否可以被爆炸破坏,默认为`true`
object "minecraft:destructible_by_explosion" : opt // 设置方块的爆炸抗性
{
    float "explosion_resistance"<0.0-*> : opt // 基爆照抗性,默认为`0.0`
}
float "minecraft:explosion_resistance"<0.0-*> : opt // 设置方块的基爆照抗性,默认为`0.0`
object "minecraft:explosion_resistance" : opt // 设置方块的爆炸抗性
{
    float "resistance"<0.0-*> // 基爆照抗性
}

0.0.0-->1.19.10:升级

  • resistance字段的值赋给整个minecraft:explosion_resistance字段。
    • 如果resistance不存在,将移除该组件,并报内容日志错误。

1.19.10-->1.19.20:升级

  • minecraft:explosion_resistance字段的值赋给explosion_resistance字段。
  • minecraft:explosion_resistance字段设置为对象并将explosion_resistance字段置于其内。
  • minecraft:destroy_time字段重命名为minecraft:destructible_by_explosion

相关链接

minecraft:flammable

bool "minecraft:flammable" : opt // 设置方块是否可以自然地开始燃烧
object "minecraft:flammable" : opt // 设置方块的引燃和烧毁修饰符
{
    int "catch_chance_modifier"<0-*> : opt // 方块的引燃几率,默认为`5`
    int "destroy_chance_modifier"<0-*> : opt // 方块的烧毁几率,默认为`20`
}
object "minecraft:flammable" : opt // 设置方块的引燃和烧毁修饰符
{
    int "flame_odds"<0-*> // 方块的引燃几率
    int "burn_odds"<0-*> // 方块的烧毁几率
}

0.0.0-->1.19.10:升级

  • flame_odds字段重命名为catch_chance_modifier
    • 如果flame_odds不存在,将移除该组件,并报内容日志错误。
  • burn_odds字段重命名为destroy_chance_modifier
    • 如果burn_odds不存在,将移除该组件,并报内容日志错误。

相关链接

minecraft:friction

float "minecraft:friction"<0.0-0.9> : opt // 设置方块的地面摩擦,默认为`0.4`
float "minecraft:friction"<0.1-1.0> : opt // 设置实体在方块上运动时的摩擦因子,默认为`0.6`
object "minecraft:friction" : opt // 设置实体在方块上运动时的摩擦因子
{
    int "friction"<0.1-1.0> // 摩擦因子
}

0.0.0-->1.19.10:升级

  • friction字段的值赋给整个minecraft:friction字段。
    • 如果friction不存在,将移除该组件,并报内容日志错误。

1.19.10-->1.19.20:升级

  • 1.0减去minecraft:friction字段的值再赋给minecraft:friction字段。

相关链接

minecraft:light_dampening

曾用名:

minecraft:block_light_absorption
minecraft:block_light_filter

int "minecraft:light_dampening"<0-15> : opt // 设置方块的光照隔除度,默认为`15`
int "minecraft:block_light_filter"<0-15> : opt // 设置方块的光照隔除度,默认为`15`
object "minecraft:block_light_filter" : opt // 设置方块的光照隔除度
{
    int "filter_level"<0-15> // 光照隔除度
}
object "minecraft:block_light_absorption" : opt // 设置方块的光照隔除度
{
    float "filter_level"<0.0-16.0> // 光照隔除度
}

0.0.0-->1.18.0:升级

  • filter_level约束在0-15范围之内并设置为整数。
  • minecraft:block_light_absorption字段重命名为minecraft:block_light_filter

1.18.0-->1.19.10:升级

  • filter_level字段的值赋给整个minecraft:block_light_filter字段。
    • 如果filter_level不存在,将移除该组件,并报内容日志错误。

1.19.10-->1.19.40:升级

  • minecraft:block_light_filter字段重命名为minecraft:light_dampening

相关链接

minecraft:light_emission

曾用名:

minecraft:block_light_emission

int "minecraft:light_emission"<0-15> : opt // 设置方块的光照发射度,默认为`0`
object "minecraft:block_light_emission" : opt // 设置方块的光照发射度
{
    float "emission"<0.0-1.0> // 光照发射度
}

0.0.0-->1.19.10:升级

  • emission字段的值赋给整个minecraft:block_light_emission字段。
    • 如果emission不存在,将移除该组件,并报内容日志错误。
  • minecraft:block_light_emission重映射到0-15范围之内并设置为整数。
  • minecraft:block_light_emission字段重命名为minecraft:light_emission

相关链接

minecraft:map_color

string "minecraft:map_color"</^#[a-fA-F0-9]{6}$/> : opt // 以字符串格式设置方块的地图颜色
array "minecraft:map_color"[3] : opt // 以数组格式设置方块的地图颜色
{
    int "<any array element>"<0-255>
}
object "minecraft:map_color" : opt // 设置方块的地图颜色
{
    string "map_color"</^#[a-fA-F0-9]{6}$/> // 字符串颜色
    array "map_color"[3] // 数组颜色
    {
        int "<any array element>"<0-255>
    }
}

0.0.0-->1.19.10:升级

  • map_color字段的值赋给整个minecraft:map_color字段。
    • 如果map_color不存在,将移除该组件,并报内容日志错误。

相关链接

minecraft:loot

string "minecraft:loot" : opt // 设置战利品表
object "minecraft:loot" : opt // 设置战利品表
{
    string "loot_table" // 战利品表相对路径
}

0.0.0-->1.19.10:升级

  • loot_table字段的值赋给整个minecraft:loot字段。
    • 如果loot_table不存在,将移除该组件,并报内容日志错误。

相关链接

minecraft:breathability

本段落存在需要实验性玩法的内容。影响的内容:

1.19.10 - 根字段:假日创作者功能
0.0.0 - 根字段:假日创作者功能

该组件的解析因向前兼容性而依旧存在,但已实质性失效。

string "minecraft:breathability"<"solid", "air"> : opt // 设置可呼吸性,默认为`solid`
object "minecraft:breathability" : opt // 设置可呼吸性
{
    string "breathing_type"<"solid", "air"> // 呼吸类型,默认为`solid`
}

0.0.0-->1.19.10:升级

  • breathing_type字段的值赋给整个minecraft:breathability字段。
    • 如果breathing_type不存在,将移除该组件,并报内容日志错误。

相关链接

minecraft:creative_category

本段落存在需要实验性玩法的内容。影响的内容:

1.19.20 - 根字段:假日创作者功能
0.0.0 - 根字段:假日创作者功能

该组件已弃用,请使用方块描述中的menu_category实现相同功能。

object "minecraft:creative_category" : opt // 设置创造分类和分组,空组件
{
}
object "minecraft:creative_category" : opt // 设置创造分类和分组
{
    string "group" // 创造分组
    enumerated_value "category"<"all","construction","nature","equipment","items","commands", "none", "custom"> // 创造分类,默认为`none`,其中`custom`仅中国版支持
}

0.0.0-->1.19.20:升级

  • groupcategory的值赋给方块描述组件下的menu_category下的groupcategory
  • 删除整个对象。

相关链接

minecraft:unit_cube

本段落存在需要实验性玩法的内容。影响的内容:

0.0.0 - 根字段:假日创作者功能

object "minecraft:unit_cube" : opt // 设置是否曲面细分时使用一个单位立方体,空对象
{
}

相关链接

minecraft:queued_ticking

曾用名:

minecraft:ticking

本段落存在需要实验性玩法的内容。影响的内容:

1.19.10 - 根字段:假日创作者功能
0.0.0 - 根字段:假日创作者功能

object "minecraft:queued_ticking" : opt // 设置队列滴答
{
    trigger "on_tick" // 滴答触发器
    array "interval_range"[2] // 滴答区间的长度取值范围
    {
        int "<any array element>"<0-*> // 以秒为单位
    }
    bool "looping" : opt // 滴答是否循环,默认为`true`
}
object "minecraft:ticking" : opt // 设置队列滴答
{
    trigger "on_tick" // 滴答触发器
    array "range"[2] // 滴答区间的长度取值范围
    {
        float "<any array element>"<0.0-*> // 以刻为单位
    }
    bool "looping" : opt // 滴答是否循环,默认为`true`
}

0.0.0-->1.19.10:升级

  • 如果on_tick不存在,将移除该组件,并报内容日志错误。
  • 如果range不存在,将移除该组件,并报内容日志错误。
  • range数组内元素的值分别乘以20.0,钳制为大于或等于0.0,并取整。
  • range字段重命名为interval_range
  • minecraft:ticking字段重命名为minecraft:queued_ticking

trigger

File not found

相关链接

minecraft:random_ticking

minecraft:material_instances

minecraft:geometry

minecraft:collision_box

minecraft:crafting_table

minecraft:selection_box

minecraft:display_name

minecraft:placement_filter

minecraft:transformation

minecraft:part_visibility

minecraft:unwalkable

minecraft:on_player_destroyed

minecraft:on_fall_on

minecraft:on_interact

minecraft:on_placed

minecraft:on_player_placing

minecraft:on_step_off

minecraft:on_step_on

netease:block_legacy

netease:tier

netease:aabb

netease:face_directional

netease:mob_spawner

netease:solid

netease:pathable

netease:portal

netease:connection

netease:block_entity

netease:random_tick

netease:redstone_property

netease:transform

netease:render_layer

netease:neighborchanged_sendto_script

netease:redstone

netease:listen_block_remove

netease:may_place_on

netease:fire_resistant

netease:liquid

netease:fall

netease:block_properties

netease:water_destory

netease:water_only

netease:water_source

netease:water_flow_source

netease:snow_recover_able

netease:can_built_over

netease:on_stand_on

netease:on_before_fall_on

netease:on_after_fall_on

netease:on_entity_inside

netease:on_step_on

netease:on_step_off

事件响应

上次更新:
贡献者: MiemieMethod