Skip to content

Commit 9491690

Browse files
committed
chore: update guide & dedupe mods
1 parent f8a156f commit 9491690

7 files changed

Lines changed: 916 additions & 830 deletions

File tree

PACKWIZ_GUIDE.md

Lines changed: 133 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,35 @@ Get-Item .\pack.toml
6464

6565
如果 `pack.toml` 不存在,说明当前目录不对;不要继续执行添加、删除或刷新命令。
6666

67+
## 仓库与游戏实例必须分离
68+
69+
> [!CAUTION]
70+
> **绝对不要把本 Git 仓库直接克隆、移动或整体链接到某个启动器实例的 `.minecraft` 目录,也不要把仓库本身设置为游戏目录。**
71+
72+
二者职责不同:
73+
74+
- Git 仓库是整合包的**源代码和构建输入**,包含 `pack.toml``index.toml``.pw.toml` 与 Packwiz 可执行文件。
75+
- 启动器实例是**运行和测试环境**,包含启动器下载的真实 JAR,以及游戏生成的日志、缓存、存档、崩溃报告和个人设置。
76+
77+
把仓库当作 `.minecraft` 会产生以下问题:
78+
79+
- 游戏每次启动都会改写或生成大量文件,污染 Git 工作区;
80+
- 一次 `packwiz refresh` 可能把未被忽略的日志、缓存、存档甚至个人数据写进索引;
81+
- `.pw.toml` 不是可加载的模组 JAR,所以仓库目录本身并不是完整实例;
82+
- 很难区分团队基线配置与本机运行时改动,也容易误提交整个 `mods/``saves/`
83+
84+
推荐把三类目录并列分开:
85+
86+
```text
87+
工作目录/
88+
├── Gearhaven/ # Git 仓库;只保存源文件
89+
├── Gearhaven-builds/ # 本地导出的 .mrpack / CurseForge ZIP
90+
└── 启动器实例/Gearhaven-Dev/
91+
└── .minecraft/ # 实际运行、调试和生成配置的目录
92+
```
93+
94+
文件只在确认测试结果后,按明确的相对路径从测试实例**选择性复制回仓库**;不要同步整个 `.minecraft`
95+
6796
## 各系统如何运行 Packwiz
6897

6998
仓库已经附带三个 Packwiz x86-64 可执行文件:
@@ -283,6 +312,46 @@ Packwiz 会依据项目类别把元数据放到相应目录。直接把 ZIP 放
283312

284313
若某个版本因兼容性原因不能升级,可用交互式 `packwiz pin` 固定;解除固定使用 `packwiz unpin`。固定原因应写在提交或 PR 描述中,避免后来的人误以为它可以安全更新。
285314

315+
## 本地导出整合包
316+
317+
本地导出使用与 GitHub Actions 相同的核心命令。导出前先在仓库根目录刷新索引:
318+
319+
```powershell
320+
.\packwiz.exe refresh
321+
```
322+
323+
推荐把产物写到仓库旁边的独立目录,避免把大文件留在 Git 工作区。Windows PowerShell:
324+
325+
```powershell
326+
New-Item -ItemType Directory -Force ..\Gearhaven-builds | Out-Null
327+
328+
.\packwiz.exe mr export `
329+
-o ..\Gearhaven-builds\Gearhaven-local.mrpack
330+
331+
.\packwiz.exe cf export `
332+
-o ..\Gearhaven-builds\Gearhaven-local-CurseForge.zip
333+
```
334+
335+
macOS;Linux 将可执行文件名替换为 `packwiz-linux`
336+
337+
```bash
338+
mkdir -p ../Gearhaven-builds
339+
340+
./packwiz-macos refresh
341+
./packwiz-macos mr export \
342+
-o ../Gearhaven-builds/Gearhaven-local.mrpack
343+
./packwiz-macos cf export \
344+
-o ../Gearhaven-builds/Gearhaven-local-CurseForge.zip
345+
```
346+
347+
- `mr export` 生成可导入 Modrinth App、Prism Launcher 等启动器的 `.mrpack`
348+
- `cf export` 生成 CurseForge 格式 ZIP;默认导出客户端内容。需要筛选服务端模组时可使用 `cf export --side server`,但仍要单独审核配置和客户端专属内部文件。
349+
- `-o` 明确指定输出路径。省略后产物会写到仓库根目录,不推荐这样做,也不要提交本地导出包。
350+
- 导出可能需要下载另一平台的模组文件。必须检查完整终端输出;出现 `failed to download` 时,即使命令最后生成了文件,也不能直接分发。
351+
- 导出包是测试和分发产物,不是新的编辑源。始终以 Git 仓库中的 Packwiz 源文件为准。
352+
353+
导出后,在启动器中创建一个全新的测试实例并导入产物。不要覆盖唯一的开发实例或个人存档;最终验证应覆盖首次安装、完整启动以及本次改动对应的游戏内场景。
354+
286355
## 本仓库目录结构
287356

