Files
pt-minecraft-modpack/README.md
2026-03-28 12:48:13 +08:00

237 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PT's Basic Modpack
一些最基础的功能的模组包,包括录制、光影、基本优化等。主打原版味道。
## 开发
分为服务端和客户端两部分。服务端会在不同时间,安装不同的娱乐性质的模组。客户端则会努力保持不变。
使用 [packwiz](https://packwiz.infra.link) 进行模组包管理。
首先你要安装 packwiz。建议的是用 Golang 技术栈来直接安装:
```bash
go install github.com/packwiz/packwiz@latest
```
然后,进入对应的目录开始工作。例如要更改客户端相关:
```bash
cd client
```
### 添加模组
```bash
packwiz add https://modrinth.com/mod/create
```
### 构建 .mrpack 文件
```bash
packwiz modrinth export
```
## 服务端部署
参见 [该文档](https://packwiz.infra.link/tutorials/installing/packwiz-installer/)。
可以直接使用 Docker 来测试运行:
```bash
docker run --pull=always \
-e TYPE=FABRIC \
-e "PACKWIZ_URL=https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack/raw/branch/main/server-01-random-block/pack.toml" \
-e "EULA=TRUE" \
-e "VERSION=1.21.10" \
-p 25565:25565 \
itzg/minecraft-server
```
或者,需要从 [https://github.com/packwiz/packwiz-installer/releases](这里) 下载最新最热的 Installer以安装需要的文件。
## 面板服一键启动方案
仓库根目录提供了:
- `start.sh`:仓库内真正负责安装与启动服务端的主脚本
- `panel-start.sh`:专门给面板服上传使用的薄入口脚本
推荐你在面板服里这样用:
1. 直接下载仓库里的 `panel-start.sh`
2. 上传到面板
3. 如果面板要求固定入口文件名是 `start.sh`,就把它重命名成 `start.sh`
4. 按需要修改里面的变量
5. 点击运行
`start.sh` 现在**直接复用官方 `packwiz-installer-bootstrap` / `packwiz-installer`**,而不是自己手动管理模组列表。
它会自动完成这些事情:
1. 选择一个具体服务端 pack例如 `server-01-random-block`
2. 读取该 pack 的 `pack.toml` 中的 Minecraft / Fabric 版本
3. 下载并执行 Fabric 官方 installer生成服务端启动 jar
4. 下载并执行 `packwiz-installer-bootstrap`
5.`packwiz-installer --side server` 根据远程或本地 `pack.toml` 自动同步当前服务端需要的模组
6. 自动写入 `eula.txt`
7. 最后启动服务端
## 方案一:上传整个仓库后直接运行
如果你的面板允许你上传整个仓库,那么直接运行:
```bash
PT_SERVER="server-01-random-block" bash start.sh
```
因为这时 `start.sh` 会直接使用仓库里的本地 `server-01-random-block/pack.toml`
如果仓库里只有一个 `server-*` 目录,不传 `PT_SERVER` 也可以自动选择;但只要有多个,建议明确传。
### 常用示例
```bash
PT_SERVER="server-01-random-block" PT_JAVA_ARGS="-Xms1G -Xmx1G" bash start.sh
```
```bash
PT_SERVER="server-02-xxx" bash start.sh
```
## 方案二:只下载并上传 `panel-start.sh`
如果你只想下载一个脚本文件再上传到面板,那么请直接使用:
- 仓库文件:`panel-start.sh`
你上传后:
- 如果面板固定执行文件名就是 `start.sh`,请把 `panel-start.sh` 重命名为 `start.sh`
- 然后编辑这几个变量:
```sh
REPO_URL="https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack"
REPO_REF="main"
PT_SERVER="server-01-random-block"
PT_JAVA_ARGS="-Xms1G -Xmx1G"
```
这个脚本会:
1. 从 Gitea 下载整个仓库归档
2. 解压到当前目录下的 `pt-minecraft-modpack/`
3. 自动调用仓库里的 `start.sh`
### 直接下载链接
你可以直接下载这个文件:
- `panel-start.sh`
`https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack/raw/branch/main/panel-start.sh`
## 方案三:直接复制 `panel-start.sh` 内容到面板里
如果你的面板不能单独下载文件,但允许你粘贴脚本内容,也可以把下面这段直接保存成面板入口脚本:
> 注意:请确保保存为 **LF 换行**,不要是 Windows 的 CRLF。
```sh
#!/bin/sh
set -eu
REPO_URL="https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack"
REPO_REF="main"
PT_SERVER="server-01-random-block"
INSTALL_DIR="$(pwd)/pt-minecraft-modpack"
ARCHIVE_PATH="$(pwd)/pt-minecraft-modpack.tar.gz"
TMP_DIR="$(pwd)/pt-minecraft-modpack.__tmp"
PT_JAVA_ARGS="-Xms1G -Xmx1G"
rm -rf "$TMP_DIR"
mkdir -p "$TMP_DIR"
if command -v curl >/dev/null 2>&1; then
curl -fL --retry 3 --retry-delay 2 -o "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz"
elif command -v wget >/dev/null 2>&1; then
wget -O "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz"
else
echo "缺少 curl 或 wget" >&2
exit 1
fi
tar -xzf "$ARCHIVE_PATH" -C "$TMP_DIR"
EXTRACTED_DIR="$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)"
if [ -z "$EXTRACTED_DIR" ]; then
echo "解压失败" >&2
exit 1
fi
rm -rf "$INSTALL_DIR"
mv "$EXTRACTED_DIR" "$INSTALL_DIR"
rm -rf "$TMP_DIR" "$ARCHIVE_PATH"
cd "$INSTALL_DIR"
PT_REPO_URL="$REPO_URL" \
PT_REPO_REF="$REPO_REF" \
PT_SERVER="$PT_SERVER" \
PT_JAVA_ARGS="$PT_JAVA_ARGS" \
bash ./start.sh
```
## 环境兼容性说明
有些面板不是用 `bash start.sh`,而是直接用 `sh start.sh`。因此:
- 面板入口脚本建议使用 `panel-start.sh` 这种 `sh` 兼容的薄脚本
- 仓库内真正运行 Minecraft 的脚本继续使用 `bash`
- 如果你是从 Windows 编辑/复制脚本,请务必使用 **LF** 换行,不要用 **CRLF**
## 环境要求
- 面板入口脚本需要:`sh`
- 仓库主脚本 `start.sh` 需要:`bash`
- 必须有 `java`
- 必须有 `curl``wget`
- 远程拉取方案还需要 `tar`
- 建议有常见基础命令:`grep``sed``awk``find`
- 服务器需要能联网下载:
- 你的 Gitea 仓库归档
- Fabric installer
- `packwiz-installer-bootstrap`
- Modrinth 模组文件
## `start.sh` 可选环境变量
- `PT_SERVER`:选择要安装/启动的服务端目录名,例如 `server-01-random-block`
- `PT_REPO_URL`:仓库地址,例如 `https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack`
- `PT_REPO_REF`:仓库分支或 tag例如 `main`
- `PT_PACK_URL`:如果你想完全手动指定远程 `pack.toml` 地址,也可以直接传这个
- `PT_INSTALL_ROOT`:实际运行目录,默认是脚本所在目录
- `PT_JAVA_ARGS`Java 内存等参数,默认 `-Xms1G -Xmx1G`
- `PT_AUTO_EULA`:默认 `TRUE`,自动写入 `eula=true`
- `PT_FORCE_UPDATE=1`:强制重新下载 Fabric installer / bootstrap并重新执行安装
- `PT_SERVER_JAR`:手动指定启动的服务端 jar 路径
- `PT_RUNTIME_DIR`:缓存下载内容与状态文件的目录,默认 `.pt-panel-runtime/`
- `PT_PACKWIZ_BOOTSTRAP_NO_UPDATE=1`:禁用 bootstrap 自更新
- `PT_FABRIC_INSTALLER_VERSION`:手动指定 Fabric installer 版本
- `PT_PACKWIZ_BOOTSTRAP_URL`:手动指定 bootstrap 下载地址
## 验证思路
本脚本已按真实链路验证过以下关键步骤:
```bash
bash -n start.sh
PT_DRY_RUN=1 PT_SERVER=server-01-random-block bash start.sh
```
并且另外在独立测试目录里实际完成了端到端验证:
- `packwiz-installer-bootstrap` 可以直接读取该仓库的 `server-01-random-block/pack.toml`
- `--side server` 会正确安装服务端所需模组
- Fabric 官方 installer 能正确安装 `Minecraft 1.21.10 + Loader 0.18.5`
- 使用 Java 21、`-Xms1G -Xmx1G` 成功启动服务器
- 服务器日志已出现:`Done (...)! For help, type "help"`