Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement

Disambig gray  本文章介绍的是用于战利品表等的单独的技术性JSON文件。关于英文同名的自定义世界生成机制,请见“自定义世界生成 § 方块处理谓词”。关于更多谓词,请见“谓词(消歧义)”。
Information icon
此特性为Java版独有。

战利品表谓词(Predicate,游戏内为“战利品表条件”)是在数据包中多处出现的JSON结构。通过多种方式调用战利品表谓词,可检查世界中的各种情况。战利品表谓词会返回“通过”或者“失败”给调用者,调用者也将基于此结果进行不同的处理。

战利品表谓词文件是指数据包目录predicates中单独存在的文件,其中可以包含一个或多个战利品表谓词。战利品表谓词也可以通过数据包中的其他方式定义。

本篇文章讲述了战利品表谓词的定义和调用,以及一个战利品表谓词的JSON结构。

战利品表谓词文件的定义[]

一个战利品表谓词文件使用JSON格式定义。它可以包含一个单独的战利品表谓词结构,或者一个带有多个战利品表谓词的数组。

在以下的数据包结构图中,以黑体着重标出了战利品表谓词文件的所属目录:

战利品表谓词文件的根元素可以是一个紧随在战利品表谓词结构后的 对象,也可以是一个包含多个战利品表谓词的 数组

调用[]

战利品表谓词以及战利品表谓词文件可以从数据包中以几种不同的方式被调用:

通过命令[]

要使用命令或者函数调用战利品表谓词文件,有两种方法:

  • 目标选择器:为了筛选实体,目标选择器参数predicate=将检查战利品表谓词文件,此时战利品表谓词文件便成为一个过滤器。对每个要过滤的实体,战利品表谓词文件都会被调用一次,每次调用都在实体所处位置。
  • /execute:其子命令/execute if predicate可以调用一个战利品表谓词文件。命令执行后,将返回一个执行结果或者判定是否继续执行后续子命令。在当前命令环境的执行位置,战利品表谓词文件会被调用一次。

通过其他战利品表谓词[]

minecraft:reference条件类型的谓词会调用一个战利品表谓词文件,同时返回其结果给调用者。

在其他文件中的战利品表谓词[]

除了战利品表谓词文件外,战利品表谓词也在其他的数据包文件中存在,比如进度战利品表

JSON格式[]

本段落将对战利品表谓词的JSON格式进行介绍。

  • :战利品表谓词的根元素,为由战利品表谓词组成的列表。当内部所有谓词通过时才被认为此列表谓词通过,效果等效于all_of
  • :根元素的另一种格式。
    •  condition:一个命名空间ID,表示要检查的条件。
    • 该战利品表谓词的其他部分,指定的部分在下面列出。

