本文章介绍的是用于战利品表等的单独的技术性JSON文件。关于英文同名的自定义世界生成机制,请见“自定义世界生成 § 方块处理谓词”。关于更多谓词,请见“谓词(消歧义)”。
此特性为Java版独有。
战利品表谓词(Predicate,游戏内为“战利品表条件”)是在数据包中多处出现的JSON结构。通过多种方式调用战利品表谓词,可检查世界中的各种情况。战利品表谓词会返回“通过”或者“失败”给调用者,调用者也将基于此结果进行不同的处理。
战利品表谓词文件是指数据包目录predicates
中单独存在的文件,其中可以包含一个或多个战利品表谓词。战利品表谓词也可以通过数据包中的其他方式定义。
本篇文章讲述了战利品表谓词的定义和调用,以及一个战利品表谓词的JSON结构。
战利品表谓词文件的定义[]
一个战利品表谓词文件使用JSON格式定义。它可以包含一个单独的战利品表谓词结构,或者一个带有多个战利品表谓词的数组。
在以下的数据包结构图中,以黑体着重标出了战利品表谓词文件的所属目录:
- (数据包名称)
- pack.mcmeta
- pack.png
- data
- (命名空间)
- advancements
- (进度).json
- functions
- (函数).mcfunction
- item_modifiers
- (物品修饰器).json
- loot_tables
- (战利品表).json
- predicates
- (战利品表谓词).json
- 更多文件夹…
- advancements
- (命名空间)
战利品表谓词文件的根元素可以是一个紧随在战利品表谓词结构后的 对象,也可以是一个包含多个战利品表谓词的 数组。
调用[]
战利品表谓词以及战利品表谓词文件可以从数据包中以几种不同的方式被调用:
通过命令[]
- 目标选择器:为了筛选实体,目标选择器参数
predicate=
将检查战利品表谓词文件,此时战利品表谓词文件便成为一个过滤器。对每个要过滤的实体,战利品表谓词文件都会被调用一次,每次调用都在实体所处位置。 /execute
:其子命令/execute if predicate
可以调用一个战利品表谓词文件。命令执行后,将返回一个执行结果或者判定是否继续执行后续子命令。在当前命令环境的执行位置,战利品表谓词文件会被调用一次。
通过其他战利品表谓词[]
minecraft:reference
条件类型的谓词会调用一个战利品表谓词文件,同时返回其结果给调用者。
在其他文件中的战利品表谓词[]
除了战利品表谓词文件外,战利品表谓词也在其他的数据包文件中存在,比如进度和战利品表。
JSON格式[]
本段落将对战利品表谓词的JSON格式进行介绍。
- :战利品表谓词的根元素,为由战利品表谓词组成的列表。当内部所有谓词通过时才被认为此列表谓词通过,效果等效于
all_of
。 - :根元素的另一种格式。
- condition:一个命名空间ID,表示要检查的条件。
- 该战利品表谓词的其他部分,指定的部分在下面列出。
以下为 condition的可能取值及其相关的额外内容:
- all_of - 评价一系列战利品表谓词,若它们都通过检查,则评价通过。可从任何上下文调用。
- terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象。
- :一个战利品表谓词,其结构也可如此递归排布。
- terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象。
- any_of - 评价一系列战利品表谓词,若其中任意一个通过检查,则评价通过。可从任何上下文调用。
- terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象。
- :一个战利品表谓词,其结构也可如此递归排布。
- terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象。
- entity_scores - 测试实体的记分板分数。需要战利品表上下文提供的特定实体进行检测,若未提供则总是不通过。
- entity:要检查的实体。从战利品表上下文指定实体。设置成
this
表示实体自身,即死亡的实体,或是破坏方块、打开容器或获取进度的玩家,killer
表示进行击杀的实体,direct_killer
表示进行直接击杀的实体,而killer_player
表示进行击杀的玩家。 - scores:待检查的分数。所有指定的分数通过测试时,条件通过。
- <记分项>:将记分项名称作为键名,分数刚好满足其值时,条件通过。
- <记分项>:将记分项名称作为键名,分数达到下面最大值和最小值的范围时,条件通过。
- min:最小分数。
- 数值提供器
- max:最大分数。
- 数值提供器
- min:最小分数。
- entity:要检查的实体。从战利品表上下文指定实体。设置成
- inverted - 把参数项中条件的判断结果取反。可从任何上下文调用。
- term:待取反的条件。可递归使用与这里相同的结构。
- killed_by_player - 检查是否存在一个由上战利品表上下文提供的
killer_player
(进行击杀的玩家)。需要战利品表上下文提供的killer_player
实体进行检测,若未提供则总是不通过。
- location_check - 检查当前位置。需要战利品表上下文提供的来源进行检测,若未提供则总是不通过。
- offsetX:(可选)检测位置与原位置在X轴上的偏移。
- offsetY:(可选)检测位置与原位置在Y轴上的偏移。
- offsetZ:(可选)检测位置与原位置在Z轴上的偏移。
- predicate:应用在检测位置上的战利品表谓词,具有和进度相同的结构。
- 位置信息谓词
- match_tool - 检查工具。需要战利品表上下文提供的工具进行检测,若未提供则总是不通过。
- predicate:应用在物品上的战利品表谓词,具有和进度相同的结构。
- 物品谓词
- predicate:应用在物品上的战利品表谓词,具有和进度相同的结构。
- random_chance - 生成一个取值范围为0.0–1.0之间的随机数,并检查其是否小于指定值。可从任何上下文调用。
- chance:0.0–1.0之间取得的成功率。
- reference - 调用另一个战利品表谓词文件并返回其结果。可从任何上下文调用。
- name:待调用谓词的命名空间ID。循环引用会导致解析失败。
- survives_explosion - 以
1/爆炸半径
的概率返回成功。需要战利品表上下文提供的爆炸半径进行检测,若未提供则总是不通过。
- time_check - 将当前的游戏时间(更确切地来说,为
24000 * 天数 + 当天时间
)和给定值进行比较。可从任何上下文调用。- value:要比较的时间值,以刻为单位。仅允许与单个时刻进行比较,不允许搭配数值比较器。
- value:“value”的另一种格式。
- max:最大值。
- 数值提供器
- min:最小值。
- 数值提供器
- max:最大值。
- period:若存在,则会先将游戏时间模除该值,再使用该结果和value比较。例如,若period被设置为24000,则要检查时间将等于当前世界的当天时间。
- value_check - 将一个数与另一个数或范围进行比较。可从任何上下文调用。
- value:待测试的数值。
- 数值提供器
- range:用来与value进行比较的数值范围。
- min:最小值。
- 数值提供器
- max:最大值。
- 数值提供器
- min:最小值。
- range:“range”的另一种格式。仅用于与单个数字进行比较,不允许搭配数值比较器。
- value:待测试的数值。
- weather_check - 检查当前游戏的天气状态。可从任何上下文调用。
- raining:如果为真,则仅在降雨或雷暴时通过检查。
- thundering:如果为真,则仅在雷暴时通过检查。
历史[]
Java版 | |||||
---|---|---|---|---|---|
1.15 | 19w38a | 向数据包中加入了战利品表谓词。 | |||
1.16 | 22w12a | 加入了fishing_hook 子谓词,用于检查浮漂的属性。 | |||
1.19.3 | 23w06a | 移除了伤害类型谓词中的is_projectile 、is_explosion 、bypasses_armor 、bypasses_invulnerability 、bypasses_magic 、is_fire 、is_magic 和is_lightning 字段。
| |||
加入了新的tags 数组。数组内的每一项都有以下字段:
| |||||
1.20 | 23w18a | 将alternative 条件重命名为any_of 。
| |||
加入了all_of 条件,只会在所有子条件通过的时候通过,其语法与any_of 相同。 | |||||
1.20.2 | 23w32a | 加入了列表定义,其效果等价于all_of 。 |
组件 |
| ||
---|---|---|---|
数据包 | |||
教程 |
语言