Skip to main content
Version: 1.21.4

战利品函数(Loot Functions)

战利品函数(Loot Functions)可以用来修改 战利品条目战利品池战利品表 的结果(或多个结果)。在这两种情况下,都会定义一个函数列表,列表中的函数会依次执行。在数据生成(datagen)过程中,可以通过调用 #apply 方法,将战利品函数应用到 LootPoolSingletonContainer.Builder<?>LootPool.BuilderLootTable.Builder 上。本文将介绍可用的战利品函数。如需自定义战利品函数,请参阅 自定义战利品函数

note

战利品函数不能应用于复合战利品条目(CompositeEntryBase 的子类及其相关的 builder 类)。必须手动将其添加到每个单例条目(singleton entry)。

minecraft:sequence 以外,所有原版战利品函数都可以在 conditions 块中指定 战利品条件。如果这些条件中的某一个不满足,则该函数不会被应用。在代码层面上,这是由 LootItemConditionalFunction 控制的,除 SequenceFunction 外,所有战利品函数都继承自它。

minecraft:set_item

设置结果物品堆栈中要使用的不同物品。

{
"function": "minecraft:set_item",
// 要使用的物品。
"item": "minecraft:dirt"
}

目前在数据生成(datagen)过程中无法创建此函数。

minecraft:set_count

设置结果物品堆栈中要使用的物品数量。数量使用 数字提供器(number provider)

{
"function": "minecraft:set_count",
// 要使用的数量。
"count": {
"type": "minecraft:uniform",
"min": 1,
"max": 3
},
// 是否在现有值的基础上增加数量,而不是直接设置。可选,默认为 false。
"add": true
}

在数据生成过程中,可以调用 SetItemCountFunction#setCount,传入所需的数字提供器(number provider)以及可选的 add 布尔值,以构建该函数的 builder。

minecraft:explosion_decay

应用爆炸衰减效果。物品有 1 / explosion_radius 的概率“存活”。这个过程会根据数量多次执行。需要 minecraft:explosion_radius 战利品参数(loot parameter),如果该参数缺失,则不会进行任何修改。

{
"function": "minecraft:explosion_decay"
}

在数据生成过程中,可以调用 ApplyExplosionDecay#explosionDecay 来构建该函数的 builder。

minecraft:limit_count

将物品堆栈的数量限制在指定的 IntRange 范围内。

{
"function": "minecraft:limit_count",
// 要使用的数量限制。可以只设置 min、max 或同时设置两者。
"limit": {
"max": 32
}
}

在数据生成过程中,可以调用 LimitCount#limitCount,传入所需的 IntRange,以构建该函数的 builder。

minecraft:set_custom_data

为物品堆栈设置自定义 NBT 数据。

{
"function": "minecraft:set_custom_data",
"tag": {
"exampleproperty": 0
}
}

在数据生成(datagen)过程中,调用 SetCustomDataFunction#setCustomData 并传入期望的 CompoundTag,即可构建该函数的构建器(builder)。

warning

通常应视此函数为已弃用。请改用 minecraft:set_components

minecraft:copy_custom_data

将自定义 NBT 数据从方块实体或实体源复制到物品堆。一般不推荐对方块实体使用此功能,请优先使用 minecraft:copy_componentsminecraft:set_contents。对于实体,必须设置 实体目标。该函数需要战利品参数中存在指定的源(实体目标或方块实体),如果缺少该参数则不会进行任何修改。

{
"function": "minecraft:copy_custom_data",
// 要使用的数据源。有效值可以是实体目标、"block_entity"(使用战利品上下文中的
// 方块实体参数),或 "storage"(用于命令存储)。如果为 "storage",也可以是
// 一个 JSON 对象,额外指定要使用的命令存储路径。
"source": "this",
// 使用 "storage" 的示例。
"source": {
"type": "storage",
"source": "examplepath"
},
// 复制操作列表。
"ops": [
{
// 源路径和目标路径。本例中,我们将源中的 "src" 复制到目标中的 "dest"。
"source": "src",
"target": "dest",
// 合并策略。有效值包括 "replace"、"append" 和 "merge"。
"op": "merge"
}
]
}