288357
```text
@@ -293,7 +362,7 @@ Gearhaven/
293362
├── .gitignore # 不进入 Git 的本地/运行时文件规则
294363
├── mods/
295364
│ ├── *.pw.toml # CurseForge/Modrinth 等外部文件元数据
296-
│ └── *.jar # 少数直接随包分发的本地模组
365+
│ └── *.jar # 直接作为 override 随包分发的内部 JAR
297366
├── config/ # 常规模组配置
298367
├── defaultconfigs/ # 新世界的服务端配置默认值
299368
├── kubejs/
@@ -325,6 +394,37 @@ Gearhaven/
325394

326395
只有模组无法由受支持的平台或稳定直链管理时,才考虑提交原始 JAR。提交前确认许可证允许整合包再分发;二进制文件也会永久增大 Git 历史。
327396

397+
#### 直接随包分发的 override JAR
398+
399+
这里的 **override JAR** 指直接放在仓库 `mods/` 下的真实 `.jar`,而不是由 `.pw.toml` 描述并在安装时下载的模组。Packwiz 把它当作普通内部文件,与 `config/*.toml``kubejs/*.js` 的处理方式相同:
400+
401+
```toml
402+
[[files]]
403+
file = "mods/example.jar"
404+
hash = "..."
405+
```
406+
407+
它与 `.pw.toml` 在索引中的关键区别是:后者的条目包含 `metafile = true`,原始 JAR 没有该标记。
408+
409+
这会带来几个重要结果:
410+
411+
- `packwiz refresh` 只记录该 JAR 的路径和内容哈希;不会识别其中的模组 ID、版本或依赖。
412+
- `packwiz list` 只列出外部元数据,因此**不会显示原始 override JAR**
413+
- `packwiz update``pin``unpin` 和交互式 `remove` 不会管理它;升级与删除都必须人工替换/删除 JAR,再运行 `refresh`
414+
- 原始 JAR 没有 `side = "client"` / `"server"` 元数据,Packwiz 无法按目标端自动筛选,通常会把它作为 override 放入导出包。
415+
- Packwiz 不会按模组 ID 或文件哈希去重。一个原始 JAR、一个 `.pw.toml`,或者来自 CF/MR 的两份 `.pw.toml` 可以同时指向同一模组,最终造成重复加载。
416+
417+
在导出的 `.mrpack` 或 CurseForge ZIP 中,这类内部文件通常位于 `overrides/mods/`。另外,Packwiz 无法自动把 Modrinth 项目映射成 CurseForge 项目,反之亦然;跨平台导出时,某些由 `.pw.toml` 管理的模组也可能被下载并写入目标包的 overrides。这不等于源仓库中存在原始 JAR,应回到仓库检查实际文件类型。
418+
419+
团队规则:
420+
421+
1. 首选 `mr add``cf add`,保留来源、版本、更新和依赖元数据。
422+
2. 平台不受支持但存在稳定直链时,优先考虑 `packwiz url add`,不要立即提交二进制。
423+
3. 只有私有模组、自研构建、无稳定下载来源或确有再分发需求时,才直接保存 JAR。
424+
4. 提交前确认许可证允许再分发,并在提交或 PR 中记录来源、版本、用途和无法使用 `.pw.toml` 的原因。
425+
5. **绝不把测试实例的整个 `mods/` 复制回仓库。**只复制经过确认的单个 override JAR,并先检查是否已有同模组 `.pw.toml`
426+
6. 添加、替换或删除 JAR 后运行 `packwiz refresh`,再通过导出包验证它确实存在且只存在一份。
427+
328428
### `config/``defaultconfigs/`
329429

330430
- `config/` 对应游戏实例根目录中的同名目录,适合整合包的通用客户端、通用端和服务端配置。
@@ -362,16 +462,38 @@ Gearhaven/
362462

363463
## 推荐协作 SOP
364464

365-
每个改动按以下顺序完成:
366-
367-
1. 同步目标分支,确认工作区没有与本次任务无关的未提交改动。
368-
2. 一次只做一个逻辑改动:添加一个功能组、调整一组配置或修复一段脚本。
369-
3. 模组使用 `mr add` / `cf add`;内部文件放到正确目录。
370-
4. 运行 `packwiz refresh`,再运行 `packwiz list` 检查重复项和遗漏。
371-
5. 在干净测试实例中实际启动;涉及配方、世界生成、服务端或客户端专属内容时测试对应场景。
372-
6.`git status``git diff` 检查将提交的文件。应同时包含实际改动、`index.toml`,以及 Packwiz 更新后的 `pack.toml`
373-
7. 提交并推送;在 GitHub 上确认与该提交对应的 **Packwiz Export** 工作流变绿。
374-
8. 需要给队友测试时,从该次运行下载构建产物,不要把本地临时导出包提交进仓库。
465+
> [!IMPORTANT]
466+
> **配置、KubeJS 脚本、纹理和其他内部文件的推荐编辑流程:**
467+
>
468+
> 1. **把当前整合包安装到启动器中的独立开发实例。**
469+
> 2. **直接在该实例的 `.minecraft` 中修改并反复测试。**
470+
> 3. **测试通过后,只把有意保留的改动复制回 Git 仓库,并整理成逻辑清晰的提交。**
471+
>
472+
> 这样无需每改一行配置或脚本就重新构建、重新安装整合包,同时能让 Git 工作区远离游戏运行时生成的噪声。
473+
474+
完整流程:
475+
476+
1. 同步目标分支,确认仓库工作区没有与本次任务无关的改动。
477+
2. 使用本地导出包或 GitHub Actions Artifact,在启动器中创建/更新一个独立的 `Gearhaven-Dev` 测试实例。
478+
3. 首次启动一次,让模组在实例的 `.minecraft` 中生成所需配置。
479+
4. 在测试实例中调整 `config/``defaultconfigs/``kubejs/`、纹理、资源包、菜单素材等,并用 `/reload``F3+T` 或完整重启验证。
480+
5. 测试通过后,按相同相对路径把**有意修改的文件**复制回仓库,例如:
481+
482+
```text
483+
实例/.minecraft/config/example.toml
484+
→ 仓库/config/example.toml
485+
486+
实例/.minecraft/kubejs/server_scripts/recipes.js
487+
→ 仓库/kubejs/server_scripts/recipes.js
488+
```
489+
490+
6. 不要复制 `logs/``cache/``crash-reports/``saves/`、下载缓存、个人账号/服务器信息,也不要整体复制实例的 `mods/`
491+
7.`git status``git diff` 逐项检查回写内容,移除游戏自动重排但与任务无关的配置变化。
492+
8. 按逻辑拆分提交,例如“新增配方”“调整客户端默认配置”“更新菜单纹理”,不要把所有实例变化塞进一个提交。
493+
9. 运行 `packwiz refresh``packwiz list`;若改动会进入整合包,提交中通常应同时包含实际文件、`index.toml` 与更新后的 `pack.toml`
494+
10. 最后重新导出并导入一个干净实例,验证从零安装仍然成立;推送后再确认对应 GitHub Actions 运行成功。
495+
496+
模组集合本身例外:最终添加或删除模组必须在仓库中通过 `mr add``cf add``remove` 完成。可以先在测试实例临时试装模组,但验证通过后应转成正确的 `.pw.toml`;除非满足 override JAR 规则,否则不要把试装 JAR 复制回仓库。
375497

376498
CI 只执行导出,不启动 Minecraft。即使 Actions 显示成功,模组冲突、Mixin 崩溃、配方错误和世界损坏仍只能通过实际测试发现。
377499

0 commit comments

Comments
 (0)