Skip to content

谓词

概述

  • 释义:用于判断对象或参数的一组条件,或者说是对一类特征的抽象描述,例如:“他穿了衣服”,谓词:“穿了衣服”。

  • 作用:常作为战利品的掉落与物品修饰器的条件。

注意

  • 一些谓词类型并没有被KubeJS提供原生支持,需写为Json文本格式作为addCondition(...Json)函数的参数传递。

  • 在不被KubeJS原生支持的谓词中会给出可参考链接来协助使用谓词。

应用示例

js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        loot.addPool(pool => {
            pool.addItem('minecraft:diamond')
            pool.survivesExplosion()
        })
    })
})
js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        loot.addPool(pool => {
            pool.addItem('minecraft:diamond').survivesExplosion()
        })
    })
})
js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        loot.addPool(pool => {
            pool.addItem('minecraft:diamond')
            pool.addConditionalFunction(c => {
                c.name(Component.aqua('测试钻石'))
                c.survivesExplosion()
            })
        })
    })
})

谓词列表

谓词类型 作用 语句 KubeJS原生支持 示例 维基
全部 评估一系列战利品表谓词,若它们都通过检查,则评估通过。可从任何上下文调用。 - 示例 链接
任何 评估一系列战利品表谓词,若其中任意一个通过检查,则评估通过。可从任何上下文调用。 - 示例 链接
方块状态属性 检查方块以及其方块状态。需要战利品上下文提供的方块状态进行检测,若未提供则总是不通过。 - 示例 链接
伤害来源属性 检查伤害来源的属性。需要战利品上下文提供的来源和伤害来源进行检测,若未提供则总是不通过。 - 示例 链接
实体属性 检查战利品表上下文中的实体。可从任何上下文调用。 entityProperties(..args) 示例 链接
实体分数 检查实体的记分板分数。 entityScores(..args) 示例 链接
取反(非) 定义一个谓词列表,当内含谓词不通过时该谓词通过。 - 示例 链接
被玩家击杀 检查实体是否死于玩家击杀(死时被玩家攻击过)。 killedByPlayer() 示例 链接
检查位置 检查当前位置。需要战利品上下文提供的来源进行检测,若未提供则总是不通过。 - 示例 链接
匹配工具 检查工具。需要战利品上下文提供的工具进行检测,若未提供则总是不通过。 - 示例 链接
随机概率 生成一个取值范围为0.0–1.0之间的随机数,并检查其是否小于指定值。可从任何上下文调用。 randomChance(..args) 示例 链接
受抢夺附魔影响的随机概率 检查随机概率,这个概率会受到抢夺魔咒的等级影响。 randomChanceWithLooting(..args) 示例 链接
引用谓词文件 调用谓词文件并返回其结果。可从任何上下文调用。 - 示例 链接
未被爆炸破坏 返回成功概率为1/爆炸半径,如果上下文未传递爆炸则始终通过。 survivesExplosion() 示例 链接
附魔奖励 以魔咒等级为索引,从列表中挑选概率通过。需要战利品上下文提供的工具进行检测,如果未提供,则附魔等级被视为 0。 - 示例 链接
检查时间 将当前的游戏时间(更确切地来说,为24000 * 天数 + 当天时间)和给定值进行比较。可从任何上下文调用。 - 示例 链接
检查值 将一个数与另一个数或范围进行比较。可从任何上下文调用。 - 示例 链接
检查天气 检查当前游戏的天气状态。可从任何上下文调用。 - 示例 链接

谓词类型

全部

  • 作用:评估一系列战利品表谓词,若它们都通过检查,则评估通过。可从任何上下文调用。

  • 语句:addFunction(...Json);

“全部”谓词参考

minecraft-wiki/谓词#all_of

数据包生成器/谓词

js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        loot.addCondition({
            "condition": "minecraft:all_of",
            "terms": []
        })
    })
})
json
{
    "condition": "minecraft:all_of",
    // 数组 包含其他谓词
    "terms": []
}

任何

  • 作用:评估一系列战利品表谓词,若其中任意一个通过检查,则评估通过。可从任何上下文调用。

  • 语句:addFunction(...Json);

“任何”谓词参考

minecraft-wiki/谓词#any_of

数据包生成器/谓词