在数据生成过程中,调用 CopyCustomDataFunction#copyData 并传入关联的 NbtProvider,以获取构建器。然后,调用 Builder#copy,传入期望的源(source)、目标(target)值及合并策略(可选,默认为 replace),即可构建该函数的构建器。

minecraft:set_components

为物品堆设置 数据组件 的值。大多数原版用例都有专门的函数,详见下文。

{
"function": "minecraft:set_components",
// 可设置任意组件。本例中,我们将物品的染色颜色设置为红色。
"components": {
"dyed_color": {
"rgb": 16711680
}
}
}

在数据生成过程中,调用 SetComponentsFunction#setComponent 并传入期望的数据组件及其值,即可构建该函数的构建器。

minecraft:copy_components

数据组件 的值从方块实体复制到物品堆。需要 minecraft:block_entity 战利品参数,如果该参数缺失则不会进行任何修改。

{
"function": "minecraft:copy_components",
// 该系统设计为支持多个来源,但目前仅支持方块实体(block entities)。
"source": "block_entity",
// 默认情况下,会复制所有组件。通过 "exclude" 列表可以排除某些组件,
// 而 "include" 列表可以显式重新包含组件。这两个字段都是可选的。
"exclude": [],
"include": []
}

在数据生成(datagen)过程中,调用 CopyComponentsFunction#copyComponents 并传入所需的数据源(通常为 CopyComponentsFunction.Source.BLOCK_ENTITY),即可为此函数构建一个构造器(builder)。

minecraft:copy_state

将方块状态属性(block state properties)复制到物品堆栈(item stack)的 block_state 数据组件 中,常用于尝试放置方块时。需要显式指定要复制的方块状态属性。此函数需要 minecraft:block_state 战利品参数(loot parameter),如果该参数不存在,则不会进行任何修改。

{
"function": "minecraft:copy_state",
// 期望的方块。如果这里指定的方块与实际被破坏的方块不一致,则该函数不会被执行。
"block": "minecraft:oak_slab",
// 需要保存的方块状态属性。
"properties": {
"type": "top"
}
}

在数据生成(datagen)过程中,调用 CopyBlockState#copyState 并传入目标方块,即可为该条件构建一个构造器。然后可以使用 #copy 方法在构造器上设置所需的方块状态属性值。

minecraft:set_contents

设置物品堆栈(item stack)的内容。

{
"function": "minecraft:set_contents",
// 要使用的内容组件(contents component)。有效值包括 "container"、"bundle_contents" 和 "charged_projectiles"。
"component": "container",
// 要添加到内容中的战利品条目(loot entries)列表。
"entries": [
{
"type": "minecraft:empty",
"weight": 3
},
{
"type": "minecraft:item",
"item": "minecraft:arrow"
}
]
}

在数据生成(datagen)过程中,调用 SetContainerContents#setContents 并传入所需的内容组件,即可为此函数构建一个构造器。然后调用构造器的 #withEntry 方法添加条目。

minecraft:modify_contents

对物品堆栈(item stack)的内容应用一个函数。

{
"function": "minecraft:modify_contents",
// 要使用的内容组件。有效值包括 "container"、"bundle_contents" 和 "charged_projectiles"。
"component": "container",
// 要应用的函数。
"modifier": "apply_explosion_decay"
}

目前尚无法在数据生成(datagen)过程中创建此函数。

minecraft:set_loot_table

为结果物品堆栈(item stack)设置一个容器战利品表(container loot table)。该功能主要用于箱子(chests)以及其他在放置后仍保留此属性的战利品容器。

{
"function": "minecraft:set_loot_table",
// 要使用的掉落表(loot table)的 id。
"name": "minecraft:entities/enderman",
// 目标方块实体的方块实体类型(block entity type)id。
"type": "minecraft:chest",
// 用于生成掉落表的随机种子,非必需,默认为 0。
"seed": 42
}

在数据生成(datagen)期间,可以调用 SetContainerLootTable#withLootTable,传入所需的方块实体类型(block entity type)、掉落表资源键(loot table resource key),以及可选的种子(seed),来构建该函数的构造器。

minecraft:set_name

为结果物品堆(item stack)设置名称。名称可以是一个 Component,而不仅仅是普通字符串。也可以从 实体目标 获取名称。如果需要实体相关的掉落参数(loot parameter),则必须提供;如果缺少该参数,则不会进行任何修改。

