Repository navigation
Equip and Messages zh
简体中文 | English
这一页讲三份"外围"配置:equip.yml 决定怪物出生时带不带镐子和方块,message.yml 决定玩家看到的字长什么样,targeting.yml 决定怪物先追谁。
三份都在 plugins/MobInteract/ 里,都能用 /mobinteract reload 热重载 —— 改完不用重启服务器。
| 文件 | 管什么 | 什么时候起作用 |
|---|---|---|
equip.yml |
出生装备总闸门:这只怪出生时有没有机会拿镐子 / 方块 | 怪物进入世界的那一刻掷一次骰 |
message.yml |
所有发给玩家的文本(/mobinteract status / inspect / reload) |
每次发消息时读当前生效的那一份 |
targeting.yml |
优先追杀玩家:换目标的条件、半径、检查间隔 | 被接管的怪物每 10 tick 检查一次 |
有一件事最容易搞混:那两道细分概率不在 equip.yml 里。
| 抽什么 | 真正决定概率的键 | 默认 |
|---|---|---|
| 镐子 |
mining.yml → tool.give.chance
|
0.8 |
| 方块背包 |
placement.yml → backpack.chance
|
0.65 |
所以调"怪物带东西的比例"时,你可能要动三个文件里的三个键。下面的换算示例会把这层关系算清楚。
| 键 | 默认 | 说明 |
|---|---|---|
chance |
0.10 |
出生装备总概率(0..1),超出范围会被截断并在控制台告警 |
worlds.<世界名> |
{} |
按世界覆盖上面的概率,世界名不区分大小写;没列出的世界用 chance
|
chance: 0.10 就是"主世界最多 10% 的怪物会带东西"。这个值只管"有没有机会",不区分带的是镐子还是方块。
文件缺失时会自动生成;就算你手动删掉它、或者删掉其中某个键,插件照样跑,缺的键按 chance: 0.10 处理。
怪物出生
└── 过闸门:equip.yml 的 chance(默认 0.10)
├── 抽镐子:mining.yml 的 tool.give.chance(默认 0.8)
└── 抽背包:placement.yml 的 backpack.chance(默认 0.65)
也就是说:先过闸门,再分别决定镐子和背包,两道骰子互不影响(可能只中一个、可能都中、也可能都不中)。
出生时"带镐子 ∪ 带方块"的比例因此不会超过 equip.yml 的 chance。默认配置下约:
0.10 × (0.80 + 0.65 − 0.80×0.65) ≈ 9.3%
减掉的那一项是"两样都抽中"的重叠部分(0.80 × 0.65 = 0.52),不然会被重复计一次。
chance: 0.10
worlds:
world: 0.10
world_nether: 0.30
world_the_end: 0.0- 世界名就是服务器目录里的世界文件夹名,不区分大小写(
World_Nether与world_nether等价)。 - 没列出来的世界继续用上面的全局
chance。 - 写
0.0是最干净的"这个世界完全不给装备"开关 —— 比如上面的末地。
注意别和另一套
worlds混淆:equip.yml的worlds只管出生装备概率;mining.yml/placement.yml里的worlds.whitelist/worlds.blacklist管的是这个世界的怪物参不参与挖掘 / 放置。前者决定"带不带工具",后者决定"带工具也不许动手"。
先记住两个公式:
带镐子 = equip.yml 的 chance × mining.yml 的 tool.give.chance
带方块 = equip.yml 的 chance × placement.yml 的 backpack.chance
然后倒推 chance:
| 你想要的 | 怎么改 | 实际效果 |
|---|---|---|
| 50% 的怪带镐子 |
chance: 0.625,tool.give.chance 保持 0.8
|
镐子 0.625 × 0.8 = 50%,方块 0.625 × 0.65 ≈ 40.6%
|
| 50% 带镐子,方块尽量多 |
chance: 1.0 + tool.give.chance: 0.5
|
镐子 50%,方块 65%
|
| 10% 带镐子 |
chance: 0.125 + 0.8
|
镐子 10%,方块 8.1%
|
| 只要方块,不要镐子 | tool.give.enabled: false |
方块 = chance × 0.65
|
| 谁都不带 | chance: 0.0 |
0% |
| 下界更凶 | worlds: {world_nether: 0.30} |
下界 30% 过闸门,主世界仍是 10%
|
最常见的算错:把 chance 和 tool.give.chance 都从 0.8 改成 0.4,以为结果是 40% —— 实际是 0.4 × 0.4 = 16%,因为两层是相乘的。动手之前先想清楚:要动的是"闸门",还是"闸门里面的那一层"。
改完可以用 /mobinteract status 的「出生装备」行确认:没有按世界覆盖时显示 &7出生装备:&f{percent}%(全局),有覆盖时显示全局概率加覆盖了几个世界。
- 每只怪只掷一次骰,结果固定在它身上:没通过闸门的怪,之后不会因为"捡到了方块""第一次需要搭桥"而补发镐子。
-
已经生成的怪改不了:改
equip.yml只影响之后生成的怪物。想让世界里的老怪带装备,只能重新生成或手动给。 - 主手已有物品不覆盖:本来拿着别的东西的怪,不会被硬塞一把镐子。
-
pickup.only-equipped(默认开):只有通过闸门的怪才会去捡地上的方块 / 镐子。这样"带镐子 + 带方块"的合计比例才不会被拾取行为悄悄拉高。 - 闸门只掷一次,结果跟定这只怪:未通过闸门的怪,之后任何时刻都不会再补发背包,所以"带方块"的比例不会悄悄超过
equip.yml里配的值。 - 想让世界里的怪更容易搭路,真正管用的旋钮是
equip.yml的chance(以及按世界覆盖),backpack.chance只在闸门之内再筛一遍。
在范围内:/mobinteract status 的每一行(配置摘要、筛选摘要、状态词、搭路策略、拾取、出生装备、运行期计数、BlockLocker 状态)、/mobinteract inspect 的每一行(怪物标题、冷却、已放置次数、主手镐子、最近行为、背包内容与每个包条目)、/mobinteract reload 的成功与失败回话。
不在范围内:控制台日志。
缺失不致命:整个文件缺失会自动生成;只删掉某个键会回退到内置默认值并在控制台告警一次,不会报错、不会影响启动。
内置默认文案是中文。英文服或其它语言服直接改写这些键即可,不需要动别的东西。
颜色码用 &。 &7、&f、&8&m 这样写,读的时候自动转成 Minecraft 的颜色符号。只有 & 后面跟合法代码字符(0-9a-fk-or,小写)才会转换;正文里单独出现的 & 原样保留,所以写 生存&创造 不会被吃掉。
占位符用 {名字}。 由插件逐个替换,不是格式化字符串,所以文本里可以直接写 %。常用的有 {label}(实际输入的命令,含别名)、{count}、{mob}、{worlds}、{percent}、{seconds}、{max}、{maxPerChase}、{kinds}、{total}、{id}、{type}。每个键上方都注释了它支持哪些占位符。
列表 = 多行。 任何一条消息都能写成 YAML 列表,按顺序逐行发送:
command:
status:
header:
- '&8&m--------&r &bMobInteract &8&m--------'
- '&7第二行随便写'想把 /status 的某一行拆成两行,或者给标题栏加一条分隔,就把它改成列表。
| 键分组 | 内容 |
|---|---|
command.common.* |
通用片段:no-permission / usage / player-only,以及状态词 enabled(开启)/ disabled(关闭)、on-text(开)/ off-text(关)、yes-text(是)/ no-text(否)、none(无)、forever(永久)、unmineable(不可挖掘)、decided(已判定)/ undecided(未判定) |
command.status.* |
/status 的每一行:header、world-filter、mob-filter、mining、trigger、tool、placement、limits、runtime;行内片段 filter.world-all / filter.mob-all / filter.mob-default / filter.whitelist / filter.blacklist-suffix、lifetime-seconds、strategy.line / strategy.stair / strategy.stair-off / strategy.bridge、pickup.line / pickup.range、equip.global / equip.override、blocklocker
|
command.inspect.* |
/inspect 的每一行:header({mob})、no-mob、no-profile、cooldowns、placements、tool、status、backpack-none、backpack、backpack-entry(每个背包条目发一次) |
command.reload.* |
success(带 {count})/ failed
|
几条常用键的默认文案,改之前对一眼:
| 键 | 默认文案 | 占位符 |
|---|---|---|
command.common.no-permission |
&c你没有权限使用该命令。 |
无 |
command.common.usage |
&e用法:/{label} <reload|status|inspect> |
{label} |
command.common.player-only |
&c该子命令只能由玩家执行。 |
无 |
command.status.equip.global |
&7出生装备:&f{percent}%(全局) |
{percent} |
command.status.equip.override |
&7出生装备:&f{percent}% &7按世界覆盖=&f{worlds} 个 |
{percent}、{worlds}
|
command.inspect.no-mob |
&e视线内没有怪物(把准星对准 16 格内的怪物再试)。 |
无 |
command.inspect.backpack |
&7方块背包:&f{kinds} 种 / {total} 个 |
{kinds}、{total}
|
command.inspect.backpack-entry |
&8 - &f{id} &7({type}) × {count} |
{id}、{type}、{count}
|
command.reload.success |
&aMobInteract 配置已重载(不打断进行中的行为)。已加载消息 {count} 条。 |
{count} |
command.reload.failed |
&c配置重载失败,详见控制台日志。 |
无 |
把 reload 回话换成自己服的名字:
command:
reload:
success: '&a[我的服] 配置已重载,当前 &f{count} &a条文本生效。'把掉落提示的"是 / 否"换成勾叉(状态词是全局共用的,改一处,/status 里所有布尔位一起变):
command:
common:
yes-text: '&a✔'
no-text: '&c✘'- 删掉一个键:这一行回到内置默认文案,控制台一次性告警,功能照旧。
- 想彻底不让某一行出现,别用删键的办法(删了只会变回默认),直接改文案更省事。
-
别把键名起成 YAML 的布尔值:
on/off/yes/no会被解析成true/false。内置的状态词键因此带-text后缀(on-text、yes-text……),自己加键时也照这个习惯来。
/mobinteract reload 会一起重读 mining.yml / placement.yml / equip.yml / targeting.yml / message.yml / update.yml:解析在全局区域线程完成,产出新快照后整体替换,不打断正在进行的挖掘 / 放置。
回话里那个数字是当前生效的消息条目数(command.reload.success 的 {count})。改完看到"已加载消息 N 条"里的 N 变了,说明新文件确实读进去了;数字一点没变,八成是 YAML 缩进写错、整段没被读到,或者你改的键本来就不存在。
真出错时会走 command.reload.failed(&c配置重载失败,详见控制台日志。),具体位置去控制台看。
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
radius |
16.0 |
索敌半径(1..128);玩家在这个范围内才会被优先锁定 |
interval-ticks |
10 |
检查间隔(1..200);10 = 每秒 2 次 |
require-line-of-sight |
false |
是否要求能看见玩家。false = 隔着墙也会朝玩家走(配合挖掘 / 搭路就是"拆墙过来") |
keep-villager-target |
true |
附近没有可追玩家时是否保留原目标;false = 主动清空目标,专心找玩家 |
被插件接管的怪物每隔 interval-ticks 看一次周围:只要半径内有可追的玩家(生存 / 冒险模式),就把目标切成最近的玩家。
几条规则值得记住:
- 已经在追玩家就不会来回换。 只在"当前目标不是玩家"时才接管,避免目标在几个玩家之间反复横跳。
- 创造 / 旁观模式不算候选。 只有生存和冒险模式的玩家会被追。
- 必须同世界。 跨维度的玩家不在候选里。
- 距离按三维算。 站在柱子顶上、蹲在洞里的玩家照样算"最近",所以垫高 / 往下挖的怪会真的朝你所在的高度来。
- 它只改"追谁"。 不接管原版寻路,所以不会和挖掘 / 放置抢移动控制。
- 不删除、不替换原版行为。 原版该打村民还是打村民、该打铁傀儡还是打铁傀儡,只是"附近有玩家"时优先玩家。
-
keep-villager-target: true(默认)= 附近没玩家时保留原目标,继续干原来的事;false= 主动清空目标,专心找人 —— 更像"猎杀玩家"的服。 -
require-line-of-sight: false(默认)是这套机制最好玩的地方:隔着墙也会朝你走,配合挖掘 / 搭路就成了"拆墙过来"。想更接近原版、更"讲道理",把它改成true。 - 挖掘的"寻路受阻"触发仍然看原版目标:玩家被墙彻底封死、怪又看不见时不会触发,这种情况要靠
trigger.configured-blocks(见 挖掘 页)。
| 想要的效果 | 怎么配 |
|---|---|
| 普通生存服:玩家优先,但别太凶 |
radius: 16.0、interval-ticks: 10、require-line-of-sight: true、keep-villager-target: true
|
| 硬核:看见就追,隔着墙也拆过来 | 默认即可(require-line-of-sight: false);radius 可上调到 24 左右 |
| 怪多、想省性能 |
interval-ticks: 20(每秒 1 次)、radius: 8.0
|
| 只想让怪打村民,不想被玩家吸引 | enabled: false |
| 现象 | 先查 |
|---|---|
| 怪物不带镐子 |
equip.yml 的 chance;worlds 里有没有把这个世界写成 0.0;再看 mining.yml 的 tool.give.enabled / tool.give.chance
|
| 怪物有镐子却不挖 |
tool.require-pickaxe,以及 /mobinteract inspect 里的「主手镐子」 |
| 怪物不搭路 |
backpack.chance、placement.enabled、placement.max-per-chase
|
| 改了文本没反应 |
/mobinteract reload 是否成功、消息条数有没有变;YAML 缩进;键名有没有写错 |
| 玩家从怪身边走过却没人理 |
targeting.yml 的 enabled、radius;玩家是不是创造 / 旁观;require-line-of-sight: true 时玩家是不是在墙后 |
| 怪一会儿追玩家一会儿追村民 | 属正常:只在"当前目标不是玩家"时接管,已经在追玩家就不再换 |
| 老怪一直不带装备 | 出生装备只在出生时掷一次,改配置不影响已经存在的怪 |
MobInteract · QQ 群 995974858 · Repository · Releases · Issues · English | 简体中文