@sfmc-bds/bds-tools 0.2.9 → 0.3.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.
@@ -0,0 +1,50 @@
1
+ /**
2
+ * server-properties-fields.ts — server.properties 的表单字段清单
3
+ *
4
+ * 使用场景:平台 config.read 读取 bds/server.properties 时附带完整字段清单,
5
+ * 桌面端与小程序据此渲染「BDS配置」表单。
6
+ * 取值类型、枚举值与范围在这里维护(与语言无关);名称、说明与枚举展示名来自 server-properties-i18n.ts。
7
+ * 本文件不依赖 Node API。
8
+ */
9
+ import { type ServerPropertyGroup, type ServerPropertyKey } from "./server-properties-i18n.js";
10
+ /** 单个属性的取值约束 */
11
+ interface ServerPropertySpec {
12
+ group: ServerPropertyGroup;
13
+ type: "boolean" | "integer" | "number" | "string" | "enum";
14
+ /** enum 的合法取值 */
15
+ values?: readonly string[];
16
+ min?: number;
17
+ max?: number;
18
+ }
19
+ /**
20
+ * 字典收录的每个属性的取值约束,按表单展示顺序排列。
21
+ * 类型为 Record<ServerPropertyKey, …>:与 i18n 字典的键漏写或多写都会编译报错。
22
+ * 取值约束只写字典 values 中明确说明的范围;说明与实际版本不一致的键按文本处理,避免表单写入非法值。
23
+ */
24
+ export declare const SERVER_PROPERTY_SPECS: Record<ServerPropertyKey, ServerPropertySpec>;
25
+ /**
26
+ * 表单字段描述。结构与 @sfmc-bds/management 的 ConfigFormField 相同(本包不依赖管理协议包)。
27
+ * 使用场景:serverPropertyFormFields 的返回值,由平台放进 ConfigDocument.fields。
28
+ */
29
+ export interface ServerPropertyFormField {
30
+ key: string;
31
+ label?: string;
32
+ description?: string;
33
+ kind: "boolean" | "number" | "string" | "enum";
34
+ options?: {
35
+ value: string;
36
+ label: string;
37
+ }[];
38
+ min?: number;
39
+ max?: number;
40
+ integer?: boolean;
41
+ group?: string;
42
+ }
43
+ /**
44
+ * 生成 server.properties 的完整表单字段清单(按 SERVER_PROPERTY_SPECS 的顺序)。
45
+ * 说明文字:开关与枚举由控件表达取值,只拼概述与提示;文本与数字另附字典中的取值说明。
46
+ * 目标语言没有字典时,名称、说明缺省(界面回退显示 key),分组名回退为分组标识。
47
+ */
48
+ export declare function serverPropertyFormFields(locale?: string): ServerPropertyFormField[];
49
+ export {};
50
+ //# sourceMappingURL=server-properties-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-properties-fields.d.ts","sourceRoot":"","sources":["../src/server-properties-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,gBAAgB;AAChB,UAAU,kBAAkB;IAC1B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3D,iBAAiB;IACjB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAKD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAqD/E,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,MAAgB,GAAG,uBAAuB,EAAE,CAoB5F"}
@@ -0,0 +1,77 @@
1
+ import {
2
+ getServerPropertyDoc,
3
+ getServerPropertyGroupLabel
4
+ } from "./server-properties-i18n.js";
5
+ const PORT_RANGE = { min: 1, max: 65535 };
6
+ const SERVER_PROPERTY_SPECS = {
7
+ "server-name": { group: "basic", type: "string" },
8
+ "level-name": { group: "basic", type: "string" },
9
+ "level-seed": { group: "basic", type: "string" },
10
+ "gamemode": { group: "basic", type: "enum", values: ["survival", "creative", "adventure"] },
11
+ "force-gamemode": { group: "basic", type: "boolean" },
12
+ "difficulty": { group: "basic", type: "enum", values: ["peaceful", "easy", "normal", "hard"] },
13
+ "allow-cheats": { group: "basic", type: "boolean" },
14
+ "max-players": { group: "player", type: "integer", min: 1 },
15
+ "online-mode": { group: "player", type: "boolean" },
16
+ "allow-list": { group: "player", type: "boolean" },
17
+ "white-list": { group: "player", type: "boolean" },
18
+ "default-player-permission-level": { group: "player", type: "enum", values: ["visitor", "member", "operator"] },
19
+ "player-idle-timeout": { group: "player", type: "integer", min: 0 },
20
+ "texturepack-required": { group: "player", type: "boolean" },
21
+ "chat-restriction": { group: "player", type: "enum", values: ["None", "Dropped", "Disabled"] },
22
+ "disable-player-interaction": { group: "player", type: "boolean" },
23
+ "disable-persona": { group: "player", type: "boolean" },
24
+ "disable-custom-skins": { group: "player", type: "boolean" },
25
+ "server-port": { group: "network", type: "integer", ...PORT_RANGE },
26
+ "server-portv6": { group: "network", type: "integer", ...PORT_RANGE },
27
+ "enable-lan-visibility": { group: "network", type: "boolean" },
28
+ "transport": { group: "network", type: "string" },
29
+ "compression-threshold": { group: "network", type: "integer", min: 0, max: 65535 },
30
+ "compression-algorithm": { group: "network", type: "enum", values: ["zlib", "snappy"] },
31
+ "websocket-retry-time": { group: "network", type: "integer", min: 1 },
32
+ "view-distance": { group: "performance", type: "integer", min: 5 },
33
+ "tick-distance": { group: "performance", type: "integer", min: 4, max: 12 },
34
+ "max-threads": { group: "performance", type: "integer", min: 0 },
35
+ "client-side-chunk-generation-enabled": { group: "performance", type: "boolean" },
36
+ "block-network-ids-are-hashes": { group: "performance", type: "boolean" },
37
+ "server-build-radius-ratio": { group: "performance", type: "string" },
38
+ "server-authoritative-movement": { group: "movement", type: "enum", values: ["server-auth", "client-auth"] },
39
+ "player-movement-score-threshold": { group: "movement", type: "integer" },
40
+ "player-movement-action-direction-threshold": { group: "movement", type: "number" },
41
+ "player-movement-distance-threshold": { group: "movement", type: "number" },
42
+ "player-movement-duration-threshold-in-ms": { group: "movement", type: "integer", min: 0 },
43
+ "correct-player-movement": { group: "movement", type: "boolean" },
44
+ "server-authoritative-block-breaking": { group: "movement", type: "string" },
45
+ "allow-outbound-script-debugging": { group: "script", type: "boolean" },
46
+ "allow-inbound-script-debugging": { group: "script", type: "boolean" },
47
+ "force-inbound-debug-port": { group: "script", type: "integer", ...PORT_RANGE },
48
+ "script-debugger-auto-attach": { group: "script", type: "enum", values: ["disabled", "connect", "listen"] },
49
+ "script-debugger-auto-attach-connect-address": { group: "script", type: "string" },
50
+ "content-log-file-enabled": { group: "diagnostics", type: "boolean" },
51
+ "content-log-console-output-enabled": { group: "diagnostics", type: "boolean" },
52
+ "emit-server-telemetry": { group: "diagnostics", type: "boolean" }
53
+ };
54
+ function serverPropertyFormFields(locale = "zh-CN") {
55
+ return Object.entries(SERVER_PROPERTY_SPECS).map(([key, spec]) => {
56
+ const doc = getServerPropertyDoc(key, locale);
57
+ const controlShowsValues = spec.type === "boolean" || spec.type === "enum";
58
+ const description = doc ? [doc.desc, !controlShowsValues && doc.values ? `\u53D6\u503C\uFF1A${doc.values}` : "", doc.tip ? `\u63D0\u793A\uFF1A${doc.tip}` : ""].filter(Boolean).join("\u3002") : void 0;
59
+ const field = {
60
+ key,
61
+ kind: spec.type === "integer" ? "number" : spec.type,
62
+ group: getServerPropertyGroupLabel(spec.group, locale) ?? spec.group,
63
+ ...doc ? { label: doc.label } : {},
64
+ ...description ? { description } : {},
65
+ ...spec.type === "integer" ? { integer: true } : spec.type === "number" ? { integer: false } : {},
66
+ ...spec.min !== void 0 ? { min: spec.min } : {},
67
+ ...spec.max !== void 0 ? { max: spec.max } : {}
68
+ };
69
+ if (spec.type === "enum") field.options = (spec.values ?? []).map((value) => ({ value, label: doc?.options?.[value] ?? value }));
70
+ return field;
71
+ });
72
+ }
73
+ export {
74
+ SERVER_PROPERTY_SPECS,
75
+ serverPropertyFormFields
76
+ };
77
+ //# sourceMappingURL=server-properties-fields.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/server-properties-fields.ts"],
4
+ "sourcesContent": ["/**\n * server-properties-fields.ts \u2014 server.properties \u7684\u8868\u5355\u5B57\u6BB5\u6E05\u5355\n *\n * \u4F7F\u7528\u573A\u666F\uFF1A\u5E73\u53F0 config.read \u8BFB\u53D6 bds/server.properties \u65F6\u9644\u5E26\u5B8C\u6574\u5B57\u6BB5\u6E05\u5355\uFF0C\n * \u684C\u9762\u7AEF\u4E0E\u5C0F\u7A0B\u5E8F\u636E\u6B64\u6E32\u67D3\u300CBDS\u914D\u7F6E\u300D\u8868\u5355\u3002\n * \u53D6\u503C\u7C7B\u578B\u3001\u679A\u4E3E\u503C\u4E0E\u8303\u56F4\u5728\u8FD9\u91CC\u7EF4\u62A4\uFF08\u4E0E\u8BED\u8A00\u65E0\u5173\uFF09\uFF1B\u540D\u79F0\u3001\u8BF4\u660E\u4E0E\u679A\u4E3E\u5C55\u793A\u540D\u6765\u81EA server-properties-i18n.ts\u3002\n * \u672C\u6587\u4EF6\u4E0D\u4F9D\u8D56 Node API\u3002\n */\nimport {\n getServerPropertyDoc,\n getServerPropertyGroupLabel,\n type ServerPropertyGroup,\n type ServerPropertyKey,\n} from \"./server-properties-i18n.js\";\n\n/** \u5355\u4E2A\u5C5E\u6027\u7684\u53D6\u503C\u7EA6\u675F */\ninterface ServerPropertySpec {\n group: ServerPropertyGroup;\n type: \"boolean\" | \"integer\" | \"number\" | \"string\" | \"enum\";\n /** enum \u7684\u5408\u6CD5\u53D6\u503C */\n values?: readonly string[];\n min?: number;\n max?: number;\n}\n\n/** UDP / TCP \u7AEF\u53E3\u8303\u56F4\uFF0C\u7528\u4E8E\u5404\u7AEF\u53E3\u5B57\u6BB5 */\nconst PORT_RANGE = { min: 1, max: 65535 } as const;\n\n/**\n * \u5B57\u5178\u6536\u5F55\u7684\u6BCF\u4E2A\u5C5E\u6027\u7684\u53D6\u503C\u7EA6\u675F\uFF0C\u6309\u8868\u5355\u5C55\u793A\u987A\u5E8F\u6392\u5217\u3002\n * \u7C7B\u578B\u4E3A Record<ServerPropertyKey, \u2026>\uFF1A\u4E0E i18n \u5B57\u5178\u7684\u952E\u6F0F\u5199\u6216\u591A\u5199\u90FD\u4F1A\u7F16\u8BD1\u62A5\u9519\u3002\n * \u53D6\u503C\u7EA6\u675F\u53EA\u5199\u5B57\u5178 values \u4E2D\u660E\u786E\u8BF4\u660E\u7684\u8303\u56F4\uFF1B\u8BF4\u660E\u4E0E\u5B9E\u9645\u7248\u672C\u4E0D\u4E00\u81F4\u7684\u952E\u6309\u6587\u672C\u5904\u7406\uFF0C\u907F\u514D\u8868\u5355\u5199\u5165\u975E\u6CD5\u503C\u3002\n */\nexport const SERVER_PROPERTY_SPECS: Record<ServerPropertyKey, ServerPropertySpec> = {\n \"server-name\": { group: \"basic\", type: \"string\" },\n \"level-name\": { group: \"basic\", type: \"string\" },\n \"level-seed\": { group: \"basic\", type: \"string\" },\n \"gamemode\": { group: \"basic\", type: \"enum\", values: [\"survival\", \"creative\", \"adventure\"] },\n \"force-gamemode\": { group: \"basic\", type: \"boolean\" },\n \"difficulty\": { group: \"basic\", type: \"enum\", values: [\"peaceful\", \"easy\", \"normal\", \"hard\"] },\n \"allow-cheats\": { group: \"basic\", type: \"boolean\" },\n\n \"max-players\": { group: \"player\", type: \"integer\", min: 1 },\n \"online-mode\": { group: \"player\", type: \"boolean\" },\n \"allow-list\": { group: \"player\", type: \"boolean\" },\n \"white-list\": { group: \"player\", type: \"boolean\" },\n \"default-player-permission-level\": { group: \"player\", type: \"enum\", values: [\"visitor\", \"member\", \"operator\"] },\n \"player-idle-timeout\": { group: \"player\", type: \"integer\", min: 0 },\n \"texturepack-required\": { group: \"player\", type: \"boolean\" },\n \"chat-restriction\": { group: \"player\", type: \"enum\", values: [\"None\", \"Dropped\", \"Disabled\"] },\n \"disable-player-interaction\": { group: \"player\", type: \"boolean\" },\n \"disable-persona\": { group: \"player\", type: \"boolean\" },\n \"disable-custom-skins\": { group: \"player\", type: \"boolean\" },\n\n \"server-port\": { group: \"network\", type: \"integer\", ...PORT_RANGE },\n \"server-portv6\": { group: \"network\", type: \"integer\", ...PORT_RANGE },\n \"enable-lan-visibility\": { group: \"network\", type: \"boolean\" },\n \"transport\": { group: \"network\", type: \"string\" },\n \"compression-threshold\": { group: \"network\", type: \"integer\", min: 0, max: 65535 },\n \"compression-algorithm\": { group: \"network\", type: \"enum\", values: [\"zlib\", \"snappy\"] },\n \"websocket-retry-time\": { group: \"network\", type: \"integer\", min: 1 },\n\n \"view-distance\": { group: \"performance\", type: \"integer\", min: 5 },\n \"tick-distance\": { group: \"performance\", type: \"integer\", min: 4, max: 12 },\n \"max-threads\": { group: \"performance\", type: \"integer\", min: 0 },\n \"client-side-chunk-generation-enabled\": { group: \"performance\", type: \"boolean\" },\n \"block-network-ids-are-hashes\": { group: \"performance\", type: \"boolean\" },\n \"server-build-radius-ratio\": { group: \"performance\", type: \"string\" },\n\n \"server-authoritative-movement\": { group: \"movement\", type: \"enum\", values: [\"server-auth\", \"client-auth\"] },\n \"player-movement-score-threshold\": { group: \"movement\", type: \"integer\" },\n \"player-movement-action-direction-threshold\": { group: \"movement\", type: \"number\" },\n \"player-movement-distance-threshold\": { group: \"movement\", type: \"number\" },\n \"player-movement-duration-threshold-in-ms\": { group: \"movement\", type: \"integer\", min: 0 },\n \"correct-player-movement\": { group: \"movement\", type: \"boolean\" },\n \"server-authoritative-block-breaking\": { group: \"movement\", type: \"string\" },\n\n \"allow-outbound-script-debugging\": { group: \"script\", type: \"boolean\" },\n \"allow-inbound-script-debugging\": { group: \"script\", type: \"boolean\" },\n \"force-inbound-debug-port\": { group: \"script\", type: \"integer\", ...PORT_RANGE },\n \"script-debugger-auto-attach\": { group: \"script\", type: \"enum\", values: [\"disabled\", \"connect\", \"listen\"] },\n \"script-debugger-auto-attach-connect-address\": { group: \"script\", type: \"string\" },\n\n \"content-log-file-enabled\": { group: \"diagnostics\", type: \"boolean\" },\n \"content-log-console-output-enabled\": { group: \"diagnostics\", type: \"boolean\" },\n \"emit-server-telemetry\": { group: \"diagnostics\", type: \"boolean\" },\n};\n\n/**\n * \u8868\u5355\u5B57\u6BB5\u63CF\u8FF0\u3002\u7ED3\u6784\u4E0E @sfmc-bds/management \u7684 ConfigFormField \u76F8\u540C\uFF08\u672C\u5305\u4E0D\u4F9D\u8D56\u7BA1\u7406\u534F\u8BAE\u5305\uFF09\u3002\n * \u4F7F\u7528\u573A\u666F\uFF1AserverPropertyFormFields \u7684\u8FD4\u56DE\u503C\uFF0C\u7531\u5E73\u53F0\u653E\u8FDB ConfigDocument.fields\u3002\n */\nexport interface ServerPropertyFormField {\n key: string;\n label?: string;\n description?: string;\n kind: \"boolean\" | \"number\" | \"string\" | \"enum\";\n options?: { value: string; label: string }[];\n min?: number;\n max?: number;\n integer?: boolean;\n group?: string;\n}\n\n/**\n * \u751F\u6210 server.properties \u7684\u5B8C\u6574\u8868\u5355\u5B57\u6BB5\u6E05\u5355\uFF08\u6309 SERVER_PROPERTY_SPECS \u7684\u987A\u5E8F\uFF09\u3002\n * \u8BF4\u660E\u6587\u5B57\uFF1A\u5F00\u5173\u4E0E\u679A\u4E3E\u7531\u63A7\u4EF6\u8868\u8FBE\u53D6\u503C\uFF0C\u53EA\u62FC\u6982\u8FF0\u4E0E\u63D0\u793A\uFF1B\u6587\u672C\u4E0E\u6570\u5B57\u53E6\u9644\u5B57\u5178\u4E2D\u7684\u53D6\u503C\u8BF4\u660E\u3002\n * \u76EE\u6807\u8BED\u8A00\u6CA1\u6709\u5B57\u5178\u65F6\uFF0C\u540D\u79F0\u3001\u8BF4\u660E\u7F3A\u7701\uFF08\u754C\u9762\u56DE\u9000\u663E\u793A key\uFF09\uFF0C\u5206\u7EC4\u540D\u56DE\u9000\u4E3A\u5206\u7EC4\u6807\u8BC6\u3002\n */\nexport function serverPropertyFormFields(locale: string = \"zh-CN\"): ServerPropertyFormField[] {\n return (Object.entries(SERVER_PROPERTY_SPECS) as [ServerPropertyKey, ServerPropertySpec][]).map(([key, spec]) => {\n const doc = getServerPropertyDoc(key, locale);\n const controlShowsValues = spec.type === \"boolean\" || spec.type === \"enum\";\n const description = doc\n ? [doc.desc, !controlShowsValues && doc.values ? `\u53D6\u503C\uFF1A${doc.values}` : \"\", doc.tip ? `\u63D0\u793A\uFF1A${doc.tip}` : \"\"].filter(Boolean).join(\"\u3002\")\n : undefined;\n const field: ServerPropertyFormField = {\n key,\n kind: spec.type === \"integer\" ? \"number\" : spec.type,\n group: getServerPropertyGroupLabel(spec.group, locale) ?? spec.group,\n ...(doc ? { label: doc.label } : {}),\n ...(description ? { description } : {}),\n ...(spec.type === \"integer\" ? { integer: true } : spec.type === \"number\" ? { integer: false } : {}),\n ...(spec.min !== undefined ? { min: spec.min } : {}),\n ...(spec.max !== undefined ? { max: spec.max } : {}),\n };\n if (spec.type === \"enum\") field.options = (spec.values ?? []).map((value) => ({ value, label: doc?.options?.[value] ?? value }));\n return field;\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,17 +1,321 @@
1
1
  /**
2
2
  * server-properties-i18n.ts — BDS server.properties 多语言注释字典
3
+ *
4
+ * 使用场景:
5
+ * 1. server-properties.ts 把 server.properties 注释本地化(用 desc / values / tip);
6
+ * 2. server-properties-fields.ts 为配置页生成表单字段(另用 label / options 与分组名)。
3
7
  */
4
8
  export interface ServerPropertyDoc {
9
+ /** 表单中显示的简短名称 */
10
+ label: string;
5
11
  /** 中文功能概述 */
6
12
  desc: string;
7
13
  /** 合法取值与枚举说明 */
8
14
  values?: string;
9
15
  /** 避坑、性能或安全性提示 */
10
16
  tip?: string;
17
+ /** 枚举取值 → 展示名;取值清单本身以 server-properties-fields.ts 为准 */
18
+ options?: Record<string, string>;
11
19
  }
12
- export declare const SERVER_PROPERTIES_DOCS_ZH_CN: Record<string, ServerPropertyDoc>;
20
+ export declare const SERVER_PROPERTIES_DOCS_ZH_CN: {
21
+ transport: {
22
+ label: string;
23
+ desc: string;
24
+ values: string;
25
+ };
26
+ "server-name": {
27
+ label: string;
28
+ desc: string;
29
+ values: string;
30
+ };
31
+ gamemode: {
32
+ label: string;
33
+ desc: string;
34
+ values: string;
35
+ options: {
36
+ survival: string;
37
+ creative: string;
38
+ adventure: string;
39
+ };
40
+ };
41
+ "force-gamemode": {
42
+ label: string;
43
+ desc: string;
44
+ values: string;
45
+ };
46
+ difficulty: {
47
+ label: string;
48
+ desc: string;
49
+ values: string;
50
+ options: {
51
+ peaceful: string;
52
+ easy: string;
53
+ normal: string;
54
+ hard: string;
55
+ };
56
+ };
57
+ "allow-cheats": {
58
+ label: string;
59
+ desc: string;
60
+ values: string;
61
+ tip: string;
62
+ };
63
+ "max-players": {
64
+ label: string;
65
+ desc: string;
66
+ values: string;
67
+ };
68
+ "online-mode": {
69
+ label: string;
70
+ desc: string;
71
+ values: string;
72
+ tip: string;
73
+ };
74
+ "white-list": {
75
+ label: string;
76
+ desc: string;
77
+ values: string;
78
+ };
79
+ "allow-list": {
80
+ label: string;
81
+ desc: string;
82
+ values: string;
83
+ };
84
+ "server-port": {
85
+ label: string;
86
+ desc: string;
87
+ values: string;
88
+ };
89
+ "server-portv6": {
90
+ label: string;
91
+ desc: string;
92
+ values: string;
93
+ };
94
+ "enable-lan-visibility": {
95
+ label: string;
96
+ desc: string;
97
+ values: string;
98
+ };
99
+ "view-distance": {
100
+ label: string;
101
+ desc: string;
102
+ values: string;
103
+ };
104
+ "tick-distance": {
105
+ label: string;
106
+ desc: string;
107
+ values: string;
108
+ };
109
+ "player-idle-timeout": {
110
+ label: string;
111
+ desc: string;
112
+ values: string;
113
+ };
114
+ "max-threads": {
115
+ label: string;
116
+ desc: string;
117
+ values: string;
118
+ };
119
+ "level-name": {
120
+ label: string;
121
+ desc: string;
122
+ values: string;
123
+ };
124
+ "level-seed": {
125
+ label: string;
126
+ desc: string;
127
+ values: string;
128
+ };
129
+ "default-player-permission-level": {
130
+ label: string;
131
+ desc: string;
132
+ values: string;
133
+ options: {
134
+ visitor: string;
135
+ member: string;
136
+ operator: string;
137
+ };
138
+ };
139
+ "texturepack-required": {
140
+ label: string;
141
+ desc: string;
142
+ values: string;
143
+ };
144
+ "content-log-file-enabled": {
145
+ label: string;
146
+ desc: string;
147
+ values: string;
148
+ };
149
+ "content-log-console-output-enabled": {
150
+ label: string;
151
+ desc: string;
152
+ values: string;
153
+ tip: string;
154
+ };
155
+ "compression-threshold": {
156
+ label: string;
157
+ desc: string;
158
+ values: string;
159
+ };
160
+ "compression-algorithm": {
161
+ label: string;
162
+ desc: string;
163
+ values: string;
164
+ options: {
165
+ zlib: string;
166
+ snappy: string;
167
+ };
168
+ };
169
+ "server-authoritative-movement": {
170
+ label: string;
171
+ desc: string;
172
+ values: string;
173
+ options: {
174
+ "server-auth": string;
175
+ "client-auth": string;
176
+ };
177
+ };
178
+ "player-movement-score-threshold": {
179
+ label: string;
180
+ desc: string;
181
+ values: string;
182
+ };
183
+ "player-movement-action-direction-threshold": {
184
+ label: string;
185
+ desc: string;
186
+ values: string;
187
+ };
188
+ "player-movement-distance-threshold": {
189
+ label: string;
190
+ desc: string;
191
+ values: string;
192
+ };
193
+ "player-movement-duration-threshold-in-ms": {
194
+ label: string;
195
+ desc: string;
196
+ values: string;
197
+ };
198
+ "correct-player-movement": {
199
+ label: string;
200
+ desc: string;
201
+ values: string;
202
+ };
203
+ "server-authoritative-block-breaking": {
204
+ label: string;
205
+ desc: string;
206
+ values: string;
207
+ };
208
+ "chat-restriction": {
209
+ label: string;
210
+ desc: string;
211
+ values: string;
212
+ options: {
213
+ None: string;
214
+ Dropped: string;
215
+ Disabled: string;
216
+ };
217
+ };
218
+ "disable-player-interaction": {
219
+ label: string;
220
+ desc: string;
221
+ values: string;
222
+ };
223
+ "client-side-chunk-generation-enabled": {
224
+ label: string;
225
+ desc: string;
226
+ values: string;
227
+ };
228
+ "block-network-ids-are-hashes": {
229
+ label: string;
230
+ desc: string;
231
+ values: string;
232
+ };
233
+ "disable-persona": {
234
+ label: string;
235
+ desc: string;
236
+ values: string;
237
+ };
238
+ "disable-custom-skins": {
239
+ label: string;
240
+ desc: string;
241
+ values: string;
242
+ };
243
+ "emit-server-telemetry": {
244
+ label: string;
245
+ desc: string;
246
+ values: string;
247
+ tip: string;
248
+ };
249
+ "server-build-radius-ratio": {
250
+ label: string;
251
+ desc: string;
252
+ values: string;
253
+ };
254
+ "allow-outbound-script-debugging": {
255
+ label: string;
256
+ desc: string;
257
+ values: string;
258
+ tip: string;
259
+ };
260
+ "allow-inbound-script-debugging": {
261
+ label: string;
262
+ desc: string;
263
+ values: string;
264
+ tip: string;
265
+ };
266
+ "force-inbound-debug-port": {
267
+ label: string;
268
+ desc: string;
269
+ values: string;
270
+ };
271
+ "script-debugger-auto-attach": {
272
+ label: string;
273
+ desc: string;
274
+ values: string;
275
+ options: {
276
+ disabled: string;
277
+ connect: string;
278
+ listen: string;
279
+ };
280
+ };
281
+ "script-debugger-auto-attach-connect-address": {
282
+ label: string;
283
+ desc: string;
284
+ values: string;
285
+ };
286
+ "websocket-retry-time": {
287
+ label: string;
288
+ desc: string;
289
+ values: string;
290
+ };
291
+ };
292
+ /**
293
+ * 字典收录的属性键。
294
+ * 使用场景:server-properties-fields.ts 以它约束字段清单,漏写或多写键时编译期报错。
295
+ */
296
+ export type ServerPropertyKey = keyof typeof SERVER_PROPERTIES_DOCS_ZH_CN;
297
+ /**
298
+ * 表单分组标识 → 中文分组名。
299
+ * 使用场景:server-properties-fields.ts 生成表单字段时填写 group。
300
+ */
301
+ export declare const SERVER_PROPERTY_GROUPS_ZH_CN: {
302
+ readonly basic: "基本";
303
+ readonly player: "玩家";
304
+ readonly network: "网络";
305
+ readonly performance: "性能";
306
+ readonly movement: "反作弊";
307
+ readonly script: "脚本调试";
308
+ readonly diagnostics: "诊断";
309
+ };
310
+ /** 表单分组标识 */
311
+ export type ServerPropertyGroup = keyof typeof SERVER_PROPERTY_GROUPS_ZH_CN;
13
312
  /**
14
313
  * 根据属性 key 和目标语言获取说明文档
15
314
  */
16
315
  export declare function getServerPropertyDoc(key: string, locale?: string): ServerPropertyDoc | undefined;
316
+ /**
317
+ * 根据分组标识和目标语言获取分组名;没有对应语言时返回 undefined。
318
+ * 使用场景:server-properties-fields.ts 生成表单字段。
319
+ */
320
+ export declare function getServerPropertyGroupLabel(group: ServerPropertyGroup, locale?: string): string | undefined;
17
321
  //# sourceMappingURL=server-properties-i18n.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-properties-i18n.d.ts","sourceRoot":"","sources":["../src/server-properties-i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA2L1E,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAgB,GAAG,iBAAiB,GAAG,SAAS,CAQzG"}
1
+ {"version":3,"file":"server-properties-i18n.d.ts","sourceRoot":"","sources":["../src/server-properties-i18n.ts"],"names":[],"mappings":"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"}