Repository navigation
Placement zh
简体中文 | English
怪物追你到悬崖边,然后从怀里掏出一块圆石垫在脚下——这就是放置行为。被接管的僵尸、骷髅、灾厄村民、猪灵、女巫会用一个虚拟方块背包里的材料自己搭路:搭楼梯、垫柱子、铺桥。
这一页讲清楚四件事:它什么时候动手、三种搭法各自怎么判定、为什么大多数时候它什么都不放,以及所有 placement.* 键和 entries 条目怎么写。
| 情况 | 它会做什么 | 消耗方块 |
|---|---|---|
| 目标在前面,只高 1 格,或脚下本来就有路 | 直接走上去 | 不消耗 |
| 目标在前上方,横向 ≥ 4 格,高度差 2 格以上、不到 8 格 | 搭楼梯:一级同时前进一格、抬高一级 | 每级 1 块 |
| 目标很高(高度差 ≥ 8 格),或就在自己正上方 | 原地垫高:先找一列空列,再逐格往上叠 | 每格 1 块 |
| 目标在沟对面,或需要先升到同一高度 | 先垫高到目标高度,再横向搭桥 | 每格 1 块 |
| 目标明显更低,前方是深沟 | 往下搭一格,正好一步落差 | 1 块 |
| 平地上追人、只差一两格 | 什么都不放,交给原版寻路 | — |
四个前提要同时满足:
-
有追击目标。默认只认当前 AI 的追击对象;
placement.vertical-aggro: true(默认)时,如果上方 16 格内有可见的生存 / 冒险模式玩家而怪物还没索敌,它会主动锁定——垫高逻辑要靠这一条才生效。 -
背包非空。要么出生时抽到了背包(
backpack.chance,默认0.65),要么是拾取攒下来的方块(见 背包与拾取)。 -
本次追击没放满
placement.max-per-chase(默认32),并且不在放置冷却中。 -
抽到的条目能用来搭路。如果抽中的是 TNT / 水桶 / 熔岩桶,
placement.special-only-under-target: true(默认)时它们只放在目标所在的那一格,完全不参与搭路——背包里只有功能方块时,它不会为了赶路铺桥。
真正触发放置的是两件事:目标和自己在高度上有差(上不去),或者中间隔着沟 / 落差(过不去)。
反过来说,以下情况它不会动手:
| 情形 | 原因 |
|---|---|
| 目标离得很近、高度差不超过 2 格 | 原版近战 / 跳跃就能解决,插不上手 |
| 前方落差 ≤ 3 格 | 原版自己就能吃下 3 格落差,直接走下去更快 |
| 前方或前方脚下是液体 | 液体一律回避,不搭桥也不搭楼梯 |
| 正在挖掘 | 挖掘与放置互斥,挖掘期间不会启动新的搭路 |
世界 / 生物被筛掉,或 enabled: false
|
整个行为不生效 |
每一步都按下面的顺序试,前一档能解决就不进下一档:
近战 → 上岸 → 抬高(楼梯 / 垫高)→ 搭桥 / 往下搭
| 条件 | 动作 |
|---|---|
| 横向 < 1 格,且目标不高出 2 格 | 不放置,交给原版近战 |
| 自己泡在水里(脚所在格或它下面那格是液体) | 先走到附近干燥落脚点(不消耗方块);目标也在水里就直接游过去 |
高度差 ≥ 2 格,横向 ≥ stair-min-distance(4.0),高度差 < pillar-far-height(8) |
搭楼梯 |
高度差 ≥ pillar-far-height(8),或横向 ≤ pillar-near-distance(2.0) |
原地垫高 |
| 其余情况(目标在沟对面、需要先升到同一高度) | 先垫高到目标高度,再横向搭桥 |
目标明显更低(vertical-drop,默认 1.5),前方是深沟 |
往下搭一格 |
顺带说清楚两个边界:只高 1 格的一律交给原版跳跃,不搭楼梯也不垫高;placement.bridge-max-length(默认 24)之外的远目标既不搭桥也不搭楼梯,避免追一只远处的怪就铺一条天桥。
| 动作 | 方块放在哪 | 之后怎么走 |
|---|---|---|
| 楼梯 | 身前、与脚同高的那一格(只沿水平差更大的那条轴) | 走到该格上方,跳上去同时前进一格 |
| 垫高 | 自己脚下这一格 | 先抬高一格,再放方块;不做朝向检查 |
| 搭桥 | 前方脚下那一格(往下搭时再低一格) | 走到刚铺那格上方 |
| 走过去 | 选定的垫高列 / 已经铺好的那格 | 只下寻路指令,不放方块 |
细节:
- 水平方向永远只走主轴向(水平差大的那条轴),所以成品是一条楼梯、一根柱子、一条 L 形桥,不会散成一地小台阶。
- 垫高列选定后会记在怪物身上,不会每几 tick 换一个落点;走不过去 / 放不下的列会记入「本次追击不再尝试」,再换一列。搜索范围由
placement.lane-search-radius(默认3,0= 只看自己脚下)决定。 - 垫高为什么不做朝向检查:低头看脚下会让怪物卡成反复转向失败,所以这一档故意跳过。
- 条目在动作开始时立即从背包扣除(预留);放置失败 / 位置被占 / 转不过去会退回,所以放置次数永远不会超过库存。
-
建路很快:楼梯 / 垫高 / 桥面每格之间只等约 0.2 秒;只有功能方块(TNT / 桶)才用
placement.cooldown-seconds(默认3.0)。 - 有背包的怪物会把当前方块一直拿在副手(数量 = 库存,主手留给镐子);原本副手有物品时不会被覆盖,放在副手的物品掉落概率为 0。
- 放置位置被同伴占住,或自己被挤出一格范围时,会重新规划(最多 4 次),而不是直接失败进冷却。
这张表就是「它为什么不帮我铺路」的答案:
| 情形 | 结果 |
|---|---|
| 前方已有现成台阶(只高 1 格),或前方脚下本来就有实地 | 直接走上去,不垫方块 |
| 前方落差 ≤ 3 格 | 直接走下去,不铺路 |
| 前方 / 前方脚下是液体 | 不搭楼梯、不铺桥 |
| 前方是两格以上的墙 | 不硬搭,交给原版绕行或挖掘行为 |
| 落点那一格里有任何生物(含追击目标) | 不放置;但「前方那一格站着目标」不算挡路(目标本身不计入占位判断) |
| 头顶(脚上方第 2 格)被方块压着,挖掉就能继续垫 | 有镐子的怪物交给挖掘行为先挖穿;没镐子 / 挖不动 → 换一列 |
被同伴挤住(placement.spread-crowd) |
先让位散开,本次不放置 |
两条最容易踩到的:平地上不铺路(落差 ≤ 3 格直接走下去,只有更深的沟才搭),以及有人挡着就等——落点被占时它宁可站着等,也不会往同伴脑袋上放方块。
另外 placement.max-per-chase 是硬上限:楼梯 / 垫高 / 搭桥都是「一格一次」,一次追击放满 32 次就停手等下一次追击。所以桥还没铺到对岸就停住,通常是这个值太小(1.2.0 之前的默认值 10 更容易出现)。
| 键 | 默认 | 说明 |
|---|---|---|
placement.max-distance |
4.0 |
怪物到放置位置的最大距离;require-adjacent 为 true 时以邻接为准,本项只作上限 |
placement.require-adjacent |
true |
放置位置必须紧挨着:水平 ±1,竖直 −2..+1(−2 专用于往下搭一格);设 false 退回按 max-distance 判断 |
placement.max-facing-angle |
60 |
放置前朝向夹角上限(度)。超出先转头重试,多次转不过去就取消这次放置(条目退回背包) |
placement.max-per-chase |
32 |
单次追击最多放置次数(0..512)。目标变化或丢失后重置 |
placement.cooldown-seconds |
3.0 |
功能方块冷却(建路只用约 0.2 秒) |
placement.build-delay-ticks |
6 |
「短搭建进度」延迟:选中条目到真正放置之间的等待(tick) |
placement.retry-seconds |
1.5 |
放置被拒绝 / 失败后的重试冷却 |
placement.vertical-drop |
1.5 |
判定「目标明显更低」的高度差,触发往下搭一格 |
| 键 | 默认 | 说明 |
|---|---|---|
placement.stair-up |
true |
是否允许搭楼梯 |
placement.stair-min-distance |
4.0 |
横向 ≥ 该值优先搭楼梯 |
placement.pillar-up |
true |
是否允许原地垫高;关闭后高处目标只剩楼梯 / 搭桥两种办法 |
placement.pillar-up-max-height |
16 |
单次追击最多垫高格数(0 = 不限,防止一路垫上天) |
placement.pillar-far-height |
8 |
高度差 ≥ 该值一律改用垫高,不搭楼梯 |
placement.pillar-near-distance |
2.0 |
横向 ≤ 该值一律原地垫高;不小于 stair-min-distance 时自动下调并告警 |
placement.bridge |
true |
是否允许横向搭桥 |
placement.bridge-max-length |
24 |
离目标超过该距离不再搭桥 / 搭楼梯 |
| 键 | 默认 | 说明 |
|---|---|---|
placement.lane-search-radius |
3 |
挑垫高列的水平搜索半径(0 = 只看自己脚下) |
placement.smart-ascend |
true |
先侦察原版寻路 / 附近台阶,必要时才搭 |
placement.spread-crowd |
true |
挤在一起时让位,避免多只怪叠在同一格上谁也放不了 |
placement.spacing-radius |
1.0 |
判定「挤在一起」的中心距离 |
placement.special-only-under-target |
true |
功能方块只放目标那一格,不用于搭路;关掉后它们和普通方块一样能搭路 |
placement.vertical-aggro |
true |
目标在上方但没索敌时,主动锁定上方 16 格内可见的玩家 |
placement.block-lifetime-seconds |
15 |
放置方块的存在时间(0 = 永久,上限 86400) |
文件级还有几个键:config-version(当前 2,只用于旧文件迁移)、enabled(true,总开关,同时控制拾取)、worlds.whitelist / worlds.blacklist(白名单留空 = 所有世界,黑名单优先)、mob-whitelist / mob-blacklist(留空 = 默认人形集合,["*"] = 全部生物)。
每个条目必须有唯一的 id、一个 type、一个 weight。weight 是被抽中 / 被选中的相对权重,越大越常见。
type |
需要的字段 | 行为 |
|---|---|---|
block |
material(可选 block-data) |
放一个普通方块,搭路的主力 |
tnt |
fuse-ticks |
直接生成一个已点燃的 TNT 实体,不会先放 TNT 方块;引信单位是 tick,20 tick = 1 秒 |
fluid |
fluid: WATER 或 LAVA,加 consume-bucket
|
倾倒流体;consume-bucket: true = 放一次连桶一起从背包消失,false = 桶被回收,同一个桶可以反复倒 |
默认条目(6 种普通方块 + TNT + 熔岩桶 + 水桶):
id |
type |
weight |
关键字段 |
|---|---|---|---|
cobblestone |
block |
30 |
material: COBBLESTONE |
dirt |
block |
22 |
material: DIRT |
stone |
block |
18 |
material: STONE |
andesite |
block |
14 |
material: ANDESITE |
oak_planks |
block |
8 |
material: OAK_PLANKS |
netherrack |
block |
6 |
material: NETHERRACK |
tnt |
tnt |
3 |
fuse-ticks: 60(3 秒) |
lava_bucket |
fluid |
2 |
fluid: LAVA,consume-bucket: true
|
water_bucket |
fluid |
4 |
fluid: WATER,consume-bucket: true
|
几点要留意:
- 默认条目只含低价值自然方块,不加钻石块 / 下界合金块这类高价值方块,也不含沙子 / 沙砾这类受重力影响的方块——后者放下去会塌,搭出来的桥和柱子立不住。想加条目可以自己加,但别加有重力的。
- 背包里装多少块、装几种,由
backpack.*决定,不在这一页展开,见 背包与拾取。 - 功能方块在哪落地由
placement.special-only-under-target决定,默认只在目标那一格。
| 项 | 行为 |
|---|---|
| 默认存在时间 |
placement.block-lifetime-seconds: 15(0 = 永久,只保留来源标记) |
| 清扫方式 | 全局清扫器每 20 tick 扫一次到期时间表 |
| 批处理 | 到期方块按区块合并成一次区域任务,一次删一批 |
| 删前校验 | 再次比对方块类型;玩家后来换掉的方块只丢记录,不误删 |
| 区块未加载 | 该条延后 5 秒重试,不丢记录 |
| 上方有生物 | 到期时方块上方 1.2 格内有活着的生物(含正在过桥的怪物)→ 再延一个完整周期 |
| 卸载 / 关服 | 删掉全部登记方块(含设为永久的):先落盘 pending-blocks.txt,再「直接删 + 失败则投递区域任务」,下次启动兜底再清 |
| 容量 | 登记表上限 5 万条,超出按插入顺序淘汰最旧记录 |
-
15秒是按「一段 20 格的桥约 10 秒铺完」定的:刚好够怪物走到对岸。桥更长、柱子更高就把它调大,否则怪物还在桥上走、身后的方块已经开始消失。 - 有人站在上面就续期,所以不会出现「脚下的桥突然没了」。代价是怪物站在自己的方块上不动时,那块方块会一直留着。
- 换过的方块只丢记录不误删:玩家在怪物放下的方块位置换了别的方块,清扫器发现类型对不上就只清记录。
- TNT 与流体同样登记、同样清理(TNT 爆炸后自己就没了)。
- 登记表是内存态:正常关服会删干净并留下清单,运行期直接被强杀(走不到卸载流程)则不会留下清单,这批方块只能手动清。
下面是与放置搭路直接相关的完整片段(backpack.* 与 pickup.* 见 背包与拾取):
config-version: 2
enabled: true # 总开关,同时控制拾取
worlds: # 白名单留空 = 所有世界;黑名单优先
whitelist: []
blacklist: []
mob-whitelist: [] # 留空 = 默认人形集合;["*"] = 全部生物
mob-blacklist: []
entries: # id 必须唯一,weight 是相对权重
- id: cobblestone
type: block
weight: 30
material: COBBLESTONE
- id: dirt
type: block
weight: 22
material: DIRT
- id: stone
type: block
weight: 18
material: STONE
- id: andesite
type: block
weight: 14
material: ANDESITE
- id: oak_planks
type: block
weight: 8
material: OAK_PLANKS
- id: netherrack
type: block
weight: 6
material: NETHERRACK
- id: tnt
type: tnt
weight: 3
fuse-ticks: 60 # 20 tick = 1 秒,60 = 3 秒
- id: lava_bucket
type: fluid
weight: 2
fluid: LAVA
consume-bucket: true # true = 倒一次连桶消耗;false = 桶可反复用
- id: water_bucket
type: fluid
weight: 4
fluid: WATER
consume-bucket: true
placement:
max-distance: 4.0 # 放置距离上限
require-adjacent: true # 水平 ±1,竖直 −2..+1(−2 专用于往下搭一格)
max-facing-angle: 60 # 放置前朝向夹角上限(度)
max-per-chase: 32 # 单次追击最多放置次数(0..512)
cooldown-seconds: 3.0 # 只对功能方块生效
build-delay-ticks: 6
retry-seconds: 1.5
vertical-drop: 1.5 # 判定「目标明显更低」的高度差
block-lifetime-seconds: 15 # 0 = 永久,上限 86400
stair-up: true # 楼梯
stair-min-distance: 4.0
pillar-up: true # 垫高
pillar-up-max-height: 16 # 0 = 不限
pillar-far-height: 8
pillar-near-distance: 2.0 # 必须小于 stair-min-distance
bridge: true # 搭桥
bridge-max-length: 24
lane-search-radius: 3 # 0 = 只看自己脚下
smart-ascend: true
spread-crowd: true
spacing-radius: 1.0
special-only-under-target: true
vertical-aggro: true改完用 /mobinteract reload 热重载即可,不必重启(见 命令与权限)。
| 项目 | 说明 |
|---|---|
placement.block-lifetime-seconds |
1.2.0 起默认 15(旧默认 60)。插件不会改写你的文件,旧值请手动改 |
placement.max-per-chase |
1.2.0 起默认 32(旧默认 10)。文件里 config-version: 1 且值仍是 10 时按 32 运行并在控制台告警,建议手动改大 |
config-version |
当前 2;迁移只做 max-per-chase 这一项,其它键的值一律以文件为准 |
- 用
/mobinteract inspect看准星内的怪物:冷却、单次追击已放置数、主手镐子、最近行为、垫高格数、背包内容。「最近行为」会直接写原因,例如放置次数已用完(max-per-chase=32)、放置失败 cobblestone @x,y,z。 - 常见原因:没背包或库存空了;
max-per-chase用完;目标其实只高 1 格(交给原版跳跃);前方是液体(一律回避);落点被其它生物占着;正在挖掘(挖掘完才轮到放置);世界 / 生物被筛掉,或总开关关掉了。 - 方块不消失:先确认
block-lifetime-seconds不是0;到期时上方 1.2 格内有生物会续期;区块没加载会延后 5 秒重试。 - 想让它搭得更远:同时调大
max-per-chase、block-lifetime-seconds,必要时再看bridge-max-length和bridge的开关。
MobInteract · QQ 群 995974858 · Repository · Releases · Issues · English | 简体中文