本篇教程由作者设定使用 CC BY-NC-SA 协议。

循环提供的 config 只能设置生物捕捉球的黑名单(什么生物不能抓),但我们可以借助 KubeJS 使其只能捕捉残血生物。

下面是代码

onEvent('entity.spawned', event => {

    if ((event.entity.item) && (event.entity.item.id == 'cyclic:mob_container')) {

        var entity = event.world.createEntity(event.entity.item.nbt.id);
        entity.mergeFullNBT(event.entity.item.nbt);

        if (entity.health/entity.maxHealth > 0.1) {
            event.cancel();
            entity.setPosition(event.entity.x, event.entity.y, event.entity.z);

            // 不能立即召唤,不然老的还没消失 UUID 重复
            event.server.schedule(20, event.server, function (callback) {
                entity.spawn()
            });
            event.server.runCommand(`say 你只能捕捉生命值低于 10% 的生物`);
        }
    }

思路比较简单。检测到【生物容器球】 生成时检查被捕捉的生物的血量是否大于其最大血量的 10%,如果是则取消生成【生物容器球】并在原地生成一个和被抓生物一样的新生物。值得注意的是【生物容器球】的生成早于被抓生物的消失,所以生成新生物必须延迟一点,否则会因为 UUID 重复无法生成。

直接用这个代码的话,一旦抓到非残血生物【生物捕捉球】会消失,如果想返还【生物捕捉球】可以在生成新生物的同时在原地生成一个【生物捕捉球】的掉落物。