docs: 补全 README 并修正仓库链接为 Mr-dayhappy

README 从两行扩写为完整说明:问题背景、实现原理、覆盖范围、构建方式、已知未验证点。fabric.mod.json 的 homepage/sources 链接从 ApTx2012 改为实际远端 Mr-dayhappy。
This commit is contained in:
AxTps committed 2026-10-03 15:42:06 +08:00
1 parent eba2bdd5e3
commit 81521df92b
2 files changed
+68 -4

No files matched your search

+65 -1
View File
@@ -1,2 +1,66 @@
# Minecraft-place-mod
A mod which promotes the /place
一个补全原版 `/place` 命令的 Fabric mod,让 `/place structure` 生成的结构**和自然生成的完全一样**。
## 它解决什么问题
原版的 `/place structure` 本质上只是个「建筑粘贴工具」。执行时它会:
1. 用 `Structure.generate(...)` 生成一个 `StructureStart`;
2. 调 `StructureStart.placeInChunk(...)` 把方块摆到世界里;
3. 生成结构内的实体(如村庄的村民)。
但它**跳过了自然生成时最关键的一步——结构注册**:
- 不调 `StructureManager.setStartForStructure(...)`,结构不进 `StructureManager`;
- 不写区块的 `structureReferences`,区块 NBT 里不记录这个结构。
后果:
- 游戏不认这块区域是「村庄 / 海底神殿」,**结构专属的刷怪规则永不激活**;
- 区块存档不记录该结构,**重启后结构在逻辑上「消失」**,只剩一堆方块。
## 这个 mod 干了什么
用一个 Mixin 挂在 `PlaceCommand.placeStructure` 的返回处,在命令执行完后补做自然生成的注册步骤:
1. **`setStartForStructure`** —— 把 `StructureStart` 存进它所在区块的 `StructureAccess`;
2. **`createReferences`** —— 调 `ChunkGenerator.createReferences`(自然生成用的同一个方法),扫描 17×17 邻居区块,把引用写入区块;
3. **`markUnsaved`** —— 标记涉及的区块未保存,强制持久化。
全程 `try-catch` 兜底:补注册失败不会影响命令本身的成功返回。
## 覆盖范围
- ✅ `/place structure`
- ❌ `/place jigsaw`、`/place template`、`/place feature`(语义不同,暂不处理)
## 构建
需要 JDK 25(Minecraft 26.1+ 要求)。
```bash
./gradlew build
```
产物在 `build/libs/`。
## 环境
- Minecraft 26.1.2
- Fabric Loader ≥ 0.19.5
- Fabric API
- Loom 1.18-SNAPSHOT / Gradle 9.7.1 / Java 25 / official 映射
## 已知未验证点
- Mixin 用 `LocalCapture.CAPTURE_FAILHARD` 捕获 `placeStructure` 的局部变量(`ServerLevel` / `Structure` / `ChunkGenerator` / `StructureStart`)。局部表顺序已按 26.1.2 字节码核对,但仍需实机编译验证。
- `createReferences` 对包围盒覆盖的每个区块各调一次(每次内部扫 17×17)。`addReferenceForStructure` 写的是 `LongSet`,天然幂等,不会重复写脏数据,但存在多余开销。
## 链接
- GitHub: https://github.com/Mr-dayhappy/Minecraft-place-mod
## License
MIT
+3 -3
View File
@@ -5,11 +5,11 @@
"name": "Minecraft Place Mod",
"description": "A mod which promotes the /place command — makes /place structure-generated structures behave exactly like naturally generated ones (registered into StructureManager, persisted to chunk NBT).",
"authors": [
"ApTx2012"
"Mr-dayhappy"
],
"contact": {
"homepage": "https://github.com/ApTx2012/Minecraft-place-mod",
"sources": "https://github.com/ApTx2012/Minecraft-place-mod"
"homepage": "https://github.com/Mr-dayhappy/Minecraft-place-mod",
"sources": "https://github.com/Mr-dayhappy/Minecraft-place-mod"
},
"license": "MIT",
"icon": "assets/minecraft-place-mod/icon.png",