CM的全体

CM的全体

连锁采集矿石、树木和地形——在一个mod中集成了MineAll、CutAll和DigAll——而不会破坏你自己的建筑。玩家放置的方块会被自动跳过,所有设置都可以通过游戏内GUI进行配置。

游戏机制

CM'sALL

一款可自定义的连锁采集模组,内置方块保护功能以保障您的建筑安全。

CM'sALL 将三种核心连锁采集功能整合到单个模组中,同时解决了一个常见问题:意外破坏玩家建筑。通过追踪玩家放置的方块,确保您的木屋、石墙和自定义路径在批量采集时保持完好无损。


支持版本

Minecraft 加载器 Architectury API
1.21.1 NeoForge, Fabric 13.0.8
1.21 NeoForge, Fabric 13.0.8
1.20.1 Forge, Fabric 9.2.14
1.16.5 Forge, Fabric 1.32.68
1.12.2 Forge — (独立运行,无需依赖)

每个 Minecraft 版本和加载器都提供独立的 jar 文件(例如 cmsall-forge-1.0.0+1.20.1.jar、cmsall-fabric-1.0.0+1.20.1.jar)。仅需安装与您的 Minecraft 版本和加载器匹配的单个 jar 文件即可。

依赖

  • Architectury API — 除 1.12.2 外的所有版本均需安装,且需使用上表中对应 Minecraft 版本的版本号(1.20.1 为 9.2.14;1.21 / 1.21.1 为 13.0.8;1.16.5 为 1.32.68)。该 Minecraft 版本下任何兼容的新版本也可使用。
  • Fabric API — Fabric 版本的 jar 文件需要。
  • ModMenu — 可选,仅限 Fabric。在模组列表中添加游戏内配置按钮(参见配置)。没有它模组仍可运行;您可以从暂停菜单或通过命令进行配置。

功能特性

  • 单个模组集成三种功能
    • MineAll(连锁挖矿): 连锁采集连接的同类型矿石(例如采集煤炭不会意外触发相邻的铁矿石)。
    • CutAll(连锁砍树): 砍倒整棵树和下界巨型菌类。如有需要,主世界巨型蘑菇也可加入列表。可选择性启用树叶连锁破坏。
    • DigAll(连锁挖掘): 清除范围内连接的软质地形方块(泥土、沙子、沙砾、粘土等)——混合地形也能连锁。
  • 建筑保护(玩家放置方块追踪) 追踪玩家放置的方块坐标,并在连锁采集时自动跳过它们。(CutAll 默认启用;每个功能均可单独配置。)
  • 禁用列表 无论其他列表如何,某些方块永远不会被连锁破坏——默认包含刷怪笼和末地传送门框架,您还可以自行添加。
  • 游戏内 GUI 配置 所有功能和服务器规则均可通过游戏内菜单配置,无需手动编辑 JSON 或 TOML 文件。参见配置。
  • 玩家独立激活模式 玩家可以各自选择如何触发模组:按住(潜行)、切换、始终开启或潜行反转。
  • 自动补种 砍倒树木后,可选择自动从掉落物中补种树苗(每个玩家可独立配置)。
  • 灵活的掉落物管理 选项包括:将掉落物直接放入玩家背包、聚集到破坏起始点、或自动删除配置的大量无用方块(如圆石或泥土)。
  • 工具耐久度与安全 包含可配置的耐久度消耗倍率。连锁会在耐久度归零前自动停止,防止工具损坏。
  • 服务端权威 & 领地模组兼容 服务端配置同步至客户端,玩家无法覆盖。它会触发标准的方块破坏事件,以兼容领地保护模组。

配置

CM'sALL 完全可以在游戏内配置——无需手动编辑配置文件。

从暂停菜单(任何位置):

  1. 按 Esc 键打开暂停菜单。
  2. 点击位于进度按钮旁边的铁镐图标。
  3. 立即调整您的激活模式、开关或服务器范围限制(仅 OP 可操作)。

从模组列表(标题画面):

  • 打开 模组 → CM'sALL → 配置 访问您的客户端设置(激活模式、补种、保护)。此处不显示服务器设置,因为它们属于世界。
  • 在 Forge / NeoForge 上,此按钮内置。在 Fabric 上则需要安装 ModMenu。

按键绑定与实用功能

  • 切换按键绑定: 默认为未绑定,以防止冲突。您可以在 选项 → 控制 中绑定 CM'sALL:切换,以便在不打开菜单的情况下快速开启或关闭模组。
  • 玩家特定的偏好(激活模式、补种开关、保护)将根据玩家 UUID 保存在服务端。

技术规格与性能

  • 连锁上限: 每次采集受 globalMaxBlocks 限制(默认:256,最大:8192)以维持连锁的边界。
  • TPS 保护(perTickBudget): 默认情况下(0),整个连锁在一个游戏刻内处理。对于高人口服务器,将此值设置为大于 0 可将工作负载分散到多个游戏刻中(例如每刻破坏 N 个方块),防止服务器卡顿和 TPS 下降。
  • 追踪限制: 每个功能的世界范围追踪上限(trackCutMax 默认 16384;trackMineMax / trackDigMax 默认 4096)。达到上限时,会使用 FIFO(先进先出)策略淘汰旧记录。

命令

所有功能也可以通过 /cmsall 命令结构进行管理。

面向所有玩家

  • /cmsall status — 显示您当前的设置。
  • /cmsall mode <hold|toggle|always|sneak_invert> — 更改您的激活模式。
  • /cmsall toggle — 切换您的连锁采集能力。
  • /cmsall replant <true|false> — 为自己切换自动补种。
  • /cmsall protect <true|false> — 切换是否跳过自己放置的方块。

