本篇教程由作者设定未经允许禁止转载。

站内实际上存在不使用LootJS的教程,比本教程方便多了。但使用LootJS可以更便捷地实现条件性战利品表而非特定战利品,也就是说本教程实际上阐述的不止是佩戴特定饰品,而是自定义条件的战利品表,同时也适用于箱子中的战利品!


正文部分

那么话不多说,我们用实例分析,我会把要点写出来也方便举一反三。

function isEquippedSeed(entity) {
    if (!entity) return false;
    return curiosHelper.findFirstCurio(entity, SEED_ITEM).isPresent();
}

LootJS.modifiers((event) => {
    event.addEntityLootModifier('minecraft:warden')
        .apply((context) => {
            let player = context.getPlayer();
            if (player && isEquippedHeart(player)) {
                context.addLoot('moonstone:thefruit');
            }
        });
});

这实际上是我自己的整合包里的一部分代码,如果你要使用,应当补充:

1、CuriosHelper的获取(如果不能理解为什么写这个请先了解KubeJS Curios的用法)

const curiosHelper = Java.loadClass("top.theillusivec4.curios.api.CuriosApi").getCuriosHelper();

2、物品的定义

代码里的“SEED_ITEM”实际上就是你的物品ID,我这样写是因为我在其他地方定义了SEED_ITEM是什么,你也可以直接“minecraft:diamond”或别的什么。

核心思路是使用apply回调再结合你的自定义逻辑,我这里的逻辑是一个返回了是否佩戴指定饰品的函数,你也可以写一个逻辑返回,例如:

function isHealthAboveTwo(player) {
    if (!player) return false;
    return player.getHealth() > 2;
}

当玩家当前生命值大于2时,返回true。

如果你要抄作业

1、把SEED_ITEM换成你自己的物品ID;

2、把'minecraft:warden'换成其他实体名,你也可以直接更换战利品表类型;

3、把'moonstone:thefruit'换成战利品ID(不是战利品表ID)

context.addLoot('moonstone:thefruit');

你想add什么都可以。