本仓库的打包器支持对不同模组使用不同的检索策略。
- 检索策略仅对未配置为跳过处理的文件有正常行为。在
clonemissing
和backport
下,目前而言,跳过处理的文件均优先取既有文件;在patch
下,目前并不支持对跳过处理的文件添加修改包。- 既有的全局配置中,在
font/
和textures/
下的文件全部跳过处理,即便是文本文件。 - 关于全局配置中的跳过选项,详见此处。
- 既有的全局配置中,在
- 目前而言,
patch
策略还不支持递归调用。noaction
显然没有递归之忧。对于其他选项,打包器支持递归调用:对其他目录的引用可以包含其中的packer-policy.json
;打包器可以在该目录建立新的自定义检索策略。- 如果遇到循环引用,打包器可能不会自动中止,而是持续运行,直到栈溢出;应当尽量避免这一情况的发生。
对于每个asset-domain,策略文件为./projects/<version>/assets/<mod-name>/<asset-domain>/packer-policy.json
。
若找不到该策略,默认策略文件为{"type": "noaction"}
。
packer-policy.json
- 根标签
type
string -> 策略的类型。可为以下选项之一:noaction
默认选项。不进行特殊处理,直接按照此处的文件结构打包。如果没有对文件同步或版本对照的特殊要求,使用该类型。如:示例文件plainclone
直接引用另一位置的文件结构。如果需要文本完全同步,使用该类型。如:示例文件source
string -> 复制的源地址。需要从本仓库的根目录开始计算,使用./
前缀。
clonemissing
使用此处的文件结构,但在检索完文件后,根据另一位置的文件结构补充文本。对于出现冲突的条目,若为lang/
下的内容,将会按照key
合并,冲突项采用此处的文本;若为其他位置的文件,直接采用此处的文件。如:示例文件source
string -> 补充文件的源地址。需要从本仓库的根目录开始计算,使用./
前缀。
backport
使用此处的文件结构,但在此基础上,从另一位置的文件结构更新已有的文本。对于lang/
下的内容,仅会对已有的key
更新内容,原本不存在的key
不会新增;对于其他位置的文件,仅会对已有的文件进行替换,原本不存在的文件不会新增。例如,如果需要从高版本将文件同步至低版本,使用该类型。如:示例文件source
string -> 更新文件的源地址。需要从本仓库的根目录开始计算,使用./
前缀。
patch
引用另一位置的文件结构,但在其中的部分文件上额外应用自定义的修改。修改使用Google Diff-Match-Patch算法生成;尽管原则上可以放在任意位置、采用任意后缀名,建议将修改文件放在被修改文件相应的位置,采用.patch
后缀,以保持统一性。如:示例文件source
string -> 复制的源地址。需要从本仓库的根目录开始计算,使用./
前缀。patches
object -> 修改文件,以及对应的修改目标。修改目标的相对路径
string -> 修改文件的源地址。需要从本仓库的根目录开始计算,使用./
前缀;修改目标的相对路径
需要为在复制源地址的<asset-domain>/
下方的相对位置,必须使用/
作为分隔符,如lang/zh_cn.json
。