Skip to content

配置详解 ​

主配置是 plugins/EmakiStructure/config.yml, 你改完执行 /ems reload 就会生效. 如果写了插件不认识的顶层键, 配置检查会给出警告 (config.yml.<键>); 值不合法时按 error.config.invalid 报错, 插件会自动换成合法值继续跑

下面列出的默认值都可以在 EmakiStructure/src/main/resources/config.yml 里看到; 文件顶部的 version 是 1.0.5, 它由资源同步流程维护, 你不要手动改

generate 结构生成 ​

字段类型默认值取值范围说明
generate.size_limitlist<int>[128, 128, 128]每项 8–512长, 宽, 高三个方向各自的最大尺寸. 框选和导入模板共用这一条, 超出就拒绝
generate.max_blocks_per_tickint30001–200000每 1/20 秒最多写多少个方块, 所有生成任务一起共享这个额度; 用不完的排到下一拍
generate.entity_policystringallall / passive / none模板里自带的实体与 spawns/ 里的生物点位怎么处理: 全都生成 / 去掉敌对和 Boss 类 / 一个都不生成. 填 none 时点位也一起停
generate.ground_modestringskipskip / keep / fill脚下的地形怎么处理. skip 只要底面有一列没有实心方块就放弃 (绝不悬空生成); keep 不管支撑, 直接按原地形放; fill 支撑不够时向下用石头垫最多 16 格, 还是不够就放弃
generate.adaptive_throttlingbooleantruetrue / false服务器卡顿 (TPS, 也就是每秒游戏刻数, 掉到阈值以下) 时, 逐步把每拍写入额度降到四分之一; 触发时只提示一次
generate.queue_timeoutduration60s填秒数, 或写 30s/5m/1h/1d一个生成任务最多能在队列里等多久, 超时就中止这次生成

cache 模板缓存 ​

字段类型默认值取值范围说明
cache.max_entriesint128≥ 1最多缓存多少份模板. 模板的基本信息一直留在内存里, 方块数据用到时才读
cache.max_bytesint268435456≥ 1缓存占用内存的估算上限; 单份模板超过这个值时不会被缓存, 并给出提示 (console.cache_rejected)

selection 框选状态 ​

字段类型默认值取值范围说明
selection.session_timeoutduration30m1m–24h框选闲置多久后自动结束; 结束后线框消失, 需要重新设点

template 模板导入 ​

字段类型默认值取值范围说明
template.import_max_file_bytesint33554432> 0单个 .nbt 原始文件的大小上限, 超出拒绝导入
template.legacy_policystringrejectreject / skip从旧版本模板里读不出来的方块怎么处理: reject 拒绝整个文件; skip 跳过那个方块并提示, 生成时该位置填成空气
template.palette_limitint4096> 0颜色表 (模板里出现过的所有不同方块状态) 的条目上限, 超出拒绝导入
template.block_entity_max_bytesint65536> 0单个方块自带数据 (例如箱子里的物品) 的大小上限, 超出拒绝导入

spawn 结构内生物生成 ​

点位文件放在 spawns/<模板名>.yml, 和 structures/<模板名>.nbt 同名, 一对一对应. 文件里每个字段的含义, 坐标系和完整示例见 结构模板 · 生物点位附属配置

字段类型默认值取值范围说明
spawn.enabledbooleantruetrue / false总开关; 关掉后 spawns/ 全部不读, 也不提示
spawn.max_per_generationint321–256一次生成最多出多少只生物, 超过会拒绝该点位文件
spawn.batch_per_tickint81–64每 1/20 秒最多生成多少批生物
spawn.respect_entity_policybooleanfalsetrue / false判断不出是不是敌对的第三方生物要不要一并跳过: false 放行以保功能完整; true 判断不出来就跳过

detection 多方块增量检测 ​

字段类型默认值取值范围说明
detection.sweep_intervalduration00 或 ≥ 30s定期扫描的间隔, 用来补查可能漏掉的情况; 0 表示关闭, 开启时不能小于 30s. 它只扫描"进行中"的记录, 不会遍历全图
detection.max_cold_checksint2568–4096重启或 reload 后点击已有结构时, 最多推断多少个可能的位置; 超出的会被丢弃并记进 debug 日志
detection.instance_limitint8≥ 1每个定义, 每个玩家最多保留多少条"进行中"记录; 超了淘汰最早的那条
detection.instance_ttlduration10m≥ 1m一条"进行中"记录多久没有任何变化就被清理掉
detection.debounceduration500ms≥ 0, 可写 ms/30s/5m把同一区块内短时间内的重复变更合并起来的时间窗口
detection.retrigger_on_reformbooleanfalsetrue / false结构被破坏后又重新摆好时, 要不要再次触发动作; false 只恢复为活动状态不触发, 防止玩家反复拆摆刷奖励
detection.sample_recheckbooleanfalsetrue / false扫描时要不要对活动中的结构做低频抽样复查, 默认关闭

cooldown 多方块触发冷却 ​

字段类型默认值取值范围说明
cooldown.globalduration00 或 30s/5m 等全局冷却, 所有玩家共享; 0 表示无冷却. 定义文件里写了 cooldown 节时以定义文件为准
cooldown.per_playerduration0同上每个玩家各自计的冷却 (按结构 + 玩家分别计时)

replace_rules 替换原版结构 ​

这组规则只对还没有生成的区块生效. 插件从第一条规则开始检查, 命中就生效, 后面的不再看; 都没命中就照原版生成. 已经生成的区块和里面已有的结构永远不会被改写

yaml
replace_rules:
  - structure: "minecraft:village_plains"   # 只能填 minecraft: 开头的原版结构
    template: "village_hub_a"               # 用来替换的模板名 (structures/ 下同名的 .nbt)
    chance: 0.5                             # 替换概率, 0.0-1.0
    worlds: ["world"]                       # 只在这些世界生效; 不填或留空 = 所有世界
    biomes: ["plains"]                      # 只在这些群系生效; 不填或留空 = 不限群系
    enabled: true                           # 填 false 则这条不参与匹配
    apply_to_existing: false                # 只能填 false; 填 true 会整条被拒绝加载并提示
  • 插件把替换记录写在 replaced/<world>.marker 里, 保证同一个区块不会被替换两次
  • 引用的模板不存在时会提示, 并仍然按原版结构生成 (console.replace_template_missing)
  • 已知限制: 遇到多块结构 (例如村庄), 尾部可能还留着原版方块

rollback 生成回滚 ​

字段类型默认值取值范围说明
rollback.enabledbooleantruetrue / false总开关; 关掉后回到旧行为, 生成被中断时已经放下的部分会保留. 仅供调试使用
rollback.journal_max_bytesint67108864≥ 1048576一次生成只记录被改动的内容, 这里限制这些记录的总大小; 超了就中止本次生成并还原, 不会留下只生成一半的地皮

furniture 家具附属配置 ​

字段类型默认值取值范围说明
furniture.enabledbooleantruetrue / false总开关; 关掉后 furniture/ 全部不读, 不校验, 不还原, 也不提示

顶层键清单 ​

配置检查认可的顶层键共 12 个: version, language, generate, cache, selection, template, spawn, detection, cooldown, replace_rules, rollback, furniture; 清单之外的顶层键都不认识