js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        loot.addCondition({
            "condition": "minecraft:any_of",
            "terms": []
        })
    })
})
json
{
    "condition": "minecraft:any_of",
    // 数组 包含其他谓词
    "terms": []
}

方块状态属性

  • 作用:检查方块以及其方块状态。需要战利品上下文提供的方块状态进行检测,若未提供则总是不通过。

  • 语句:addCondition(...Json);

方块状态属性谓词参考

minecraft-wiki/谓词#block_state_property

数据包生成器/谓词

js
ServerEvents.blockLootTables(event => {
    event.addBlock('minecraft:gravel', loot => {
        // 因为properties是一个可选项,因此可以在不需要的时候不写
        loot.addCondition({
            "condition": "minecraft:block_state_property",
            "block": "minecraft:acacia_button",
        })
    })
})
json
{
    "condition": "minecraft:block_state_property",
    // 检查方块id
    "block": "minecraft:acacia_button",
    // 【可选】检查方块属性 可以添加多个 务必确保该方块确实有这种属性
    "properties": {
        // 检查face属性是不是floor
        "face": "floor",
        // 以数字为值的属性可以这样表示,请注意在本示例中的方块并不包含此属性,仅用于演示
        "age":{
            "min": 1,
            "max": 7
        }
    }
}

伤害来源属性

  • 作用:检查伤害来源的属性。需要战利品上下文提供的来源和伤害来源进行检测,若未提供则总是不通过。

  • 语句:addCondition(...Json);

害来源属性谓词参考

minecraft-wiki/谓词#damage_source_properties

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:damage_source_properties",
            "predicate": {
                 // 【可选】检查实际伤害源标签
                "tags": [
                    {
                        // 伤害类型标签id
                        "id": "minecraft:always_hurts_ender_dragons",
                        // 检查伤害类型是否应该含有此标签
                        "expected": true
                    }
                ]
            }
        })
    })
})
json
{
    "condition": "minecraft:damage_source_properties",
    "predicate": {
         // 【可选】检查实际伤害源标签
        "tags": [
            {
                // 伤害类型标签id
                "id": "minecraft:always_hurts_ender_dragons",
                // 检查伤害类型是否应该含有此标签
                "expected": false
            }
        ],
        // 【可选】检查实际伤害源实体-实体属性谓词
        "source_entity": {},
        // 【可选】检查直接伤害源实体-实体属性谓词
        "direct_entity": {}
    }
}

实体属性

  • 作用:检查战利品表上下文中的实体。可从任何上下文调用。

  • 语句:entityProperties(战利品表上下文实体: Internal.LootContext$EntityTarget_ , 实体属性Json);

实体属性谓词参考

minecraft-wiki/谓词#entity_properties

数据包生成器/谓词

js
// 并没有包含全部可用键,请参考wiki与数据包生成器
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.entityProperties('this', {
            "type": "minecraft:player"
        })
    })
})
json
// 并没有包含全部可用键,请参考wiki与数据包生成器
{
    "type": "minecraft:player"
}

实体分数

实体分数谓词参考

minecraft-wiki/谓词#entity_scores

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.entityScores('this', { 'test': 1 })
    })
})

取反

  • 作用:定义一个谓词列表,当内含谓词不通过时该谓词通过。

  • 语句:addCondition(...Json);

取反谓词参考

minecraft-wiki/谓词#inverted

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:inverted",
            "term": {}
        })
    })
})
json
{
    "condition": "minecraft:inverted",
    "term": {} // 其他谓词
}

被玩家击杀

  • 作用:检查实体是否死于玩家击杀(死时被玩家攻击过)。

  • 语句:killedByPlayer();

被玩家击杀谓词参考

minecraft-wiki/谓词#killed_by_player

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.killedByPlayer()
    })
})

检查位置

  • 作用:检查当前位置。需要战利品上下文提供的来源进行检测,若未提供则总是不通过。

  • 语句:addCondition(...Json);

位置信息谓词参考

minecraft-wiki/谓词#location_check

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:location_check",
            "predicate": {
                "biome": "minecraft:badlands"
            }
        })
    })
})
json
// 并未列出全部可用键,请查看参考
{
    "condition": "minecraft:location_check",
    "predicate": {
        "biome": "minecraft:badlands"
    }
}

