FAQ
Q:通过 spawn.json,我怎么样才能新增怪物生成?
A:不,你不能。spawn.json 是用来限制怪物生成的,要新增怪物生成,你需要使用 spawner.json 。
Q:为什么我无法通过 spawn.json 来控制某些模组的怪物?
A:有些时候,模组的怪物确实无法完全遵循 incontrol 制定的规则生成。但在你的规则中写入一条 "onjoin": true 可能会对这一点有所帮助。写入此条后,规则会在实体加入世界时触发(但这也可能会造成问题,比如 In Control 模组页面评论区第 44 楼)。
Q:我向 spawn.json 添加了一条规则来允许一个怪物(比如,在白天)生成但没有发生任何事情。 这是为什么?
A:使用 spawn.json,你只能限制已经发生的怪物生成。如果你想添加更多的怪物生成,你必须向 spawner.json 添加规则(并用 spawn.json 中的规则加以改进)。在 spawn.json 中“allow”(通常)非常无用,因为这些怪物无论如何都会生成(如果你想增加怪物,则例外)。 通常情况下,多用用“deny”。
指令
/incontrol reload——热重载 incontrol 配置文件。
/incontrol debug——在日志中储存有关怪物生成的调试信息,数据量可能会非常大。
/incontrol show——显示可在 spawn.json 中使用的所有生物名称。
/incontrol kill——杀死给定 type 的所有实体。可用的 type 有:“all”、“hostile”、“passive”或“entity”。也可以给出实体的名称(如“minecraft:enderman”)。维度 ID 也是一个可选的额外参数。
/incontrol list——列出所处维度中当前存在的所有生物(以及每种类型的数量)。
/incontrol days——如果没有参数,则显示当前日期。你还可以使用此命令更改当前日期。
/incontrol phases——这会显示当前所有活跃的 phases 。
规则文件
所有的规则文件可以在 config/incontrol 中找到,当前支持以下规则文件:
phases.json:使用此文件,你可以定义配置文件全局活动中常见的条件集合(称为阶段)。然后,这些阶段可以在以下所有规则文件中使用,是一种选择规则的更有效、更干净的方式。
spawn.json:使用此文件,你可以阻止特定条件下特定生物的生成。此外,当允许生成时,你还可以更改生物的某些属性,例如最大生命值。 请注意,此文件中的规则仅更改已存在的怪物生成。 你不能(例如)单独使用此文件添加烈焰人在主世界中生成。 为此,你也需要查看 spawner.json 。
summonaid.json:这是一个结构与 spawn.json 相同的文件,但仅对僵尸有效。
potentialspawn.json:此条在 1.16.5 已弃用,改用 spawner.json。
spawner.json:这是一个新的生成系统(从 1.16.4 开始),你可以使用它来代替当前损坏的 potentialspawn.json。
loot.json:使用此文件,你可以控制怪物被杀死时掉落的战利品。
experience.json:这个文件控制你杀死怪物时获得多少经验。它具有与 loot.json 类似的结构,但你无法根据伤害类型(如魔法、火焰、爆炸等)控制经验掉落。
规则的结构
每个规则都包含三个部分:
条件:表示在考虑执行规则之前必须为 true 的测试。在执行规则之前,规则中的所有 conditions 都必须为 true。
行为:表示在执行规则时将要完成的事情。
附加:有些规则需要额外的调整才能起作用,对 conditions/actions 进行额外的调整也可以改进它们的工作方式。
游戏加载或热重载时,相应的规则会被从上到下依次判定。在大多数情况下,对同一实体(组),匹配的第一个规则将被执行,而进一步的规则将被忽略。(potentialspawn.json 和 loot.json 中的规则是一个例外,对于它们,所有匹配的规则都会被执行)
表达式
在某些条件中,你可以使用表达式。表达式基本上是一个字符串,指定要对整数值进行的一些测试。这里有一些例子:
>10:如果我们正在测试的数字大于 10,则评定为 true。
!=10: 如果它与 10 不同,则评定为 true。
4-50:如果数字在 4 到 50(含)之间,则评定为 true。
10:如果数字等于 10,则评定为 true。
支持的比较符号:> 、>= 、< 、<= 、= 和 != 。
物品过滤器
许多条件非常简单,但在测试物品时,事情可能会更复杂一些。这就是为什么在测试物品时可以使用特定语法的原因。在本节中,我们将讨论所有的可能性,并提供一些示例。在大多数情况下,在测试物品时(例如测试玩家是否手里拿着特定物品),你可以使用单个物品过滤器或物品过滤器列表。我们来谈谈单个物品过滤器的情况:
minecraft:sand (只是普通的 MC 沙子)
minecraft:stained_hardened_clay@13 (增加了 metadata 13)
带有 NBT(与 /give 指令相同的格式): minecraft:stained_hardened_clay@13/{display:{Lore:[\"My Clay\"]}}
支持以下标签的 Json 描述符:
1. item:一个物品 ID(就像 minecraft:sand 或者 rftools:powercell )
2. empty:一个指示该物品是否为空的布尔值( true 或者 false )。如果存在,则不会考虑其他标签。
3. damage:根据物品的损坏程度进行评定,表达式。
4. count:根据堆栈中的物品数量计算,表达式。
5. ore:指示矿物词典(例如 ingotCopper、dyeBlue、plankWood 等),字符串。
6. mod:指示物品对应模组的 modid ,字符串。
7. energy:评定物品中存在的 FE 量,表达式。
8. nbt:一个 Json 数组。此数组中的每个对象都支持以下标签:
tag:要测试的 NBT 标签的名称。
value:要测试的 NBT 标签的字符串化的值。
contains:如果标签为列表,请使用此条目而不是 value 。contains 之后的值应该是一个 Json 数组,该数组又包含 nbt 匹配标签,就像我们现在描述的一样(请参阅后面的示例)。
物品过滤器示例
以下示例均是应用在 playerhelditem(玩家手持物品) 上的,但当然,可以将它们用于支持其它条件。
最简单的情况。 一根简单的木棍:
"playerhelditem": "minecraft:stick",
不同物品的列表:
"playerhelditem": [ "minecraft:stone_pickaxe", "minecraft:stone_axe", "minecraft:stone_shovel", "minecraft:stone_sword" ],
具有特定 metadata 的特定方块:
"playerhelditem": "minecraft:stained_hardened_clay@13",
使用 Json 指定的相同示例:
"playerhelditem": {
"item": "minecraft:stained_hardened_clay",
"damage": 13
},
带有一些 NBT 数据的相同方块:
"playerhelditem": "minecraft:stained_hardened_clay@13/{display:{Lore:[\"My Clay\"]}}",
使用 Json 指定的相同示例:
"playerhelditem": {
"item": "minecraft:stained_hardened_clay",
"damage": 13,
"nbt": [
{
"tag": "display",
"value": "My Clay"
}
]
},
空手:
"playerhelditem": { "empty": true },
在这个例子中,我们需要一把破损的镐子:
"playerhelditem": {
"item": "minecraft:iron_pickaxe",
"damage": ">0"
},
在最后一个示例中,我们测试镐子是否具有特定的附魔(在这种情况下,镐子未被破坏):
"playerhelditem": {
"item": "minecraft:iron_pickaxe",
"nbt": [
{
"tag": "ench",
"contains": [
{
"tag": "id",
"value": 34
}
]
}
]
},
方块过滤器
与物品过滤器类似,还有可以测试特定方块存在的方块条件。 与物品一样,可以指定列表或单个方块过滤器。 以下是单个方块过滤器的可能性:
minecraft:sand:与此 id 匹配的方块。metadata 和 properties 被忽略。
ore:dyeBlue:匹配指定矿物词典的方块。
支持以下标签的 Json 描述符号:
block:方块 ID(如 minecraft:sand 或 rftools:powercell )。
properties:(仅当“block”被使用时有效)一个带有要匹配的 properties 的 JSON 数组。当你写下这一条目时,方块的 ID 和此处写下的属性将需要完全精确的匹配,不能多也不能少。因此,若为在此处未指定属性,则将设置为其默认值。
ore:指示矿物字典的字符串(例如 ingotCopper、dyeBlue、plankWood 等)。
mod:指示方块来自的模组的 modid (字符串)。
energy:评定方块中存在的 FE 量的表达式。
contains:可以是单个 Json 对象,也可以是表示物品过滤器的 Json 对象数组,如物品过滤器部分所述。如果在物品栏中找到任何匹配的物品,测试将成功(如果要测试的方块实际上代表物品栏)。
side:这是 energy 和 contains 的一个修正器。如果存在,它将指示我们要检查 energy 或物品栏内容的一侧(方位)。如果不存在,则使用 "null" side。这应当是一个字符串,例如 east , west , south , north , up 或者 down。
方块过滤器示例
一个钻石块:
"block": "minecraft:diamond_block",
一块木板:
"block": "ore:plankWood",
或者在 Json 语法中:
"block": { "ore": "plankWood" },
一个包含超过 1,000,000 能量的 RFTools powercell:
"block": {
"block": "rftools:powercell",
"energy": ">1000000"
},
一个装有 10 根以上木棍的箱子:
"block": {
"block": "minecraft:chest",
"contains": {
"item": "minecraft:stick",
"count": ">10"
}
},
一个已被激活的按钮:
"block": {
"block": "minecraft:stone_button",
"properties": [
{
"name": "powered",
"value": "true"
}
]
},
怪物计数器
控制怪物生成的“maxcount”和“mincount”标签可以是简单的数字或包含数字和怪物的字符串,也可以是具有各种条件的更复杂的 json。 支持以下标签:
amount:要比较的数量(可以进行数量范围控制!)。
perplayer:若为 true,amount 将与在场的玩家数量成比例。
perchunk:若为 true,amount 将被加载方块的数量除以 289 进行范围控制(这也是原版 mobcap 的工作方式)。
mod:如果设置了这个,则计数给定模组的所有怪物(可以将敌对或被动生物结合起来使用)。
hostile:如果设置了这个,所有的敌对生物都会被计数。
passive:如果设置了这个,所有的被动生物都会被计数。
mob:单个怪物或怪物列表。如果存在,则仅计算那些怪物。
怪物计数器示例
在 spawn.json 中:如果每个玩家已经有了对应超过 50 个敌对生物,则禁止骷髅生成:
{
"dimension": "minecraft:overworld",
"mob": "minecraft:skeleton",
"mincount": {
"amount": 50,
"hostile": true,
"perplayer": true
},
"result": "deny"
}
在 spawn.json 中:如果该模组已经存在超过 50 个怪物,则拒绝给定模组的所有小怪,根据原版 mobcap 规则进行范围控制:
{
"dimension": "minecraft:overworld",
"mod": "horriblecreatures",
"mincount": {
"amount": 50,
"mod": "horriblecreatures",
"perchunk": true
},
"result": "deny"
}
将上面的示例与 Json 语法进行对比,Json 语法将比较给定模组的每个单独怪物的数量:
{
"dimension": "minecraft:overworld",
"mod": "horriblecreatures",
"mincount": 50,
"result": "deny"
}
条件
本节将解释所有可能的条件 。某些条件并非在所有规则中都可用,所以借助本节,你就可以弄清楚它们的使用。
可能的类型:
S:一个字符串
B:布尔值( true / false )
I:一个整数
F:浮点数
[<type>]:类型列表(例如,[S] 是字符串列表)
JSON:在别处解释的特定格式的 json
(注:表格来自wiki,复制粘贴,未翻译完全)
Name | Type | 模组要求 | spawner | spawn | summon | loot | experience | 描述 |
phase | S/[S] | √ | √ | √ | 所有必须激活、为规则生效而服务的阶段。 阶段是在 phases.json 文件中定义的。 将条件放入阶段中是一种简洁且高效的操作。 | |||
onjoin | B | √ | 如果为 true,那当实体加入世界时, 此条生成规则将被激活。 这是一种更强大的判定, 允许你禁止来自刷怪笼的怪物生成 以及并不总是遵循常规“checkspawn” 事件的被动生物生成。使用时,要小心! | |||||
mindaycount / maxdaycount | I | √ | √ | √ | 指示最小或最大日期。 计日器是从 0 开始的(查看“days”命令)。 | |||
spawner | B | √ | 若是由刷怪笼生成的,则为 true。 | |||||
incontrol | B | √ | 若是使用 In Control 的新型刷怪系统 (spawner.json)生成的,则为 true。 | |||||
minheight / maxheight | I | √ | √ | √ | √ | √ | 指示应激活该规则时的最小和最大 y 轴高度。 | |
minlight / maxlight | I | √ | √ | √ | √ | 是 0 到 15 之间的值。 指示给定方块的最大和最小光照等级。 | ||
mincount / maxcount | S/ I/ JSON | √ | √ | 字符串,或者数字,在这种情况下,他将计算世界中给定怪 物组的数量;也可以是<amount>, <mob>的形式,计算该 类型怪物的数量。这样,你就可以根据已经存在的怪物数量 来编写一个规则文件。请注意,你也可以使用上面说的 Json 怪物计数语法来代替这种语法, | ||||
maxthis / maxtotal / maxpassive / maxhostile / maxneutral / maxlocal | I | √ | 给定类型怪物组的最大数量,包括被动的、敌对的、中立的 或在玩家附近的。 | |||||
minspawndist / maxspawndist | F | √ | √ | √ | √ | 到世界出生点的最小或最大距离(坐标数字) | ||
mintime / maxtime | I | √ | √ | √ | √ | 一天内的时间 (数字范围:0-23999)。 | ||
mindifficulty / maxdifficulty | F | √ | √ | √ | √ | 怪物生成地的难度,介于0到4之间。 | ||
mindist / maxdist | I | √ | 控制怪物出生点与玩家的最小/大距离。默认情况下为24/120 | |||||
canspawnhere | B | √ | 针对实体实现的检查。如果你在规则中将默认值作为结果, MC 会自动调用这个检查。对于许多怪物来说,这实际上就是标 准的亮度检查。 | |||||
norestrictions | B | √ | 移除生物生成的特定限制 (通常是光照等级)。 | |||||
inliquid / inwater / inlava / inair | B | √ | 允许怪物生成在任何流体/水/岩浆/空气中。 这将会忽略怪物物生成的特定限制。 | |||||
isnotcolliding | B | √ | 针对实体实现的检查。如果你在规则中将默认值作为结果, MC 会自动调用这个检查。对于许多怪物来说,这实际上就是 与方块的碰撞检测 | |||||
difficulty | S | √ | √ | √ | √ | 为以下字符串值的其中一种: easy,normal,hard,peaceful。 | ||
weather | S | √ | √ | √ | √ | 字符串值,可以是 rain 或者 thunder。 | ||
category | S /[S] | √ | √ | √ | √ | 为以下值之一:none, taiga, extreme_hills, jungle, mesa, plains, savanna, icy, the_end, beach, forest, ocean, desert, river, swamp, mushroom, nether。这代表当前生物群系的类别。 | ||
hostile / passive | B | √ | √ | √ | √ | 只匹配敌对或被动生物。 | ||
seesky | B | √ | √ | √ | √ | 如果方块露天,则为 true。 | ||
structure | S | √ | √ | √ | √ | 要检测的结构的注册名。这样,你就可以确保一条规则只在村庄内 启动(举例来说)。对模组结构也应起效。 | ||
mob | S/[S] | √ | √ | √ | √ | 怪物的注册名,如“minecraft:creeper”。模组怪物同样生效。 | ||
mod | S /[S] | √ | √ | √ | √ | 模组 ID。借助这个,你可以阻止特定模组的所有怪物生成。 | ||
block | S/ [S]/ JSON | √ | √ | √ | √ | 一个方块过滤器,如上文所述。 | ||
blockoffset | JSON | √ | √ | √ | √ | modify the position of the block that is being used by the block test (or the setblock action). This json can contain tags like x, y, or z which will be added (as offset) to the original block position or else the boolean tag look in which case the position will be the position the player is looking at (only in case there is a player involved which isn't the case for spawn.json) | ||
biome | S/[S] | √ | √ | √ | √ | 当前方块所处的群系 (比如:"minecraft:plains" )。 | ||
biometype | S/[S] | √ | √ | √ | √ | 群系类型(来自群系辞典)。 例子:WARN,COLD,ICY,DESERT, 和 DESERT_LEGACY。 | ||
dimension | S/[S] | √ | √ | √ | √ | √ | the dimension of the current block or player (for example "minecraft:overworld") | |
dimensionmod | S/[S] | √ | √ | √ | √ | the mod of the dimension. You can use this to have a rule work in all dimensions from a given mod | ||
random | F | √ | √ | √ | √ | this will succeed rule if a random number is less than this number. So if you want to have a rule that fires with 10% chance then use 0.1 here | ||
player / fakeplayer / realplayer | B | √ | √ | indicating if the mob was killed by a player (fake or real), a fake player (automation that behaves like a player) and a real player | ||||
projectile / explosion / magic / fire | B | √ | √ | indicating if the mob was killed by a projectile, explosion, magic or fire | ||||
source | S/[S] | √ | √ | the damage source. Some sources are 'lightningBolt', 'lava', 'cactus', 'wither', 'anvil', 'hotFloor', 'inWall', 'cramming', ... | ||||
playerhelditem / offhanditem / bothhandsitem | S/ [S]/ JSON | √ | √ | √ | √ | a representation of the item(s) that the playe r is holding in his/her main hand (or offhand). Use a correct item filter (or list of item filters) | ||
incity / instreet / inbuilding / insphere | B | 失落的城市 | √ | √ | √ | √ | check if the current position is in a city, stree, building or city sphere | |
gamestage | S | 游戏阶段 | √ | √ | √ | the current game stage. When a player is not really present (like with spawn.json) the closest player is used |
行为
本节列出了每种规则类型的所有行为 。
Spawn and SummonAid
spawn.json 支持以下行为:
result:"deny"、"allow"、"default" 或未指定。如果你不指定一种 result ,其他怪物控制模组所决定的任何结果将被保留;如果你指定 result,则 In Control 将接管怪物的生成(因为 In Control 规则将最后触发)。使用 "deny" 来阻止怪物生成。如果使用 "allow" ,则即使原版通常不允许(即光线过多的情况),In Control 也会允许怪物生成。如果使用 "default" ,那么如果没有足够的光线,怪物生成仍然可能会被遏制。除非使用 "deny" ,否则你可以使用以下任何操作:
nbt:允许你将 NBT 添加到生成的生物。
customname:允许你自定义生成的生物的名字。
healthmultiply:浮点数,表示生成的生物的最大生命值的乘数。 例如,在这里使用 2 会使生成的怪物生命值增加一倍。
healthadd:浮点数,用于增加生物的最大生命值。
speedmultiply:浮点数,表示生物速度的乘数。
speedadd:浮点数,用于增加生物的速度。
damagemultiply:浮点数,表示生物造成伤害的乘数。
damageadd:浮点数,用于增加生物的伤害。
angry:布尔值,这表明怪物是否会被最近的玩家激怒。 对于僵尸猪人来说,这会让他们立即对玩家实施攻击,末影人、狼也一样。
potion:单个字符串或字符串列表。每个字符串代表一种药水效果,如下所示:<potion>,<duration>,<amplifier>。 例如“minecraft:invisibility,10,1”。
helditem:单个字符串或字符串列表。每个字符串都代表生成的怪物将在其手中携带的可能物品。这仅适用于允许这样做的生物,例如骷髅和僵尸(不允许的,例如狼)。你还可以通过在字符串前面添加“<number>=”来指定权重。像这样:"1=minecraft:diamond_sword"、"2=minecraft:iron_sword"。
armorboots:单个字符串或字符串列表。代表生成的怪物将穿的随机靴子。
armorhelmet:单个字符串或字符串列表。代表生成的怪物将穿的随机头盔。
armorlegs:单个字符串或字符串列表。代表生成的怪物将穿的随机护腿。
armorchest:单个字符串或字符串列表。代表生成的怪物将穿的随机胸甲。
此外,还支持"gamestage"、"playerhelditem"和相关标签(与玩家相关联)。这种情况下,最近的玩家将被用作决定规则的基础。
额外的生成
支持与 spawn.json 相同的条件。但对于 mincount 和 maxcount,你必须使用格式"<amount>,<mob>"。此规则文件不支持行为,而是支持具有以下结构的怪物条目:
mob:诸如"modid:name"的条目。例:"minecraft:spider"。
weight:一个整数,表示这个生成条目的权重。 即与其他生成相比它的重要性。
groupcountmin:一次生成的最小生物数量。
groupcountmax:一次生成的最大生物数量。
你还可以使用 remove 关键词移除怪物生成条目。这是一个字符串或字符串列表,表示必须从可能的生成中移除的生物。
战利品控制
与大多数其他规则文件不同,Loot 的每个规则都不会被忽略。即评定成功的战利品规则不会阻止其他战利品规则的触发。 Loot 支持以下 actions :
item:字符串或字符串列表,表示将掉落的新战利品。
itemcount:字符串,表示应该掉落多少物品(可选地取决于抢夺等级)。 例如:“5/7-10/20-30”将在无抢夺附魔时掉落 5 件物品,在抢夺 I 时掉落 7-10 件物品,在抢夺 II 或以后掉落 20-30 件物品。
nbt:一个指定用于战利品 NBT 的 JSON。
remove:字符串或字符串列表,表示要从战利品中移除的物品。
removeall:如果存在,则所有物品都将从战利品中移除(包括所有添加新物品的规则)。
经验值
类似于战利品控制,但只是控制你杀死一个怪物可以获得多少经验。战利品控制中的所有关键字都可以在此处使用,除了关于伤害类型(魔法、爆炸等)的关键字。有四个输出适用于这些规则:
result:将此设置为"deny"以完全不提供任何经验。
setxp:设置固定的经验值,而不是默认。
multxp:用这个数字加倍默认经验值。
addxp:用这个数字增加默认经验值。
阶段系统
阶段 系统允许你定义全局条件并为其命名。 然后,其他 In Control 规则可以使用这些阶段,以便它们仅在一个或多个阶段处于活动状态时才处于活动状态。这更有效,因为全局条件每 10 tick 评定一次,而不是每次怪物尝试生成时。此外,它更简洁。阶段仅适用于一组有限的条件(仅适用于全局正确的条件):
mintime 和 maxtime
mindaycount 和 maxdaycount
weather
winter, summer, spring 和 autumn
state
样例
有时最好用例子来解释。 在本节中,我们将提供许多示例,你可以以此为基础制定自己的规则:
阶段
我们在游戏日第 10 天之后定义一个阶段为 true 。然后你可以在所有 In Control 规则中使用此阶段:
[
{
"name": "after_day10",
"conditions": {
"mindaycount": 10
}
}
]
Spawn
此示例仅允许生物在平原生物群系中生成。阻止所有其他群系的生物生成:
[
{
"biome": "minecraft:plains",
"result": "allow"
},
{
"result": "deny"
}
]
只是阻止所有僵尸生成,没有别的事发生:
[
{
"mob": "minecraft:zombie",
"result": "deny"
}
]
阻止所有被动生物在某个维度产生:
[
{
"passive": true,
"dimension": "dimensionmod:funkydim",
"onjoin": true,
"result": "deny"
}
]
只允许苦力怕、骷髅、被动生物生成:
[
{
"mob": ["minecraft:creeper", "minecraft:skeleton"],
"result": "default"
},
{
"passive": true,
"result": "default"
},
{
"result": "deny"
}
]
不允许敌对生物在 50 高度以上生成。低于 50 高度,只允许在石头和圆石上生成:
[
{
"minheight": 50,
"hostile": true,
"result": "deny"
},
{
"maxheight": 50,
"block": ["minecraft:stone", "minecraft:cobblestone"],
"result": "allow"
},
{
"result": "deny"
}
]
使地表上的所有怪物都非常危险。地下有很小的机会产生隐形但弱小的僵尸。此外,地表的僵尸和骷髅会带上头盔:
[
{
"mob": ["minecraft:skeleton","minecraft:zombie"],
"seesky": true,
"result": "allow",
"healthmultiply": 2,
"damagemultiply": 2,
"speedmultiply": 2,
"armorhelmet": ["minecraft:iron_helmet", "minecraft:golden_helmet"]
},
{
"seesky": true,
"hostile": true,
"result": "allow",
"healthmultiply": 2,
"damagemultiply": 2,
"speedmultiply": 2
},
{
"seesky": false,
"random": 0.1,
"mob": "minecraft:zombie",
"result": "allow",
"healthmultiply": 0.5,
"potion": "minecraft:invisibility,10000,1"
}
]
让所有僵尸更缓慢但拥有更多生命值:
[
{
"mob": "minecraft:zombie",
"result": "default",
"healthmultiply": 2,
"nbt": {
"Attributes": [
{
"Base": 0.23,
"Modifiers": [
{
"Operation": 2,
"Amount": -0.5,
"Name": "effect.moveSlowdown 0"
}
],
"Name": "generic.movementSpeed"
}
]
}
}
]
战利品
这里有一些 loot.json 的样例:
使烈焰人只有在被下界要塞中的玩家杀死时才会生成烈焰棒。抢夺等级越高,烈焰棒的数量也会越多:
[
{
"mob": "minecraft:blaze",
"remove": "minecraft:blaze_rod"
},
{
"mob": "minecraft:blaze",
"structure": "Fortress",
"player": true,
"item": "minecraft:blaze_rod",
"itemcount": "2-3/3-4/4-6"
}
]
如果凋灵被木棍杀死,只让凋灵掉落一颗下界之星:
[
{
"mob": "minecraft:wither",
"remove": "minecraft:nether_star"
},
{
"mob": "minecraft:wither",
"player": true,
"helditem": "minecraft:stick",
"item": "minecraft:nether_star"
}
]
在这个例子中,僵尸会掉落附魔钻石剑:
{
"mob": "minecraft:zombie",
"player": true,
"item": "minecraft:diamond_sword",
"nbt": {
"ench": [
{
"lvl": 3,
"id": 22
}
]
}
}
自定义刷怪系统
从 1.16 开始,In Control 支持新的刷怪系统,该系统取代了 potentialspawn 系统。这种类型的规则放在 spawner.json 中。 此文件中的每条规则都代表了在某些情况下生成多个生物的选项。生成系统按维度工作,并且仅尝试每秒生成生物。
警告! spawner.json 只支持这里提到的关键字。不要在这里使用任何其他关键字。其他条件(如生物群系)必须在 spawn.json 中指定。
每个 spawner 规则都包含两个部分:
描述将生成什么以及规则触发频率的部分。
描述生成条件的部分。
每个规则的根目录中都可能有以下 Json 键:
phase:字符串或字符串列表,表示必须激活此规则才能工作的所有 phase 。
mob:单个生物或生物列表(如"minecraft:zombie")。将针对此列表中指定的每个怪物评定整个规则。这是必需的设置。
weights:一个可选的权重列表,将与"mob"指定的怪物结合使用。通过使用权重,你可以控制生成的生物量。
mobsfrombiome:这是一个可以等于"monster"、"creature"、"ambient"、"water_creature"、"water_ambient"或"misc"的字符串。建议使用它而不是手动指定"mob"。这将随机选取一个对当前生物群系有效的怪物(按给定的权重)。
attempts:In Control 尝试找到生成生物的好位置的次数。默认情况下是 1。
persecond:一个浮点数,指示此规则触发的机会。如果这个值为 0.5,那么这个规则有 50% 的机会生成一个怪物(这意味着它平均每 2 秒触发一次)。此值的默认值为 1(这意味着规则每秒触发一次), 最大值也是 1 。
amount:一个包含“最小值”和“最大值”的 json 对象。是 spawner 尝试一次生成的生物数量。两者的默认值为 1。
conditions:包含一组条件的 json 对象(见下文)
在 conditions中可以使用以下 json 键(并且只有那些,但可以与其他条件与常规生成规则相结合):
dimension:单个维度或维度列表(如 "minecraft:overworld" )。这是必需的。如果不指定任何维度,则不会发生任何事情。
mindaycount 和 maxdaycount:允许此规则起作用的最小/最大天数.
mindist 和 maxdist:用于控制生成的怪物距离玩家的最小/最大距离。默认情况下等于 24/120。
minheight 和 maxheight:生成的最小/最大高度。默认情况下是 1/256。
norestrictions:移除特定生物(通常与光照相关)的生成限制。
inliquid:如果为 true,则允许怪物在任何液体中生成(将忽略它可能对在液体中生成的生物特定限制)。
inwater:如果为 true,则允许怪物在水中生成(将忽略可能的在液体中生成生物的特定限制)。
inlava:如果为 true,则允许怪物在熔岩中生成(将忽略可能的在液体中生成生物的特定限制)
inair:如果为 true,则允许怪物在空中生成(将忽略可能的在液体中生成生物的特定限制)
maxthis:给定类型的最大生物数量。
maxtotal:最大生物总数。
maxpassive:最大被动生物总数。
maxhostile:最大敌对生物总数。
maxneutral:最大中立生物总数。
maxlocal:这将导致怪物生成计数将包含玩家周围的刷怪笼。小心使用。
样例
在玩家附近的水中随机生成村民:
[
{
"mob": "minecraft:villager",
"persecond": 0.5,
"attempts": 20,
"amount": {
"minimum": 2,
"maximum": 5
},
"conditions": {
"dimension": "minecraft:overworld",
"inwater": true,
"mindist": 5,
"maxdist": 20,
"minheight": 45,
"maxheight": 175,
"maxthis": 20
}
}
]
在以下示例中,我们在第 20 天后全局增加敌对生物的生成(使用阶段)。
首先,phases.json:
[
{
"name": "after_day20",
"conditions": {
"mindaycount": 20
}
}
]
然后,spawner.json:
[
{
"phase": "after_day20",
"mobsfrombiome": "monster",
"persecond": 0.5,
"attempts": 20,
"amount": {
"minimum": 2,
"maximum": 5
},
"conditions": {
"dimension": "minecraft:overworld",
"maxhostile": 200
}
}
]
内容译自 In Control 的 wiki 。部分未翻译完。