@sfmc-bds/bds-tools 0.2.0-beta.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +663 -0
- package/README.md +1 -1
- package/dist/bds-manager.d.ts +16 -6
- package/dist/bds-manager.d.ts.map +1 -1
- package/dist/bds-manager.js +59 -66
- package/dist/bds-manager.js.map +2 -2
- package/dist/changelog.d.ts +11 -7
- package/dist/changelog.d.ts.map +1 -1
- package/dist/changelog.js +60 -34
- package/dist/changelog.js.map +2 -2
- package/dist/check-update.d.ts.map +1 -1
- package/dist/check-update.js +59 -23
- package/dist/check-update.js.map +2 -2
- package/dist/cli-pack-manager.js +11 -1
- package/dist/cli-pack-manager.js.map +2 -2
- package/dist/dependency-negotiator.d.ts +73 -0
- package/dist/dependency-negotiator.d.ts.map +1 -0
- package/dist/dependency-negotiator.js +151 -0
- package/dist/dependency-negotiator.js.map +7 -0
- package/dist/fsx.d.ts +17 -14
- package/dist/fsx.d.ts.map +1 -1
- package/dist/fsx.js +67 -19
- package/dist/fsx.js.map +2 -2
- package/dist/host-platform.d.ts +25 -0
- package/dist/host-platform.d.ts.map +1 -0
- package/dist/host-platform.js +50 -0
- package/dist/host-platform.js.map +7 -0
- package/dist/http.d.ts +49 -11
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js.map +2 -2
- package/dist/level-dat.d.ts +105 -0
- package/dist/level-dat.d.ts.map +1 -0
- package/dist/level-dat.js +490 -0
- package/dist/level-dat.js.map +7 -0
- package/dist/pack-manager.d.ts +41 -34
- package/dist/pack-manager.d.ts.map +1 -1
- package/dist/pack-manager.js +79 -25
- package/dist/pack-manager.js.map +2 -2
- package/dist/pack-update/bindings.d.ts +16 -0
- package/dist/pack-update/bindings.d.ts.map +1 -0
- package/dist/pack-update/bindings.js +69 -0
- package/dist/pack-update/bindings.js.map +7 -0
- package/dist/pack-update/config.d.ts +16 -0
- package/dist/pack-update/config.d.ts.map +1 -0
- package/dist/pack-update/config.js +146 -0
- package/dist/pack-update/config.js.map +7 -0
- package/dist/pack-update/deps.d.ts +28 -0
- package/dist/pack-update/deps.d.ts.map +1 -0
- package/dist/pack-update/deps.js +20 -0
- package/dist/pack-update/deps.js.map +7 -0
- package/dist/pack-update/index.d.ts +55 -0
- package/dist/pack-update/index.d.ts.map +1 -0
- package/dist/pack-update/index.js +72 -0
- package/dist/pack-update/index.js.map +7 -0
- package/dist/pack-update/providers/curseforge.d.ts +23 -0
- package/dist/pack-update/providers/curseforge.d.ts.map +1 -0
- package/dist/pack-update/providers/curseforge.js +229 -0
- package/dist/pack-update/providers/curseforge.js.map +7 -0
- package/dist/pack-update/providers/index.d.ts +16 -0
- package/dist/pack-update/providers/index.d.ts.map +1 -0
- package/dist/pack-update/providers/index.js +37 -0
- package/dist/pack-update/providers/index.js.map +7 -0
- package/dist/pack-update/service.d.ts +28 -0
- package/dist/pack-update/service.d.ts.map +1 -0
- package/dist/pack-update/service.js +570 -0
- package/dist/pack-update/service.js.map +7 -0
- package/dist/pack-update/types.d.ts +126 -0
- package/dist/pack-update/types.d.ts.map +1 -0
- package/dist/pack-update/types.js +8 -0
- package/dist/pack-update/types.js.map +7 -0
- package/dist/pack-update/version-policy.d.ts +81 -0
- package/dist/pack-update/version-policy.d.ts.map +1 -0
- package/dist/pack-update/version-policy.js +210 -0
- package/dist/pack-update/version-policy.js.map +7 -0
- package/dist/paths.d.ts +1 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +3 -5
- package/dist/paths.js.map +2 -2
- package/dist/process-probe.d.ts +34 -0
- package/dist/process-probe.d.ts.map +1 -0
- package/dist/process-probe.js +152 -0
- package/dist/process-probe.js.map +7 -0
- package/dist/qq-events-notify.d.ts +16 -0
- package/dist/qq-events-notify.d.ts.map +1 -0
- package/dist/qq-events-notify.js +70 -0
- package/dist/qq-events-notify.js.map +7 -0
- package/dist/qqutil.d.ts +10 -5
- package/dist/qqutil.d.ts.map +1 -1
- package/dist/qqutil.js +53 -10
- package/dist/qqutil.js.map +2 -2
- package/dist/rollback.d.ts.map +1 -1
- package/dist/rollback.js +2 -2
- package/dist/rollback.js.map +2 -2
- package/dist/server-properties-i18n.d.ts +17 -0
- package/dist/server-properties-i18n.d.ts.map +1 -0
- package/dist/server-properties-i18n.js +201 -0
- package/dist/server-properties-i18n.js.map +7 -0
- package/dist/server-properties.d.ts +25 -0
- package/dist/server-properties.d.ts.map +1 -1
- package/dist/server-properties.js +141 -1
- package/dist/server-properties.js.map +2 -2
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/upstream.d.ts +18 -9
- package/dist/upstream.d.ts.map +1 -1
- package/dist/upstream.js +8 -7
- package/dist/upstream.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +2 -2
- package/dist/world-packs.d.ts +108 -8
- package/dist/world-packs.d.ts.map +1 -1
- package/dist/world-packs.js +245 -12
- package/dist/world-packs.js.map +3 -3
- package/package.json +24 -17
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
const SERVER_PROPERTIES_DOCS_ZH_CN = {
|
|
2
|
+
"transport": {
|
|
3
|
+
desc: "\u73A9\u5BB6\u4E0E\u670D\u52A1\u5668\u8FDE\u63A5\u6240\u7528\u7684\u7F51\u7EDC\u4F20\u8F93\u65B9\u5F0F",
|
|
4
|
+
values: "nethernet\uFF08\u5F53\u524D BDS \u7248\u672C\u652F\u6301\u7684\u4F20\u8F93\u65B9\u5F0F\uFF09"
|
|
5
|
+
},
|
|
6
|
+
"server-name": {
|
|
7
|
+
desc: "\u670D\u52A1\u5668\u540D\u79F0\uFF08\u663E\u793A\u5728\u5BA2\u6237\u7AEF\u5C40\u57DF\u7F51/\u597D\u53CB\u5217\u8868\u4E2D\uFF09",
|
|
8
|
+
values: "\u4EFB\u610F\u5B57\u7B26\u4E32\uFF08\u8BF7\u52FF\u5305\u542B\u5206\u53F7 ;\uFF09"
|
|
9
|
+
},
|
|
10
|
+
"gamemode": {
|
|
11
|
+
desc: "\u65B0\u73A9\u5BB6\u9996\u6B21\u52A0\u5165\u4E16\u754C\u65F6\u7684\u9ED8\u8BA4\u6E38\u620F\u6A21\u5F0F",
|
|
12
|
+
values: "survival (\u751F\u5B58) | creative (\u521B\u9020) | adventure (\u5192\u9669)"
|
|
13
|
+
},
|
|
14
|
+
"force-gamemode": {
|
|
15
|
+
desc: "\u662F\u5426\u5F3A\u5236\u73A9\u5BB6\u6BCF\u6B21\u91CD\u65B0\u8FDE\u63A5\u65F6\u90FD\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u6E38\u620F\u6A21\u5F0F",
|
|
16
|
+
values: "true (\u6BCF\u6B21\u8FDB\u670D\u5F3A\u5236\u8F6C\u4E3A\u9ED8\u8BA4\u6A21\u5F0F) | false (\u4FDD\u7559\u73A9\u5BB6\u4E0A\u6B21\u79BB\u7EBF\u65F6\u7684\u6A21\u5F0F)"
|
|
17
|
+
},
|
|
18
|
+
"difficulty": {
|
|
19
|
+
desc: "\u6E38\u620F\u4E16\u754C\u7684\u9ED8\u8BA4\u96BE\u5EA6",
|
|
20
|
+
values: "peaceful (\u548C\u5E73) | easy (\u7B80\u5355) | normal (\u666E\u901A) | hard (\u56F0\u96BE)"
|
|
21
|
+
},
|
|
22
|
+
"allow-cheats": {
|
|
23
|
+
desc: "\u662F\u5426\u5141\u8BB8\u5728\u63A7\u5236\u53F0\u6216\u6E38\u620F\u5185\u4F7F\u7528\u7BA1\u7406\u5458\u6307\u4EE4\uFF08\u4F5C\u5F0A\u6A21\u5F0F\uFF09",
|
|
24
|
+
values: "true | false",
|
|
25
|
+
tip: "\u82E5\u5F00\u542F\u6B64\u9879\uFF0C\u52A0\u5165\u8BE5\u4E16\u754C\u7684\u73A9\u5BB6\u5C06\u65E0\u6CD5\u83B7\u5F97 Xbox \u6210\u5C31"
|
|
26
|
+
},
|
|
27
|
+
"max-players": {
|
|
28
|
+
desc: "\u5141\u8BB8\u540C\u65F6\u5728\u7EBF\u7684\u6700\u5927\u73A9\u5BB6\u6570\u91CF\u9650\u5236",
|
|
29
|
+
values: "\u6B63\u6574\u6570\uFF08\u5982 10\u300120\uFF09"
|
|
30
|
+
},
|
|
31
|
+
"online-mode": {
|
|
32
|
+
desc: "\u662F\u5426\u5F00\u542F\u5FAE\u8F6F Xbox Live \u6B63\u7248\u8EAB\u4EFD\u9A8C\u8BC1",
|
|
33
|
+
values: "true (\u4EC5\u5141\u8BB8\u6B63\u7248\u5FAE\u8F6F\u8D26\u53F7\u767B\u5F55) | false (\u5141\u8BB8\u79BB\u7EBF\u514D\u767B\u5F55\u8FDE\u63A5\uFF0C\u4F46\u6613\u53D7\u5047\u4EBA\u653B\u51FB)",
|
|
34
|
+
tip: "\u516C\u7F51\u670D\u52A1\u5668\u5F3A\u70C8\u5EFA\u8BAE\u8BBE\u4E3A true \u4EE5\u9632\u6B62\u6076\u610F\u4F2A\u9020\u8EAB\u4EFD"
|
|
35
|
+
},
|
|
36
|
+
"white-list": {
|
|
37
|
+
desc: "\u662F\u5426\u5F00\u542F\u51C6\u5165\u767D\u540D\u5355\u9A8C\u8BC1\uFF08\u90E8\u5206\u7248\u672C\u5BF9\u5E94 allow-list\uFF09",
|
|
38
|
+
values: "true (\u4EC5\u5141\u8BB8\u767D\u540D\u5355\u4E2D\u7684\u73A9\u5BB6\u8FDB\u5165) | false (\u6240\u6709\u73A9\u5BB6\u5747\u53EF\u8FDB\u5165)"
|
|
39
|
+
},
|
|
40
|
+
"allow-list": {
|
|
41
|
+
desc: "\u662F\u5426\u5F00\u542F\u51C6\u5165\u767D\u540D\u5355\u9A8C\u8BC1\uFF08\u9700\u914D\u5408 allowlist.json \u4F7F\u7528\uFF09",
|
|
42
|
+
values: "true (\u4EC5\u5141\u8BB8\u767D\u540D\u5355\u4E2D\u7684\u73A9\u5BB6\u8FDB\u5165) | false (\u6240\u6709\u73A9\u5BB6\u5747\u53EF\u8FDB\u5165)"
|
|
43
|
+
},
|
|
44
|
+
"server-port": {
|
|
45
|
+
desc: "\u670D\u52A1\u7AEF\u76D1\u542C\u7684 IPv4 UDP \u7F51\u7EDC\u901A\u4FE1\u7AEF\u53E3",
|
|
46
|
+
values: "1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19132\uFF09"
|
|
47
|
+
},
|
|
48
|
+
"server-portv6": {
|
|
49
|
+
desc: "\u670D\u52A1\u7AEF\u76D1\u542C\u7684 IPv6 UDP \u7F51\u7EDC\u901A\u4FE1\u7AEF\u53E3",
|
|
50
|
+
values: "1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19133\uFF09"
|
|
51
|
+
},
|
|
52
|
+
"enable-lan-visibility": {
|
|
53
|
+
desc: "\u662F\u5426\u5411\u5C40\u57DF\u7F51\u5E7F\u64AD\u672C\u670D\u52A1\u5668\uFF08\u4F7F\u540C\u5C40\u57DF\u7F51\u73A9\u5BB6\u80FD\u5728\u5BA2\u6237\u7AEF\u300C\u597D\u53CB\u300D\u5217\u8868\u4E2D\u76F4\u63A5\u53D1\u73B0\uFF09",
|
|
54
|
+
values: "true | false"
|
|
55
|
+
},
|
|
56
|
+
"view-distance": {
|
|
57
|
+
desc: "\u670D\u52A1\u7AEF\u5411\u5BA2\u6237\u7AEF\u53D1\u9001\u5730\u56FE\u533A\u5757\u7684\u6700\u5927\u89C6\u8DDD\uFF08\u5355\u4F4D\uFF1A\u533A\u5757\uFF09",
|
|
58
|
+
values: "\u6B63\u6574\u6570\uFF08\u5EFA\u8BAE 12 ~ 32\uFF0C\u6570\u503C\u8D8A\u5927\u7F51\u7EDC\u4E0E\u5185\u5B58\u6D88\u8017\u8D8A\u9AD8\uFF09"
|
|
59
|
+
},
|
|
60
|
+
"tick-distance": {
|
|
61
|
+
desc: "\u4E16\u754C\u5B9E\u4F53\u903B\u8F91\u4E0E\u65B9\u5757\u66F4\u65B0\u7684\u6A21\u62DF\u8BA1\u7B97\u8DDD\u79BB\uFF08\u5355\u4F4D\uFF1A\u533A\u5757\uFF09",
|
|
62
|
+
values: "4 ~ 12\uFF08\u6570\u503C\u8D8A\u5C0F\u670D\u52A1\u5668\u6027\u80FD\u8D8A\u597D\uFF0C\u4F4E\u914D\u673A\u578B\u63A8\u8350 4\uFF09"
|
|
63
|
+
},
|
|
64
|
+
"player-idle-timeout": {
|
|
65
|
+
desc: "\u73A9\u5BB6\u6302\u673A\u65E0\u64CD\u4F5C\u81EA\u52A8\u8E22\u51FA\u8D85\u65F6\u65F6\u95F4\uFF08\u5355\u4F4D\uFF1A\u5206\u949F\uFF09",
|
|
66
|
+
values: "0 (\u6C38\u4E0D\u8E22\u51FA) \u6216\u5927\u4E8E 0 \u7684\u6574\u6570"
|
|
67
|
+
},
|
|
68
|
+
"max-threads": {
|
|
69
|
+
desc: "BDS \u8FD0\u884C\u53EF\u4F7F\u7528\u7684\u6700\u5927\u5DE5\u4F5C\u7EBF\u7A0B\u6570",
|
|
70
|
+
values: "0 (\u7531\u670D\u52A1\u7AEF\u6839\u636E CPU \u6838\u5FC3\u6570\u81EA\u52A8\u5206\u914D) \u6216\u6307\u5B9A\u7EBF\u7A0B\u6570"
|
|
71
|
+
},
|
|
72
|
+
"level-name": {
|
|
73
|
+
desc: "\u8981\u52A0\u8F7D\u7684\u4E16\u754C\u5B58\u6863\u6587\u4EF6\u5939\u540D\u79F0\uFF08\u5BF9\u5E94 worlds/ \u76EE\u5F55\u4E0B\u7684\u5B50\u6587\u4EF6\u5939\uFF09",
|
|
74
|
+
values: "\u6587\u4EF6\u5939\u540D\u79F0\uFF08\u9ED8\u8BA4\uFF1ABedrock level\uFF09"
|
|
75
|
+
},
|
|
76
|
+
"level-seed": {
|
|
77
|
+
desc: "\u5168\u65B0\u4E16\u754C\u751F\u6210\u65F6\u7684\u968F\u673A\u79CD\u5B50",
|
|
78
|
+
values: "\u4EFB\u610F\u6570\u5B57\u6216\u6587\u672C\uFF08\u7559\u7A7A\u5219\u6BCF\u6B21\u65B0\u5EFA\u4E16\u754C\u968F\u673A\u751F\u6210\uFF09"
|
|
79
|
+
},
|
|
80
|
+
"default-player-permission-level": {
|
|
81
|
+
desc: "\u65B0\u73A9\u5BB6\u9996\u6B21\u52A0\u5165\u65F6\u7684\u9ED8\u8BA4\u6743\u9650\u7EA7\u522B",
|
|
82
|
+
values: "visitor (\u8BBF\u5BA2\uFF0C\u4E0D\u53EF\u7834\u574F\u6216\u4EA4\u4E92) | member (\u666E\u901A\u6210\u5458) | operator (\u64CD\u4F5C\u5458)"
|
|
83
|
+
},
|
|
84
|
+
"texturepack-required": {
|
|
85
|
+
desc: "\u662F\u5426\u5F3A\u5236\u73A9\u5BB6\u4E0B\u8F7D\u670D\u52A1\u5668\u6307\u5B9A\u7684\u6750\u8D28\u8D44\u6E90\u5305\u540E\u624D\u80FD\u52A0\u5165",
|
|
86
|
+
values: "true (\u5FC5\u987B\u4E0B\u8F7D) | false (\u53EF\u9009\u4E0B\u8F7D)"
|
|
87
|
+
},
|
|
88
|
+
"content-log-console-output-enabled": {
|
|
89
|
+
desc: "\u662F\u5426\u5C06\u5185\u5BB9\u65E5\u5FD7\uFF08\u6A21\u7EC4/\u884C\u4E3A\u5305\u89E3\u6790\u8B66\u544A\u3001SAPI \u811A\u672C\u62A5\u9519\u4E0E console.log\uFF09\u5B9E\u65F6\u8F93\u51FA\u5230\u63A7\u5236\u53F0",
|
|
90
|
+
values: "true | false",
|
|
91
|
+
tip: "\u5F00\u53D1\u6216\u8C03\u8BD5\u6A21\u7EC4\u65F6\u5F3A\u70C8\u5EFA\u8BAE\u8BBE\u4E3A true\uFF0C\u4EE5\u4FBF\u5373\u65F6\u67E5\u770B\u9519\u8BEF"
|
|
92
|
+
},
|
|
93
|
+
"compression-threshold": {
|
|
94
|
+
desc: "\u7F51\u7EDC\u6570\u636E\u5305\u542F\u7528\u538B\u7F29\u7684\u6700\u5C0F\u5B57\u8282\u9608\u503C",
|
|
95
|
+
values: "0 (\u5168\u90E8\u538B\u7F29) ~ 65535 \u5B57\u8282\uFF081.20+ \u9ED8\u8BA4\u901A\u5E38\u4E3A 1\uFF09"
|
|
96
|
+
},
|
|
97
|
+
"compression-algorithm": {
|
|
98
|
+
desc: "\u7F51\u7EDC\u4F20\u8F93\u6570\u636E\u5305\u7684\u538B\u7F29\u7B97\u6CD5",
|
|
99
|
+
values: "zlib (\u6807\u51C6\u9AD8\u538B\u7F29\u6BD4) | snappy (\u9AD8\u6027\u80FD\u4F4E\u5EF6\u8FDF\uFF0CCPU \u5F00\u9500\u5C0F)"
|
|
100
|
+
},
|
|
101
|
+
"server-authoritative-movement": {
|
|
102
|
+
desc: "\u73A9\u5BB6\u79FB\u52A8\u9A8C\u8BC1\u6743\u5A01\u6A21\u5F0F",
|
|
103
|
+
values: "server-auth (\u670D\u52A1\u7AEF\u6743\u5A01\u5224\u5B9A) | client-auth (\u5BA2\u6237\u7AEF\u6743\u5A01)"
|
|
104
|
+
},
|
|
105
|
+
"player-movement-score-threshold": {
|
|
106
|
+
desc: "\u73A9\u5BB6\u79FB\u52A8\u5F02\u5E38\u88AB\u5224\u5B9A\u4E3A\u4F5C\u5F0A\u7684\u7D2F\u8BA1\u5F02\u5E38\u5206\u9608\u503C",
|
|
107
|
+
values: "\u6574\u6570\uFF08\u9ED8\u8BA4 20\uFF09"
|
|
108
|
+
},
|
|
109
|
+
"player-movement-action-direction-threshold": {
|
|
110
|
+
desc: "\u73A9\u5BB6\u653B\u51FB\u6216\u7834\u574F\u52A8\u4F5C\u4E0E\u89C6\u7EBF\u671D\u5411\u5939\u89D2\u504F\u5DEE\u7684\u5224\u5B9A\u9608\u503C",
|
|
111
|
+
values: "\u6D6E\u70B9\u6570\uFF08\u9ED8\u8BA4 0.85\uFF09"
|
|
112
|
+
},
|
|
113
|
+
"player-movement-distance-threshold": {
|
|
114
|
+
desc: "\u73A9\u5BB6\u5355\u6B21\u4F4D\u79FB\u8D85\u51FA\u6B63\u5E38\u8303\u56F4\u7684\u5224\u5B9A\u9608\u503C",
|
|
115
|
+
values: "\u6D6E\u70B9\u6570\uFF08\u9ED8\u8BA4 0.3\uFF09"
|
|
116
|
+
},
|
|
117
|
+
"player-movement-duration-threshold-in-ms": {
|
|
118
|
+
desc: "\u79FB\u52A8\u5F02\u5E38\u5224\u5B9A\u91C7\u6837\u7684\u6ED1\u52A8\u65F6\u95F4\u7A97\u53E3\uFF08\u5355\u4F4D\uFF1A\u6BEB\u79D2\uFF09",
|
|
119
|
+
values: "\u6574\u6570\uFF08\u9ED8\u8BA4 500\uFF09"
|
|
120
|
+
},
|
|
121
|
+
"correct-player-movement": {
|
|
122
|
+
desc: "\u5F53\u68C0\u6D4B\u5230\u73A9\u5BB6\u79FB\u52A8\u4F5C\u5F0A\u6216\u8D85\u6807\u65F6\uFF0C\u662F\u5426\u5F3A\u5236\u5C06\u5176\u62C9\u56DE\u5408\u6CD5\u4F4D\u7F6E\uFF08\u9632\u98DE\u5929/\u52A0\u901F\uFF09",
|
|
123
|
+
values: "true (\u5F3A\u5236\u56DE\u62C9\u7EA0\u6B63) | false (\u4EC5\u5728\u540E\u53F0\u8BB0\u5F55\u8B66\u544A)"
|
|
124
|
+
},
|
|
125
|
+
"server-authoritative-block-breaking": {
|
|
126
|
+
desc: "\u65B9\u5757\u7834\u574F\u52A8\u4F5C\u662F\u5426\u7531\u670D\u52A1\u7AEF\u6743\u5A01\u5224\u5B9A\uFF08\u9632\u6B62\u53D8\u901F\u5237\u65B9\u5757\u7B49\u4F5C\u5F0A\u884C\u4E3A\uFF09",
|
|
127
|
+
values: "client-auth | server-auth"
|
|
128
|
+
},
|
|
129
|
+
"chat-restriction": {
|
|
130
|
+
desc: "\u804A\u5929\u8FC7\u6EE4\u9650\u5236\u7B56\u7565",
|
|
131
|
+
values: "None (\u65E0\u9650\u5236) | Dropped (\u9759\u9ED8\u4E22\u5F03\u8FDD\u89C4\u5185\u5BB9) | Disabled (\u5B8C\u5168\u7981\u7528\u804A\u5929)"
|
|
132
|
+
},
|
|
133
|
+
"disable-player-interaction": {
|
|
134
|
+
desc: "\u662F\u5426\u7981\u7528\u9759\u9ED8\u4EA4\u4E92\u68C0\u6D4B\uFF08\u7528\u4E8E\u6392\u67E5\u7F51\u7EDC\u5EF6\u8FDF\u6216\u9632\u5FEB\u901F\u4EA4\u4E92\uFF09",
|
|
135
|
+
values: "true | false"
|
|
136
|
+
},
|
|
137
|
+
"client-side-chunk-generation-enabled": {
|
|
138
|
+
desc: "\u662F\u5426\u5141\u8BB8\u5BA2\u6237\u7AEF\u5728\u672C\u5730\u751F\u6210\u5C1A\u672A\u52A0\u8F7D\u7684\u5730\u5F62\u533A\u5757\uFF08\u52A0\u5FEB\u957F\u8DDD\u79BB\u63A2\u7D22\u65F6\u7684\u89C6\u89C9\u52A0\u8F7D\u901F\u5EA6\uFF09",
|
|
139
|
+
values: "true (\u5141\u8BB8\u5BA2\u6237\u7AEF\u672C\u5730\u9884\u751F\u6210) | false (\u5168\u90E8\u7531\u670D\u52A1\u7AEF\u751F\u6210\u5E76\u4F20\u8F93)"
|
|
140
|
+
},
|
|
141
|
+
"block-network-ids-are-hashes": {
|
|
142
|
+
desc: "\u65B9\u5757\u5728\u7F51\u7EDC\u4F20\u8F93\u4E2D\u7684\u552F\u4E00\u6807\u8BC6\u662F\u5426\u91C7\u7528\u54C8\u5E0C\u503C",
|
|
143
|
+
values: "true | false"
|
|
144
|
+
},
|
|
145
|
+
"disable-persona": {
|
|
146
|
+
desc: "\u662F\u5426\u7981\u7528\u4E2A\u6027\u5316\u88C5\u626E/\u89D2\u8272\u521B\u5EFA\u5668\uFF08Persona \u76AE\u80A4\uFF09",
|
|
147
|
+
values: "true (\u5F3A\u5236\u4F7F\u7528\u7ECF\u5178\u76AE\u80A4) | false (\u5141\u8BB8\u4F7F\u7528\u5B98\u65B9\u634F\u8138\u89D2\u8272)"
|
|
148
|
+
},
|
|
149
|
+
"disable-custom-skins": {
|
|
150
|
+
desc: "\u662F\u5426\u7981\u7528\u73A9\u5BB6\u4E0A\u4F20\u7684\u81EA\u5B9A\u4E49\u7ECF\u5178\u76AE\u80A4\uFF08\u9632\u6B62\u6076\u610F\u6216\u900F\u660E\u76AE\u80A4\uFF09",
|
|
151
|
+
values: "true (\u7981\u7528\u81EA\u5B9A\u4E49\u76AE\u80A4) | false (\u5141\u8BB8\u81EA\u5B9A\u4E49\u76AE\u80A4)"
|
|
152
|
+
},
|
|
153
|
+
"emit-server-telemetry": {
|
|
154
|
+
desc: "\u662F\u5426\u5411 Mojang \u53D1\u9001\u670D\u52A1\u5668\u9065\u6D4B\u4E0E\u8FD0\u884C\u5065\u5EB7\u8BCA\u65AD\u6570\u636E",
|
|
155
|
+
values: "true | false",
|
|
156
|
+
tip: "\u4F7F\u7528\u672C\u5E73\u53F0\u65F6\u56E0\u60A8\u5DF2\u540C\u610F Mojang EULA \u534F\u8BAE\uFF0C\u6309\u534F\u8BAE\u4FDD\u6301\u542F\u7528"
|
|
157
|
+
},
|
|
158
|
+
"server-build-radius-ratio": {
|
|
159
|
+
desc: "\u5141\u8BB8\u73A9\u5BB6\u5EFA\u9020\u548C\u4EA4\u4E92\u7684\u4E16\u754C\u533A\u57DF\u534A\u5F84\u6BD4\u4F8B",
|
|
160
|
+
values: "Disabled (\u65E0\u9650\u5236) \u6216 0.0 ~ 1.0 \u7684\u6D6E\u70B9\u6570"
|
|
161
|
+
},
|
|
162
|
+
"allow-outbound-script-debugging": {
|
|
163
|
+
desc: "\u662F\u5426\u5141\u8BB8\u670D\u52A1\u7AEF\u811A\u672C\u4E3B\u52A8\u8FDE\u63A5\u5916\u90E8\u8C03\u8BD5\u5668\uFF08\u5141\u8BB8 /script debugger connect \u6307\u4EE4\uFF09",
|
|
164
|
+
values: "true | false",
|
|
165
|
+
tip: "\u4EC5\u5728\u901A\u8FC7 VS Code \u8C03\u8BD5 SAPI \u6A21\u7EC4\u65F6\u5F00\u542F\uFF0C\u751F\u4EA7\u73AF\u5883\u5EFA\u8BAE\u5173\u95ED"
|
|
166
|
+
},
|
|
167
|
+
"allow-inbound-script-debugging": {
|
|
168
|
+
desc: "\u662F\u5426\u5141\u8BB8\u5916\u90E8\u811A\u672C\u8C03\u8BD5\u5668\u4E3B\u52A8\u8FDE\u63A5\u670D\u52A1\u7AEF\uFF08\u5141\u8BB8 /script debugger listen \u6307\u4EE4\uFF09",
|
|
169
|
+
values: "true | false",
|
|
170
|
+
tip: "\u4EC5\u5728\u901A\u8FC7 VS Code \u8C03\u8BD5 SAPI \u6A21\u7EC4\u65F6\u5F00\u542F\uFF0C\u751F\u4EA7\u73AF\u5883\u5EFA\u8BAE\u5173\u95ED"
|
|
171
|
+
},
|
|
172
|
+
"force-inbound-debug-port": {
|
|
173
|
+
desc: "\u811A\u672C\u8C03\u8BD5\u5668\u76D1\u542C\u7684\u4E13\u5C5E\u7F51\u7EDC\u7AEF\u53E3",
|
|
174
|
+
values: "1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19144\uFF09"
|
|
175
|
+
},
|
|
176
|
+
"script-debugger-auto-attach": {
|
|
177
|
+
desc: "\u4E16\u754C\u52A0\u8F7D\u65F6\uFF0C\u662F\u5426\u81EA\u52A8\u8FDE\u63A5\u6216\u76D1\u542C\u5916\u90E8\u811A\u672C\u8C03\u8BD5\u5668",
|
|
178
|
+
values: "disabled (\u4E0D\u81EA\u52A8\u9644\u52A0) | connect (\u81EA\u52A8\u5411\u5916\u8FDE\u63A5) | listen (\u81EA\u52A8\u5F00\u542F\u7AEF\u53E3\u76D1\u542C)"
|
|
179
|
+
},
|
|
180
|
+
"script-debugger-auto-attach-connect-address": {
|
|
181
|
+
desc: "\u5F53 auto-attach \u8BBE\u4E3A connect \u65F6\uFF0C\u5C1D\u8BD5\u8FDE\u63A5\u7684\u76EE\u6807\u8C03\u8BD5\u5668\u4E3B\u673A\u4E0E\u7AEF\u53E3",
|
|
182
|
+
values: "ip:port\uFF08\u4F8B\u5982 localhost:19144\uFF09"
|
|
183
|
+
},
|
|
184
|
+
"websocket-retry-time": {
|
|
185
|
+
desc: "\u8FDE\u63A5\u5916\u90E8 WebSocket \u670D\u52A1\u5668\u65AD\u5F00\u540E\u7684\u81EA\u52A8\u91CD\u8BD5\u95F4\u9694\uFF08\u5355\u4F4D\uFF1A\u79D2\uFF09",
|
|
186
|
+
values: "\u6B63\u6574\u6570\uFF08\u9ED8\u8BA4 20\uFF09"
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
function getServerPropertyDoc(key, locale = "zh-CN") {
|
|
190
|
+
const normalizedKey = key.trim().toLowerCase();
|
|
191
|
+
const normalizedLocale = locale.toLowerCase();
|
|
192
|
+
if (normalizedLocale === "zh" || normalizedLocale.startsWith("zh-")) {
|
|
193
|
+
return SERVER_PROPERTIES_DOCS_ZH_CN[normalizedKey];
|
|
194
|
+
}
|
|
195
|
+
return void 0;
|
|
196
|
+
}
|
|
197
|
+
export {
|
|
198
|
+
SERVER_PROPERTIES_DOCS_ZH_CN,
|
|
199
|
+
getServerPropertyDoc
|
|
200
|
+
};
|
|
201
|
+
//# sourceMappingURL=server-properties-i18n.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/server-properties-i18n.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * server-properties-i18n.ts \u2014 BDS server.properties \u591A\u8BED\u8A00\u6CE8\u91CA\u5B57\u5178\n */\n\nexport interface ServerPropertyDoc {\n /** \u4E2D\u6587\u529F\u80FD\u6982\u8FF0 */\n desc: string;\n /** \u5408\u6CD5\u53D6\u503C\u4E0E\u679A\u4E3E\u8BF4\u660E */\n values?: string;\n /** \u907F\u5751\u3001\u6027\u80FD\u6216\u5B89\u5168\u6027\u63D0\u793A */\n tip?: string;\n}\n\nexport const SERVER_PROPERTIES_DOCS_ZH_CN: Record<string, ServerPropertyDoc> = {\n \"transport\": {\n desc: \"\u73A9\u5BB6\u4E0E\u670D\u52A1\u5668\u8FDE\u63A5\u6240\u7528\u7684\u7F51\u7EDC\u4F20\u8F93\u65B9\u5F0F\",\n values: \"nethernet\uFF08\u5F53\u524D BDS \u7248\u672C\u652F\u6301\u7684\u4F20\u8F93\u65B9\u5F0F\uFF09\",\n },\n \"server-name\": {\n desc: \"\u670D\u52A1\u5668\u540D\u79F0\uFF08\u663E\u793A\u5728\u5BA2\u6237\u7AEF\u5C40\u57DF\u7F51/\u597D\u53CB\u5217\u8868\u4E2D\uFF09\",\n values: \"\u4EFB\u610F\u5B57\u7B26\u4E32\uFF08\u8BF7\u52FF\u5305\u542B\u5206\u53F7 ;\uFF09\",\n },\n \"gamemode\": {\n desc: \"\u65B0\u73A9\u5BB6\u9996\u6B21\u52A0\u5165\u4E16\u754C\u65F6\u7684\u9ED8\u8BA4\u6E38\u620F\u6A21\u5F0F\",\n values: \"survival (\u751F\u5B58) | creative (\u521B\u9020) | adventure (\u5192\u9669)\",\n },\n \"force-gamemode\": {\n desc: \"\u662F\u5426\u5F3A\u5236\u73A9\u5BB6\u6BCF\u6B21\u91CD\u65B0\u8FDE\u63A5\u65F6\u90FD\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u6E38\u620F\u6A21\u5F0F\",\n values: \"true (\u6BCF\u6B21\u8FDB\u670D\u5F3A\u5236\u8F6C\u4E3A\u9ED8\u8BA4\u6A21\u5F0F) | false (\u4FDD\u7559\u73A9\u5BB6\u4E0A\u6B21\u79BB\u7EBF\u65F6\u7684\u6A21\u5F0F)\",\n },\n \"difficulty\": {\n desc: \"\u6E38\u620F\u4E16\u754C\u7684\u9ED8\u8BA4\u96BE\u5EA6\",\n values: \"peaceful (\u548C\u5E73) | easy (\u7B80\u5355) | normal (\u666E\u901A) | hard (\u56F0\u96BE)\",\n },\n \"allow-cheats\": {\n desc: \"\u662F\u5426\u5141\u8BB8\u5728\u63A7\u5236\u53F0\u6216\u6E38\u620F\u5185\u4F7F\u7528\u7BA1\u7406\u5458\u6307\u4EE4\uFF08\u4F5C\u5F0A\u6A21\u5F0F\uFF09\",\n values: \"true | false\",\n tip: \"\u82E5\u5F00\u542F\u6B64\u9879\uFF0C\u52A0\u5165\u8BE5\u4E16\u754C\u7684\u73A9\u5BB6\u5C06\u65E0\u6CD5\u83B7\u5F97 Xbox \u6210\u5C31\",\n },\n \"max-players\": {\n desc: \"\u5141\u8BB8\u540C\u65F6\u5728\u7EBF\u7684\u6700\u5927\u73A9\u5BB6\u6570\u91CF\u9650\u5236\",\n values: \"\u6B63\u6574\u6570\uFF08\u5982 10\u300120\uFF09\",\n },\n \"online-mode\": {\n desc: \"\u662F\u5426\u5F00\u542F\u5FAE\u8F6F Xbox Live \u6B63\u7248\u8EAB\u4EFD\u9A8C\u8BC1\",\n values: \"true (\u4EC5\u5141\u8BB8\u6B63\u7248\u5FAE\u8F6F\u8D26\u53F7\u767B\u5F55) | false (\u5141\u8BB8\u79BB\u7EBF\u514D\u767B\u5F55\u8FDE\u63A5\uFF0C\u4F46\u6613\u53D7\u5047\u4EBA\u653B\u51FB)\",\n tip: \"\u516C\u7F51\u670D\u52A1\u5668\u5F3A\u70C8\u5EFA\u8BAE\u8BBE\u4E3A true \u4EE5\u9632\u6B62\u6076\u610F\u4F2A\u9020\u8EAB\u4EFD\",\n },\n \"white-list\": {\n desc: \"\u662F\u5426\u5F00\u542F\u51C6\u5165\u767D\u540D\u5355\u9A8C\u8BC1\uFF08\u90E8\u5206\u7248\u672C\u5BF9\u5E94 allow-list\uFF09\",\n values: \"true (\u4EC5\u5141\u8BB8\u767D\u540D\u5355\u4E2D\u7684\u73A9\u5BB6\u8FDB\u5165) | false (\u6240\u6709\u73A9\u5BB6\u5747\u53EF\u8FDB\u5165)\",\n },\n \"allow-list\": {\n desc: \"\u662F\u5426\u5F00\u542F\u51C6\u5165\u767D\u540D\u5355\u9A8C\u8BC1\uFF08\u9700\u914D\u5408 allowlist.json \u4F7F\u7528\uFF09\",\n values: \"true (\u4EC5\u5141\u8BB8\u767D\u540D\u5355\u4E2D\u7684\u73A9\u5BB6\u8FDB\u5165) | false (\u6240\u6709\u73A9\u5BB6\u5747\u53EF\u8FDB\u5165)\",\n },\n \"server-port\": {\n desc: \"\u670D\u52A1\u7AEF\u76D1\u542C\u7684 IPv4 UDP \u7F51\u7EDC\u901A\u4FE1\u7AEF\u53E3\",\n values: \"1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19132\uFF09\",\n },\n \"server-portv6\": {\n desc: \"\u670D\u52A1\u7AEF\u76D1\u542C\u7684 IPv6 UDP \u7F51\u7EDC\u901A\u4FE1\u7AEF\u53E3\",\n values: \"1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19133\uFF09\",\n },\n \"enable-lan-visibility\": {\n desc: \"\u662F\u5426\u5411\u5C40\u57DF\u7F51\u5E7F\u64AD\u672C\u670D\u52A1\u5668\uFF08\u4F7F\u540C\u5C40\u57DF\u7F51\u73A9\u5BB6\u80FD\u5728\u5BA2\u6237\u7AEF\u300C\u597D\u53CB\u300D\u5217\u8868\u4E2D\u76F4\u63A5\u53D1\u73B0\uFF09\",\n values: \"true | false\",\n },\n \"view-distance\": {\n desc: \"\u670D\u52A1\u7AEF\u5411\u5BA2\u6237\u7AEF\u53D1\u9001\u5730\u56FE\u533A\u5757\u7684\u6700\u5927\u89C6\u8DDD\uFF08\u5355\u4F4D\uFF1A\u533A\u5757\uFF09\",\n values: \"\u6B63\u6574\u6570\uFF08\u5EFA\u8BAE 12 ~ 32\uFF0C\u6570\u503C\u8D8A\u5927\u7F51\u7EDC\u4E0E\u5185\u5B58\u6D88\u8017\u8D8A\u9AD8\uFF09\",\n },\n \"tick-distance\": {\n desc: \"\u4E16\u754C\u5B9E\u4F53\u903B\u8F91\u4E0E\u65B9\u5757\u66F4\u65B0\u7684\u6A21\u62DF\u8BA1\u7B97\u8DDD\u79BB\uFF08\u5355\u4F4D\uFF1A\u533A\u5757\uFF09\",\n values: \"4 ~ 12\uFF08\u6570\u503C\u8D8A\u5C0F\u670D\u52A1\u5668\u6027\u80FD\u8D8A\u597D\uFF0C\u4F4E\u914D\u673A\u578B\u63A8\u8350 4\uFF09\",\n },\n \"player-idle-timeout\": {\n desc: \"\u73A9\u5BB6\u6302\u673A\u65E0\u64CD\u4F5C\u81EA\u52A8\u8E22\u51FA\u8D85\u65F6\u65F6\u95F4\uFF08\u5355\u4F4D\uFF1A\u5206\u949F\uFF09\",\n values: \"0 (\u6C38\u4E0D\u8E22\u51FA) \u6216\u5927\u4E8E 0 \u7684\u6574\u6570\",\n },\n \"max-threads\": {\n desc: \"BDS \u8FD0\u884C\u53EF\u4F7F\u7528\u7684\u6700\u5927\u5DE5\u4F5C\u7EBF\u7A0B\u6570\",\n values: \"0 (\u7531\u670D\u52A1\u7AEF\u6839\u636E CPU \u6838\u5FC3\u6570\u81EA\u52A8\u5206\u914D) \u6216\u6307\u5B9A\u7EBF\u7A0B\u6570\",\n },\n \"level-name\": {\n desc: \"\u8981\u52A0\u8F7D\u7684\u4E16\u754C\u5B58\u6863\u6587\u4EF6\u5939\u540D\u79F0\uFF08\u5BF9\u5E94 worlds/ \u76EE\u5F55\u4E0B\u7684\u5B50\u6587\u4EF6\u5939\uFF09\",\n values: \"\u6587\u4EF6\u5939\u540D\u79F0\uFF08\u9ED8\u8BA4\uFF1ABedrock level\uFF09\",\n },\n \"level-seed\": {\n desc: \"\u5168\u65B0\u4E16\u754C\u751F\u6210\u65F6\u7684\u968F\u673A\u79CD\u5B50\",\n values: \"\u4EFB\u610F\u6570\u5B57\u6216\u6587\u672C\uFF08\u7559\u7A7A\u5219\u6BCF\u6B21\u65B0\u5EFA\u4E16\u754C\u968F\u673A\u751F\u6210\uFF09\",\n },\n \"default-player-permission-level\": {\n desc: \"\u65B0\u73A9\u5BB6\u9996\u6B21\u52A0\u5165\u65F6\u7684\u9ED8\u8BA4\u6743\u9650\u7EA7\u522B\",\n values: \"visitor (\u8BBF\u5BA2\uFF0C\u4E0D\u53EF\u7834\u574F\u6216\u4EA4\u4E92) | member (\u666E\u901A\u6210\u5458) | operator (\u64CD\u4F5C\u5458)\",\n },\n \"texturepack-required\": {\n desc: \"\u662F\u5426\u5F3A\u5236\u73A9\u5BB6\u4E0B\u8F7D\u670D\u52A1\u5668\u6307\u5B9A\u7684\u6750\u8D28\u8D44\u6E90\u5305\u540E\u624D\u80FD\u52A0\u5165\",\n values: \"true (\u5FC5\u987B\u4E0B\u8F7D) | false (\u53EF\u9009\u4E0B\u8F7D)\",\n },\n \"content-log-console-output-enabled\": {\n desc: \"\u662F\u5426\u5C06\u5185\u5BB9\u65E5\u5FD7\uFF08\u6A21\u7EC4/\u884C\u4E3A\u5305\u89E3\u6790\u8B66\u544A\u3001SAPI \u811A\u672C\u62A5\u9519\u4E0E console.log\uFF09\u5B9E\u65F6\u8F93\u51FA\u5230\u63A7\u5236\u53F0\",\n values: \"true | false\",\n tip: \"\u5F00\u53D1\u6216\u8C03\u8BD5\u6A21\u7EC4\u65F6\u5F3A\u70C8\u5EFA\u8BAE\u8BBE\u4E3A true\uFF0C\u4EE5\u4FBF\u5373\u65F6\u67E5\u770B\u9519\u8BEF\",\n },\n \"compression-threshold\": {\n desc: \"\u7F51\u7EDC\u6570\u636E\u5305\u542F\u7528\u538B\u7F29\u7684\u6700\u5C0F\u5B57\u8282\u9608\u503C\",\n values: \"0 (\u5168\u90E8\u538B\u7F29) ~ 65535 \u5B57\u8282\uFF081.20+ \u9ED8\u8BA4\u901A\u5E38\u4E3A 1\uFF09\",\n },\n \"compression-algorithm\": {\n desc: \"\u7F51\u7EDC\u4F20\u8F93\u6570\u636E\u5305\u7684\u538B\u7F29\u7B97\u6CD5\",\n values: \"zlib (\u6807\u51C6\u9AD8\u538B\u7F29\u6BD4) | snappy (\u9AD8\u6027\u80FD\u4F4E\u5EF6\u8FDF\uFF0CCPU \u5F00\u9500\u5C0F)\",\n },\n \"server-authoritative-movement\": {\n desc: \"\u73A9\u5BB6\u79FB\u52A8\u9A8C\u8BC1\u6743\u5A01\u6A21\u5F0F\",\n values: \"server-auth (\u670D\u52A1\u7AEF\u6743\u5A01\u5224\u5B9A) | client-auth (\u5BA2\u6237\u7AEF\u6743\u5A01)\",\n },\n \"player-movement-score-threshold\": {\n desc: \"\u73A9\u5BB6\u79FB\u52A8\u5F02\u5E38\u88AB\u5224\u5B9A\u4E3A\u4F5C\u5F0A\u7684\u7D2F\u8BA1\u5F02\u5E38\u5206\u9608\u503C\",\n values: \"\u6574\u6570\uFF08\u9ED8\u8BA4 20\uFF09\",\n },\n \"player-movement-action-direction-threshold\": {\n desc: \"\u73A9\u5BB6\u653B\u51FB\u6216\u7834\u574F\u52A8\u4F5C\u4E0E\u89C6\u7EBF\u671D\u5411\u5939\u89D2\u504F\u5DEE\u7684\u5224\u5B9A\u9608\u503C\",\n values: \"\u6D6E\u70B9\u6570\uFF08\u9ED8\u8BA4 0.85\uFF09\",\n },\n \"player-movement-distance-threshold\": {\n desc: \"\u73A9\u5BB6\u5355\u6B21\u4F4D\u79FB\u8D85\u51FA\u6B63\u5E38\u8303\u56F4\u7684\u5224\u5B9A\u9608\u503C\",\n values: \"\u6D6E\u70B9\u6570\uFF08\u9ED8\u8BA4 0.3\uFF09\",\n },\n \"player-movement-duration-threshold-in-ms\": {\n desc: \"\u79FB\u52A8\u5F02\u5E38\u5224\u5B9A\u91C7\u6837\u7684\u6ED1\u52A8\u65F6\u95F4\u7A97\u53E3\uFF08\u5355\u4F4D\uFF1A\u6BEB\u79D2\uFF09\",\n values: \"\u6574\u6570\uFF08\u9ED8\u8BA4 500\uFF09\",\n },\n \"correct-player-movement\": {\n desc: \"\u5F53\u68C0\u6D4B\u5230\u73A9\u5BB6\u79FB\u52A8\u4F5C\u5F0A\u6216\u8D85\u6807\u65F6\uFF0C\u662F\u5426\u5F3A\u5236\u5C06\u5176\u62C9\u56DE\u5408\u6CD5\u4F4D\u7F6E\uFF08\u9632\u98DE\u5929/\u52A0\u901F\uFF09\",\n values: \"true (\u5F3A\u5236\u56DE\u62C9\u7EA0\u6B63) | false (\u4EC5\u5728\u540E\u53F0\u8BB0\u5F55\u8B66\u544A)\",\n },\n \"server-authoritative-block-breaking\": {\n desc: \"\u65B9\u5757\u7834\u574F\u52A8\u4F5C\u662F\u5426\u7531\u670D\u52A1\u7AEF\u6743\u5A01\u5224\u5B9A\uFF08\u9632\u6B62\u53D8\u901F\u5237\u65B9\u5757\u7B49\u4F5C\u5F0A\u884C\u4E3A\uFF09\",\n values: \"client-auth | server-auth\",\n },\n \"chat-restriction\": {\n desc: \"\u804A\u5929\u8FC7\u6EE4\u9650\u5236\u7B56\u7565\",\n values: \"None (\u65E0\u9650\u5236) | Dropped (\u9759\u9ED8\u4E22\u5F03\u8FDD\u89C4\u5185\u5BB9) | Disabled (\u5B8C\u5168\u7981\u7528\u804A\u5929)\",\n },\n \"disable-player-interaction\": {\n desc: \"\u662F\u5426\u7981\u7528\u9759\u9ED8\u4EA4\u4E92\u68C0\u6D4B\uFF08\u7528\u4E8E\u6392\u67E5\u7F51\u7EDC\u5EF6\u8FDF\u6216\u9632\u5FEB\u901F\u4EA4\u4E92\uFF09\",\n values: \"true | false\",\n },\n \"client-side-chunk-generation-enabled\": {\n desc: \"\u662F\u5426\u5141\u8BB8\u5BA2\u6237\u7AEF\u5728\u672C\u5730\u751F\u6210\u5C1A\u672A\u52A0\u8F7D\u7684\u5730\u5F62\u533A\u5757\uFF08\u52A0\u5FEB\u957F\u8DDD\u79BB\u63A2\u7D22\u65F6\u7684\u89C6\u89C9\u52A0\u8F7D\u901F\u5EA6\uFF09\",\n values: \"true (\u5141\u8BB8\u5BA2\u6237\u7AEF\u672C\u5730\u9884\u751F\u6210) | false (\u5168\u90E8\u7531\u670D\u52A1\u7AEF\u751F\u6210\u5E76\u4F20\u8F93)\",\n },\n \"block-network-ids-are-hashes\": {\n desc: \"\u65B9\u5757\u5728\u7F51\u7EDC\u4F20\u8F93\u4E2D\u7684\u552F\u4E00\u6807\u8BC6\u662F\u5426\u91C7\u7528\u54C8\u5E0C\u503C\",\n values: \"true | false\",\n },\n \"disable-persona\": {\n desc: \"\u662F\u5426\u7981\u7528\u4E2A\u6027\u5316\u88C5\u626E/\u89D2\u8272\u521B\u5EFA\u5668\uFF08Persona \u76AE\u80A4\uFF09\",\n values: \"true (\u5F3A\u5236\u4F7F\u7528\u7ECF\u5178\u76AE\u80A4) | false (\u5141\u8BB8\u4F7F\u7528\u5B98\u65B9\u634F\u8138\u89D2\u8272)\",\n },\n \"disable-custom-skins\": {\n desc: \"\u662F\u5426\u7981\u7528\u73A9\u5BB6\u4E0A\u4F20\u7684\u81EA\u5B9A\u4E49\u7ECF\u5178\u76AE\u80A4\uFF08\u9632\u6B62\u6076\u610F\u6216\u900F\u660E\u76AE\u80A4\uFF09\",\n values: \"true (\u7981\u7528\u81EA\u5B9A\u4E49\u76AE\u80A4) | false (\u5141\u8BB8\u81EA\u5B9A\u4E49\u76AE\u80A4)\",\n },\n \"emit-server-telemetry\": {\n desc: \"\u662F\u5426\u5411 Mojang \u53D1\u9001\u670D\u52A1\u5668\u9065\u6D4B\u4E0E\u8FD0\u884C\u5065\u5EB7\u8BCA\u65AD\u6570\u636E\",\n values: \"true | false\",\n tip: \"\u4F7F\u7528\u672C\u5E73\u53F0\u65F6\u56E0\u60A8\u5DF2\u540C\u610F Mojang EULA \u534F\u8BAE\uFF0C\u6309\u534F\u8BAE\u4FDD\u6301\u542F\u7528\",\n },\n \"server-build-radius-ratio\": {\n desc: \"\u5141\u8BB8\u73A9\u5BB6\u5EFA\u9020\u548C\u4EA4\u4E92\u7684\u4E16\u754C\u533A\u57DF\u534A\u5F84\u6BD4\u4F8B\",\n values: \"Disabled (\u65E0\u9650\u5236) \u6216 0.0 ~ 1.0 \u7684\u6D6E\u70B9\u6570\",\n },\n \"allow-outbound-script-debugging\": {\n desc: \"\u662F\u5426\u5141\u8BB8\u670D\u52A1\u7AEF\u811A\u672C\u4E3B\u52A8\u8FDE\u63A5\u5916\u90E8\u8C03\u8BD5\u5668\uFF08\u5141\u8BB8 /script debugger connect \u6307\u4EE4\uFF09\",\n values: \"true | false\",\n tip: \"\u4EC5\u5728\u901A\u8FC7 VS Code \u8C03\u8BD5 SAPI \u6A21\u7EC4\u65F6\u5F00\u542F\uFF0C\u751F\u4EA7\u73AF\u5883\u5EFA\u8BAE\u5173\u95ED\",\n },\n \"allow-inbound-script-debugging\": {\n desc: \"\u662F\u5426\u5141\u8BB8\u5916\u90E8\u811A\u672C\u8C03\u8BD5\u5668\u4E3B\u52A8\u8FDE\u63A5\u670D\u52A1\u7AEF\uFF08\u5141\u8BB8 /script debugger listen \u6307\u4EE4\uFF09\",\n values: \"true | false\",\n tip: \"\u4EC5\u5728\u901A\u8FC7 VS Code \u8C03\u8BD5 SAPI \u6A21\u7EC4\u65F6\u5F00\u542F\uFF0C\u751F\u4EA7\u73AF\u5883\u5EFA\u8BAE\u5173\u95ED\",\n },\n \"force-inbound-debug-port\": {\n desc: \"\u811A\u672C\u8C03\u8BD5\u5668\u76D1\u542C\u7684\u4E13\u5C5E\u7F51\u7EDC\u7AEF\u53E3\",\n values: \"1 ~ 65535\uFF08\u9ED8\u8BA4\uFF1A19144\uFF09\",\n },\n \"script-debugger-auto-attach\": {\n desc: \"\u4E16\u754C\u52A0\u8F7D\u65F6\uFF0C\u662F\u5426\u81EA\u52A8\u8FDE\u63A5\u6216\u76D1\u542C\u5916\u90E8\u811A\u672C\u8C03\u8BD5\u5668\",\n values: \"disabled (\u4E0D\u81EA\u52A8\u9644\u52A0) | connect (\u81EA\u52A8\u5411\u5916\u8FDE\u63A5) | listen (\u81EA\u52A8\u5F00\u542F\u7AEF\u53E3\u76D1\u542C)\",\n },\n \"script-debugger-auto-attach-connect-address\": {\n desc: \"\u5F53 auto-attach \u8BBE\u4E3A connect \u65F6\uFF0C\u5C1D\u8BD5\u8FDE\u63A5\u7684\u76EE\u6807\u8C03\u8BD5\u5668\u4E3B\u673A\u4E0E\u7AEF\u53E3\",\n values: \"ip:port\uFF08\u4F8B\u5982 localhost:19144\uFF09\",\n },\n \"websocket-retry-time\": {\n desc: \"\u8FDE\u63A5\u5916\u90E8 WebSocket \u670D\u52A1\u5668\u65AD\u5F00\u540E\u7684\u81EA\u52A8\u91CD\u8BD5\u95F4\u9694\uFF08\u5355\u4F4D\uFF1A\u79D2\uFF09\",\n values: \"\u6B63\u6574\u6570\uFF08\u9ED8\u8BA4 20\uFF09\",\n },\n};\n\n/**\n * \u6839\u636E\u5C5E\u6027 key \u548C\u76EE\u6807\u8BED\u8A00\u83B7\u53D6\u8BF4\u660E\u6587\u6863\n */\nexport function getServerPropertyDoc(key: string, locale: string = \"zh-CN\"): ServerPropertyDoc | undefined {\n const normalizedKey = key.trim().toLowerCase();\n const normalizedLocale = locale.toLowerCase();\n\n if (normalizedLocale === \"zh\" || normalizedLocale.startsWith(\"zh-\")) {\n return SERVER_PROPERTIES_DOCS_ZH_CN[normalizedKey];\n }\n return undefined;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const EMIT_SERVER_TELEMETRY_KEY = "emit-server-telemetry";
|
|
2
2
|
export declare const EMIT_SERVER_TELEMETRY_LINE = "emit-server-telemetry=true";
|
|
3
|
+
export declare const NETHERNET_TRANSPORT_LINE = "transport=nethernet";
|
|
3
4
|
export type ServerPropertiesLogger = {
|
|
4
5
|
info: (msg: string) => void;
|
|
5
6
|
};
|
|
@@ -9,4 +10,28 @@ export type ServerPropertiesLogger = {
|
|
|
9
10
|
* @returns true = 本次新追加;false = 跳过
|
|
10
11
|
*/
|
|
11
12
|
export declare function ensureEmitServerTelemetry(bdsRoot: string, logger?: ServerPropertiesLogger): boolean;
|
|
13
|
+
/** 缺少传输方式时补上当前 BDS 所需的 NetherNet,保留服主已有设置。 */
|
|
14
|
+
export declare function ensureNetherNetTransport(bdsRoot: string, logger?: ServerPropertiesLogger): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* 解析并探测当前应当采用的 BDS 本地化语言代码(例如 zh-CN 或 en)。
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveBdsLocale(rootDir?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* 纯函数:将 server.properties 文本中的注释替换为目标语言的结构化中文说明。
|
|
21
|
+
* 严格保留配置项的 key 与当前生效的 value。若遇到未收录的键或纯注释块,原样保留。
|
|
22
|
+
*/
|
|
23
|
+
export declare function localizeServerPropertiesContent(text: string, locale?: string): {
|
|
24
|
+
content: string;
|
|
25
|
+
modified: boolean;
|
|
26
|
+
};
|
|
27
|
+
export interface LocalizeServerPropertiesOptions {
|
|
28
|
+
locale?: string;
|
|
29
|
+
rootDir?: string;
|
|
30
|
+
logger?: ServerPropertiesLogger;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 对 `<bdsRoot>/server.properties` 中的注释执行本地化重写。
|
|
34
|
+
* @returns true = 本次成功重写并保存;false = 跳过或无改动
|
|
35
|
+
*/
|
|
36
|
+
export declare function localizeServerProperties(bdsRoot: string, options?: LocalizeServerPropertiesOptions): boolean;
|
|
12
37
|
//# sourceMappingURL=server-properties.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-properties.d.ts","sourceRoot":"","sources":["../src/server-properties.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-properties.d.ts","sourceRoot":"","sources":["../src/server-properties.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AACjE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AACvE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAmBT;AAED,8CAA8C;AAC9C,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BzD;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAgB,GACvB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAgGxC;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAmBT"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { configPath, readJson } from "@sfmc-bds/sdk/node/config";
|
|
1
2
|
import fs from "node:fs";
|
|
2
3
|
import { serverPropertiesPath } from "./pack-manager.js";
|
|
4
|
+
import { ROOT_DIR } from "./paths.js";
|
|
5
|
+
import { getServerPropertyDoc } from "./server-properties-i18n.js";
|
|
3
6
|
const EMIT_SERVER_TELEMETRY_KEY = "emit-server-telemetry";
|
|
4
7
|
const EMIT_SERVER_TELEMETRY_LINE = "emit-server-telemetry=true";
|
|
8
|
+
const NETHERNET_TRANSPORT_LINE = "transport=nethernet";
|
|
5
9
|
function ensureEmitServerTelemetry(bdsRoot, logger) {
|
|
6
10
|
const file = serverPropertiesPath(bdsRoot);
|
|
7
11
|
if (!fs.existsSync(file)) return false;
|
|
@@ -20,9 +24,145 @@ function ensureEmitServerTelemetry(bdsRoot, logger) {
|
|
|
20
24
|
);
|
|
21
25
|
return true;
|
|
22
26
|
}
|
|
27
|
+
function ensureNetherNetTransport(bdsRoot, logger) {
|
|
28
|
+
const file = serverPropertiesPath(bdsRoot);
|
|
29
|
+
if (!fs.existsSync(file)) return false;
|
|
30
|
+
let text = fs.readFileSync(file, "utf8");
|
|
31
|
+
if (/^\s*transport\s*=/im.test(text)) return false;
|
|
32
|
+
if (text.length > 0 && !text.endsWith("\n")) text += "\n";
|
|
33
|
+
text += `${NETHERNET_TRANSPORT_LINE}
|
|
34
|
+
`;
|
|
35
|
+
fs.writeFileSync(file, text, "utf8");
|
|
36
|
+
logger?.info("\u5DF2\u5411 server.properties \u8FFD\u52A0 transport=nethernet");
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
function resolveBdsLocale(rootDir) {
|
|
40
|
+
const envLang = process.env.SFMC_LOCALE || process.env.SFMC_LANG;
|
|
41
|
+
if (envLang) {
|
|
42
|
+
return envLang;
|
|
43
|
+
}
|
|
44
|
+
const root = rootDir || ROOT_DIR;
|
|
45
|
+
try {
|
|
46
|
+
const runtime = readJson(configPath(root, "runtime.json"));
|
|
47
|
+
if (runtime?.locale) {
|
|
48
|
+
return runtime.locale;
|
|
49
|
+
}
|
|
50
|
+
} catch {
|
|
51
|
+
}
|
|
52
|
+
const osLangs = [
|
|
53
|
+
process.env.LC_ALL,
|
|
54
|
+
process.env.LC_MESSAGES,
|
|
55
|
+
process.env.LANG,
|
|
56
|
+
Intl.DateTimeFormat().resolvedOptions().locale
|
|
57
|
+
];
|
|
58
|
+
for (const raw of osLangs) {
|
|
59
|
+
if (raw && /^zh\b/i.test(raw)) {
|
|
60
|
+
return "zh-CN";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return "en";
|
|
64
|
+
}
|
|
65
|
+
function localizeServerPropertiesContent(text, locale = "zh-CN") {
|
|
66
|
+
const normalizedLocale = locale.toLowerCase();
|
|
67
|
+
if (!normalizedLocale.startsWith("zh")) {
|
|
68
|
+
return { content: text, modified: false };
|
|
69
|
+
}
|
|
70
|
+
if (!text || text.trim().length === 0) {
|
|
71
|
+
return { content: text, modified: false };
|
|
72
|
+
}
|
|
73
|
+
const eol = text.includes("\r\n") ? "\r\n" : "\n";
|
|
74
|
+
const lines = text.split(/\r?\n/);
|
|
75
|
+
const blocks = [];
|
|
76
|
+
let currentBlock = [];
|
|
77
|
+
let currentKey;
|
|
78
|
+
let currentValue;
|
|
79
|
+
function flushBlock() {
|
|
80
|
+
if (currentBlock.length > 0) {
|
|
81
|
+
blocks.push({
|
|
82
|
+
key: currentKey,
|
|
83
|
+
value: currentValue,
|
|
84
|
+
originalLines: currentBlock
|
|
85
|
+
});
|
|
86
|
+
currentBlock = [];
|
|
87
|
+
currentKey = void 0;
|
|
88
|
+
currentValue = void 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const kvRegex = /^\s*([A-Za-z0-9._-]+)\s*=\s*(.*)$/;
|
|
92
|
+
for (let i = 0; i < lines.length; i++) {
|
|
93
|
+
const line = lines[i];
|
|
94
|
+
if (typeof line !== "string") continue;
|
|
95
|
+
const isBlank = line.trim() === "";
|
|
96
|
+
if (isBlank) {
|
|
97
|
+
flushBlock();
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const match = line.match(kvRegex);
|
|
101
|
+
if (match && match[1] !== void 0) {
|
|
102
|
+
if (currentKey !== void 0) {
|
|
103
|
+
flushBlock();
|
|
104
|
+
}
|
|
105
|
+
currentKey = match[1];
|
|
106
|
+
currentValue = match[2] ?? "";
|
|
107
|
+
currentBlock.push(line);
|
|
108
|
+
} else {
|
|
109
|
+
currentBlock.push(line);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
flushBlock();
|
|
113
|
+
const outputBlocks = [];
|
|
114
|
+
for (const block of blocks) {
|
|
115
|
+
if (block.key) {
|
|
116
|
+
const doc = getServerPropertyDoc(block.key, locale);
|
|
117
|
+
if (doc) {
|
|
118
|
+
const outLines = [`${block.key}=${block.value ?? ""}`];
|
|
119
|
+
outLines.push(`# ${doc.desc}`);
|
|
120
|
+
if (doc.values) {
|
|
121
|
+
outLines.push(`# \u53EF\u9009\u503C\uFF1A${doc.values}`);
|
|
122
|
+
}
|
|
123
|
+
if (doc.tip) {
|
|
124
|
+
outLines.push(`# \u63D0\u793A\uFF1A${doc.tip}`);
|
|
125
|
+
}
|
|
126
|
+
outputBlocks.push(outLines.join(eol));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
outputBlocks.push(block.originalLines.join(eol));
|
|
131
|
+
}
|
|
132
|
+
let newContent = outputBlocks.join(eol + eol);
|
|
133
|
+
if (newContent.length > 0 && !newContent.endsWith(eol)) {
|
|
134
|
+
newContent += eol;
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
content: newContent,
|
|
138
|
+
modified: newContent !== text
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function localizeServerProperties(bdsRoot, options) {
|
|
142
|
+
const file = serverPropertiesPath(bdsRoot);
|
|
143
|
+
if (!fs.existsSync(file)) return false;
|
|
144
|
+
const locale = options?.locale || resolveBdsLocale(options?.rootDir);
|
|
145
|
+
const normalizedLocale = locale.toLowerCase();
|
|
146
|
+
if (!normalizedLocale.startsWith("zh")) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
const raw = fs.readFileSync(file, "utf8");
|
|
150
|
+
const { content, modified } = localizeServerPropertiesContent(raw, locale);
|
|
151
|
+
if (!modified) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
fs.writeFileSync(file, content, "utf8");
|
|
155
|
+
options?.logger?.info("\u5DF2\u5C06 server.properties \u4E2D\u7684\u6CE8\u91CA\u672C\u5730\u5316\u4E3A\u7B80\u4F53\u4E2D\u6587\uFF08\u4FDD\u7559\u6240\u6709\u65E2\u6709\u914D\u7F6E\u503C\uFF09");
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
23
158
|
export {
|
|
24
159
|
EMIT_SERVER_TELEMETRY_KEY,
|
|
25
160
|
EMIT_SERVER_TELEMETRY_LINE,
|
|
26
|
-
|
|
161
|
+
NETHERNET_TRANSPORT_LINE,
|
|
162
|
+
ensureEmitServerTelemetry,
|
|
163
|
+
ensureNetherNetTransport,
|
|
164
|
+
localizeServerProperties,
|
|
165
|
+
localizeServerPropertiesContent,
|
|
166
|
+
resolveBdsLocale
|
|
27
167
|
};
|
|
28
168
|
//# sourceMappingURL=server-properties.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/server-properties.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * server.properties \u8F85\u52A9\uFF1A\u5B89\u88C5/\u542F\u52A8\u65F6\u786E\u4FDD emit-server-telemetry=true\n */\nimport fs from \"node:fs\";\nimport { serverPropertiesPath } from \"./pack-manager.js\";\n\nexport const EMIT_SERVER_TELEMETRY_KEY = \"emit-server-telemetry\";\nexport const EMIT_SERVER_TELEMETRY_LINE = \"emit-server-telemetry=true\";\n\nexport type ServerPropertiesLogger = {\n info: (msg: string) => void;\n};\n\n/**\n * \u82E5 `<bdsRoot>/server.properties` \u4E2D\u5C1A\u65E0 emit-server-telemetry\uFF0C\u5219\u8FFD\u52A0 `=true`\u3002\n * \u5DF2\u6709\u8BE5\u952E\uFF08\u4EFB\u610F\u503C\uFF09\u5219\u8DF3\u8FC7\u3002\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\u8DF3\u8FC7\uFF08BDS \u5C1A\u672A\u89E3\u538B\uFF09\u3002\n * @returns true = \u672C\u6B21\u65B0\u8FFD\u52A0\uFF1Bfalse = \u8DF3\u8FC7\n */\nexport function ensureEmitServerTelemetry(\n bdsRoot: string,\n logger?: ServerPropertiesLogger\n): boolean {\n const file = serverPropertiesPath(bdsRoot);\n if (!fs.existsSync(file)) return false;\n\n let text = fs.readFileSync(file, \"utf8\");\n if (/^\\s*emit-server-telemetry\\s*=/im.test(text)) {\n return false;\n }\n\n if (text.length > 0 && !text.endsWith(\"\\n\")) {\n text += \"\\n\";\n }\n text += `${EMIT_SERVER_TELEMETRY_LINE}\\n`;\n fs.writeFileSync(file, text, \"utf8\");\n\n logger?.info(\n \"\u5DF2\u5411 server.properties \u8FFD\u52A0 emit-server-telemetry=true\uFF08\u56E0\u60A8\u5DF2\u540C\u610F Mojang EULA\uFF0C\u6309\u534F\u8BAE\u542F\u7528\u670D\u52A1\u5668\u9065\u6D4B\uFF09\"\n );\n return true;\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * server-properties.ts \u2014 BDS server.properties \u8F85\u52A9\u5DE5\u5177\u96C6\n *\n * \u804C\u8D23\uFF1A\n * 1. \u5B89\u88C5/\u542F\u52A8\u65F6\u786E\u4FDD emit-server-telemetry=true \u4E0E transport=nethernet\n * 2. \u5B89\u88C5/\u66F4\u65B0/\u542F\u52A8\u65F6\u652F\u6301\u5C06\u914D\u7F6E\u6CE8\u91CA\u7ED3\u6784\u5316\u672C\u5730\u5316\uFF08\u5982\u7FFB\u8BD1\u4E3A\u7B80\u4F53\u4E2D\u6587 zh-CN\uFF09\uFF0C\n * \u4E25\u683C\u4FDD\u7559\u6240\u6709\u914D\u7F6E\u952E\uFF08Key\uFF09\u4E0E\u7528\u6237\u914D\u7F6E\u503C\uFF08Value\uFF09\u3002\n */\nimport { configPath, readJson } from \"@sfmc-bds/sdk/node/config\";\nimport fs from \"node:fs\";\nimport { serverPropertiesPath } from \"./pack-manager.js\";\nimport { ROOT_DIR } from \"./paths.js\";\nimport { getServerPropertyDoc } from \"./server-properties-i18n.js\";\n\nexport const EMIT_SERVER_TELEMETRY_KEY = \"emit-server-telemetry\";\nexport const EMIT_SERVER_TELEMETRY_LINE = \"emit-server-telemetry=true\";\nexport const NETHERNET_TRANSPORT_LINE = \"transport=nethernet\";\n\nexport type ServerPropertiesLogger = {\n info: (msg: string) => void;\n};\n\n/**\n * \u82E5 `<bdsRoot>/server.properties` \u4E2D\u5C1A\u65E0 emit-server-telemetry\uFF0C\u5219\u8FFD\u52A0 `=true`\u3002\n * \u5DF2\u6709\u8BE5\u952E\uFF08\u4EFB\u610F\u503C\uFF09\u5219\u8DF3\u8FC7\u3002\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\u8DF3\u8FC7\uFF08BDS \u5C1A\u672A\u89E3\u538B\uFF09\u3002\n * @returns true = \u672C\u6B21\u65B0\u8FFD\u52A0\uFF1Bfalse = \u8DF3\u8FC7\n */\nexport function ensureEmitServerTelemetry(\n bdsRoot: string,\n logger?: ServerPropertiesLogger\n): boolean {\n const file = serverPropertiesPath(bdsRoot);\n if (!fs.existsSync(file)) return false;\n\n let text = fs.readFileSync(file, \"utf8\");\n if (/^\\s*emit-server-telemetry\\s*=/im.test(text)) {\n return false;\n }\n\n if (text.length > 0 && !text.endsWith(\"\\n\")) {\n text += \"\\n\";\n }\n text += `${EMIT_SERVER_TELEMETRY_LINE}\\n`;\n fs.writeFileSync(file, text, \"utf8\");\n\n logger?.info(\n \"\u5DF2\u5411 server.properties \u8FFD\u52A0 emit-server-telemetry=true\uFF08\u56E0\u60A8\u5DF2\u540C\u610F Mojang EULA\uFF0C\u6309\u534F\u8BAE\u542F\u7528\u670D\u52A1\u5668\u9065\u6D4B\uFF09\"\n );\n return true;\n}\n\n/** \u7F3A\u5C11\u4F20\u8F93\u65B9\u5F0F\u65F6\u8865\u4E0A\u5F53\u524D BDS \u6240\u9700\u7684 NetherNet\uFF0C\u4FDD\u7559\u670D\u4E3B\u5DF2\u6709\u8BBE\u7F6E\u3002 */\nexport function ensureNetherNetTransport(\n bdsRoot: string,\n logger?: ServerPropertiesLogger\n): boolean {\n const file = serverPropertiesPath(bdsRoot);\n if (!fs.existsSync(file)) return false;\n\n let text = fs.readFileSync(file, \"utf8\");\n if (/^\\s*transport\\s*=/im.test(text)) return false;\n\n if (text.length > 0 && !text.endsWith(\"\\n\")) text += \"\\n\";\n text += `${NETHERNET_TRANSPORT_LINE}\\n`;\n fs.writeFileSync(file, text, \"utf8\");\n logger?.info(\"\u5DF2\u5411 server.properties \u8FFD\u52A0 transport=nethernet\");\n return true;\n}\n\n/**\n * \u89E3\u6790\u5E76\u63A2\u6D4B\u5F53\u524D\u5E94\u5F53\u91C7\u7528\u7684 BDS \u672C\u5730\u5316\u8BED\u8A00\u4EE3\u7801\uFF08\u4F8B\u5982 zh-CN \u6216 en\uFF09\u3002\n */\nexport function resolveBdsLocale(rootDir?: string): string {\n const envLang = process.env.SFMC_LOCALE || process.env.SFMC_LANG;\n if (envLang) {\n return envLang;\n }\n\n const root = rootDir || ROOT_DIR;\n try {\n const runtime = readJson<{ locale?: string }>(configPath(root, \"runtime.json\"));\n if (runtime?.locale) {\n return runtime.locale;\n }\n } catch {\n // \u5FFD\u7565\u5F02\u5E38\uFF0C\u964D\u7EA7\u5230\u7CFB\u7EDF\u8BED\u8A00\u63A2\u6D4B\n }\n\n const osLangs = [\n process.env.LC_ALL,\n process.env.LC_MESSAGES,\n process.env.LANG,\n Intl.DateTimeFormat().resolvedOptions().locale,\n ];\n for (const raw of osLangs) {\n if (raw && /^zh\\b/i.test(raw)) {\n return \"zh-CN\";\n }\n }\n return \"en\";\n}\n\n/**\n * \u7EAF\u51FD\u6570\uFF1A\u5C06 server.properties \u6587\u672C\u4E2D\u7684\u6CE8\u91CA\u66FF\u6362\u4E3A\u76EE\u6807\u8BED\u8A00\u7684\u7ED3\u6784\u5316\u4E2D\u6587\u8BF4\u660E\u3002\n * \u4E25\u683C\u4FDD\u7559\u914D\u7F6E\u9879\u7684 key \u4E0E\u5F53\u524D\u751F\u6548\u7684 value\u3002\u82E5\u9047\u5230\u672A\u6536\u5F55\u7684\u952E\u6216\u7EAF\u6CE8\u91CA\u5757\uFF0C\u539F\u6837\u4FDD\u7559\u3002\n */\nexport function localizeServerPropertiesContent(\n text: string,\n locale: string = \"zh-CN\"\n): { content: string; modified: boolean } {\n const normalizedLocale = locale.toLowerCase();\n // \u76EE\u524D\u4EC5\u5BF9\u4E2D\u6587\u505A\u672C\u5730\u5316\u91CD\u5199\uFF1B\u82F1\u6587\u6216\u5176\u4ED6\u8BED\u8A00\u4FDD\u6301\u539F\u6C41\u539F\u5473\n if (!normalizedLocale.startsWith(\"zh\")) {\n return { content: text, modified: false };\n }\n\n if (!text || text.trim().length === 0) {\n return { content: text, modified: false };\n }\n\n const eol = text.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const lines = text.split(/\\r?\\n/);\n\n interface Block {\n key: string | undefined;\n value: string | undefined;\n originalLines: string[];\n }\n\n const blocks: Block[] = [];\n let currentBlock: string[] = [];\n let currentKey: string | undefined;\n let currentValue: string | undefined;\n\n function flushBlock() {\n if (currentBlock.length > 0) {\n blocks.push({\n key: currentKey,\n value: currentValue,\n originalLines: currentBlock,\n });\n currentBlock = [];\n currentKey = undefined;\n currentValue = undefined;\n }\n }\n\n const kvRegex = /^\\s*([A-Za-z0-9._-]+)\\s*=\\s*(.*)$/;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (typeof line !== \"string\") continue;\n const isBlank = line.trim() === \"\";\n\n if (isBlank) {\n flushBlock();\n continue;\n }\n\n const match = line.match(kvRegex);\n if (match && match[1] !== undefined) {\n // \u82E5\u5F53\u524D\u5757\u5185\u5DF2\u7ECF\u5B58\u5728\u4E00\u4E2A\u952E\u503C\u5BF9\uFF0C\u5219\u5148\u7ED3\u7B97\u4E0A\u4E00\u5757\n if (currentKey !== undefined) {\n flushBlock();\n }\n currentKey = match[1];\n currentValue = match[2] ?? \"\";\n currentBlock.push(line);\n } else {\n currentBlock.push(line);\n }\n }\n flushBlock();\n\n const outputBlocks: string[] = [];\n\n for (const block of blocks) {\n if (block.key) {\n const doc = getServerPropertyDoc(block.key, locale);\n if (doc) {\n const outLines: string[] = [`${block.key}=${block.value ?? \"\"}`];\n outLines.push(`# ${doc.desc}`);\n if (doc.values) {\n outLines.push(`# \u53EF\u9009\u503C\uFF1A${doc.values}`);\n }\n if (doc.tip) {\n outLines.push(`# \u63D0\u793A\uFF1A${doc.tip}`);\n }\n outputBlocks.push(outLines.join(eol));\n continue;\n }\n }\n // \u672A\u6536\u5F55\u7684\u9879\u6216\u666E\u901A\u6CE8\u91CA\u5757\uFF0C\u4FDD\u7559\u539F\u6587\u672C\n outputBlocks.push(block.originalLines.join(eol));\n }\n\n let newContent = outputBlocks.join(eol + eol);\n if (newContent.length > 0 && !newContent.endsWith(eol)) {\n newContent += eol;\n }\n\n return {\n content: newContent,\n modified: newContent !== text,\n };\n}\n\nexport interface LocalizeServerPropertiesOptions {\n locale?: string;\n rootDir?: string;\n logger?: ServerPropertiesLogger;\n}\n\n/**\n * \u5BF9 `<bdsRoot>/server.properties` \u4E2D\u7684\u6CE8\u91CA\u6267\u884C\u672C\u5730\u5316\u91CD\u5199\u3002\n * @returns true = \u672C\u6B21\u6210\u529F\u91CD\u5199\u5E76\u4FDD\u5B58\uFF1Bfalse = \u8DF3\u8FC7\u6216\u65E0\u6539\u52A8\n */\nexport function localizeServerProperties(\n bdsRoot: string,\n options?: LocalizeServerPropertiesOptions\n): boolean {\n const file = serverPropertiesPath(bdsRoot);\n if (!fs.existsSync(file)) return false;\n\n const locale = options?.locale || resolveBdsLocale(options?.rootDir);\n const normalizedLocale = locale.toLowerCase();\n if (!normalizedLocale.startsWith(\"zh\")) {\n return false;\n }\n\n const raw = fs.readFileSync(file, \"utf8\");\n const { content, modified } = localizeServerPropertiesContent(raw, locale);\n if (!modified) {\n return false;\n }\n\n fs.writeFileSync(file, content, \"utf8\");\n options?.logger?.info(\"\u5DF2\u5C06 server.properties \u4E2D\u7684\u6CE8\u91CA\u672C\u5730\u5316\u4E3A\u7B80\u4F53\u4E2D\u6587\uFF08\u4FDD\u7559\u6240\u6709\u65E2\u6709\u914D\u7F6E\u503C\uFF09\");\n return true;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,YAAY,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG/B,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,YAAY,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG/B,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
package/dist/upstream.d.ts
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* upstream.ts —
|
|
2
|
+
* upstream.ts — BDS 上游版本源、多镜像下载与完整性校验
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* 核心机制:
|
|
5
|
+
* - 多源容灾:官方源与镜像源并行竞争与多轮指数退避重试
|
|
6
|
+
* - 动态 URL 模板渲染:根据操作系统架构与更新通道计算下载地址
|
|
7
|
+
* - 流式哈希校验:支持 SHA-1 与 SHA-256 完整性流式计算校验
|
|
8
|
+
* - 版本白名单兼容门禁:防止自动升级至未验证版本
|
|
8
9
|
*/
|
|
10
|
+
import { type BdsHostOs } from "./host-platform.js";
|
|
9
11
|
import type { BdsUpdaterConfig, VersionDetails, VersionInfo } from "./types.js";
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* 获取 BDS 最新可用版本信息(支持重试与指数退避)。
|
|
14
|
+
*
|
|
15
|
+
* @param cfg BDS 更新器配置。
|
|
16
|
+
* @param channel 更新通道(如 "release" 或 "preview")。
|
|
17
|
+
* @param hostOs 目标主机操作系统类型。
|
|
18
|
+
* @returns 包含最新版本号与 CDN 根路径的信息对象。
|
|
19
|
+
*/
|
|
20
|
+
export declare function getVersionInfo(cfg: BdsUpdaterConfig, channel: string, hostOs?: BdsHostOs): Promise<VersionInfo>;
|
|
12
21
|
/** 获取 per-version 的下载链接 + 哈希 (fallback GitHub → jsdelivr) */
|
|
13
|
-
export declare function fetchVersionDetails(cfg: BdsUpdaterConfig, channel: string, version: string): Promise<VersionDetails>;
|
|
22
|
+
export declare function fetchVersionDetails(cfg: BdsUpdaterConfig, channel: string, version: string, hostOs?: BdsHostOs): Promise<VersionDetails>;
|
|
14
23
|
/** 候选下载 URL (按优先级) */
|
|
15
|
-
export declare function buildDownloadUrls(cfg: BdsUpdaterConfig, channel: string, version: string, details: VersionDetails): string[];
|
|
24
|
+
export declare function buildDownloadUrls(cfg: BdsUpdaterConfig, channel: string, version: string, details: VersionDetails, hostOs?: BdsHostOs): string[];
|
|
16
25
|
/** 同步 / 异步校验文件哈希 */
|
|
17
26
|
export declare function verifyFileHash(filePath: string, expectedSha1: string, expectedSha256: string): Promise<boolean>;
|
|
18
27
|
/** 检查版本兼容性 (白名单) */
|
package/dist/upstream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAchF;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAElC,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,SAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC,CA8BtB;AAED,6DAA6D;AAC7D,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,SAAuB,GAC9B,OAAO,CAAC,cAAc,CAAC,CA2BzB;AAED,sBAAsB;AACtB,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,MAAM,GAAE,SAAuB,GAC9B,MAAM,EAAE,CAYV;AAED,oBAAoB;AACpB,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBrH;AAED,oBAAoB;AACpB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAInF"}
|
package/dist/upstream.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
+
import { bdsCdnZipSuffix, bdsDetailsPlatformKey, bdsHostOs } from "./host-platform.js";
|
|
3
4
|
import { fetchJsonWithFallback } from "./http.js";
|
|
4
5
|
import { log } from "./log.js";
|
|
5
6
|
import { toVer3 } from "./version.js";
|
|
@@ -12,7 +13,7 @@ function resolveTemplate(tpl, vars) {
|
|
|
12
13
|
}
|
|
13
14
|
return s;
|
|
14
15
|
}
|
|
15
|
-
async function getVersionInfo(cfg, channel) {
|
|
16
|
+
async function getVersionInfo(cfg, channel, hostOs = bdsHostOs()) {
|
|
16
17
|
const api = cfg.version_versions || process.env["BDS_VERSIONS_API"] || DEFAULT_VERSIONS_API;
|
|
17
18
|
const mirror = cfg.version_versions_mirror || process.env["BDS_VERSIONS_MIRROR"] || DEFAULT_VERSIONS_MIRROR;
|
|
18
19
|
const sources = [api, mirror].filter(Boolean);
|
|
@@ -26,7 +27,7 @@ async function getVersionInfo(cfg, channel) {
|
|
|
26
27
|
const entry = channel === "preview" ? json.preview : json.release;
|
|
27
28
|
ver = entry?.latest;
|
|
28
29
|
} else {
|
|
29
|
-
const platform = json.windows || json.linux;
|
|
30
|
+
const platform = hostOs === "windows" ? json.windows || json.linux : json.linux || json.windows;
|
|
30
31
|
ver = channel === "preview" ? platform?.preview : platform?.stable;
|
|
31
32
|
}
|
|
32
33
|
if (!ver) throw new Error("\u672A\u627E\u5230\u6700\u65B0\u7248\u672C\u53F7");
|
|
@@ -42,8 +43,8 @@ async function getVersionInfo(cfg, channel) {
|
|
|
42
43
|
}
|
|
43
44
|
throw lastErr instanceof Error ? lastErr : new Error("\u7248\u672C\u53F7\u83B7\u53D6\u5931\u8D25");
|
|
44
45
|
}
|
|
45
|
-
async function fetchVersionDetails(cfg, channel, version) {
|
|
46
|
-
const platform = channel
|
|
46
|
+
async function fetchVersionDetails(cfg, channel, version, hostOs = bdsHostOs()) {
|
|
47
|
+
const platform = bdsDetailsPlatformKey(channel, hostOs);
|
|
47
48
|
const ch = channel === "preview" ? "preview" : "release";
|
|
48
49
|
const vars = { version, ver3: toVer3(version), platform, channel: ch };
|
|
49
50
|
const detailsTpl = cfg.version_details || "https://raw.githubusercontent.com/Bedrock-OSS/BDS-Versions/main/{platform}/{version}.json";
|
|
@@ -52,7 +53,7 @@ async function fetchVersionDetails(cfg, channel, version) {
|
|
|
52
53
|
const json = await fetchJsonWithFallback(sources);
|
|
53
54
|
const mode = cfg.version_mode || "bedrock-oss";
|
|
54
55
|
if (mode === "endstone") {
|
|
55
|
-
const bw = json.binary?.windows;
|
|
56
|
+
const bw = hostOs === "windows" ? json.binary?.windows : json.binary?.linux;
|
|
56
57
|
return {
|
|
57
58
|
downloadUrl: bw?.url ?? "",
|
|
58
59
|
sha1: "",
|
|
@@ -67,7 +68,7 @@ async function fetchVersionDetails(cfg, channel, version) {
|
|
|
67
68
|
size: json.size_in_bytes ?? 0
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
|
-
function buildDownloadUrls(cfg, channel, version, details) {
|
|
71
|
+
function buildDownloadUrls(cfg, channel, version, details, hostOs = bdsHostOs()) {
|
|
71
72
|
const urls = [];
|
|
72
73
|
if (cfg.download_mirror) {
|
|
73
74
|
const mirrorVer = channel === "preview" ? `${version}-preview` : version;
|
|
@@ -75,7 +76,7 @@ function buildDownloadUrls(cfg, channel, version, details) {
|
|
|
75
76
|
}
|
|
76
77
|
if (details.downloadUrl) urls.push(details.downloadUrl);
|
|
77
78
|
const cdnRoot = cfg.cdn_root || "https://www.minecraft.net/bedrockdedicatedserver";
|
|
78
|
-
const suffix = channel
|
|
79
|
+
const suffix = bdsCdnZipSuffix(channel, version, hostOs);
|
|
79
80
|
urls.push(cdnRoot + suffix);
|
|
80
81
|
urls.push(`https://minecraft.azureedge.net${suffix}`);
|
|
81
82
|
return [...new Set(urls)];
|