本篇教程由作者设定未经允许禁止转载。

前言:教程适用版本为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则刷怪笼实体渲染还是旧的生物,

不影响实际效果,且玩家重进游戏即可刷新正确渲染。


按以上例子可进行扩展,

比如有些结构提供了延时极短的刷怪笼,影响游戏平衡,

那就可以对刷怪笼的延迟时间进行修改,

教程在此不做深入引导。