[](https://github.com/Robsutar/resource-pack-no-upload/actions/workflows/ci.yml)
# ResourcePackNoUpload 插件
一个允许服务器管理员高效管理和分发资源包的 Minecraft 服务器工具,无需外部托管。
## 快速开始
如果配置文件不存在,RNU 将生成配置模板,但没有额外的更改则无法工作。
有两件事很重要:定义资源包提供商的端口,以及加载资源包的加载器。
### 定义端口
服务器配置:
- 对于 RNU 插件:`plugins/ResourcePackNoUpload/server.yml`
- 对于 RNU 模组:`config/resourcepacknoupload/server.yml`
```yaml
# 此服务器端口需要对玩家开放
port: 25008 # 选择一个开放的服务器端口供玩家使用。
# 提供将发送给玩家的根地址,通常
# `http://` + 服务器的公共 IP + `:` + 上定义的端口。
# 例如:
# publicLinkRoot: "http://192.0.2.1:25008"
#
# 在大多数情况下,此字段不需要设置,但对于基于 Pterodactyl 的
# 服务器,此字段是强制性的。
publicLinkRoot:
# 用于向玩家发送资源包的方法。
sender:
type: # 在此处设置您的发送器类型。
# 其他发送器字段,每种类型都有其自己的字段。
# 详细信息请参见本文档末尾。
```
### 创建资源包加载器
插件配置(使用 `/rnu reload` 重载):
- 对于 RNU 插件:`plugins/ResourcePackNoUpload/config.yml`
- 对于 RNU 模组:`config/resourcepacknoupload/config.yml`
```yaml
# 资源包加载器,每次加载 RNU 的资源包时都会调用。
loader:
type: # 在此处设置您的加载器类型。
# 其他加载器字段,每种类型都有其自己的字段。
```
**可用类型:**
ReadFolder 从文件夹简单加载
使用任何提供的路径的现有文件夹。
```yaml
type: ReadFolder
# 相对于服务器根文件夹。
# 在 `Cool Folder` (例如) 中应该有资源包文件。
# Cool Folder/pack.mcmeta
# Cool Folder/assets/minecraft...
folder: "rnu resource pack/Cool Folder/"
```
ReadZip 从压缩的资源包简单加载
使用任何提供的路径的现有 .zip 文件。
```yaml
type: ReadZip
# 相对于服务器根文件夹。
# 在 `Cool Resource Pack.zip` (例如) 中应该有资源包文件。
# Cool Resource Pack.zip/pack.mcmeta
# Cool Resource Pack.zip/assets/minecraft...
zip: "rnu resource pack/Cool Resource Pack.zip"
```
Download 从 Web 下载,包含 http 标头
从链接下载资源包。
首先,这似乎与 RNU 的目的相反,但此加载器还
支持下载请求的 http 标头,从而允许您下载
带有私钥的资源包,这不由 Minecraft 客户端直接支持。
```yaml
type: Download
# 可选字段,这将缓存下载,确保只要可以找到临时文件夹中的此缓存文件,就不会再次下载。
cacheName: drive_private_pack # 任意名称,将用于保存文件。
# 下载链接。
url: https://www.googleapis.com/drive/v3/files/FILE_ID?alt=media
# 可选字段,这是一个标头列表,其键和值,这里
# 我们调用 Google API,并传递一个所需的令牌来下载文件。
headers:
- key: "Authorization"
value: "Bearer drive_api3213xih32i9DASKxE83hd9203f1930c0ll-d1v3-t0k3n2389"
```
WithMovedFiles 从另一个加载器修改文件
将从目录移动的加载器提供的资源包文件。
```yaml
type: WithMovedFiles
# 要移动的文件夹内容。支持未知路径,因为它们使用 `?`。
# 例如,对于下载(请参阅更详细的加载器信息)加载器的结果将是:
# `Robsutar-super-cool-pack78HN3278gj32d/assets/minecraft...`
# 我们将使用这个第一个文件夹作为源,忽略它们的名称。
folder: "?/"
# 目标文件夹,这里我们使用资源包根目录。
destination: ""
# 它可以是任何加载器,对于此加载器示例,我们使用 GitHub 的发布,
# 具有细粒度的个人访问令牌,具有读取权限。根据
# 发布,资源包的内容可能位于另一个下载文件中,
# 我们使用 WithMovedFiles 来调整此文件。
loader:
type: Download
url: https://api.github.com/repos/Robsutar/super-cool-pack/zipball
headers:
- key: "Authorization"
value: "Bearer github_pat_uS78ih32i9DASKxE83hd9203f1930c0ll-g1t-t0k3n2389"
- key: "Accept"
value: "application/vnd.github.v3+json"
```
WithDeletedFiles 从另一个加载器修改文件
如果文件匹配提供的路径,则忽略加载器的文件。
```yaml
type: WithDeletedFiles
# 要忽略的路径,支持 glob 文件匹配。在本例中,我们删除所有
# 结尾为 `.md` 的文件。
toDelete: "**.md"
# 要忽略目录内的所有文件:
# toDelete: "assets/all_inside_me_will_be_deleted/**/*"
# 要忽略一个文件:
# toDelete: "assets/minecraft/i_will_be_deleted.txt"
# 这可以为任何加载器,对于此加载器示例,我们使用简单的 ReadFolder 加载器。
loader:
type: ReadFolder
folder: "rnu resource pack/Cool Folder/"
```
Merged 从加载器列表加载和合并资源包
组合多个加载器,优先使用列表中的第一个加载器。
```yaml
type: Merged
# 可选字段,这是一个路径列表,用于合并 json 文件列表项,特别是
# 有用于自动合并自定义模型数据。
mergedJsonLists:
- files: "assets/minecraft/models/item/**.json"
# 用于按顺序对 json 条目进行排序的数字字段,在自定义模型数据的情况下,
# 条目必须按顺序排列。
orderBy: "predicate.custom_model_data"
# 这是一个列表,对于每个条目,您需要指定所需的加载器的值。
# 对于覆盖情况,列表顶部的加载器具有主要优先级,即,
# 它们的文件将替换其他文件。
loaders:
- type: ReadFolder
folder: "rnu resource pack/Cool Folder/"
- type: ReadZip
zip: "plugins/ModelEngine/resource pack.zip"
```
## 自动重新加载
可以使 RNU (**仅插件**) 在事件调用时自动重新加载。
如何配置它
自动重新加载配置:`plugins/ResourcePackNoUpload/autoReloading.yml`
```yaml
invokers:
# 事件类,这对于每个案例都非常具体。
# 这里我们将使用 ModelEngine 事件。
- eventClass: "com.ticxo.modelengine.api.events.ModelRegistrationEvent"
# 事件发生后延迟的时间,以 ticks 为单位。
delay: 10 # 默认值为 1。
# 在可以再次调用此事件之前冷却的时间。
# 在这里我们添加了冷却时间,因为在 ModelEngine 的情况下,
# `ModelRegistrationEvent` 事件会调用几次,这个
# 冷却时间将只执行一次重新加载。
repeatCooldown: 10 # 默认值为 0。
```
## 不同的发送器
默认情况下,使用 `Delayed` 发送器,这适用于大多数情况。
使用 PaperMC 服务器上的注入器
注意:实验性功能
服务器配置:`plugins/ResourcePackNoUpload/server.yml`
```yaml
sender:
# 此发送器将覆盖 PaperMC 中的运行时服务器资源包属性,
# 将包发送处理留给 PaperMC。
type: PaperPropertyInjector
```
不自动发送 URL,固定链接服务器
服务器配置:`plugins/ResourcePackNoUpload/server.yml`
```yaml
sender:
# 此发送器将不会自动将资源包 URL 发送到玩家,
# 并且将具有固定的链接。
# 如果您想通过 vanilla 行为发送资源包,例如,将资源-pack server.properties 设置为此链接,则很有用。
# type: NoSenderFixedLink
# 带有 "pack" 路由的链接将如下所示: "http://192.0.2.1:25008/pack.zip"
# 但是,如果 config 中定义了 IP 和端口 `publicLinkRoot`
route: "pack"
```
## 其他配置
配置文件中还有其他设置,例如消息和 RNU 行为,请参考自动生成的
config.yml。