Files
pt-minecraft-modpack/README.md

185 lines
5.3 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`,适合“只能上传文件、编辑文件,然后点一个固定 shell 脚本启动”的面板服环境。
它会自动完成这些事情:
1. 选择一个具体服务端 pack例如 `server-01-random-block`
2. 读取该 pack 的 `pack.toml` 中的 Minecraft / Fabric 版本
3. 下载并执行 Fabric 官方 installer生成服务端启动 jar
4. 读取对应 `mods/*.pw.toml`
5. 自动下载当前服务端需要的模组到运行目录 `mods/`
6. 自动删除上一个服务端残留、但当前服务端不再需要的旧模组
7. 自动写入 `eula.txt`
8. 最后启动服务端
这意味着以后仓库里新增更多目录,例如:
- `server-01-random-block`
- `server-02-xxx`
- `server-03-yyy`
都可以继续复用同一个启动脚本,只需要切换 `PT_SERVER` 即可。
## 方案一:你把整个仓库上传到面板服
上传后,让面板执行:
```bash
PT_SERVER=server-01-random-block bash start.sh
```
如果仓库里只有一个 `server-*` 目录,不传 `PT_SERVER` 也可以自动选择;但只要有多个,建议明确传。
### 常用示例
```bash
PT_SERVER=server-01-random-block PT_JAVA_ARGS="-Xms2G -Xmx4G" bash start.sh
```
```bash
PT_SERVER=server-02-xxx bash start.sh
```
## 方案二:面板服里只粘贴一个“远程拉取并运行”的脚本
如果你的面板服不方便手动上传整个仓库,而是允许你在固定 `.sh` 入口里粘贴脚本,那么可以直接粘贴下面这段:
```bash
#!/usr/bin/env bash
set -Eeuo pipefail
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"
if command -v curl >/dev/null 2>&1; then
DOWNLOAD() { curl -fL --retry 3 --retry-delay 2 -o "$1" "$2"; }
elif command -v wget >/dev/null 2>&1; then
DOWNLOAD() { wget -O "$1" "$2"; }
else
echo "缺少 curl 或 wget" >&2
exit 1
fi
ARCHIVE_PATH="$INSTALL_DIR.tar.gz"
TMP_DIR="$INSTALL_DIR.__tmp"
rm -rf "$TMP_DIR"
mkdir -p "$TMP_DIR"
DOWNLOAD "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz"
tar -xzf "$ARCHIVE_PATH" -C "$TMP_DIR"
EXTRACTED_DIR="$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)"
[ -n "$EXTRACTED_DIR" ] || { echo "解压失败" >&2; exit 1; }
rm -rf "$INSTALL_DIR"
mv "$EXTRACTED_DIR" "$INSTALL_DIR"
rm -rf "$TMP_DIR" "$ARCHIVE_PATH"
cd "$INSTALL_DIR"
PT_SERVER="$PT_SERVER" bash start.sh
```
### 这个远程脚本怎么改
你通常只需要改这几个变量:
- `REPO_REF`:默认 `main`,也可以改成某个分支或 tag
- `PT_SERVER`:你这次要开的服务端目录名
- `INSTALL_DIR`:解压后的安装目录
例如切换到另一个服务端:
```bash
PT_SERVER="server-02-xxx"
```
## 环境要求
- 必须有 `bash`
- 必须有 `java`
- 必须有 `curl``wget`
- 远程拉取方案还需要 `tar`
- 建议有常见基础命令:`grep``sed``awk``find`
- 服务器需要能联网下载:
- 你的 Gitea 仓库归档
- Fabric installer
- Modrinth 模组文件
## `start.sh` 可选环境变量
- `PT_SERVER`:选择要安装/启动的服务端目录名,例如 `server-01-random-block`
- `PT_INSTALL_ROOT`:实际运行目录,默认是脚本所在目录
- `PT_JAVA_ARGS`Java 内存等参数,默认 `-Xms1G -Xmx2G`
- `PT_AUTO_EULA`:默认 `TRUE`,自动写入 `eula=true`
- `PT_FORCE_UPDATE=1`:强制重新安装 Fabric / 重新下载模组
- `PT_SERVER_JAR`:手动指定启动的服务端 jar 路径
- `PT_MODS_DIR`:手动指定模组目录,默认运行目录下的 `mods/`
- `PT_RUNTIME_DIR`:缓存下载内容与状态文件的目录,默认 `.pt-panel-runtime/`
- `PT_SKIP_HASH_CHECK=1`:跳过模组 hash 校验(不建议)
## 验证思路
本脚本在本地已做过:
```bash
bash -n start.sh
PT_DRY_RUN=1 JAVA_BIN=true PT_SERVER=server-01-random-block bash start.sh
```
当前 agent 环境里没有 `java`,所以这里只做了 dry-run 验证;真实运行依赖目标面板服具备 Java 与联网下载能力。