{
"function": "minecraft:set_name",
"name": "Funny Item",
// 要使用的实体目标(entity target)。
"entity": "this",
// 指定设置自定义名称("custom_name")还是物品名称("item_name")。
// 自定义名称会以斜体显示,并且可以通过铁砧修改,而物品名称则不能。
"target": "custom_name"
}

在数据生成阶段,可以调用 SetNameFunction#setName,传入所需的名称组件(name component)、名称目标(name target),以及可选的实体目标(entity target),来构建该函数的构造器。

minecraft:copy_name

实体目标 或方块实体(block entity)的名称复制到结果物品堆中。需要指定来源(实体目标或方块实体)对应的掉落参数(loot parameter);如果缺少该参数,则不会进行任何修改。

{
"function": "minecraft:copy_name",
// 实体目标,或者如果需要复制方块实体的名称则为 "block_entity"。
"source": "this"
}

在数据生成阶段,可以调用 CopyNameFunction#copyName,传入所需的实体来源(entity source),来构建该函数的构造器。

minecraft:set_lore

为结果物品堆设置 lore(提示文本行)。每一行可以是 Component,而不仅仅是普通字符串。也可以从 实体目标 获取。如果需要实体相关的掉落参数(loot parameter),则必须提供;如果缺少该参数,则不会进行任何修改。

{
"function": "minecraft:set_lore",
"lore": [
"Funny Lore",
"Funny Lore 2"
],
// 合并模式。可用的取值有:
// - "append":将条目追加到已有的 lore 条目后面。
// - "insert":在指定位置插入条目。插入位置通过额外字段 "offset" 指定。"offset" 可选,默认为 0。
// - "replace_all":移除所有已有条目,然后追加新条目。
// - "replace_section":移除一段区间的条目,并在该位置插入新条目。
// 被移除的区间通过 "offset" 和可选的 "size" 字段指定。
// 如果省略 "size",则使用 "lore" 的行数。
"mode": {
"type": "insert",
"offset": 0
},
// 要使用的实体目标。
"entity": "this"
}

在数据生成(datagen)期间,调用 SetLoreFunction#setLore 来构建此函数的构建器。随后可根据需要在构建器上调用 #addLine#setMode#setResolutionContext 方法。

minecraft:toggle_tooltips

启用或禁用特定组件的提示信息(tooltips)。

{
"function": "minecraft:toggle_tooltips",
"toggles": {
// 所有字段都是可选的。如果省略,将使用栈上已有的值。
// 这些已有值通常为 true,除非已被其他函数修改过。
"minecraft:attribute_modifiers": false,
"minecraft:can_break": false,
"minecraft:can_place_on": false,
"minecraft:dyed_color": false,
"minecraft:enchantments": false,
"minecraft:jukebox_playable": false,
"minecraft:stored_enchantments": false,
"minecraft:trim": false,
"minecraft:unbreakable": false
}
}

目前无法在数据生成(datagen)期间创建此函数。

minecraft:enchant_with_levels

随机为物品堆(item stack)附加指定等级数的附魔。使用 数字提供器

    {
"function": "minecraft:enchant_with_levels",
// 要使用的等级数量。
"levels": {
"type": "minecraft:uniform",
"min": 10,
"max": 30
},
// 可选的附魔列表。可选,默认使用该物品所有可用的附魔。
"options": [
"minecraft:sharpness",
"minecraft:fire_aspect"
]
}

在数据生成(datagen)期间,调用 EnchantWithLevelsFunction#enchantWithLevels 并传入所需的数字提供器,以构建此函数的构建器。如果需要,可以通过 #fromOptions 方法在构建器上设置附魔列表。

minecraft:enchant_randomly

为物品随机附加一个附魔。

