Skip to content

Commit 46c864d

Browse files
committed
Modify behaviors on merging files
1 parent f16cc05 commit 46c864d

File tree

19 files changed

+238
-571
lines changed

19 files changed

+238
-571
lines changed

Packer-Doc.md

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
## 注意事项
44
- 文件地址中,目录分隔符**一律使用正斜杠**
5-
- 下述说明中,**完整地址**永远指从**仓库根目录**算起的地址,例如根目录下的`CONTRIBUTING.md`即为`CONTRIBUTING.md`,1.12版本资源包的`pack.png`即为`projects/1.12.2/pack.png`
6-
- 下述说明中,**相对地址**永远指从**特定命名空间的文件夹**算起的地址,例如仓库中的`projects/1.18/assets/minecraft/minecraft/font/default.json`即为`font/default.json`
7-
- 下述说明中,**目标地址**永远指分发的资源包中,该文件应当被放置的位置,例如上一条中提及的文件就是`assets/minecraft/font/default.json`
8-
- 本次打包器更新以后,对于**非文本文件**无需特殊处理;打包器会将所有*未知的*拓展名按照非文本文件处理,无需特殊配置。
9-
- 目前而言,打包器会将`lang/`下的`.lang``.json`作为语言文件,其余的`.txt`, `.md`, `.json`作为普通文本文件,其余文件都作为非文本文件。<br>如果出现其他格式,可以后续添加——尽管这一部分没有添加显式的配置项。
5+
- 地址相关
6+
- 下述说明中,**完整地址**永远指从**仓库根目录**算起的地址,例如对根目录下的`CONTRIBUTING.md`应为`CONTRIBUTING.md`,1.12版本资源包的`pack.png`应为`projects/1.12.2/pack.png`
7+
- 下述说明中,**相对地址**永远指从**特定命名空间的文件夹**算起的地址,例如对仓库中的`projects/1.18/assets/minecraft/minecraft/font/default.json`应为`font/default.json`
8+
- 下述说明中,**目标地址**永远指**分发的资源包中**,该文件应当被放置的位置,例如上一条中提及的文件应为`assets/minecraft/font/default.json`
9+
- 文件相关
10+
- 下述说明中,**语言文件**永远指可以被打包器解读为**映射表**的文件。这包括了所有 **`lang/`下的`.lang``.json`文件**
11+
- 下述说明中,**文本文件**永远指含有**文本内容**,但**不属于语言文件**的文件。这包括了非语言文件的`.txt``.md``.json`文件。
12+
- 下述说明中,**非文本文件**永远指**不属于以上两类**的文件,如图片或其他二进制文件。
13+
- 本次打包器更新以后,对于**非文本文件**无需特殊处理:打包器会按照文件拓展名自动识别文件类型。
1014

1115
<!-- 下面的部分内容是从我的fork处,尚未完工(短期内也不会完工)的wiki摘录+修改而来的。有些地方用XML注释格式去掉了部分内容,但是我没有完全删掉,因为还打算复制回去的。 --->
1216

@@ -18,6 +22,8 @@
1822

1923
### 文件格式
2024

25+
目前而言,所有配置文件都需要填写全部项——无关项可以填写空集合,但不能不填,更不能写null。有计划在将来优化这一行为。
26+
2127
**全局**配置文件`./config/packer/<version>.json`的格式如下:
2228

2329
- 根标签 object
@@ -40,10 +46,10 @@
4046
- string<br>强制包含的文件的**相对地址**
4147
- `characterReplacement` object<br>打包时采用的字符替换表。用于将部分字符替换至特殊位点,也可单纯用于简化输入。目前而言,包含了字体修复的有关内容。
4248
- `<查询语句>` string<br>用以替换**正则表达式**`<查询语句>`匹配对象的内容,可以是一个或多个字符,甚至可以在这里用**正则替换语句**。<br>主要用于*字体修复包*所需的**符号替换**,此时,查询语句通常是字面量,替换内容一般而言总是以四位*Unicode转义码*填写;对于**基础多语种平面(BMP)**以外的字符,最好用**UTF-16代理对**书写。
43-
- `destinationReplacement` object<br>打包时采用的目标地址替换。<br>可以用于移动文件,但暂时闲置。
49+
- `destinationReplacement` object<br>打包时采用的目标地址替换。<br>可以用于移动文件,但暂时闲置;使用**检索策略**中的`singleton`也可以实现地址替换,但需要在每个模组下配置
4450
- `<查询语句>` string<br>用以替换**正则表达式**`<查询语句>`匹配对象的内容,可以是一个或多个字符,甚至可以在这里用**正则替换语句**
4551

