刷怪笼文件
约 2212 字大约 7 分钟
2025-07-07
可能是最重要的一节?
接下来我们将逐层分析如何产出一个自定义刷怪笼配置。
如果你还没有阅读过本模组全局数据包放置位置的相关内容,请阅读数据包概览和文件概览
当前本模组并未实装详细的外置错误检查机制,因此在未正确配置 json 文件的情况下,极有可能出现错误被静默处理(指无事发生,但就是没有正确实现效果),或者游戏崩溃;当上述情况发生时,请务必检查 json 文件是否有正确配置;有条件的可打开模组配置文件./config/spcurs/common.toml中 ScSpawnerDataOutput 设置,以及浏览或提交./logs/spcurs和./logs下最新日志
本部分文件位于(以<命名空间>层为根目录)./spcurs/spawner文件夹下。
Json 文件命名
任意命名,符合 MC 命名空间 ID 需求即可。需要注意的是,任何情况下,spawner 文件夹内的文件夹结构不会反映至游戏内,即仅有 json 文件的文件名以及该文件所在数据包命名空间组成其游戏内命名空间 ID。
ScSpawner
你在该部分所创建的所有 json 文件的最顶层结构应当为 ScSpawner,所有其余的结构均隶属于 ScSpawner 中的某一个字段或子字段。
如果你需要一个对整体刷怪笼文件格式的概览,可以参考一个例子
{
"active_range": <float>,
"display": <DisplayConext>,
"global_effects": <ScEffects>,
"creatures": <ScCreatures>,
"loot_table": <ResourceLocation>,
"children": <ScChildren>
}
- active_range:一个常数字段,可填入整数或小数,默认值为 64,用于描述当刷怪笼附近多少格范围内存在玩家时,刷怪笼将处于激活状态
- loot_table:一个字符串,填入一个指向任意战利品列表的命名空间 ID,默认值为原版古城箱子的战利品列表,用于描述当该刷怪笼生命周期结束后,生成的战利品箱内容
- display:见DisplayContext
- global_effects: 见ScEffects
- creatures: 见ScCreatures
- children:见ScChildren
DisplayContext
{
"img": <ResourceLocation>,
"entity_color": <int>,
"line_color": <int>,
"head_color": <int>,
"leg_color": <int>,
"name": <string>,
"rarity":<int>
}
- img:一个指向任意 texture 的命名空间 ID,默认值为 spcurs:spawner/default,本模组在assets/spcurs/textures/spawner文件夹中预先装载了部分可用纹理,通过以下方式使用:
"spcurs:spawner/x" //x应被替换为 default,drown,empty,port,recycle,stop
- entity_color,line_color,head_color,leg_color:一个 ARGB/RGB 颜色的十进制表示的整数;entity_color 用于描述游戏内的刷怪笼实体的渲染颜色;line_color,head_color,leg_color 分别描述一个刷怪笼配置对应于游戏中的物品的边框,上部,下部颜色(参考原版刷怪蛋物品)
- name:一个字符串,用于描述该刷怪笼配置在游戏内的显示名称;注意,该名称将被直接显示,不作为一个可翻译键值存在
- rarity:一个 1~6 的整数(包含),用于描述刷怪笼配置的稀有度,影响物品显示颜色
ScCreatures
ScCreatures 主要用于存储ScCreature,即一个刷怪笼中每一个生物生成单元的配置信息。
{
"set": {
"name1":<ScCreature1>,
"name2":<ScCreature2>,
...
}
}
- name: 一个任意字符串,符合 MC 命名空间 ID 要求即可
ScCreature
{
"creature": <ResourceLocation>,
"spawn_config": <SpawnConfig>,
"effects": <ScEffects>
}
- creature: 一个命名空间 ID,指向需要被生成的实体的注册 ID;例如:原版的僵尸应当使用 "minecraft:zombie"或"zombie";模组灾变的炎魔应当使用 "cataclysm:ignis"
- spawn_config: 见SpawnConfig
- effects: 见 ScEffects
SpawnConfig
{
"strategy": <enum.string>,
"kill_amt": <int>,
"create_amt": <int>,
"existing_amt": <int>,
"spawn_cnt": <int>,
"first_spawn": <int>,
"interval": <long>,
"range": <float>
}
- strategy:一个字符串,应当且仅应当提供如下数个字段其一:
- kill:代表该生成单元会持续生成生物,直至由该单元生成的生物的被击杀数量达到 kill_amt
- create:代表该生成单元会持续生成生物,直至该单元生成生物数量达到 create_amt
- limit:代表该生成单元会持续在被刷怪笼追踪到的该生成单元生成的生物数量(一般情况下,该值等同于场上存在的数量)小于 existing_amt 时生成生物,直至由该单元生成的生物的被击杀数量达到 kill_amt
- kill_amt,create_amt,existing_amt:一个整数,仅会受 strategy 的影响被使用,即可以仅定义 strategy 需要的键值
- spawn_cnt:一个整数,该生成单元单次生成生物的生成尝试数,即单次生成的生物数量小于等于 spawn_cnt;注意:strategy 的判断是以生成单元每次生成为单位进行判断,这意味着生成单元实际生成量和实际存在量可能超出 create_amt,existing_amt(最多超过 spawn_cnt)
- first_spawn:一个整数,在刷怪笼处于活动状态经过多少游戏刻(tick)后,该生成单元进行首次生成
- interval:一个整数,在刷怪笼处于活动状态时,每经过多少游戏刻(tick),该生成单元进行生成
- range:一个浮点数,该生成单元会尝试在以刷怪笼为中心,半径 range 的格数内尝试随机位置进行生成
ScEffects
ScEffects 主要用于存储ScEffect,其主要用于给刷怪笼产出的生物进行属性,效果,AI 等等实体内容进行修正。
目前 ScEffects 主要由ScSapwner中的 global_effects,ScCreature中的 effects 和代码层面的 effects 追加进行提供,并以上述顺序有序(包括 set 中的 ScEffect 排列顺序)应用于实体。
{
"set": {
<name1>:<ScEffect1>,
<name2>:<ScEffect2>,
...
}
}
- name: 一个根据添加的 effect 种类不同,具有特殊要求的命名空间 ID,详细内容见具体的某个ScEffect
ScChildren
ScChildren 主要用于存储 ScChildConfig,其用于设置当前刷怪笼下辖的子刷怪笼,子刷怪笼在满足一定条件后会生成;注意:当刷怪笼作为子刷怪笼生成时,其 ScChildren 字段会被忽略(即不能迭代生成)
{
"list": [
<ScChildConfig1>,
<ScChildConfig2>,
...
]
}
ScChildConfig
{
"id":<ResourceLocation>,
"delay":<long>,
"amt":<int>,
"offset":[x,y,z],
"range":<double>
}
- id: 一个命名空间 ID,指向一个刷怪笼配置的注册 ID
- delay:一个整数,在刷怪笼处于活动状态经过多少游戏刻(tick)后,当前子刷怪笼生成
- amt:一个整数,尝试生成该种子刷怪笼的数量
- offset:三元数组(不满足要求的在游戏内被重写为[0,0,0]),表示子刷怪笼会尝试以父刷怪笼位置偏移 offset 后尝试生成
- range: 一个浮点数,表示子刷怪笼会在上述中心周围 range 格内随机生成
Example
json 文件本身不支持注释,如需使用,请删去所有开头为//的行
{
//此处描述了该刷怪笼会在附近32格内有玩家,则进入激活状态
//采用原版远古城市的战利品列表作为奖励箱内容物
//采用如下纹理和颜色作为刷怪笼在世界中的显示;如下颜色,名称,稀有度作为物品显示
"active_range": 32,
"loot_table": "chests/ancient_city",
"display": {
"img": "spcurs:spawner/port",
"entity_color": 16711680,
"head_color": 9746258,
"leg_color": 8941201,
"name": "一个例子",
"rarity": 4
},
//此处描述了由该刷怪笼生成的生物移动速度均会变为2倍
"global_effects": {
"set": {
"attr-spd1": {
"attr": "generic.movement_speed",
"op": "MULTIPLY_TOTAL",
"val": 2.0
}
}
},
"creatures": {
//该刷怪笼具有2个生成单元
"set": {
//该生成单元描述了一组需要在刷怪笼16个半径内,以首次在第20个tick
//每隔80tick尝试生成4只,总计需要产生30只的具有20点血量增益,60s的力量II的原版僵尸
"c1": {
"creature": "zombie",
"spawn_config": {
"create_amt": 30,
"spawn_cnt": 4,
"interval": 80,
"strategy": "create",
"range": 16,
"first_spawn": 20
},
"effects": {
"set": {
"attr-life1": {
"attr": "generic.max_health",
"op": "ADDITION",
"val": 20.0
},
"effc-power1": {
"effectID": "strength",
"level": 2,
"duration": 1200,
"visible": true
}
}
}
},
//该生成单元描述了一组需要在刷怪笼24格半径内,以首次在第40个tick
//每隔60tick尝试生成7只,总计需要杀死60只,最多同时在场10只的
//优先攻击羊的原版普通骷髅
"c2": {
"creature": "skeleton",
"spawn_config": {
"kill_amt": 60,
"existing_amt": 10,
"spawn_cnt": 7,
"interval": 60,
"strategy": "limit",
"range": 8,
"first_spawn": 40
},
"effects": {
"set": {
"taradd-1": {
"priority": 0,
"target": "sheep",
"must_see": false
}
}
}
}
}
},
//此处描述了该刷怪笼会在激活状态下40和80tick后尝试在
//z轴方向±10格处生成1个模组默认刷怪笼作为子刷怪笼
//且子刷怪笼的生成位置据其中心会在1格内做出偏移
"children": {
"list": [
{
"id": "spcurs:default",
"delay": 40,
"amt": 1,
"offset": [0, 0, 10],
"range": 1
},
{
"id": "spcurs:default",
"delay": 80,
"amt": 1,
"offset": [0, 0, -10],
"range": 1
}
]
}
}