```json5
{
"function": "minecraft:enchant_randomly",
// 可能附加的附魔列表。可选,默认为所有附魔。
"options": [
"minecraft:sharpness",
"minecraft:fire_aspect"
],
// 是否只允许兼容的附魔,或允许任意附魔。可选,默认为 true。
"only_compatible": true
}

在数据生成(datagen)时,可以调用 EnchantRandomlyFunction#randomEnchantmentEnchantRandomlyFunction#randomApplicableEnchantment 来构建该函数的构建器(builder)。然后,如有需要,可以在构建器上调用 #withEnchantment#withOneOf 方法。

minecraft:set_enchantments

为结果物品堆(item stack)设置附魔(enchantments)。

{
"function": "minecraft:set_enchantments",
// 一个从附魔到数值提供器(number provider)的映射。
"enchantments": {
"minecraft:fire_aspect": 2,
"minecraft:sharpness": {
"type": "minecraft:uniform",
"min": 3,
"max": 5,
}
},
// 是否将附魔等级添加到已有等级,而不是覆盖。可选,默认为 false。
"add": true
}

在数据生成时,可以通过 new SetEnchantmentsFunction.Builder 并传入可选的 add 布尔值来构建该函数的构建器。随后,调用 #withEnchantment 方法添加要设置的附魔。

minecraft:enchanted_count_increase

根据附魔值提升物品堆的数量。这里会用到 数值提供器。该函数需要 minecraft:attacking_entity 战利品参数,如果没有该参数则不会进行任何修改。

{
"function": "minecraft:enchanted_count_increase",
// 要使用的附魔。
"enchantment": "minecraft:fortune",
// 每级附魔提升的数量。数值提供器每次函数调用时掷骰一次,而不是每级一次。
"count": {
"type": "minecraft:uniform",
"min": 1,
"max": 3
},
// 堆叠数量上限,无论附魔等级多少都不会超过。可选参数。
"limit": 5
}

在数据生成时,可以调用 EnchantedCountIncreaseFunction#lootingMultiplier 并传入所需的数值提供器,来构建该函数的构建器。之后可选地调用构建器的 #setLimit 方法。

minecraft:apply_bonus

根据附魔值和多种公式提升物品堆数量。该函数需要 minecraft:tool 战利品参数,如果没有该参数则不会进行任何修改。

{
"function": "minecraft:apply_bonus",
// 要查询的附魔(enchantment)值。
"enchantment": "minecraft:fortune",
// 要使用的公式。可用的值有:
// - "minecraft:binomial_with_bonus_count":基于二项分布的奖励,n = 附魔等级 + extra,p = 概率。
// - "minecraft:ore_drops":基于用于矿石掉落的特殊公式,包含随机性。
// - "minecraft:uniform_bonus_count":根据附魔等级乘以常量因子添加奖励。
"formula": "ore_drops",
// 参数值,取决于所选公式。
// 如果公式为 "minecraft:binomial_with_bonus_count",需要 "extra" 和 "probability"。
// 如果公式为 "minecraft:ore_drops",无需参数。
// 如果公式为 "minecraft:uniform_bonus_count",需要 "bonusMultiplier"。
"parameters": {}
}

在数据生成(datagen)过程中,根据所选公式,调用 ApplyBonusCount#addBonusBinomialDistributionCountApplyBonusCount#addOreBonusCountApplyBonusCount#addUniformBonusCount,并传入附魔(enchantment)及其他所需参数,以构建此函数的 builder。

minecraft:furnace_smelt

尝试将物品像在熔炉中一样进行熔炼,如果无法熔炼则返回未修改的物品堆(item stack)。

{
"function": "minecraft:furnace_smelt"
}

在数据生成(datagen)过程中,调用 SmeltItemFunction#smelted 来构建此函数的 builder。

minecraft:set_damage

为结果物品堆(item stack)设置一个耐久度损伤值。使用 数字提供器

{
"function": "minecraft:set_damage",
// 要设置的损伤值。
"damage": {
"type": "minecraft:uniform",
"min": 10,
"max": 300
},
// 是否为在原有损伤值基础上增加,而非直接设置。可选,默认为 false。
"add": true
}

在数据生成(datagen)过程中,调用 SetItemDamageFunction#setDamage,传入所需的数字提供器(number provider),可选地传入 add 布尔值,以构建此函数的 builder。

minecraft:set_attributes

为结果物品堆(item stack)添加一组 属性修饰符

{
"function": "minecraft:set_attributes",
// 属性修饰符(attribute modifier)列表。
"modifiers": [
{
// 修饰符的资源位置 ID,建议使用你的模组 ID 作为前缀。
"id": "examplemod:example_modifier",
// 此修饰符作用的属性(attribute)的 ID。
"attribute": "minecraft:generic.attack_damage",
// 属性修饰符操作类型(operation)。
// 可用值为 "add_value"、"add_multiplied_base" 和 "add_multiplied_total"。
"operation": "add_value",
// 修饰符的数值(amount)。也可以是一个 number provider(数值提供器)。
"amount": 5,
// 修饰符生效的装备槽(slot)。可用值有 "any"(任意物品栏槽位),
// "mainhand"、"offhand"、"hand"(主手/副手/双手),
// "feet"、"legs"、"chest"、"head"、"armor"(靴子/护腿/胸甲/头盔/任意护甲槽位)
// 以及 "body"(马铠及类似槽位)。
"slot": "armor"
}
],
// 是否替换已有属性值而不是叠加(可选,默认为 true)。
"replace": false
}

在数据生成(datagen)过程中,调用 SetAttributesFunction#setAttributes 来构建此函数的构建器(builder)。然后,使用构建器的 #withModifier 方法添加修饰符。可以使用 SetAttributesFunction#modifier 获取一个修饰符。

minecraft:set_potion

为结果物品堆(item stack)设置药水(potion)。

{
"function": "minecraft:set_potion",
// 药水的 ID。
"id": "minecraft:strength"
}

在数据生成过程中,使用所需药水调用 SetPotionFunction#setPotion 来构建此函数的构建器。

minecraft:set_stew_effect

为结果物品堆设置一组蘑菇煲效果(stew effects)。

{
"function": "minecraft:set_stew_effect",
// 要设置的效果列表。
"effects": [
{
// 效果的 ID。
"type": "minecraft:fire_resistance",
// 效果持续时间(单位:tick),也可以是一个数值提供器(number provider)。
"duration": 100
}
]
}

在数据生成过程中,调用 SetStewEffectFunction#stewEffect 来构建此函数的构建器。随后可在构建器上调用 #withModifier

minecraft:set_ominous_bottle_amplifier

为结果物品堆设置不祥药瓶(ominous bottle)的增幅值(amplifier)。这里使用了一个 数值提供器

{
"function": "minecraft:set_ominous_bottle_amplifier",
// 要使用的增幅值。
"amplifier": {
"type": "minecraft:uniform",
"min": 1,
"max": 3
}
}

在数据生成过程中,使用所需的数值提供器调用 SetOminousBottleAmplifierFunction#setAmplifier 来构建此函数的构建器。

minecraft:exploration_map

如果结果物品堆是地图(map),则将其转化为一张探索地图(exploration map)。此操作需要 minecraft:origin 战利品参数(loot parameter),如果缺失该参数则不会进行任何修改。

{
"function": "minecraft:exploration_map",
// 一个结构标签,包含探索地图可能指向的结构。
// 可选,默认值为 "minecraft:on_treasure_maps",该标签默认只包含埋藏的宝藏。
"destination": "minecraft:eye_of_ender_located",
// 要使用的地图装饰类型。可用的值请参见 MapDecorationTypes 类。
// 可选,默认值为 "minecraft:mansion"。
"decoration": "minecraft:target_x",
// 要使用的缩放等级。可选,默认值为 2。
"zoom": 4,
// 要使用的搜索半径。可选,默认值为 50。
"search_radius": 25,
// 搜索结构时是否跳过已存在的区块。可选,默认值为 true。
"skip_existing_chunks": true
}

在数据生成(datagen)过程中,调用 ExplorationMapFunction#makeExplorationMap 来构建此函数的构建器(builder)。然后,如有需要,可以调用构建器上的各种 setter 方法进行设置。

minecraft:fill_player_head

根据给定的 实体目标,为结果物品堆(item stack)设置玩家头颅的拥有者。需要相应的战利品参数(loot parameter),如果该参数不存在,则不会进行任何修改。

{
"function": "minecraft:fill_player_head",
// 要使用的实体目标。如果无法解析为玩家,则物品堆不会被修改。
"entity": "this_entity"
}

在数据生成过程中,调用 FillPlayerHead#fillPlayerHead 并传入所需的实体目标,以构建此函数的构建器。

minecraft:set_banner_pattern

为结果物品堆设置旗帜图案。此功能用于旗帜(banner),而非旗帜图案物品(banner pattern items)。

{
"function": "minecraft:set_banner_patterns",
// 旗帜图案图层的列表。
"patterns": [
{
// 要使用的旗帜图案的 id。
"pattern": "minecraft:globe",
// 该图层的染料颜色。
"color": "light_blue"
}
],
// 是否追加到现有图层而不是替换它们。
"append": true
}

在数据生成过程中,调用 SetBannerPatternFunction#setBannerPattern 并传入 append 布尔值来构建此函数的构建器。然后,调用 #addPattern 方法为该函数添加图案。

minecraft:set_instrument

为结果物品堆设置乐器标签(instrument tag)。

{
"function": "minecraft:set_instrument",
// 要使用的乐器标签。
"options": "minecraft:goat_horns"
}

在数据生成过程中,调用 SetInstrumentFunction#setInstrumentOptions 并传入所需的乐器标签,以构建此函数的构建器。

minecraft:set_fireworks

```json5
{
"function": "minecraft:set_fireworks",
// 要使用的烟花爆炸效果。可选,如果缺省则使用已有的数据组件值。
"explosions": [
{
// 要使用的烟花爆炸形状。原版可用值有 "small_ball"、"large_ball"、"star"、"creeper" 和 "burst"。可选,默认为 "small_ball"。
"shape": "star",
// 要使用的颜色。可选,默认为空列表。
"colors": [
16711680,
65280
],
// 要使用的渐变颜色。可选,默认为空列表。
"fade_colors": [
65280,
255
],
// 爆炸是否带有尾迹。可选,默认为 false。
"has_trail": true,
// 爆炸是否带有闪烁。可选,默认为 false。
"has_twinkle": true
}
],
// 烟花的飞行时长。可选,如果缺省则使用已有的数据组件值。
"flight_duration": 5
}

