注意:这里教程称呼该模组为BBA是因为那时候该数据包还没有改名!
BBA模组版(下称BBAI)本质上是对BBA原版的二次封装与改进,但BBAI运用了模组的优势致使其部分内容与原数据包有微小差异。
首先,BBAI的进度没有奖励("rewards"下的指令执行),这样使得运行效率提高了(BBA需要奖励函数用于解锁根进度)。
其次,BBA的根进度解锁依赖原版的指令函数(functions),而BBAI的根进度解锁是直接在代码里执行的。
根进度解锁实现如下:
PlayerEvent.PLAYER_JOIN.register(player->{
if(!player.getLevel().isClientSide()){
// 原版进度默认开启(毕竟你总不能关掉原版吧...)
AdvancementUtil.awardAdvancement(player, id("minecraft/vanilla"), "minecraft");
ADVANCEMENT_MAP.forEach(v->{
//(enable#是否启用Mod【在初始化时检测】、advId#进度id、awardId#进度的触发器id)
if(v.enable){
// 对player.getAdvancements().award(adv, award)的封装。
AdvancementUtil.awardAdvancement(player, v.advId, v.awardId);
}
});
}
});
在每一次玩家加入游戏时进行检测并解锁进度,而非进度完成后进行检测。
当然,如果能够做到只有第一次加入游戏时检测那优化就最佳了(不过这是不可能的,因为Mod的数量通常只会只增不减)
此外数据包与模组无异。
另请参阅: