Files
netease-modsdk-wiki/docs/wiki/entities/entity-properties.md
2025-03-20 11:52:46 +08:00

236 lines
5.4 KiB
Markdown
Raw Permalink 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.

---
title: 实体属性
category: 基础
tags:
- 实验性
mentions:
- SirLich
- sermah
- MedicalJewel105
- Luthorius
- stirante
- TheItsNameless
---
# 实体属性
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
:::warning
本文档包含过时信息及实验性内容。如需最新稳定版信息,请查阅[微软官方文档](https://learn.microsoft.com/en-us/minecraft/creator/documents/introductiontoentityproperties)。
:::
本文档介绍在Minecraft基岩版1.16.230.52测试版中加入的新实体属性系统又称Actor Properties。实体属性的实现目的是在实体服务端行为包高效保存数据或存储数值无需使用组件或属性例如"minecraft:variant"),其运作原理类似方块属性。
## 实体属性定义
### 定义实体属性
实体属性定义示例:
::: code-group
```json [实体定义]
{
"minecraft:entity":{
"description":{
"identifier":"entity:properties_example",
"properties":{
"property:number_range_example":{
"values":{
"min":0,
"max":100
}
},
"property:number_enum_example":{
"values":[
1,
2
]
},
"property:string_enum_example":{
"values":[
"first",
"second",
"third"
]
},
"property:boolean_enum_example":{
"values":[
true,
false
]
}
}
}
}
}
```
:::
### 实体属性字段说明
#### `values`
:::warning
`values`字段为必填项,缺失此字段可能导致属性注册失败。
:::
`values`字段可接受枚举值数组或数值区间(注意当前版本中整数、浮点和布尔枚举最多支持两个值):
::: code-group
```json [数值范围模式]
"property:range_example": {
"values": {
"min": 0,
"max": 5
}
}
```
```json [枚举模式]
"property:enum_example":{
"values":[
1,
2
]
}
```
:::
#### `default`
可通过属性对象内的`default`字段设置属性默认值(默认使用枚举数组的第一个元素):
::: code-group
```json [默认值设置]
"property:default_value_example":{
"values":[
true,
false
],
"default":false
}
```
:::
如示例所示,当实体生成时该属性会默认为`false`而非`true`。
#### `client_sync`
通过设置`client_sync`字段为`true`可将属性同步到客户端资源包Resource Pack使用。默认值为`false`。
::: code-group
```json [客户端同步示例]
"property:client_sync_example": {
"values": {
"min": 0,
"max": 20
},
"client_sync": true
}
```
:::
### 操作与访问实体属性
可通过以下Molang查询访问实体属性
- `q.actor_property`
- `q.has_actor_property`
:::warning
这些Molang查询属于实验性功能
:::
可通过`set_actor_property`事件响应设置实体属性值:
::: code-group
```json [事件响应示例]
"events":{
"event:set_entity_property":{
"set_actor_property":{
"property:number_enum_example":2,
"property:string_enum_example":"'second'",
"property:boolean_enum_example":"!q.actor_property('property:boolean_enum_example')"
}
}
}
```
:::
## 实体别名系统
可通过定义实体别名aliases在`summon`指令中调用自定义标识符生成带预置属性的实体:
::: code-group
```json [别名定义]
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "entity:properties_example",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false,
"properties": {
"property:property_index": {
"client_sync": true,
"values": {
"min": 0,
"max": 2
},
"default": 0
}
},
"aliases": {
"entity:default_alias": {},
"entity:first_alias": {
"property:property_index": 1
},
"entity:second_alias": {
"property:property_index": 2
}
}
}
}
}
```
:::
现在通过`/summon entity:first_alias`指令可生成带有`property:property_index=1`属性的实体。
## 实体动态组件
实体动态组件Entity Permutations可根据属性条件在每个Tick动态应用组件集合。需在`minecraft:entity`对象内与`components`同级添加`permutations`数组:
::: code-group
```json [动态组件示例]
"permutations":[
{
"condition":"q.actor_property('property:string_enum_example') == 'first'",
"components":{
"minecraft:scale":{
"value":1.0
}
}
},
{
"condition":"q.actor_property('property:string_enum_example') == 'second'",
"components":{
"minecraft:scale":{
"value":2.0
}
}
},
{
"condition":"q.actor_property('property:string_enum_example') == 'third'",
"components":{
"minecraft:scale":{
"value":3.0
}
}
}
]
```
:::
当`property:string_enum_example`属性为"first"时实体会应用1倍缩放为"second"时应用2倍缩放为"third"时则应用3倍缩放。