46-
**局域**配置文件`./projects/<version>/assets/<mod-name>/<namespace>/local-config.json`的格式与全局配置文件中,`floating`标签下的内容(*浮动配置*)一致。
52+
**局域**配置文件`./projects/<version>/assets/<mod-name>/<namespace>/local-config.json`的格式与全局配置文件中,`floating`标签下的内容(*可变配置*)一致。
4753

4854
### 文件容斥顺序
4955

@@ -59,20 +65,21 @@
5965

6066
- 如果在某个命名空间内检测到存在`local-config.json`,打包器将会在全局配置的基础上,在其*可变配置***添加**该文件中的内容,并用这一修改后的配置执行**该命名空间下的**检索工作。
6167
- 最好不要与全局配置中的内容重复。尽管理论上这样子可以运行,但是重复项保留哪一个或许不容易断定。
62-
- 需要注意的是,如果通过*检索策略***引用其他命名空间**,打包器****会加载目标命名空间的局域配置,而**不会**加载原空间的局域配置;不过,在原位进行的检索工作不受影响。
68+
- 需要注意的是,如果通过*检索策略***引用其他命名空间**,打包器****会加载目标命名空间的局域配置,而**不会**加载原空间的局域配置;不过,在原位进行的检索工作不受影响。
6369

6470
## 检索策略
6571

66-
对于每个**命名空间文件夹**(注意这个概念和**命名空间**有着细微差别),打包器除了可以原位检索文件以外,还可以**使用不同的检索方式**。目前,可用的检索方式有两种:
67-
1. **引用**给定的命名空间。
68-
2. 从给定的**组合**文件,直接生成语言文件(或部分)。
72+
对于每个**命名空间文件夹**,打包器除了可以原位检索文件以外,还可以**使用不同的检索方式**。目前,可用的检索方式有四种:
73+
1. **原位**检索文件。
74+
2. **引用**给定的命名空间。
75+
3. 从给定的**组合**文件,直接生成语言文件(或部分)。
76+
4. 引用**单个**文件。
6977

70-
计划中,将对*非语言文件的文本文件*添加一个**修改包**策略,但是这个策略暂时还没实现,部分原因是在上一版打包器中,这个策略还没被用过。
78+
> 计划中,将对*非语言文件的文本文件*添加一个**修改包**策略,但是这个策略暂时还没实现,部分原因是在上一版打包器中,这个策略还没被用过。
7179
72-
单独看起来,这或许没什么用(Packer的上一版中,功能还要多些);但有一点很重要:
73-
这些加载策略(包括**原位**加载)是可以**串联****递归**的!于是,通过这三种策略,应该可以满足许多需求。
80+
单独看起来,这或许没什么用(Packer的上一版中,功能还要多些);但有一点很重要:这些加载策略是可以**串联****递归**的!于是,通过这些策略,应该可以满足许多需求。
7481

75-
- **串联**:在一个策略文件中,可以放置**多条策略**。策略将会从前往后执行,**前者**优先——和*Minecraft资源包*顺序差不多。不过,如果有需要,在策略文件中也预留了一个字段,用来**覆盖**前序文件
82+
- **串联**:在一个策略文件中,可以放置**多条策略**。策略将会从前往后执行,**前者**优先——和*Minecraft资源包*顺序差不多。不过,在文件冲突时,也提供了一些特殊的冲突解决选项
7683
- **递归**:如果**引用**了其他命名空间文件夹,那里的策略文件**也会生效**。这意味着可以实现*连续引用*——尽管前提是不出现**循环引用**
7784

7885
部分案例被放在了`./projects/packer-example/`这一虚拟的“版本”下。很明显,我们**并不会**分发这一版本,但如果有条件,可以在本地构造打包器,并用这一版本做试验。
@@ -82,34 +89,40 @@
8289
#### packer-policy.json
8390

8491
对于每个**命名空间文件夹**,策略文件为`./projects/<version>/assets/<mod-name>/<asset-domain>/packer-policy.json`
85-
若找不到该策略,默认策略文件内容为`[{"type": "direct"}]`
92+
若找不到该文件,默认策略内容为`[{"type": "direct"}]`,也就是**原位**加载,没有特殊配置
8693