目前无法在数据生成(datagen)过程中创建此函数。

minecraft:set_firework_explosion

为结果物品堆设置烟花爆炸效果。

{
"function": "minecraft:set_firework_explosion",
// 要使用的烟花爆炸形状。原版可用值有 "small_ball"、"large_ball"、"star"、"creeper" 和 "burst"。可选,默认为 "small_ball"。
"shape": "star",
// 要使用的颜色。可选,默认为空列表。
"colors": [
16711680,
65280
],
// 要使用的渐变颜色。可选,默认为空列表。
"fade_colors": [
65280,
255
],
// 爆炸是否带有尾迹。可选,默认为 false。
"trail": true,
// 爆炸是否带有闪烁。可选,默认为 false。
"twinkle": true
}

目前无法在数据生成(datagen)过程中创建此函数。

minecraft:set_book_cover

设置成书(written book)非页面内容部分的信息。

{
"function": "minecraft:set_book_cover",
// 书名。可选,如果缺省则书名保持不变。
"title": "Hello World!",
// 作者。可选,如果缺省则作者保持不变。
"author": "Steve",
// 书的版本(generation),即被复制的次数。取值范围为 0 到 3。
// 可选,如果缺省则版本保持不变。
"generation": 2
}

在数据生成(datagen)过程中,调用 new SetBookCoverFunction 并传入所需参数,即可构建此函数的生成器。

