本篇教程由作者设定未经允许禁止转载。
前言:教程适用版本为MC1.19.2,理论兼容更高版本
有些mod会提供带有刷怪笼的结构,
而如果只想让刷怪笼刷出特定种类的生物,
或者禁用某些种类的生物,
则可以用kjs对刷怪笼数据进行修改。
刷怪笼属于方块实体,可以在tick事件进行修改,
但考虑到性能开销,以下教程选用的是:
实体生成事件 checkSpawn
脚本路径(以开启版本隔离为例):
游戏文件夹\.minecraft\versions\版本名称\kubejs\server_scripts\Events.js
Events.js可按规范任意命名,不要用中文;
示例为只允许生成僵尸:
EntityEvents.checkSpawn(e => {
let { block, entity, level, server, spawner, player, type, x, y, z } = e;
let limit="minecraft:zombie"
// 不从刷怪笼生成的实体不受影响
if(!e.spawner) return;
// 生成的实体不是僵尸时,修改刷怪笼并取消本次生成,
// 延时改为1tick,几乎等同立刻再次生成
if(e.entity.type!=limit){
e.spawner.entityId=limit;
e.spawner.spawnDelay=1;
// 刷新nbt
let sbe=spawner.spawnerBlockEntity;
sbe.deserializeNBT(sbe.serializeNBT());
e.cancel()
}
})
解构仅供参考,如let{spawner}=e,
解构完之后直接写spawner即可等效于e.spawner
注意:不刷新nbt则刷怪笼实体渲染还是旧的生物,
不影响实际效果,且玩家重进游戏即可刷新正确渲染。
按以上例子可进行扩展,
比如有些结构提供了延时极短的刷怪笼,影响游戏平衡,
那就可以对刷怪笼的延迟时间进行修改,
教程在此不做深入引导。