Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sisilicon
GitHub Repository: sisilicon/worldedit-be
Path: blob/master/tools/process_config.mjs
1780 views
1
import fs from "fs";
2
import { ensureDir, exitMessage } from "./utils.mjs";
3
4
function valueToString(value) {
5
if (typeof value === "string") return `"${value}"`;
6
return value;
7
}
8
9
function generateScript(settings, version, isServer) {
10
let result = isServer ? 'import { variables } from "@minecraft/server-admin";\n\n' : "";
11
12
result += "export default {\n";
13
for (const [name, data] of Object.entries(settings)) {
14
if (isServer) {
15
result += ` ${name}: variables.get("${name}") || ${valueToString(data.default)},\n`;
16
} else {
17
result += " /**\n";
18
for (const line of data.description.split(/\r?\n/)) result += ` * ${line}\n`;
19
result += " */\n";
20
result += ` ${name}: ${valueToString(data.default)},\n`;
21
}
22
}
23
result += "};\n\n";
24
25
result += ["// WorldEdit version (do not change)", `export const VERSION = "${version}";`].join("\n").replace(/\n/g, "\r\n");
26
return result;
27
}
28
29
function generateVariables(settings) {
30
const result = [];
31
for (const [name, data] of Object.entries(settings)) {
32
let variable = "\n /**\n";
33
for (const line of data.description.split(/\r?\n/)) variable += ` * ${line}\n`;
34
variable += " */\n";
35
variable += ` "${name}": ${valueToString(data.default)}`;
36
result.push(variable);
37
}
38
return ("{" + result.join(",") + "\n}").replace(/\n/g, "\r\n");
39
}
40
41
function processConfig(args) {
42
// load settings file
43
if (!fs.existsSync("worldedit_settings.json")) exitMessage("Settings file 'worldedit_settings.json' not found");
44
const loaded = JSON.parse(fs.readFileSync("worldedit_settings.json"));
45
const settings = {
46
debug: {
47
description: "Enables debug messages to content logs.",
48
default: args.target === "debug",
49
},
50
...loaded,
51
};
52
53
// load addon version
54
if (!fs.existsSync("mc_manifest.json")) exitMessage("Manifest file 'mc_manifest.json' not found");
55
const manifest = JSON.parse(fs.readFileSync("mc_manifest.json"));
56
const version = manifest.header.version;
57
const isServer = args.watch === "server" || args.target === "server";
58
59
// Generate BP/scripts/config.js
60
fs.writeFileSync("BP/scripts/config.js", generateScript(settings, version, isServer), "utf8");
61
// Generate builds/variables.json
62
if (isServer) {
63
ensureDir("builds");
64
fs.writeFileSync("builds/variables.json", generateVariables(settings), "utf8");
65
}
66
}
67
68
export default function (args) {
69
processConfig(args);
70
if (args.watch)
71
fs.watch(".", { persistent: true }, (eventType, filename) => {
72
if (filename === "worldedit_settings.json" || filename === "mc_manifest.json") processConfig(args);
73
});
74
}
75
76