匹配工具

  • 作用:检查工具。需要战利品上下文提供的工具进行检测,若未提供则总是不通过。

  • 语句:addCondition(...Json);

检查工具谓词参考

minecraft-wiki/谓词#match_tool

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:match_tool",
            "predicate": {
                "tag": "minecraft:axes"
            }
        })
    })
})
json
{
    "condition": "minecraft:match_tool",
    "predicate": {
        "tag": "minecraft:axes"
    }
}

随机概率

  • 作用:生成一个取值范围为0.0–1.0之间的随机数,并检查其是否小于指定值。可从任何上下文调用。

  • 语句:randomChance(概率[0, 1]);

随机概率谓词参考

minecraft-wiki/谓词#random_chance

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.randomChance(0.5)
    })
})

受抢夺附魔影响的随机概率

  • 作用:检查随机概率,这个概率会受到抢夺魔咒的等级影响。

  • 语句:randomChanceWithLooting(概率[0, 1], 每级抢夺增加概率[0, 1]);

受抢夺附魔影响的随机概率谓词参考

minecraft-wiki/谓词#random_chance_with_enchanted_bonus

数据包生成器/谓词

js
// 基础概率,每一级抢夺增加的概率
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.randomChanceWithLooting(0.1, 0.2)
    })
})

引用谓词文件

  • 调用谓词文件并返回其结果。可从任何上下文调用。

  • 语句:addCondition(...Json);

引用谓词谓词参考

minecraft-wiki/谓词#reference

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:reference",
            "name": "minecraft:test"
        })
    })
})
json
{
  "condition": "minecraft:reference",
  "name": "minecraft:test" // 引用谓词ResourceLocation
}

未被爆炸破坏

  • 作用:返回成功概率为1 / 爆炸半径,如果上下文未传递爆炸则始终通过。

  • 语句:survivesExplosion();

未被爆炸破坏谓词参考

minecraft-wiki/谓词#survives_explosion

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.survivesExplosion()
    })
})

附魔奖励

  • 作用:以魔咒等级为索引,从列表中挑选概率通过。需要战利品上下文提供的工具进行检测,如果未提供,则附魔等级被视为 0。

  • 语句:addCondition(...Json);

附魔奖励谓词参考

minecraft-wiki/谓词#reference

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:table_bonus",
            "enchantment": "minecraft:aqua_affinity", 
            "chances": [ 
                0.1,
                0.2,
                0.3,
                0.4
            ]
        })
    })
})
json
{
    "condition": "minecraft:table_bonus",
    "enchantment": "minecraft:aqua_affinity", //附魔id
    "chances": [ //每一级对应的概率 从0开始
        0.1,
        0.2,
        0.3,
        0.4
    ]
}

检查时间

  • 作用:将当前的游戏时间(更确切地来说,为24000 * 天数 + 当天时间)和给定值进行比较。可从任何上下文调用。

  • 语句:addCondition(...Json);

检查时间谓词参考

minecraft-wiki/谓词#time_check

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:time_check",
            "value": {
                "min": 0,
                "max": 12000
            },
            "period": 24000
        })
    })
})
json
{
    "condition": "minecraft:time_check",
    "value": {
        "min": 0,
        "max": 12000
    },
    "period": 24000
}

检查值

  • 作用:将一个数与另一个数或范围进行比较。可从任何上下文调用。

  • 语句:addCondition(...Json);

检查值谓词参考

minecraft-wiki/谓词#value_check

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:value_check",
            "value": {
                "min": 0,
                "max": 12000
            },
            "range": {
                "min": 0,
                "max": 6000
            }
        })
    })
})
json
{
    "condition": "minecraft:value_check",
    "value": {
        "min": 0,
        "max": 12000
    },
    "range": {
        "min": 0,
        "max": 6000
    }
}

检查天气

  • 检查当前游戏的天气状态。可从任何上下文调用。

  • 语句:addCondition(...Json);

检查天气谓词参考

minecraft-wiki/谓词#weather_check

数据包生成器/谓词

js
ServerEvents.entityLootTables(event => {
    event.addEntity("minecraft:husk", loot => {
        loot.addCondition({
            "condition": "minecraft:weather_check",
            "raining": true,
            "thundering": true
        })
    })
})
json
{
    "condition": "minecraft:weather_check",
    "raining": true,
    "thundering": true
}

贡献者

页面历史