面向管理员(需要权限等级 ≥ editPermissionLevel,默认 3)

  • /cmsall enable <true|false> — 模组的主开关。
  • /cmsall reload — 重新加载服务端配置文件(config/cmsall-server.json)。
  • /cmsall <mine|cut|dig> <block|tool> <add|remove> <id> — 添加或移除方块/工具定义(支持模组 ID)。
  • /cmsall track <enable|max|overflow|reset|status> — 管理放置方块追踪。

注:未指定命名空间的资源 ID 默认为 minecraft:。


已知限制(Forge / NeoForge)

为确保与保护、领地及日志模组的严格兼容,CM'sALL 在 Forge/NeoForge 环境下,会为连锁中破坏的每一个方块触发标准的 BlockEvent.BreakEvent。因此,其他追踪破坏事件的模组(如任务链、反作弊或工具经验类模组)将处理每个独立的方块事件。Fabric 通过其采集查询 API 处理此事,不会发出重复事件。


面向开发者(API)

CM'sALL 提供了一个小型、与加载器无关的 API,以便其他移动方块的模组(自定义活塞、传送带及类似方块移动模组)能够让 CM'sALL 的玩家放置保护功能跟随这些方块移动。原版活塞已自动处理——这仅适用于非活塞的自定义移动器。请在服务端线程上调用。

类:cmsall.api.CmsAllTracking

推荐模式 — 包围移动操作,然后仅将实际落位的方块进行 relocate,在移动完成后执行。如果移动中途失败,未移动的源方块将保留其保护状态:

import cmsall.api.CmsAllTracking;

CmsAllTracking.beginMove();
try {
    // ... 您的模组在此执行实际的 setBlock 移动操作 ...
    CmsAllTracking.relocate(level, landedFromTo); // 仅实际落点的方块;Map<BlockPos, BlockPos>:源方块 -> 目标方块
} finally {
    CmsAllTracking.endMove();
}

包围操作是可重入的——嵌套调用 beginMove()/endMove()(例如,各自包围移动操作的辅助函数)是安全的。如果移动是一个不可能失败的单一步骤,您可以在清除源方块之前跳过包围操作并直接调用 relocate。

  • relocate(ServerLevel, BlockPos from, BlockPos to) — 移动一条记录;返回此处追踪了多少记录(0 或 1)。
  • relocate(ServerLevel, Map<BlockPos, BlockPos>) — 批量移动(两阶段;对于移动/重叠的集合安全);返回有多少条记录被迁移。
  • beginMove() / endMove() — 在移动期间抑制记录删除;始终通过 try/finally 配对使用。

在所有版本和加载器上均可使用。(在 1.12.2 上,API 可用于自定义移动器,但原版活塞不会自动挂钩。)

部分失败。 先移动再失败会导致仍然存在的源方块失去保护:CM'sALL 的孤立记录清理会删除现在无效的目标记录(其存储的方块 ID 不再与该位置的方块匹配),但无法为未记录的源方块重新创建记录。因此,落地后移动是故障安全的顺序;仅在移动不可能失败时,才能先移动。

软依赖。 当 CM'sALL 未安装时引用这些方法存在 NoClassDefFoundError 的风险。稳健的做法是将每个 CM'sALL 的引用隔离在一个专用的集成类中,并且仅在 CM'sALL 存在时访问它——类链接/验证可能会在您的保护代码行运行之前加载引用的类型(例如,当某个类型出现在方法签名或字段中时),因此“此代码路径不执行”并不总是足够。围绕隔离引用的存在性检查,或者使用 compileOnly 依赖,这两种方法都可行。


支持的语言

CM'sALL 的游戏内 GUI、配置菜单和命令反馈会自动跟随您的 Minecraft 客户端语言设置——无需额外设置。 请注意,可能存在翻译错误。

支持 39 种语言:

  • 🇺🇸 英语
  • 🇯🇵 日语
  • 🇰🇷 韩语
  • 🇨🇳 简体中文
  • 🇹🇼 繁体中文
  • 🇩🇪 德语
  • 🇫🇷 法语
  • 🇪🇸 西班牙语(西班牙)
  • 🇲🇽 西班牙语(墨西哥)
  • 🇧🇷 葡萄牙语(巴西)
  • 🇵🇹 葡萄牙语(葡萄牙)
  • 🇮🇹 意大利语
  • 🇳🇱 荷兰语
  • 🇵🇱 波兰语
  • 🇷🇺 俄语
  • 🇺🇦 乌克兰语
  • 🇹🇷 土耳其语
  • 🇸🇪 瑞典语
  • 🇳🇴 挪威语
  • 🇩🇰 丹麦语
  • 🇫🇮 芬兰语
  • 🇮🇸 冰岛语
  • 🇭🇺 匈牙利语
  • 🇨🇿 捷克语
  • 🇸🇰 斯洛伐克语
  • 🇷🇴 罗马尼亚语
  • 🇧🇬 保加利亚语
  • 🇭🇷 克罗地亚语
  • 🇸🇮 斯洛文尼亚语
  • 🇷🇸 塞尔维亚语
  • 🇬🇷 希腊语
  • 🇮🇩 印度尼西亚语
  • 🇲🇾 马来语
  • 🇻🇳 越南语
  • 🇹🇭 泰语
  • 🇮🇳 印地语
  • 🇮🇱 希伯来语
  • 🇸🇦 阿拉伯语
  • 🇪🇸 加泰罗尼亚语
  • 🇱🇹 立陶宛语

许可证

本项目采用 MIT 许可证 授权 — © 2026 G.Vael。