minecraft:set_written_book_pages

设置成书(written book)的页面内容。

{
"function": "minecraft:set_written_book_pages",
// 要设置的页面,以字符串列表的形式给出。
"pages": [
"Hello World!",
"Hello World on page 2!",
"Never Gonna Give You Up!"
],
// 所使用的合并模式。有效值包括:
// - "append":将条目追加到已有的 lore 条目之后。
// - "insert":在指定位置插入条目。插入位置通过额外字段 "offset" 指定。
// "offset" 可选,默认为 0。
// - "replace_all":删除所有已有条目,然后追加新条目。
// - "replace_section":删除一段条目,并在该位置添加新条目。
// 删除的区间通过 "offset" 和可选的 "size" 字段指定。
// 如果省略 "size",则使用 "lore" 中的行数。
"mode": {
"type": "insert",
"offset": 0
}
}

目前无法在数据生成(datagen)过程中创建此函数。

minecraft:set_writable_book_pages

设置一本可编写书(book and quill)的页面内容。

{
"function": "minecraft:set_writable_book_pages",
// 要设置的页面,以字符串列表的形式给出。
"pages": [
"Hello World!",
"Hello World on page 2!",
"Never Gonna Give You Up!"
],
// 所使用的合并模式。有效值包括:
// - "append":将条目追加到已有的 lore 条目之后。
// - "insert":在指定位置插入条目。插入位置通过额外字段 "offset" 指定。
// "offset" 可选,默认为 0。
// - "replace_all":删除所有已有条目,然后追加新条目。
// - "replace_section":删除一段条目,并在该位置添加新条目。
// 删除的区间通过 "offset" 和可选的 "size" 字段指定。
// 如果省略 "size",则使用 "lore" 中的行数。
"mode": {
"type": "insert",
"offset": 0
}
}