8794
- 根标签 list<br>打包器需要执行的策略,**从前往后执行**。如果有冲突内容,默认以**前者**优先——当然这是可以配置的。
8895
- object<br>单项策略。部分参数可变。
89-
- `overrides` bool<br>是否可以用本步的文件覆盖前序文件。如果无此项,默认为`false`。<br>关于这里的“覆盖”,对于**非语言文件**(不在`lang\`下),指的是**全文**覆盖;对于**语言文件**,则是**按条目**覆盖。
9096
- `type` string<br>策略的类型。可为以下选项之一:
9197
- `direct` 默认选项。不进行特殊处理,直接按照此处的文件结构打包。
9298
- `indirect` 引用给定的命名空间。对于这些文件,其*目标地址*中的*命名空间*将会自动替换为本策略所在的命名空间。
9399
- `source` string<br>引用命名空间所在文件夹的**完整地址**
94100
- `composition`<br>从给定的*组合文件*,直接生成语言文件(或部分)。<br>这些组合文件可能不会被自动排除;可以考虑使用*局域配置*处理。
95-
- `source` string<br>引用组合文件的**完整位置**
101+
- `source` string<br>引用组合文件的**完整地址**
96102
- `destType` string<br>需要生成的语言文件的类型。可以为`json``lang`
103+
- `singleton`<br>引用给定的单个文件。<br>理论上该操作可以选取任何位置的文件,只要目标位置填写正确;不过,一般建议放在*合理的位置*
104+
- `source` string<br>引用文件所在的**完整地址**
105+
- `relativePath`<br>文件需要被放置的**相对地址**。考虑到连续引用,这里不宜使用**目标地址**
106+
- **通用参数**
107+
- `modifyOnly` bool<br>默认为`false`。<br>对于**语言文件**,若本项为`true`,对于已有的键,若在该步中提供了新的值,则将会用新值替换旧值;**不会**包含本步中新出现的键。<br>对于其他文件,本项无效。
108+
- `append` bool<br>默认为`false`。<br>对于**文本文件**,将会在已有的文本内容之后**换行**,然后连接本步的内容。<br>对于其他文件,本项无效。
97109

98110
#### [组合文件].json
99111

100112
- 根标签 object
101113
- `target` string<br>生成的语言文件的**目标地址**
102-
* `entries` list<br>需要生成的组合项。这些项将会分别执行组合以后,连接起来。<br>**如果存在键冲突,打包器会在此崩溃!**有计划在后期更改这一行为。
114+
* `entries` list<br>需要生成的组合项。这些项将会分别执行组合以后,连接起来。<br>**如果存在键冲突,打包器会在此崩溃!**有计划在后期更改这一行为;目前而言,可以使用多个组合文件绕过这个限制
103115
* object<br>单项策略。
104-
* `templates` object<br>组合所用的模板。所有内容采用**C#格式化模式**填写。<br>粗略地说,其中的格式符有形式`{0}, {1}, {2},...`;完整的定义可见 *.net文档*
116+
* `templates` object<br>组合所用的模板。所有内容采用**C#格式化模式**填写。<br>粗略地说,其中的格式符有形式`{0}, {1}, {2},...`,字面量花括号需要用`{{``}}`转义;完整的定义可见 *[.net文档/Composite Formatting](https://learn.microsoft.com/en-us/dotnet/standard/base-types/composite-formatting)*
105117
- `<键模板>` string<br>`<键模板>`对应的值模板。
106-
* `parameters` list<br>组合所用的参数表。参数按照模板中的**索引**顺序排列。不支持嵌套,必须字面量
118+
* `parameters` list<br>组合所用的参数表。参数按照模板中的**索引**顺序排列。不支持嵌套,必须用字面量
107119
* object<br>每个索引位置上可用的参数。
108120
- `<键参数>` string<br>`<键参数>`对应的值参数。
109121

110122
### 组合文件
111123

112124
组合文件用来生成“组合型”的**语言文件/语言文件片段**,也就是那些有大量重复文本、有明显的格式的语言文件片段。
125+
113126
组合文件的工作原理如下:
114127
1. 获取`entries`中的全部条目,每个条目代表一种组合模式。
115128
2. 每个条目中,由`templates`中的所有条目充当模板,`parameters`中的所有条目充当参数,生成若干组合后的条目。

projects/1.16/assets/crafting-tweaks/craftingtweaks/packer-policy.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
{
66
"type": "indirect",
77
"source": "./projects/1.19/assets/crafting-tweaks/craftingtweaks",
8-
"overrides": true
8+
"modifyOnly": true
99
}
1010
]

projects/1.18/assets/crafting-tweaks/craftingtweaks/packer-policy.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
{
66
"type": "indirect",
77
"source": "./projects/1.19/assets/crafting-tweaks/craftingtweaks",
8-
"overrides": true
8+
"modifyOnly": true
99
}
1010
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"itemGroup.furnitures": "Macaw的家具",
3+
"mcwfurnitures.container.threerows": "家具",
4+
"item.mcwfurnitures.cabinet_door": "橱柜门",
5+
"item.mcwfurnitures.cabinet_drawer": "橱柜抽屉",
6+
"mcwfurnitures.furnitureitem.desc": "合成原料"
7+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"target": "assets/mcwfurnitures/lang/zh_cn.json",
3+
"entries": [
4+
{
5+
"templates": {
6+
"block.mcwfurnitures.{0}{1}_wardrobe": "{0}{1}衣柜",
7+
"block.mcwfurnitures.{0}{1}_modern_wardrobe": "{0}{1}现代风格衣柜",
8+
"block.mcwfurnitures.{0}{1}_double_wardrobe": "{0}{1}双门衣柜",
9+
"block.mcwfurnitures.{0}{1}_bookshelf": "{0}{1}书架",
10+
"block.mcwfurnitures.{0}{1}_bookshelf_cupboard": "{0}{1}带橱柜书架",
11+
"block.mcwfurnitures.{0}{1}_drawer": "{0}{1}抽屉",
12+
"block.mcwfurnitures.{0}{1}_double_drawer": "{0}{1}双层抽屉",
13+
"block.mcwfurnitures.{0}{1}_bookshelf_drawer": "{0}{1}带书架抽屉",
14+
"block.mcwfurnitures.{0}{1}_lower_bookshelf_drawer": "{0}{1}带下层书架抽屉",
15+
"block.mcwfurnitures.{0}{1}_large_drawer": "{0}{1}大型抽屉柜",
16+
"block.mcwfurnitures.{0}{1}_lower_triple_drawer": "{0}{1}倒品字抽屉",
17+
"block.mcwfurnitures.{0}{1}_triple_drawer": "{0}{1}品字抽屉",
18+
"block.mcwfurnitures.{0}{1}_desk": "{0}{1}书桌",
19+
"block.mcwfurnitures.{0}{1}_covered_desk": "{0}{1}带挡板书桌",
20+
"block.mcwfurnitures.{0}{1}_modern_desk": "{0}{1}现代风格书桌",
21+
"block.mcwfurnitures.{0}{1}_table": "{0}{1}桌",
22+
"block.mcwfurnitures.{0}{1}_end_table": "{0}{1}搁板桌",
23+
"block.mcwfurnitures.{0}{1}_coffee_table": "{0}{1}高脚桌",
24+
"block.mcwfurnitures.{0}{1}_glass_table": "{0}{1}玻璃桌",
25+
"block.mcwfurnitures.{0}{1}_chair": "{0}{1}椅子",
26+
"block.mcwfurnitures.{0}{1}_modern_chair": "{0}{1}现代风格椅子",
27+
"block.mcwfurnitures.{0}{1}_striped_chair": "{0}{1}竖纹靠背椅",
28+
"block.mcwfurnitures.{0}{1}_stool_chair": "{0}{1}凳子",
29+
"block.mcwfurnitures.{0}{1}_counter": "{0}{1}台桌",
30+
"block.mcwfurnitures.{0}{1}_drawer_counter": "{0}{1}抽屉台桌",
31+
"block.mcwfurnitures.{0}{1}_double_drawer_counter": "{0}{1}双层抽屉台桌",
32+
"block.mcwfurnitures.{0}{1}_cupboard_counter": "{0}{1}橱柜台桌"
33+
},
34+
"parameters": [
35+
{
36+
"": "",
37+
"stripped_": "去皮"
38+
},
39+
{
40+
"oak": "橡木",
41+
"birch": "白桦木",
42+
"spruce": "云杉木",
43+
"jungle": "丛林木",
44+
"acacia": "金合欢木",
45+
"dark_oak": "深色橡木",
46+
"crimson": "绯红木",
47+
"warped": "诡异木",
48+
"mangrove": "红树木"
49+
}
50+
]
51+
}
52+
]
53+
}

0 commit comments

Comments
 (0)