
Advancement JS
使用KubeJS配置更多进度
查看大图AdvancementJS
通过 KubeJS 配置更多进度功能
快速示例(适用于最新版本 2.9.3)
启动脚本
// 创建一个自定义触发器
AdvJSEvents.trigger(event => {
event.create("advjs:get_adv")
// 你定义了多少个匹配条件,就需要放入多少个测试
// 在此示例中,我们定义了 2 个匹配条件
.match(advancement => advancement.getId() == "minecraft:story/smelt_iron")
.match(playerName => playerName == "Dev")
})
服务器脚本
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("快速示例")
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("神圣"))
displayBuilder.setDescription(Text.red("地狱开始"))
})
.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('我会回来的!')
displayBuilder.setDescription(Text.green("祝你好运"))
// 你也可以在 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)
})
如何重载
只需使用 /reload
特性
- 命令
/advjs用于生成内置示例 - 你可以在启动事件
AdvJSEvents.trigger中创建自定义触发器 - AdvJS 自定义触发器
- blockDestroyed:当玩家破坏方块时触发
- playerTouch:当玩家接触实体时触发
- bossEvent:当玩家加入 Boss 战斗时触发
- increasedKillScore:当玩家击杀实体时触发
- AdvJS 自定义奖励
- addEffect:给予效果
- AdvJS 自定义方法
- displayOffset(offsetX: number, offsetY: number, modifyChildren?: boolean)
- 对进度显示及其子进度应用偏移
- requireParentDone()
- 检查父进度是否完成,否则将无法达成
- requireOthersDone(requires[]: ...ResourceLocation)
- 检查你指定的进度是否已完成
- requireAnyDone(requires[]: ...ResourceLocation)
- displayOffset(offsetX: number, offsetY: number, modifyChildren?: boolean)
- 兼容性
Better Advancements,新增服务器事件:AdvJSEvents.betterAdv
正在加载版本记录…




正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。