mc-locate

mc-locate

从有限的游戏内观测中逆向工程《我的世界》Java版的种子和坐标

mc-locate 导出器

一个轻量级的客户端 Fabric 模组,用于收集 mc-locate 恢复世界种子和坐标所需的游戏内观测数据——下界基岩、末地折跃门柱高度和末影之眼朝向——并将它们写入 CLI 可导入的 JSON 文件。

它只读取游戏已经发送到你客户端的方块和实体,因为你正站在它们附近。它不发送任何数据,不连接任何服务器,也从不涉及其他玩家。参见 范围与限制


前置要求

  • Fabric Loader ≥ 0.16
  • Fabric API(与你 Minecraft 版本匹配的任何构建)
  • 下方支持版本列表中的一个 Minecraft 版本

应该下载哪个 jar?

每个 Minecraft 版本都构建了对应的 jar。请选择与你游戏版本匹配的那一个。

你的 Minecraft 版本 下载此 jar 也可运行于
1.21 …+1.21.jar
1.21.1 …+1.21.1.jar 1.21
1.21.2 …+1.21.2.jar
1.21.3 …+1.21.3.jar
1.21.4 …+1.21.4.jar
1.21.5 …+1.21.5.jar
1.21.6 …+1.21.6.jar
1.21.7 …+1.21.7.jar
1.21.8 …+1.21.8.jar 1.21.7
1.21.9 …+1.21.9.jar
1.21.10 …+1.21.10.jar
1.21.11 …+1.21.11.jar
26.1 / 26.1.1 / 26.1.2 …+26.1.2.jar 全部 26.1.x
26.2 …+26.2.jar

完整文件名格式为 mc-locate-exporter-<模组版本>+<Minecraft版本>.jar。加载器会拒绝加载为错误 Minecraft 版本构建的 jar,所以你不可能意外选错。

安装

  1. 为你对应的 Minecraft 版本安装 Fabric Loader
  2. Fabric API 和匹配的 mc-locate exporter jar 放入你的 mods/ 文件夹。
  3. 启动游戏。

命令

所有命令均为客户端侧(/mclocate …),可在单人游戏或任何服务器上运行——它们只读取你的客户端已经可以看到的内容。

命令 功能
/mclocate bedrock [radius] 在以你为中心的正方形区域内,在 y=4 和 y=123 处采样基岩。radius 默认为 24,最大 128仅限下界。
/mclocate pillars 读取十根末地折跃门柱的高度。仅限末地;若排列不是有效的折跃门柱组合则拒绝保存。
/mclocate auto on / off 打开/关闭被动收集(见下文)。
/mclocate status 显示当前会话中的内容以及预计还剩下多少候选种子。
/mclocate here 打印你当前的精确位置、偏航角和维度。
/mclocate mark <类型> 记录你当前所在位置的结构(21 种类型)。
/mclocate seed 记录世界种子。仅限单人游戏——客户端在那里拥有种子,因此无需破解。
/mclocate structures 记录附近结构的精确原点,并随着你探索自动在聊天中宣布坐标。仅限单人游戏。
/mclocate known 列出你的已知种子数据库;known add <名称> 保存当前种子。当你加入一个已知种子时会收到通知——即使在服务器上,也会通过其生物群系哈希判断。
/mclocate gui 打开设置界面(所有自动/宣布选项的开关)。
/mclocate slime / slime not 将当前区块标记为史莱姆区块 / 确认普通区块。故意手动操作(见下文)。
/mclocate config 显示设置,或使用 config <键> <值> 在游戏内更改某项设置。
/mclocate shot 截图(为 CLI 的 F3 截图读取器提供数据)。
/mclocate hud on / off 在快捷栏上方显示实时状态。适用于 1.21.x 和 26.1.x;26.2 在渲染重写中移除了客户端快捷栏上方显示,因此在该版本中此功能无效。
/mclocate export 将目前收集的所有数据写入 JSON 文件。
/mclocate clear 清空当前会话。

mark 接受的类型:villagedesert_pyramidjungle_templeswamp_hutigloopillager_outpostocean_monumentwoodland_mansionruined_portalshipwreckburied_treasurefortressbastionend_city

被动模式——预期工作流程

基岩是一个过滤器,而不是搜索器:它本身无法找到种子,只能从候选列表中剔除选项。候选列表来自末地折跃门柱,它们能通过一次读取锁定 2³² 个结构种子。因此自然的循环是:

  1. 去一次末地 → /mclocate pillars(或让自动收集读取它们)。
  2. 打开被动收集:/mclocate auto on
  3. 正常游玩即可。 在下界飞行时,随着区块加载会不断积累基岩数据,悄悄缩小候选集合。/mclocate status 会告诉你何时可能已经收集足够。
  4. /mclocate export