以下为 condition的可能取值及其相关的额外内容:

  • all_of - 评价一系列战利品表谓词,若它们都通过检查,则评价通过。可从任何上下文调用。
    •  terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象
      • :一个战利品表谓词,其结构也可如此递归排布。
  • any_of - 评价一系列战利品表谓词,若其中任意一个通过检查,则评价通过。可从任何上下文调用。
    •  terms:要评价的战利品表谓词所组成的列表,其中的每个战利品表谓词都必须为一个 对象
      • :一个战利品表谓词,其结构也可如此递归排布。
  • block_state_property - 检查方块以及其方块状态。需要战利品表上下文提供的方块状态进行检测,若未提供则总是不通过。
    •  block:一个方块ID。当方块不匹配时,测试不通过。
    •  properties:(可选)方块状态名称和其值的一个映射。若方块不具有这些属性,则发生错误。
      •  name:一个方块状态和其具体值。值为一个字符串[需要更多信息]
      •  name:一个方块状态名称和其匹配的范围值。
        •  max:最大值。
        •  min:最小值。
  • damage_source_properties - 检查伤害来源的属性。需要战利品表上下文提供的来源伤害来源进行检测,若未提供则总是不通过。
    •  predicate:应用于伤害来源的战利品表谓词。
      • 伤害类型谓词
  • entity_properties - 测试实体的属性。可从任何上下文调用。
    •  entity:要检查的实体。从战利品表上下文指定实体。设置成this表示实体自身,即死亡的实体,或是破坏方块、打开容器或获取进度的玩家,killer表示进行击杀的实体,direct_killer表示进行直接击杀的实体,而killer_player表示进行击杀的玩家。
    •  predicate:要应用于实体的战利品表谓词,具有和进度相同的结构。
      • 实体谓词
  • entity_scores - 测试实体的记分板分数。需要战利品表上下文提供的特定实体进行检测,若未提供则总是不通过。
    •  entity:要检查的实体。从战利品表上下文指定实体。设置成this表示实体自身,即死亡的实体,或是破坏方块、打开容器或获取进度的玩家,killer表示进行击杀的实体,direct_killer表示进行直接击杀的实体,而killer_player表示进行击杀的玩家。
    •  scores:待检查的分数。所有指定的分数通过测试时,条件通过。
      •  <记分项>:将记分项名称作为键名,分数刚好满足其值时,条件通过。
      •  <记分项>:将记分项名称作为键名,分数达到下面最大值和最小值的范围时,条件通过。
        •  min:最小分数。
          • 数值提供器
        •  max:最大分数。
          • 数值提供器
  • inverted - 把参数项中条件的判断结果取反。可从任何上下文调用。
    •  term:待取反的条件。可递归使用与这里相同的结构。
  • killed_by_player - 检查是否存在一个由上战利品表上下文提供的killer_player(进行击杀的玩家)。需要战利品表上下文提供的killer_player实体进行检测,若未提供则总是不通过。
  • location_check - 检查当前位置。需要战利品表上下文提供的来源进行检测,若未提供则总是不通过。
    •  offsetX:(可选)检测位置与原位置在X轴上的偏移。
    •  offsetY:(可选)检测位置与原位置在Y轴上的偏移。
    •  offsetZ:(可选)检测位置与原位置在Z轴上的偏移。
    •  predicate:应用在检测位置上的战利品表谓词,具有和进度相同的结构。
      • 位置信息谓词
  • match_tool - 检查工具。需要战利品表上下文提供的工具进行检测,若未提供则总是不通过。
    •  predicate:应用在物品上的战利品表谓词,具有和进度相同的结构。
      • 物品谓词
  • random_chance - 生成一个取值范围为0.0–1.0之间的随机数,并检查其是否小于指定值。可从任何上下文调用。
    •  chance:0.0–1.0之间取得的成功率。
  • random_chance_with_looting - 生成一个取值范围为0.0–1.0之间的随机数,并检查其是否小于指定值。此过程受killer实体身上的抢夺等级影响。需要战利品表上下文提供的killer实体进行检测,若未提供则总是不通过。
    •  chance:基础成功率。
    •  looting_multiplier:对基础成功率的调整,公式是chance + (抢夺等级 * looting_multiplier)
  • reference - 调用另一个战利品表谓词文件并返回其结果。可从任何上下文调用。
    •  name:待调用谓词的命名空间ID。循环引用会导致解析失败。
  • survives_explosion - 以1/爆炸半径的概率返回成功。需要战利品表上下文提供的爆炸半径进行检测,若未提供则总是不通过。
  • table_bonus - 以魔咒等级为索引,从列表中挑选概率通过。需要战利品表上下文提供的工具进行检测,若未提供则总是不通过。
    •  enchantment:魔咒的命名空间ID
    •  chances:从0开始索引,获取相应魔咒等级的概率表。
      • :在某一魔咒等级下的通过概率。
  • time_check - 将当前的游戏时间(更确切地来说,为24000 * 天数 + 当天时间)和给定值进行比较。可从任何上下文调用。
    •  value:要比较的时间值,以刻为单位。仅允许与单个时刻进行比较,不允许搭配数值比较器。
    •  value:“value”的另一种格式。
      •  max:最大值。
        • 数值提供器
      •  min:最小值。
        • 数值提供器
    •  period:若存在,则会先将游戏时间模除该值,再使用该结果和value比较。例如,若period被设置为24000,则要检查时间将等于当前世界的当天时间。
  • value_check - 将一个数与另一个数或范围进行比较。可从任何上下文调用。
    •  value:待测试的数值。
      • 数值提供器
    •  range:用来与value进行比较的数值范围。
      •  min:最小值。
        • 数值提供器
      •  max:最大值。
        • 数值提供器
    •  range:“range”的另一种格式。仅用于与单个数字进行比较,不允许搭配数值比较器。
  • weather_check - 检查当前游戏的天气状态。可从任何上下文调用。
    •  raining:如果为真,则仅在降雨或雷暴时通过检查。
    •  thundering:如果为真,则仅在雷暴时通过检查。

历史[]

Java版
1.1519w38a向数据包中加入了战利品表谓词。
1.1622w12a加入了fishing_hook子谓词,用于检查浮漂的属性。
1.19.323w06a移除了伤害类型谓词中的is_projectileis_explosionbypasses_armorbypasses_invulnerabilitybypasses_magicis_fireis_magicis_lightning字段。
加入了新的tags数组。数组内的每一项都有以下字段:
  • id:伤害类型标签的命名空间ID
  • expected:指定的伤害类型标签是否要被谓词用于匹配过程。
1.2023w18aalternative条件重命名为any_of
加入了all_of条件,只会在所有子条件通过的时候通过,其语法与any_of相同。
1.20.223w32a加入了列表定义,其效果等价于all_of

语言

Advertisement