mirror of
https://github.com/Mr-dayhappy/Minecraft-place-mod.git
synced 2026-10-23 01:53:39 +08:00
docs: 补全 README 并修正仓库链接为 Mr-dayhappy
README 从两行扩写为完整说明:问题背景、实现原理、覆盖范围、构建方式、已知未验证点。fabric.mod.json 的 homepage/sources 链接从 ApTx2012 改为实际远端 Mr-dayhappy。
This commit is contained in:
1 parent
eba2bdd5e3
commit
81521df92b
2 files changed
+68
-4
No files matched your search
@@ -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
|
||||
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user