被动收集还会在你投出末影之眼的那一刻记录其朝向——直接从末影之眼实体上读取,这比 F3 读数中目测的结果精确得多。这些数据为 CLI 的末影要塞三角定位提供支持。

被动基岩收集默认为(模组不应该未经邀请就开始记录你的世界);折跃门柱和末影之眼采集默认为。在单人游戏中,被动模式也会自动获取世界种子——客户端在那里拥有它。

你的会话在重启后依然保留

所有收集的数据都会持续写入 .minecraft/mc-locate/session-current.json,并在你离开世界时再次刷新,然后在下次启动时重新加载。崩溃或忘记 export 不再会浪费一个下午的收集成果。/mclocate clear 可开始全新的会话。

关于史莱姆区块

史莱姆区块手动标记,这是有意为之。一次史莱姆生成并不能证明该区块是史莱姆区块——沼泽也会生成它们——而一个错误的“是”会排除真正的种子,这正是整个工具要避免的唯一失败。所以请自行确认(史莱姆在 y=40 以下、远离沼泽的地方生成),然后使用 /mclocate slime。对于你确定是普通区块的地方,使用 /mclocate slime not

多人游戏

该模组在服务器上也可用,只有一个例外。所有命令都是客户端侧的——Fabric 会在本地处理 /mclocate ...,绝不会发送到服务器——而且每条观测数据都是服务器因为你在附近而已经发送给你客户端的方块或实体。因此,收集基岩、折跃门柱和末影之眼朝向以及导出数据,在普通(甚至原版)服务器上都能正常工作。不会向服务器发送任何数据,也不会改变任何游戏行为。

例外是 /mclocate seed:它读取内置服务器的种子,而该种子只在单人游戏中存在。在服务器上没有种子可读——这正是需要破解种子的全部原因。因此,多人游戏的流程是:在这里收集,然后在 CLI 中破解。

在许多服务器上,破解种子是违反规则的(而且加固过的服务器会随机化它所依赖的位)。只在服务器允许的情况下使用。

配置

设置保存在 .minecraft/mc-locate/config.properties 中,首次运行时写入:

默认值 含义
autoBedrock false 区块加载时记录下界基岩
autoPillars true 进入末地时读取折跃门柱高度
autoEyes true 记录投出的末影之眼朝向
bedrockStride 4 在区块层中对每第 N 个方块进行采样
maxBedrock 4096 采样数超过此值后停止累积
announce true 收集到数据时在聊天中打印一行
hud false 快捷栏上方实时状态(仅 1.21.x / 26.1.x)

将数据导入 mc-locate

导出文件存放在 .minecraft/mc-locate/observations-<时间戳>.json

在 CLI 中:

  1. 打开模式 13 — 会话与观测(Session & Observations)
  2. 选择 “从文件加载/导入观测数据”(Load / import observations from a file)
  3. 指向导出的 JSON 文件。

观测文件格式是两者之间的约定——CLI 不关心它是由模组、脚本还是你手动编写的。


范围与限制

  • 仅限客户端。 读取你自己加载的区块和你自己投出的末影之眼。不会伪造任何数据包;从不引用其他玩家。
  • 不通过生成计算结构。 它会记录你站在上面并使用 mark 标记的结构,但不会计算结构位置——这需要 CLI 的世界生成后端,而模组有意不内置该功能。
  • 服务器规则。 在许多服务器上破解种子是违反规则的,而且加固过的服务器会随机化其所依赖的位(Paper 的 feature-seeds 等)。在这些情况下它根本不会收敛——这是设计使然。
  • 尚未在真实游戏中测试。 每个版本都能编译通过,针对真实 Minecraft API,且 JSON 能通过 CLI 的测试往返,但游戏内行为(区块加载时机、折跃门柱扫描)尚未验证。如果你遇到问题,请提交 issue。

从源代码构建

该模组是一个 Stonecutter 项目——一套代码,多个 Minecraft 版本。

# 一次性构建所有支持的版本
# (每个 jar 会生成在 versions/<mc version>/build/libs/ 中)
./gradlew build

# 将检出源代码切换到某个版本,例如在 IDE 中处理该版本
./gradlew "Set active project to 1.21.8"

# 在提交前将源代码恢复为规范形式
./gradlew "Reset active project"

需要能够运行 Gradle 的 JDK(17+);各版本的编译工具链(1.21.x 使用 Java 21,26.x 使用 Java 25)会自动配置。