Repository navigation
Backpack and Pickup zh
简体中文 | English
这一页讲两件事:怪物凭什么有方块可放(虚拟方块背包),以及怪物怎么把地上的东西收进来(拾取)。搭路动作本身怎么选落点、怎么摆方块,请看 放置与搭路;出生时到底发不发装备,请看 出生装备闸门。
方块背包是虚拟的:它不是箱子、没有界面、也没有物品栏格子,只是每只怪物身上的一份"条目 + 数量"清单,专门喂给放置行为。
| 特征 | 说明 |
|---|---|
| 不开界面 | 玩家没有任何办法打开或翻动它 |
| 死亡不掉落 | 怪物死亡时背包里的方块不会掉出来,也不会变成掉落物 |
| 不写存档 | 服务器重启、/mobinteract reload 后会重新掷骰;单纯的区块卸载不会(1.4.0 起档案跨卸载、跨变形保留) |
| 副手可见 | 有背包的怪物会把当前方块拿在副手,数量 = 该条目的库存;主手留给镐子 |
| 不覆盖原有副手 | 怪物原本副手已有物品时不覆盖,被换下的物品掉落概率为 0
|
| 可被查看 |
/mobinteract inspect 会列出这只怪背包里每个条目与数量 |
要点:背包的唯一用途是搭路消耗。它不参与战斗,也不影响挖掘速度——挖掘只看主手有没有镐子(见 挖掘)。
只有一条判定路径:先过出生闸门,再看背包概率。没过闸门的怪物永远拿不到方块,也没有任何"事后补发"的通道。
怪物进入世界时,equip.yml 的 chance(默认 0.10)先掷一次骰子;通过之后,才在里面再抽两样东西:
通过闸门(equip.yml 的 chance,默认 0.10)
├── 抽镐子:mining.yml tool.give.chance(默认 0.80)
└── 抽背包:placement.yml backpack.chance(默认 0.65)
所以"出生时同时带镐子和方块"的比例是两级概率相乘的结果,默认配置下远低于 65%——0.10 × 0.65 只有约 6.5%。想提高"会搭路的怪"的数量,先调 equip.yml 的 chance,再考虑 backpack.chance,否则只调后者收益很小。
闸门掷一次就定终身:没过闸门的怪物,无论什么时候需要放置方块,都不会再补抽背包。因此"带方块"的怪物比例一定落在 equip.yml 的 chance 以内,不会悄悄超标。镐子同理。
这也是 pickup.only-equipped(默认开启)存在的原因:如果拾取不看闸门,一只空手怪只要走到地上的方块旁边,就能自己攒出背包,闸门就被绕过去了。
如果你想让世界里的怪物更容易搭路,可调的旋钮只有
equip.yml的chance(以及按世界覆盖),backpack.chance只是在闸门之内再筛一遍。
闸门结果不会事后重算。想给世界里已有的怪物补装备,只有两条路:让它重新生成,或者手动把东西塞给它。改配置 + /mobinteract reload 只影响之后新生成的怪物。
| 配置 | 默认 | 含义 |
|---|---|---|
backpack.chance |
0.65 |
拥有背包的概率(过闸门之后再乘这一层) |
backpack.kinds.min / .max
|
1 / 4
|
背包里有几种方块,闭区间 |
backpack.total.min / .max
|
6 / 20
|
背包里一共多少个方块,闭区间 |
几条容易踩的规则:
- 区间都是闭区间,
min与max本身都能取到。 -
max < min时不会报错,插件会自动把两者交换并打印一次告警。看到告警就去把配置改回来。 - 种类数与总数量是分别独立掷的:可能掷出 4 种共 20 个,也可能掷出 1 种共 6 个。总数量不足以覆盖种类数时会截断种类(见下一节)。
- 默认的 20 个上限配合
placement.max-per-chase(默认32)意味着:一只怪单次追击通常放不完整个背包,库存往往还有剩。
生成顺序是固定的四步,理解这四步就能预判背包长什么样:
-
掷种类数:从
kinds.min..kinds.max里随机取一个整数。 -
按权重无放回抽样:从
entries列表里按每条自己的weight抽条目,抽过的不再放回,所以同一id不会在一个背包里出现两次。 -
掷总数量:从
total.min..total.max里随机取一个整数。 - 把总数分配到已选种类:每个种类至少 1 个;如果总数量小于种类数,则截断种类——多出来的种类被丢弃,保证"每种至少一个"这条不变式。
举例(示例,非默认值):掷出 3 种、总数 6 个 → 3 种各先占 1 个,剩下 3 个再分到这几个种类上。如果这种情况掷出总数 2、种类 3,则只会保留 2 种,各 1 个。
抽样的"无放回"只作用于种类。放置时每次消耗的具体是哪一个方块,按 entries 里各条的原始 weight 重抽,所以权重高的条目会反复出现——权重表达的是"抽中的倾向",不是库存里的数量比例。
entries 是 placement.yml 顶层的列表(不在 backpack: 之下),每条必须有唯一 id、type、weight。
type |
专属字段 | 行为 |
|---|---|---|
block |
material,可选 block-data
|
放一个普通方块 |
tnt |
fuse-ticks |
直接生成一个已点燃的 TNT 实体,不先占一格 |
fluid |
fluid: WATER / LAVA,consume-bucket
|
倒流体,consume-bucket 决定是否扣除桶 |
默认条目是 6 种普通方块 + TNT + 熔岩桶 + 水桶,全部是低价值自然方块,并且刻意不含沙子、沙砾这类受重力影响的方块——背包里一旦混进会塌的方块,搭出来的桥就会自己垮。
两个与背包直接相关的注意点:
- 条目被抽中但库存为 0 时,这一条放不出来,放置行为会跳过它。
- TNT / 桶属于功能方块:
placement.special-only-under-target为true(默认)时它们只会被放在目标所在的那一格,不参与搭路。所以它们在背包里存在感很低,别指望靠它们垫高。 -
tnt的fuse-ticks在随插件生成的placement.yml里是60;只有在键被删掉时才会用到内置兜底值80。配置里留着这个键时以文件为准。
- 每成功放置一格,就消耗一个方块。搭楼梯、垫高、搭桥、往下搭一格都算一格。
- 抽中的方块在放置动作开始时就立即从库存扣除(相当于预留)。放置失败、落点被占、朝向不对导致转向失败,都会把方块退回库存——所以"放了半天没搭起来"不会偷偷吃掉方块。
- 只有真正放下方块的动作才扣库存。单纯"走过去"(让位、上岸、走上已有的台阶)不消耗方块。
- 库存见底后放置行为自然停下来,不用额外配置。真正的次数上限是
placement.max-per-chase(默认32)与单次追击的进度,细节见 放置与搭路。 - 通过拾取攒下来的方块进的是同一个背包,与出生时抽到的条目共用库存。
拾取让怪物主动去捡地上的东西。总开关有两个,任一关闭都不生效:
| 键 | 默认 | 说明 |
|---|---|---|
placement.enabled |
true |
放置的总开关,同时控制拾取 |
pickup.enabled |
true |
拾取自己的开关;关闭后原版拾取保持原样 |
判定节奏与距离:
| 键 | 默认 | 说明 |
|---|---|---|
pickup.radius |
8.0 |
搜索半径:水平 radius 格,竖直 max(2, radius × 0.5) 格 |
pickup.reach |
1.8 |
真正捡起的距离,必须小于 radius
|
- 每只被接管、且通过世界 / 生物筛选的怪物每秒检查一次,挑出最近的"值得捡"的掉落物,先下寻路指令走过去,进入
reach才真正把掉落物移除。 -
reach必须严格小于radius。写反了(比如radius: 1.0、reach: 1.8)不会报错,插件会自动把reach下调为radius / 2并告警。想让怪物"远远看见就冲过去",把radius调大,reach保持默认即可。 - 竖直方向的搜索范围是
max(2, radius × 0.5):默认radius: 8.0时约 4 格,也就是能捡到脚下方坑里的东西,但捡不到头顶十几格外的。
| 类别 | 捡不捡 | 去处 |
|---|---|---|
entries 里列出的方块 |
✅ | 进方块背包(pickup.blocks) |
| 镐子 | ✅ | 主手空着时进主手(pickup.pickaxes) |
| 其他可放置方块(钻石块、下界合金块等) | ❌ | 留在地上 |
| 有重力的方块(沙子、沙砾等) | ❌ | 留在地上 |
| 硬黑名单方块(基岩、刷怪笼等) | ❌ | 留在地上 |
| 非方块物品(武器、食物、盔甲等) | ❌ | 留在地上 |
补充规则:
- 有重力的方块一律不捡:放下去会塌,捡了只会污染背包、搭出会垮的路。
-
只捡背包用得上的:方块材质必须已经出现在
entries里(type: block的条目)才会被捡,其余一律留在原地。原因就在那个 15 秒清理上:怪物存进去的方块到期会被销毁,捡走玩家一块钻石块等于静默删掉它。想让怪物捡某种方块,先给entries加一条。 - 镐子进主手,拿不住就扔回地上:主手已有物品时捡不了镐子,镐子会掉回地面,不会被凭空吞掉。想让它捡镐子,先让主手空出来。
-
捡到的镐子按原版规则掉落:玩家击杀怪物能把它拿回来,不受
tool.give.drop-chance(插件发放的镐子默认0.0不掉落)约束。 - 忙碌时会被打断吗:正在挖掘或放置的怪物不会被拾取打断,会先把手上的事做完。
- 原版顺手拾取会被改写:原版有时会把掉落物直接塞进怪物手里,插件会把这个结果改成"方块进背包、镐子进主手",避免背包库存和副手显示对不上。
| 键 | 含义 |
|---|---|
pickup.only-equipped |
只有通过出生装备闸门的怪物才捡东西 |
这个开关是给"装备比例失控"准备的保险:出生闸门的本意是"带镐子 + 带方块"的怪物合计不超过 equip.yml 的 chance(默认 0.10)。但拾取是后天获得装备的通道——一只空手怪只要走到地上的方块旁边,就能自己攒出一个背包,闸门形同虚设。
打开 pickup.only-equipped 后,捡东西的资格也被闸门管住:没通过闸门的怪即使站在掉落物上也不会伸手。这样"带镐子 + 带方块"的比例才能真的压在 equip.yml 配置的数字以内。
手册的
placement.yml键表里没有列出这一项的默认值。以你服务器上实际生成的placement.yml为准;如果文件里没有这个键,说明你这版还没有这项开关。
这是最容易被当成 bug 的一条:
- 区块卸载不再重新掷骰:走出视距、区块卸载都不会动档案,1.4.0 起连怪物变形(僵尸变溺尸之类)也保留,所以不可能靠"走远再回来"刷出一包新方块。
-
服务器重启会重新掷骰(档案只在内存里),
/mobinteract reload同样会让世界里已有的怪重掷。 - 拾取来的方块随实体移除一起消失,不会掉回地上。
- 因此"我明明看到它捡了一堆圆石,回来就没了"是预期行为,不是数据丢失。
对服主的实际影响:依赖怪物长期囤积方块来搭长桥的玩法不可靠——placement.bridge-max-length(默认 24)这种长距离搭路,怪物往往在中途就因为重新加载而重置库存。想让长距离搭路稳定,靠的是提高 backpack.total.max 与 placement.max-per-chase,而不是期待它慢慢攒。顺带一条:怪物死亡时背包里的方块不会掉落,所以刷怪 farm 不会因为背包而多出方块。
以下全部是默认值,把整段贴进 placement.yml 即可,键的位置与缩进与生成的文件一致:
# placement.yml
backpack:
# 拥有背包的概率(出生闸门通过之后再乘这一层)
chance: 0.65
# 背包总方块数(闭区间)
total:
min: 6
max: 20
# 方块种类数(闭区间)
kinds:
min: 1
max: 4
pickup:
# 拾取总开关;placement.enabled 也会一并控制拾取
enabled: true
# 搜索半径:水平 radius,竖直 max(2, radius * 0.5)
radius: 8.0
# 真正捡起的距离,必须小于 radius
reach: 1.8
# 方块进背包
blocks: true
# 镐子进主手
pickaxes: trueentries 不在 backpack: 里面,它是 placement.yml 的顶层列表,保持默认(6 种普通方块 + TNT + 熔岩桶 + 水桶)即可;要改条目结构,注意每条都要有唯一的 id、type、weight。
一个常见的"让怪更能搭路"的调整方向(改完记得 /mobinteract reload):
backpack:
chance: 0.65 # 先别急着拉到 1.0
total:
min: 12 # 抬高下限,减少"刚搭两格就没料"的情况
max: 32
kinds:
min: 1
max: 4只调 backpack.chance 的收益受 equip.yml 的 chance 压制;想让整片世界的怪都更能搭路,先看 出生装备闸门。
| 现象 | 先看什么 |
|---|---|
| 怪物完全不捡东西 |
placement.enabled 与 pickup.enabled 是否都为 true;世界 / 生物筛选是否把它排除了;是否开了 pickup.only-equipped 而它没过闸门 |
| 捡了方块但从不放置 | 背包是否真的非空(/mobinteract inspect);是否已经用满 placement.max-per-chase;是否在放置冷却里;有没有追击目标 |
| 主手一直有东西,捡不了镐子 | 主手被占时镐子会被扔回地上;先清空主手,或让 tool.require-pickaxe 之外的物品别占位 |
| 沙子、沙砾躺在脚边不捡 | 预期行为:有重力的方块不捡 |
| 怪物背包里的方块种类很奇怪 |
entries 的 weight 决定抽中倾向;权重高的条目会频繁出现 |
| 捡到的方块"过一会儿没了" | 服务器重启或 reload 会让怪物重掷,见第 10 节 |
| 大量怪物同时冲同一堆掉落物 | 拾取按"最近的值得捡的掉落物"逐个分配,没有全局排队;密集刷怪时属正常表现 |
需要看具体数值时,/mobinteract status 会打印世界 / 生物筛选、放置上限与拾取配置的摘要;/mobinteract inspect 看准星附近的怪物能看到它的背包条目、主手镐子、单次追击已放置数与最近行为。命令与权限见 命令与权限,文本措辞在 message.yml 里改。
MobInteract · QQ 群 995974858 · Repository · Releases · Issues · English | 简体中文