|
|
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
回复(0)
收起回复
|