目前无法在数据生成(datagen)过程中创建此函数。

minecraft:set_custom_model_data

设置生成物品堆栈在渲染时所使用的自定义模型数据(custom model data)。

{
"function": "minecraft:set_custom_model_data",
// 在指定索引的物品模型选择过程中使用的浮点数
// 适用于带有 `minecraft:custom_model_data` 范围属性的客户端物品。
"floats": [
// 当 "index": 0 时,选择属性值小于 0.5 的模型
0.5,
// 当 "index": 1 时,选择属性值小于 0.25 的模型
0.25
],
// 在指定索引的物品模型选择过程中使用的布尔值
// 适用于带有 `minecraft:custom_model_data` 条件属性的客户端物品。
"flags": [
// 当 "index": 0 时,选择条件为 true 的模型
true,
// 当 "index": 1 时,选择条件为 false 的模型
false
],
// 在指定索引的物品模型选择过程中使用的字符串
// 适用于带有 `minecraft:custom_model_data` 选择属性的客户端物品。
"strings": [
// 当 "index": 0 时,选择 "dummy" 情况的模型
"dummy",
// 当 "index": 1 时,选择 "example" 情况的模型
"example"
],
// 在带有 `minecraft:custom_model_data` 染色源的客户端物品中,
// 用于指定索引的染色颜色。
// 0xFF000000 会与该值进行按位或运算,以获得不透明颜色。
"colors": [
// 当 "index": 0 时为蓝色
255,
// 当 "index": 1 时为绿色
65280
]
}

在数据生成(datagen)过程中,调用 new SetCustomModelDataFunction() 并传入条件列表、可选的数字提供器(number providers)、布尔值、字符串和数字提供器,以构造关联的对象。

minecraft:filtered

该函数接受一个 ItemPredicate,用于对生成的物品堆进行检查;如果检查通过,则会执行另一个函数。ItemPredicate 可以指定有效物品 ID 列表(items)、物品数量的最小/最大范围(count)、DataComponentPredicatecomponents)以及 ItemSubPredicate 的映射(predicates);所有字段都是可选的。

{
"function": "minecraft:filtered",
// 要使用的自定义模型数据值。也可以是一个数字提供器。
"item_filter": {
"items": [
"minecraft:diamond_shovel"
]
},
// 要运行的其他掉落函数,可以是一个掉落修饰符文件,也可以是内联的函数列表。
"modifier": "examplemod:example_modifier"
}

目前在数据生成(datagen)过程中无法创建该函数。

warning

通常应认为该函数已被弃用。请改用带有 minecraft:match_tool 条件的传入函数。

minecraft:reference

该函数会引用一个物品修饰符(item modifier),并将其应用到结果物品堆上。更多信息请参见 物品修饰符

{
"function": "minecraft:reference",
// 引用位于 data/examplemod/item_modifier/example_modifier.json 的物品修饰符文件。
"name": "examplemod:example_modifier"
}

在数据生成(datagen)过程中,调用 FunctionReference#functionReference 并传入被引用谓词文件的 id,以构建该函数的 builder。

minecraft:sequence

此函数会依次运行其他掉落函数(loot function)。

{
"function": "minecraft:sequence",
// 要依次执行的函数列表。
"functions": [
{
"function": "minecraft:set_count",
// ...
},
{
"function": "minecraft:explosion_decay"
}
],
}

在数据生成(datagen)过程中,调用 SequenceFunction#of 并传入其他函数,以构建该条件的 builder。

参见(See Also)