-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstop.js
More file actions
104 lines (86 loc) · 2.81 KB
/
stop.js
File metadata and controls
104 lines (86 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
let Core = Packages.ws.siri.Core;
let net = Packages.ws.siri.jscore.mapping.JSPackage.getRoot().net;
let MinecraftClient = net.minecraft.client.MinecraftClient;
let Text = net.minecraft.text.Text;
let LoggerFactory = org.slf4j.LoggerFactory;
let logger = LoggerFactory.getLogger(Core.MOD_ID);
function error(content) {
content ??= "";
logger.error(content);
if (MinecraftClient.getInstance().player != null) {
MinecraftClient.getInstance()
.inGameHud.getChatHud()
.addMessage(Text.literal("\u00A7c" + content));
}
}
let Files = Packages.java.nio.file.Files;
let FabricLoader = Packages.net.fabricmc.loader.api.FabricLoader;
let modulesPath = FabricLoader.getInstance()
.getConfigDir()
.resolve("jscore")
.resolve("modules");
// taken from pully
function order(manifests) {
for (let key of Object.keys(manifests)) {
for (let dep of Object.keys(manifests[key].dependencies ?? {})) {
delete manifests[key].dependencies[dep];
}
}
let order = [];
while (Object.keys(manifests).length != 0) {
let passLoaded = [];
for (let key of Object.keys(manifests)) {
if (Object.keys(manifests[key].dependencies).length == 0) {
passLoaded.push(key);
order.push(key);
delete manifests[key];
}
}
if (passLoaded.length == 0) {
error(
`There is a dependency cycle, the following modules will not be stopped in the correct order ${Object.keys(manifests)}`,
);
break;
}
}
return [order, manifests];
}
function stop(moduleName) {
if (
module.globals == undefined ||
module.globals.loadedModules == undefined
)
return;
if (
module.globals.loadedModules[moduleName] &&
(Files.exists(modulesPath.resolve(moduleName).resolve("stop.js")) ||
Files.exists(
modulesPath
.resolve(moduleName)
.resolve("stop")
.resolve("index.js"),
))
) {
module.require(`/modules/${moduleName}/stop`);
}
}
function getLocalManifests() {
let packages = Files.list(modulesPath).toList();
let out = {};
for (let package of packages) {
let manifestContent = Files.readString(
modulesPath.resolve(package).resolve("package.json"),
);
let manifestJSON = JSON.parse(manifestContent);
out[package.getFileName()] = manifestJSON;
}
return out;
}
let [stopOrder, remaining] = order(getLocalManifests());
for (let name of Object.keys(remaining).concat(stopOrder.reverse())) {
try {
stop(name);
} catch (e) {
error(`An error occured when running stop for ${name}. Cause: ${e}`);
}
}