搜索历史
清空
暂无搜索历史
论坛热搜
1
乌托邦探险之旅3.2
热
3
上古老物 冒险者传说 by WhiteSword
新
5
洛心斗罗-福利|公会据点战|武魂||抽奖|最终版
2
Jenny — 有趣的模拟女友模组|珍妮模组
热
4
幻虚斗罗V1.5
6
水星迫降——在未知的世界中挣扎
登陆 注册 QQ登陆
快捷导航
查看: 52|回复: 0

AdvancementJS (AdvancementJS)-MOD模组

[复制链接]

5259

主题

53

回帖

6529

积分

龙❁妻

Rank: 8Rank: 8

经验
6529 EP
金粒
1177 粒
绿宝石
20 块
爱心
0 点
发表于 2025-8-10 16:27:39 | 显示全部楼层 |阅读模式
AdvancementJS (AdvancementJS)Github |相关wiki |源站链接支持: fabric , forgeAdvancementJS 是一个由 KubeJS 支持的用于配置超过普通进度的 mod。

快速示例(适用于最新版本 `2.9.3`)

启动脚本

// 创建自定义触发器
AdvJSEvents.trigger(event => {
    event.create(\"advjs:get_adv\")
        // 你定义了多少匹配,就要放置多少测试
        // 在本示例中,我们定义了 2 个匹配
        .match(advancement => advancement.getId() == \"minecraft:story/smelt_iron\")
        .match(playerName => playerName == \"Dev\")
})Copy已复制!

服务器脚本

AdvJSEvents.advancement(event => {
    const { PREDICATE, TRIGGER } = event;

    // 定义触发器
    const jump5times = TRIGGER.tick(triggerBuilder =>
        triggerBuilder.addStat(Stats.JUMP, Stats.CUSTOM, { min: 5 }));
    const bred_in_nether = TRIGGER.bredAnimals(triggerBuilder => {
        triggerBuilder.setChildByPredicate(PREDICATE.entityFromJson({
            stepping_on: {
                dimension: \"the_nether\"
            }
        }))
    });
    // AdvJS 自定义触发器
    const destroy_dirt = TRIGGER.blockDestroyed(triggerBuilder => triggerBuilder.setBlock(\"dirt\"));
    // 您的自定义触发器
    const get_adv = TRIGGER.custom(\"advjs:get_adv\");

    // 创建根进度
    const root = event.create(\"advjs:hell\")
        .display(displayBuilder => {
            displayBuilder.setTitle(\"AdvancementJS\")
            displayBuilder.setDescription(\"Quick example\")
            displayBuilder.setIcon(\"diamond\")
        })
        .criteria(criteriaBuilder => criteriaBuilder.add(\"dirt\", destroy_dirt))
        .rewards(rewardsBuilder => {
            rewardsBuilder.setExperience(100)
            // AdvJS 自定义奖励
            rewardsBuilder.addEffect(\"absorption\", 200)
        })
        // 使其可重复
        .repeatable();

    // 为根进度添加子进度
    root.addChild(\"child1\", childBuilder => {
        childBuilder
            .display(displayBuilder => {
                displayBuilder.setTitle(Text.red(\"Holy\"))
                displayBuilder.setDescription(Text.red(\"Hell starts\"))
            })
            .criteria(criteriaBuilder => {
                // \'OR\' 意味着如果要实现此进度,
                // 只需匹配下面列出的两个触发器中的一个即可
                criteriaBuilder.setStrategy(RequirementsStrategy.OR)
                criteriaBuilder.add(\"bred\", bred_in_nether)
                criteriaBuilder.add(\"jump\", jump5times)
                criteriaBuilder.add(\"get_adv\", get_adv)
            })
            .rewards(rewardsBuilder => {
                rewardsBuilder.setRecipes(\"minecraft:lodestone\", \"minecraft:brewing_stand\")
                rewardsBuilder.setExperience(100)
            })
    });

    // 删除一个已存在的进度,通过 AdvancementFilter 进行过滤,可用的过滤器已在文档中写明。
    // 您也可以通过 ID 进行删除:\'event.remove(\"minecraft:story/lava_bucket\");\'
    event.remove({
        mod: \"minecraft\",
        icon: \"minecraft:lava_bucket\",
        frame: \"task\"
    });

    // 修改一个已存在的进度
    event.get(\"minecraft:story/smelt_iron\")
        // 应用于显示的偏移量
        .displayOffset(1, 1, true)
        .modifyDisplay(displayBuilder => displayBuilder.setIcon(\"diamond_pickaxe\"))
        .addChild(\"child2\", childBuilder => {
            childBuilder
                .display(displayBuilder => {
                    displayBuilder.setIcon(\"recovery_compass\")
                    displayBuilder.setTitle(\'I will come back!\')
                    displayBuilder.setDescription(Text.green(\"Good luck\"))
                    // 您还可以在 DisplayBuilder 中应用显示
                    displayBuilder.offset(-1, 0)
                })
                // 触发器也可以从 JSON 中创建
                .criteria(criteriaBuilder => criteriaBuilder.add(\"go_back_to_home\", TRIGGER.fromJson({
                    \"trigger\": \"minecraft:changed_dimension\",
                    \"conditions\": {
                        \"from\": \"minecraft:the_end\",
                        \"to\": \"minecraft:overworld\"
                    }
                })))
                // 检查是否父进度已完成,否则将无法完成
                .requireParentDone()
        });
})

AdvJSEvents.lock(event => {
    event.result(\"stone_slab\", \"minecraft:story/smelt_iron\");
    event.itemUse(\"spyglass\", \"minecraft:story/smelt_iron\");
    event.blockInteract(\"chest\", \"minecraft:story/smelt_iron\");
    event.entityInteract(\"villager\", \"minecraft:story/smelt_iron\");
})

// 与 \'Better Advancements\' 兼容
AdvJSEvents.betterAdv(event => {
    event.modify(\"advjs:hell/child1\").posX(0).posY(32).hideLines()
})

PlayerEvents.advancement(event => {
    const player = event.getPlayer();
    // 第一个参数用于匹配玩家谓词,其他两个是您定义的匹配
    CustomTriggers.of(\"advjs:get_adv\").trigger(player, event.getAdvancement(), player.username)
})Copy已复制!

如何重新加载

只需使用 `/reload` 命令即可。

特点

- 命令 `/advjs` 用于生成内置示例
- 您可以在启动事件 `AdvJSEvents.trigger` 中创建自定义触发器。
- AdvJS 自定义触发器
- AdvJS 自定义奖励
- AdvJS 自定义方法

游客,如果您要查看本帖隐藏内容请回复
AdvancementJS
楼主 2025-8-10 16:27:39 回复 收起回复
小僵尸论坛感谢有你~
回复 论坛版权

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则



介绍

我的世界(Minecraft)小僵尸论坛
收录了来自各地的我的世界(MC)爱好者们的各种资源

须知: 切勿滥用举报,任何与举报相关的信息必须属实!

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

官方

新浪微博 腾讯微博 微信公众号 投稿规则 版权声明 捐助我们

官方QQ①群: 291907844 (点击加群)
官方QQ②群: 421312192
官方QQ③群: 528726532

我的世界(Minecraft)小僵尸论坛

新会员

QQ|Archiver|手机版|小黑屋|Minecraft(我的世界)小僵尸论坛 |网站地图

GMT+8, 2025-12-17 11:19 , Processed in 0.193155 second(s), 124 queries .

快速回复 返回顶部 返回列表