omegga 1.2.9 → 1.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.
- package/README.md +20 -1
- package/dist/brickadia/config.js +26 -90
- package/dist/brickadia/config.js.map +1 -1
- package/dist/brickadia/server.js +294 -293
- package/dist/brickadia/server.js.map +1 -1
- package/dist/cli/auth.js +149 -177
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/config.js +64 -66
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +14 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installer.js +37 -43
- package/dist/cli/installer.js.map +1 -1
- package/dist/cli/plugin.js +651 -682
- package/dist/cli/plugin.js.map +1 -1
- package/dist/cli/terminal.js +811 -733
- package/dist/cli/terminal.js.map +1 -1
- package/dist/config/formats/format_js.js +6 -6
- package/dist/config/formats/format_js.js.map +1 -1
- package/dist/config/formats/format_yml.js +7 -10
- package/dist/config/formats/format_yml.js.map +1 -1
- package/dist/config/index.js +46 -68
- package/dist/config/index.js.map +1 -1
- package/dist/config/reader.js +16 -27
- package/dist/config/reader.js.map +1 -1
- package/dist/config/validator.js +23 -25
- package/dist/config/validator.js.map +1 -1
- package/dist/config/writer.js +11 -21
- package/dist/config/writer.js.map +1 -1
- package/dist/index.js +18 -64
- package/dist/index.js.map +1 -1
- package/dist/info/default_commands.json.js +39 -0
- package/dist/info/default_commands.json.js.map +1 -0
- package/dist/logger.js +61 -60
- package/dist/logger.js.map +1 -1
- package/dist/main.js +424 -471
- package/dist/main.js.map +1 -1
- package/dist/omegga/auth.js +101 -148
- package/dist/omegga/auth.js.map +1 -1
- package/dist/omegga/commandInjector.js +261 -251
- package/dist/omegga/commandInjector.js.map +1 -1
- package/dist/omegga/index.js +14 -52
- package/dist/omegga/index.js.map +1 -1
- package/dist/omegga/logWrangler.js +224 -275
- package/dist/omegga/logWrangler.js.map +1 -1
- package/dist/omegga/matchers/auth.js +36 -50
- package/dist/omegga/matchers/auth.js.map +1 -1
- package/dist/omegga/matchers/chat.js +49 -71
- package/dist/omegga/matchers/chat.js.map +1 -1
- package/dist/omegga/matchers/command.js +25 -36
- package/dist/omegga/matchers/command.js.map +1 -1
- package/dist/omegga/matchers/exit.js +15 -18
- package/dist/omegga/matchers/exit.js.map +1 -1
- package/dist/omegga/matchers/index.js +26 -40
- package/dist/omegga/matchers/index.js.map +1 -1
- package/dist/omegga/matchers/init.js +20 -23
- package/dist/omegga/matchers/init.js.map +1 -1
- package/dist/omegga/matchers/interact.js +58 -64
- package/dist/omegga/matchers/interact.js.map +1 -1
- package/dist/omegga/matchers/join.js +74 -95
- package/dist/omegga/matchers/join.js.map +1 -1
- package/dist/omegga/matchers/leave.js +43 -56
- package/dist/omegga/matchers/leave.js.map +1 -1
- package/dist/omegga/matchers/mapChange.js +26 -35
- package/dist/omegga/matchers/mapChange.js.map +1 -1
- package/dist/omegga/matchers/minigameJoin.js +24 -31
- package/dist/omegga/matchers/minigameJoin.js.map +1 -1
- package/dist/omegga/matchers/version.js +42 -49
- package/dist/omegga/matchers/version.js.map +1 -1
- package/dist/omegga/player.js +527 -527
- package/dist/omegga/player.js.map +1 -1
- package/dist/omegga/plugin/interface.js +91 -98
- package/dist/omegga/plugin/interface.js.map +1 -1
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +524 -429
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +282 -294
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_safe.js +365 -393
- package/dist/omegga/plugin/plugin_node_safe.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_unsafe.js +119 -179
- package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -1
- package/dist/omegga/plugin.js +402 -347
- package/dist/omegga/plugin.js.map +1 -1
- package/dist/omegga/server.js +742 -774
- package/dist/omegga/server.js.map +1 -1
- package/dist/omegga/wrapper.js +64 -91
- package/dist/omegga/wrapper.js.map +1 -1
- package/dist/plugin.js +11 -31
- package/dist/plugin.js.map +1 -1
- package/dist/softconfig.js +121 -100
- package/dist/softconfig.js.map +1 -1
- package/dist/updater/steam.js +97 -112
- package/dist/updater/steam.js.map +1 -1
- package/dist/util/brdb.js +496 -528
- package/dist/util/brdb.js.map +1 -1
- package/dist/util/brick/checkBounds.js +11 -15
- package/dist/util/brick/checkBounds.js.map +1 -1
- package/dist/util/brick/constants.js +723 -174
- package/dist/util/brick/constants.js.map +1 -1
- package/dist/util/brick/displayName.js +204 -211
- package/dist/util/brick/displayName.js.map +1 -1
- package/dist/util/brick/getBounds.js +29 -41
- package/dist/util/brick/getBounds.js.map +1 -1
- package/dist/util/brick/getBrickSize.js +6 -7
- package/dist/util/brick/getBrickSize.js.map +1 -1
- package/dist/util/brick/getScaleAxis.js +24 -30
- package/dist/util/brick/getScaleAxis.js.map +1 -1
- package/dist/util/brick/index.js +8 -29
- package/dist/util/brick/index.js.map +1 -1
- package/dist/util/brick/rotate.js +29 -34
- package/dist/util/brick/rotate.js.map +1 -1
- package/dist/util/brick/setOwnership.js +13 -19
- package/dist/util/brick/setOwnership.js.map +1 -1
- package/dist/util/chat.js +53 -44
- package/dist/util/chat.js.map +1 -1
- package/dist/util/color.js +112 -124
- package/dist/util/color.js.map +1 -1
- package/dist/util/file.js +54 -98
- package/dist/util/file.js.map +1 -1
- package/dist/util/index.js +84 -106
- package/dist/util/index.js.map +1 -1
- package/dist/util/map.js +18 -20
- package/dist/util/map.js.map +1 -1
- package/dist/util/pattern.js +6 -9
- package/dist/util/pattern.js.map +1 -1
- package/dist/util/time.js +31 -34
- package/dist/util/time.js.map +1 -1
- package/dist/util/uuid.js +10 -8
- package/dist/util/uuid.js.map +1 -1
- package/dist/util/wsl.js +19 -25
- package/dist/util/wsl.js.map +1 -1
- package/dist/version.js +7 -9
- package/dist/version.js.map +1 -1
- package/dist/webserver/backend/api.js +784 -874
- package/dist/webserver/backend/api.js.map +1 -1
- package/dist/webserver/backend/calendar.js +14 -17
- package/dist/webserver/backend/calendar.js.map +1 -1
- package/dist/webserver/backend/database.js +563 -613
- package/dist/webserver/backend/database.js.map +1 -1
- package/dist/webserver/backend/index.js +153 -191
- package/dist/webserver/backend/index.js.map +1 -1
- package/dist/webserver/backend/metrics.js +219 -248
- package/dist/webserver/backend/metrics.js.map +1 -1
- package/dist/webserver/backend/util.js +47 -68
- package/dist/webserver/backend/util.js.map +1 -1
- package/dist/worker.js +322 -0
- package/dist/worker.js.map +1 -0
- package/package.json +14 -10
- package/templates/safe-ts/omegga.d.ts +1 -1
- package/vite.backend.config.mts +46 -0
- package/vite.frontend.config.mts +58 -0
- package/vitest.backend.config.mts +7 -0
- package/dist/brickadia/config.d.ts +0 -3
- package/dist/brickadia/presets.d.ts +0 -65
- package/dist/brickadia/presets.js +0 -3
- package/dist/brickadia/presets.js.map +0 -1
- package/dist/brickadia/server.d.ts +0 -36
- package/dist/brickadia/types.d.ts +0 -45
- package/dist/brickadia/types.js +0 -3
- package/dist/brickadia/types.js.map +0 -1
- package/dist/cli/auth.d.ts +0 -26
- package/dist/cli/config.d.ts +0 -10
- package/dist/cli/index.d.ts +0 -30
- package/dist/cli/installer.d.ts +0 -1
- package/dist/cli/plugin.d.ts +0 -22
- package/dist/cli/terminal.d.ts +0 -25
- package/dist/config/authorizer.d.ts +0 -2
- package/dist/config/authorizer.js +0 -38
- package/dist/config/authorizer.js.map +0 -1
- package/dist/config/formats/format_js.d.ts +0 -3
- package/dist/config/formats/format_yml.d.ts +0 -3
- package/dist/config/index.d.ts +0 -18
- package/dist/config/reader.d.ts +0 -3
- package/dist/config/types.d.ts +0 -50
- package/dist/config/types.js +0 -3
- package/dist/config/types.js.map +0 -1
- package/dist/config/validator.d.ts +0 -6
- package/dist/config/writer.d.ts +0 -3
- package/dist/index.d.ts +0 -22
- package/dist/info/default_commands.json +0 -29
- package/dist/logger.d.ts +0 -41
- package/dist/main.d.ts +0 -1
- package/dist/omegga/auth.d.ts +0 -9
- package/dist/omegga/commandInjector.d.ts +0 -35
- package/dist/omegga/index.d.ts +0 -7
- package/dist/omegga/logWrangler.d.ts +0 -32
- package/dist/omegga/matchers/auth.d.ts +0 -10
- package/dist/omegga/matchers/chat.d.ts +0 -10
- package/dist/omegga/matchers/command.d.ts +0 -7
- package/dist/omegga/matchers/exit.d.ts +0 -3
- package/dist/omegga/matchers/index.d.ts +0 -3
- package/dist/omegga/matchers/init.d.ts +0 -3
- package/dist/omegga/matchers/interact.d.ts +0 -4
- package/dist/omegga/matchers/join.d.ts +0 -4
- package/dist/omegga/matchers/leave.d.ts +0 -4
- package/dist/omegga/matchers/mapChange.d.ts +0 -3
- package/dist/omegga/matchers/minigameJoin.d.ts +0 -9
- package/dist/omegga/matchers/types.d.ts +0 -5
- package/dist/omegga/matchers/types.js +0 -3
- package/dist/omegga/matchers/types.js.map +0 -1
- package/dist/omegga/matchers/version.d.ts +0 -3
- package/dist/omegga/player.d.ts +0 -81
- package/dist/omegga/plugin/interface.d.ts +0 -30
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +0 -23
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +0 -145
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +0 -1
- package/dist/omegga/plugin/plugin_node_safe/worker.js +0 -367
- package/dist/omegga/plugin/plugin_node_safe/worker.js.map +0 -1
- package/dist/omegga/plugin/plugin_node_safe.d.ts +0 -23
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts +0 -13
- package/dist/omegga/plugin.d.ts +0 -63
- package/dist/omegga/server.d.ts +0 -166
- package/dist/omegga/types.d.ts +0 -49
- package/dist/omegga/types.js +0 -3
- package/dist/omegga/types.js.map +0 -1
- package/dist/omegga/wrapper.d.ts +0 -32
- package/dist/plugin.d.ts +0 -916
- package/dist/softconfig.d.ts +0 -67
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/updater/index.d.ts +0 -1
- package/dist/updater/index.js +0 -10
- package/dist/updater/index.js.map +0 -1
- package/dist/updater/steam.d.ts +0 -52
- package/dist/util/brdb.d.ts +0 -31
- package/dist/util/brick/checkBounds.d.ts +0 -8
- package/dist/util/brick/constants.d.ts +0 -18
- package/dist/util/brick/displayName.d.ts +0 -7
- package/dist/util/brick/getBounds.d.ts +0 -5
- package/dist/util/brick/getBrickSize.d.ts +0 -3
- package/dist/util/brick/getScaleAxis.d.ts +0 -3
- package/dist/util/brick/index.d.ts +0 -14
- package/dist/util/brick/rotate.d.ts +0 -16
- package/dist/util/brick/setOwnership.d.ts +0 -12
- package/dist/util/chat.d.ts +0 -23
- package/dist/util/color.d.ts +0 -13
- package/dist/util/file.d.ts +0 -5
- package/dist/util/index.d.ts +0 -183
- package/dist/util/map.d.ts +0 -6
- package/dist/util/pattern.d.ts +0 -1
- package/dist/util/time.d.ts +0 -39
- package/dist/util/uuid.d.ts +0 -3
- package/dist/util/wsl.d.ts +0 -2
- package/dist/version.d.ts +0 -2
- package/dist/webserver/backend/api.d.ts +0 -115
- package/dist/webserver/backend/calendar.d.ts +0 -5
- package/dist/webserver/backend/database.d.ts +0 -150
- package/dist/webserver/backend/index.d.ts +0 -30
- package/dist/webserver/backend/metrics.d.ts +0 -3
- package/dist/webserver/backend/types.d.ts +0 -114
- package/dist/webserver/backend/types.js +0 -3
- package/dist/webserver/backend/types.js.map +0 -1
- package/dist/webserver/backend/util.d.ts +0 -2
- package/dist/webserver/index.d.ts +0 -2
- package/dist/webserver/index.js +0 -9
- package/dist/webserver/index.js.map +0 -1
|
@@ -1,447 +1,542 @@
|
|
|
1
1
|
"use strict";
|
|
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
|
-
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const logger = require("../../logger.js");
|
|
4
|
+
const jsonRpc2_0 = require("json-rpc-2.0");
|
|
5
|
+
const node_child_process = require("node:child_process");
|
|
6
|
+
const fs = require("node:fs");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
const readline = require("readline");
|
|
9
|
+
const _interface = require("./interface.js");
|
|
10
|
+
const proxyOmegga = require("./plugin_node_safe/proxyOmegga.js");
|
|
11
|
+
const MAIN_FILE = "omegga_plugin";
|
|
12
|
+
const DOC_FILE = "doc.json";
|
|
13
|
+
const PLUGIN_FILE = "plugin.json";
|
|
14
|
+
class RpcPlugin extends _interface.Plugin {
|
|
15
|
+
#child;
|
|
16
|
+
#rpc;
|
|
17
|
+
#errInterface;
|
|
18
|
+
#outInterface;
|
|
19
|
+
// all RPC plugins require a main (binary) file and a doc file
|
|
20
|
+
static canLoad(pluginPath) {
|
|
21
|
+
return fs.existsSync(path.join(pluginPath, MAIN_FILE)) && fs.existsSync(path.join(pluginPath, DOC_FILE));
|
|
22
|
+
}
|
|
23
|
+
// websocket rpc plugin type
|
|
24
|
+
static getFormat() {
|
|
25
|
+
return "jsonrpc_stdio";
|
|
26
|
+
}
|
|
27
|
+
// documentation is based on doc.json file
|
|
28
|
+
getDocumentation() {
|
|
29
|
+
return this.documentation;
|
|
30
|
+
}
|
|
31
|
+
constructor(pluginPath, omegga) {
|
|
32
|
+
super(pluginPath, omegga);
|
|
33
|
+
this.messageCounter = 0;
|
|
34
|
+
this.documentation = _interface.Plugin.readJSON(path.join(pluginPath, DOC_FILE));
|
|
35
|
+
this.pluginConfig = _interface.Plugin.readJSON(path.join(pluginPath, PLUGIN_FILE));
|
|
36
|
+
this.pluginFile = path.join(pluginPath, MAIN_FILE);
|
|
37
|
+
this.eventPassthrough = this.eventPassthrough.bind(this);
|
|
38
|
+
this.commands = [];
|
|
39
|
+
this.initRPC();
|
|
40
|
+
}
|
|
41
|
+
isLoaded() {
|
|
42
|
+
return !!this.#child && !this.#child.exitCode;
|
|
43
|
+
}
|
|
44
|
+
// determing if a command is registered
|
|
45
|
+
isCommand(cmd) {
|
|
46
|
+
return this.commands.includes(cmd);
|
|
47
|
+
}
|
|
48
|
+
// spawn the plugin as a child process
|
|
49
|
+
async load() {
|
|
50
|
+
const name = this.getName();
|
|
51
|
+
const verbose = (...msg) => logger.default.verbose(name.underline, ...msg);
|
|
52
|
+
verbose("Load method invoked");
|
|
53
|
+
let frozen = true, timed = false;
|
|
54
|
+
this.commands = [];
|
|
55
|
+
if (this.#child) {
|
|
56
|
+
verbose("Plugin already has child process");
|
|
57
|
+
return false;
|
|
37
58
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
let config;
|
|
60
|
+
try {
|
|
61
|
+
verbose("Getting plugin config");
|
|
62
|
+
config = await this.storage.getConfig();
|
|
63
|
+
} catch (e) {
|
|
64
|
+
return false;
|
|
41
65
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
66
|
+
try {
|
|
67
|
+
if (this.pluginConfig?.emitConfig) {
|
|
68
|
+
verbose("Emitting plugin config");
|
|
69
|
+
await fs.promises.writeFile(
|
|
70
|
+
path.join(this.path, this.pluginConfig.emitConfig),
|
|
71
|
+
JSON.stringify(config)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
verbose("Spawning child process");
|
|
75
|
+
this.#child = node_child_process.spawn(this.pluginFile);
|
|
76
|
+
this.#child.stdin.setDefaultEncoding("utf8");
|
|
77
|
+
this.#outInterface = readline.createInterface({
|
|
78
|
+
input: this.#child.stdout,
|
|
79
|
+
terminal: false
|
|
80
|
+
});
|
|
81
|
+
this.#errInterface = readline.createInterface({
|
|
82
|
+
input: this.#child.stderr,
|
|
83
|
+
terminal: false
|
|
84
|
+
});
|
|
85
|
+
this.attachListeners();
|
|
86
|
+
} catch (err) {
|
|
87
|
+
logger.default.errorp(
|
|
88
|
+
"error loading stdio rpc plugin",
|
|
89
|
+
name.brightRed.underline,
|
|
90
|
+
err
|
|
91
|
+
);
|
|
92
|
+
await this.kill();
|
|
93
|
+
this.emitStatus();
|
|
94
|
+
return false;
|
|
45
95
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
_RpcPlugin_child.set(this, void 0);
|
|
49
|
-
_RpcPlugin_rpc.set(this, void 0);
|
|
50
|
-
_RpcPlugin_errInterface.set(this, void 0);
|
|
51
|
-
_RpcPlugin_outInterface.set(this, void 0);
|
|
52
|
-
this.messageCounter = 0;
|
|
53
|
-
// TODO: validate documentation
|
|
54
|
-
this.documentation = interface_1.Plugin.readJSON(path_1.default.join(pluginPath, DOC_FILE));
|
|
55
|
-
this.pluginConfig = interface_1.Plugin.readJSON(path_1.default.join(pluginPath, PLUGIN_FILE));
|
|
56
|
-
this.pluginFile = path_1.default.join(pluginPath, MAIN_FILE);
|
|
57
|
-
this.eventPassthrough = this.eventPassthrough.bind(this);
|
|
58
|
-
this.commands = [];
|
|
59
|
-
this.initRPC();
|
|
60
|
-
}
|
|
61
|
-
isLoaded() {
|
|
62
|
-
return !!__classPrivateFieldGet(this, _RpcPlugin_child, "f") && !__classPrivateFieldGet(this, _RpcPlugin_child, "f").exitCode;
|
|
63
|
-
}
|
|
64
|
-
// determing if a command is registered
|
|
65
|
-
isCommand(cmd) {
|
|
66
|
-
return this.commands.includes(cmd);
|
|
67
|
-
}
|
|
68
|
-
// spawn the plugin as a child process
|
|
69
|
-
async load() {
|
|
70
|
-
var _a;
|
|
71
|
-
const name = this.getName();
|
|
72
|
-
const verbose = (...msg) => logger_1.default.verbose(name.underline, ...msg);
|
|
73
|
-
verbose('Load method invoked');
|
|
74
|
-
let frozen = true, timed = false;
|
|
75
|
-
this.commands = [];
|
|
76
|
-
// can't load the plugin if the child is still running
|
|
77
|
-
if (__classPrivateFieldGet(this, _RpcPlugin_child, "f")) {
|
|
78
|
-
verbose('Plugin already has child process');
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
let config;
|
|
96
|
+
return Promise.race([
|
|
97
|
+
(async () => {
|
|
82
98
|
try {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
const initialData = proxyOmegga.bootstrap(this.omegga);
|
|
100
|
+
verbose("Sending initial data");
|
|
101
|
+
for (const ev in initialData) {
|
|
102
|
+
this.notify(ev, initialData[ev]);
|
|
103
|
+
}
|
|
104
|
+
verbose("Initializing event passthrough");
|
|
105
|
+
this.omegga.on("*", this.eventPassthrough);
|
|
106
|
+
try {
|
|
107
|
+
verbose("Waiting for plugin to start...");
|
|
108
|
+
const result = await this.emit("init", config);
|
|
109
|
+
verbose("Initialized with result:", result);
|
|
110
|
+
if (typeof result === "object" && result) {
|
|
111
|
+
const cmds = result.registeredCommands;
|
|
112
|
+
if (cmds && cmds instanceof Array && cmds.every((i) => typeof i === "string"))
|
|
113
|
+
this.commands = cmds;
|
|
93
114
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return Promise.race([
|
|
114
|
-
(async () => {
|
|
115
|
-
try {
|
|
116
|
-
// get some initial information to create an omegga proxy
|
|
117
|
-
const initialData = (0, proxyOmegga_1.bootstrap)(this.omegga);
|
|
118
|
-
verbose('Sending initial data');
|
|
119
|
-
// send all of the mock events to the proxy omegga
|
|
120
|
-
for (const ev in initialData) {
|
|
121
|
-
// send some initial information
|
|
122
|
-
this.notify(ev, initialData[ev]);
|
|
123
|
-
}
|
|
124
|
-
verbose('Initializing event passthrough');
|
|
125
|
-
// pass events through
|
|
126
|
-
this.omegga.on('*', this.eventPassthrough);
|
|
127
|
-
try {
|
|
128
|
-
// tell the plugin to start
|
|
129
|
-
verbose('Waiting for plugin to start...');
|
|
130
|
-
const result = await this.emit('init', config);
|
|
131
|
-
verbose('Initialized with result:', result);
|
|
132
|
-
// plugins can return a result object
|
|
133
|
-
if (typeof result === 'object' && result) {
|
|
134
|
-
// if registeredCommands is in the results, register the provided strings as commands
|
|
135
|
-
const cmds = result.registeredCommands;
|
|
136
|
-
if (cmds &&
|
|
137
|
-
cmds instanceof Array &&
|
|
138
|
-
cmds.every(i => typeof i === 'string'))
|
|
139
|
-
this.commands = cmds;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (e) {
|
|
143
|
-
if (!e.message)
|
|
144
|
-
return;
|
|
145
|
-
logger_1.default.errorp(name.brightRed.underline, 'error starting: ', e);
|
|
146
|
-
}
|
|
147
|
-
// plugin is not frozen, resolve that it has loaded
|
|
148
|
-
frozen = false;
|
|
149
|
-
if (timed)
|
|
150
|
-
return;
|
|
151
|
-
this.emitStatus();
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
catch (e) {
|
|
155
|
-
if (timed)
|
|
156
|
-
return;
|
|
157
|
-
logger_1.default.errorp('error loading stdio rpc plugin', name.brightRed.underline, e);
|
|
158
|
-
await this.kill();
|
|
159
|
-
frozen = false;
|
|
160
|
-
this.emitStatus();
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
})(),
|
|
164
|
-
new Promise(resolve => {
|
|
165
|
-
// let user know if the child quit while launching
|
|
166
|
-
__classPrivateFieldGet(this, _RpcPlugin_child, "f").once('exit', () => {
|
|
167
|
-
if (!frozen || timed)
|
|
168
|
-
return;
|
|
169
|
-
verbose('Plugin exited during init');
|
|
170
|
-
frozen = false;
|
|
171
|
-
this.emitStatus();
|
|
172
|
-
resolve(false);
|
|
173
|
-
});
|
|
174
|
-
// check if the child is frozen (while true)
|
|
175
|
-
setTimeout(() => {
|
|
176
|
-
if (!frozen)
|
|
177
|
-
return;
|
|
178
|
-
logger_1.default.errorp('I appear to be unresponsive when starting (maybe I forgot to respond to init)', name.brightRed.underline);
|
|
179
|
-
this.kill();
|
|
180
|
-
timed = true;
|
|
181
|
-
this.emitStatus();
|
|
182
|
-
resolve(false);
|
|
183
|
-
}, 5000);
|
|
184
|
-
}),
|
|
185
|
-
]);
|
|
186
|
-
}
|
|
187
|
-
// kill the child process after requesting it to stop
|
|
188
|
-
unload() {
|
|
189
|
-
if (!__classPrivateFieldGet(this, _RpcPlugin_child, "f") || __classPrivateFieldGet(this, _RpcPlugin_child, "f").exitCode) {
|
|
190
|
-
this.detachListeners();
|
|
191
|
-
this.emitStatus();
|
|
192
|
-
return Promise.resolve(true);
|
|
115
|
+
} catch (e) {
|
|
116
|
+
if (!e.message) return;
|
|
117
|
+
logger.default.errorp(name.brightRed.underline, "error starting: ", e);
|
|
118
|
+
}
|
|
119
|
+
frozen = false;
|
|
120
|
+
if (timed) return;
|
|
121
|
+
this.emitStatus();
|
|
122
|
+
return true;
|
|
123
|
+
} catch (e) {
|
|
124
|
+
if (timed) return;
|
|
125
|
+
logger.default.errorp(
|
|
126
|
+
"error loading stdio rpc plugin",
|
|
127
|
+
name.brightRed.underline,
|
|
128
|
+
e
|
|
129
|
+
);
|
|
130
|
+
await this.kill();
|
|
131
|
+
frozen = false;
|
|
132
|
+
this.emitStatus();
|
|
133
|
+
return false;
|
|
193
134
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
catch (e) {
|
|
204
|
-
// lazy developer - just implement stop please
|
|
205
|
-
}
|
|
206
|
-
await this.kill();
|
|
207
|
-
frozen = false;
|
|
208
|
-
if (timed)
|
|
209
|
-
return;
|
|
210
|
-
this.emitStatus();
|
|
211
|
-
this.commands = [];
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
catch (e) {
|
|
215
|
-
if (timed)
|
|
216
|
-
return;
|
|
217
|
-
logger_1.default.errorp('error unloading rpc plugin', name.brightRed.underline, e);
|
|
218
|
-
frozen = false;
|
|
219
|
-
this.emitStatus();
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
})(),
|
|
223
|
-
// this is wrapped in a promise for the freeze check
|
|
224
|
-
new Promise(resolve => {
|
|
225
|
-
// check if the child is frozen (while true)
|
|
226
|
-
setTimeout(() => {
|
|
227
|
-
if (!frozen)
|
|
228
|
-
return;
|
|
229
|
-
logger_1.default.errorp('I appear to be unresponsive when stopping (maybe I forgot to respond to stop)', name.brightRed.underline);
|
|
230
|
-
this.kill();
|
|
231
|
-
timed = true;
|
|
232
|
-
this.emitStatus();
|
|
233
|
-
resolve(true);
|
|
234
|
-
}, 5000);
|
|
235
|
-
}),
|
|
236
|
-
]);
|
|
237
|
-
}
|
|
238
|
-
// attaches event listeners
|
|
239
|
-
attachListeners() {
|
|
240
|
-
const name = this.getName();
|
|
241
|
-
__classPrivateFieldGet(this, _RpcPlugin_outInterface, "f").on('line', line => {
|
|
242
|
-
try {
|
|
243
|
-
const rpcData = JSON.parse(line);
|
|
244
|
-
try {
|
|
245
|
-
__classPrivateFieldGet(this, _RpcPlugin_rpc, "f").receiveAndSend(rpcData);
|
|
246
|
-
}
|
|
247
|
-
catch (e) {
|
|
248
|
-
logger_1.default.error(this.getName().brightRed.underline, '!>'.red, 'error parsing rpc data', e, line);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch (_a) {
|
|
252
|
-
// fallback to logging
|
|
253
|
-
logger_1.default.log(name.underline, '>>'.green, line);
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
// stderr - print out the errors
|
|
257
|
-
__classPrivateFieldGet(this, _RpcPlugin_errInterface, "f").on('line', err => {
|
|
258
|
-
logger_1.default.error(name.brightRed.underline, '!>'.red, err);
|
|
135
|
+
})(),
|
|
136
|
+
new Promise((resolve) => {
|
|
137
|
+
this.#child.once("exit", () => {
|
|
138
|
+
if (!frozen || timed) return;
|
|
139
|
+
verbose("Plugin exited during init");
|
|
140
|
+
frozen = false;
|
|
141
|
+
this.emitStatus();
|
|
142
|
+
resolve(false);
|
|
259
143
|
});
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
if (!frozen) return;
|
|
146
|
+
logger.default.errorp(
|
|
147
|
+
"I appear to be unresponsive when starting (maybe I forgot to respond to init)",
|
|
148
|
+
name.brightRed.underline
|
|
149
|
+
);
|
|
150
|
+
this.kill();
|
|
151
|
+
timed = true;
|
|
152
|
+
this.emitStatus();
|
|
153
|
+
resolve(false);
|
|
154
|
+
}, 5e3);
|
|
155
|
+
})
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
// kill the child process after requesting it to stop
|
|
159
|
+
unload() {
|
|
160
|
+
if (!this.#child || this.#child.exitCode) {
|
|
161
|
+
this.detachListeners();
|
|
162
|
+
this.emitStatus();
|
|
163
|
+
return Promise.resolve(true);
|
|
276
164
|
}
|
|
277
|
-
|
|
278
|
-
|
|
165
|
+
let frozen = true, timed = false;
|
|
166
|
+
const name = this.getName();
|
|
167
|
+
return Promise.race([
|
|
168
|
+
(async () => {
|
|
279
169
|
try {
|
|
280
|
-
|
|
281
|
-
|
|
170
|
+
try {
|
|
171
|
+
await this.emit("stop");
|
|
172
|
+
} catch (e) {
|
|
173
|
+
}
|
|
174
|
+
await this.kill();
|
|
175
|
+
frozen = false;
|
|
176
|
+
if (timed) return;
|
|
177
|
+
this.emitStatus();
|
|
178
|
+
this.commands = [];
|
|
179
|
+
return true;
|
|
180
|
+
} catch (e) {
|
|
181
|
+
if (timed) return;
|
|
182
|
+
logger.default.errorp(
|
|
183
|
+
"error unloading rpc plugin",
|
|
184
|
+
name.brightRed.underline,
|
|
185
|
+
e
|
|
186
|
+
);
|
|
187
|
+
frozen = false;
|
|
188
|
+
this.emitStatus();
|
|
189
|
+
return false;
|
|
282
190
|
}
|
|
283
|
-
|
|
284
|
-
|
|
191
|
+
})(),
|
|
192
|
+
// this is wrapped in a promise for the freeze check
|
|
193
|
+
new Promise((resolve) => {
|
|
194
|
+
setTimeout(() => {
|
|
195
|
+
if (!frozen) return;
|
|
196
|
+
logger.default.errorp(
|
|
197
|
+
"I appear to be unresponsive when stopping (maybe I forgot to respond to stop)",
|
|
198
|
+
name.brightRed.underline
|
|
199
|
+
);
|
|
200
|
+
this.kill();
|
|
201
|
+
timed = true;
|
|
202
|
+
this.emitStatus();
|
|
203
|
+
resolve(true);
|
|
204
|
+
}, 5e3);
|
|
205
|
+
})
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
// attaches event listeners
|
|
209
|
+
attachListeners() {
|
|
210
|
+
const name = this.getName();
|
|
211
|
+
this.#outInterface.on("line", (line) => {
|
|
212
|
+
try {
|
|
213
|
+
const rpcData = JSON.parse(line);
|
|
214
|
+
try {
|
|
215
|
+
this.#rpc.receiveAndSend(rpcData);
|
|
216
|
+
} catch (e) {
|
|
217
|
+
logger.default.error(
|
|
218
|
+
this.getName().brightRed.underline,
|
|
219
|
+
"!>".red,
|
|
220
|
+
"error parsing rpc data",
|
|
221
|
+
e,
|
|
222
|
+
line
|
|
223
|
+
);
|
|
285
224
|
}
|
|
225
|
+
} catch {
|
|
226
|
+
logger.default.log(name.underline, ">>".green, line);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
this.#errInterface.on("line", (err) => {
|
|
230
|
+
logger.default.error(name.brightRed.underline, "!>".red, err);
|
|
231
|
+
});
|
|
232
|
+
this.#child.on("error", () => this.kill());
|
|
233
|
+
this.#child.on("close", () => this.kill());
|
|
234
|
+
this.#child.on("exit", (code) => {
|
|
235
|
+
logger.default.errorp(
|
|
236
|
+
"!>".red,
|
|
237
|
+
"rpc plugin",
|
|
238
|
+
name.brightRed.underline,
|
|
239
|
+
"exited with code",
|
|
240
|
+
code
|
|
241
|
+
);
|
|
242
|
+
this.kill();
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// removes previously attached event listeners
|
|
246
|
+
detachListeners() {
|
|
247
|
+
this.#outInterface.removeAllListeners("line");
|
|
248
|
+
this.#errInterface.removeAllListeners("line");
|
|
249
|
+
if (this.#child) {
|
|
250
|
+
this.#child.removeAllListeners("exit");
|
|
251
|
+
this.#child.removeAllListeners("close");
|
|
252
|
+
this.#child.removeAllListeners("error");
|
|
286
253
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
// create a promise for the exit of the process
|
|
295
|
-
const promise = new Promise(resolve => __classPrivateFieldGet(this, _RpcPlugin_child, "f").once('exit', resolve));
|
|
296
|
-
// kill the process
|
|
297
|
-
__classPrivateFieldGet(this, _RpcPlugin_child, "f").kill('SIGINT');
|
|
298
|
-
// ...kill it again just to make sure it's dead
|
|
299
|
-
(0, child_process_1.spawn)('kill', ['-9', __classPrivateFieldGet(this, _RpcPlugin_child, "f").pid + '']);
|
|
300
|
-
// wait for the process to exit
|
|
301
|
-
await promise;
|
|
302
|
-
__classPrivateFieldSet(this, _RpcPlugin_child, undefined, "f");
|
|
303
|
-
this.emitStatus();
|
|
254
|
+
}
|
|
255
|
+
// write a string to the child process
|
|
256
|
+
writeln(line) {
|
|
257
|
+
try {
|
|
258
|
+
if (this.#child && !this.#child.exitCode)
|
|
259
|
+
this.#child.stdin.write(line + "\n");
|
|
260
|
+
} catch (e) {
|
|
304
261
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
262
|
+
}
|
|
263
|
+
// forcibly kills the plugin
|
|
264
|
+
async kill() {
|
|
265
|
+
this.#rpc.rejectAllPendingRequests("Plugin Terminated");
|
|
266
|
+
this.detachListeners();
|
|
267
|
+
this.omegga.off("*", this.eventPassthrough);
|
|
268
|
+
if (!this.#child) return;
|
|
269
|
+
const promise = new Promise((resolve) => this.#child.once("exit", resolve));
|
|
270
|
+
this.#child.kill("SIGINT");
|
|
271
|
+
node_child_process.spawn("kill", ["-9", this.#child.pid + ""]);
|
|
272
|
+
await promise;
|
|
273
|
+
this.#child = void 0;
|
|
274
|
+
this.emitStatus();
|
|
275
|
+
}
|
|
276
|
+
eventPassthrough(type, ...args) {
|
|
277
|
+
if (!this.#child) return;
|
|
278
|
+
this.notify(type, args);
|
|
279
|
+
}
|
|
280
|
+
// setup the JSONRPC communication
|
|
281
|
+
initRPC() {
|
|
282
|
+
const server = new jsonRpc2_0.JSONRPCServer();
|
|
283
|
+
const client = new jsonRpc2_0.JSONRPCClient((req) => {
|
|
284
|
+
try {
|
|
285
|
+
this.writeln(JSON.stringify(req));
|
|
286
|
+
return Promise.resolve();
|
|
287
|
+
} catch (error) {
|
|
288
|
+
return Promise.reject(error);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
const rpc = this.#rpc = new jsonRpc2_0.JSONRPCServerAndClient(server, client);
|
|
292
|
+
const ezLog = (logFn, name2, symbol) => (line) => console[logFn](name2.underline, symbol, line);
|
|
293
|
+
const name = this.getName();
|
|
294
|
+
rpc.addMethod("log", ezLog("log", name, ">>".green));
|
|
295
|
+
rpc.addMethod("error", ezLog("error", name.brightRed, "!>".red));
|
|
296
|
+
rpc.addMethod("info", ezLog("info", name, "#>".blue));
|
|
297
|
+
rpc.addMethod("debug", ezLog("debug", name, "?>".blue));
|
|
298
|
+
rpc.addMethod("warn", ezLog("warn", name.brightYellow, ":>".yellow));
|
|
299
|
+
rpc.addMethod("trace", ezLog("trace", name, "T>".grey));
|
|
300
|
+
rpc.addMethod(
|
|
301
|
+
"store.get",
|
|
302
|
+
(key) => this.storage.get(key)
|
|
303
|
+
);
|
|
304
|
+
rpc.addMethod(
|
|
305
|
+
"store.set",
|
|
306
|
+
([key, value]) => this.storage.set(key, value)
|
|
307
|
+
);
|
|
308
|
+
rpc.addMethod(
|
|
309
|
+
"store.delete",
|
|
310
|
+
(key) => this.storage.delete(key)
|
|
311
|
+
);
|
|
312
|
+
rpc.addMethod("store.wipe", () => this.storage.wipe());
|
|
313
|
+
rpc.addMethod("store.count", () => this.storage.count());
|
|
314
|
+
rpc.addMethod("store.keys", () => this.storage.keys());
|
|
315
|
+
rpc.addMethod(
|
|
316
|
+
"exec",
|
|
317
|
+
(line) => this.omegga.writeln(line)
|
|
318
|
+
);
|
|
319
|
+
rpc.addMethod(
|
|
320
|
+
"writeln",
|
|
321
|
+
(line) => this.omegga.writeln(line)
|
|
322
|
+
);
|
|
323
|
+
rpc.addMethod(
|
|
324
|
+
"broadcast",
|
|
325
|
+
(line) => this.omegga.broadcast(line)
|
|
326
|
+
);
|
|
327
|
+
rpc.addMethod(
|
|
328
|
+
"whisper",
|
|
329
|
+
({ target, line }) => this.omegga.whisper(target, line)
|
|
330
|
+
);
|
|
331
|
+
rpc.addMethod(
|
|
332
|
+
"middlePrint",
|
|
333
|
+
({ target, line }) => this.omegga.middlePrint(target, line)
|
|
334
|
+
);
|
|
335
|
+
rpc.addMethod("getPlayers", () => this.omegga.getPlayers());
|
|
336
|
+
rpc.addMethod(
|
|
337
|
+
"getPlayerPosition",
|
|
338
|
+
(name2) => this.omegga.getPlayer(name2)?.getPosition()
|
|
339
|
+
);
|
|
340
|
+
rpc.addMethod(
|
|
341
|
+
"getAllPlayerPositions",
|
|
342
|
+
() => this.omegga.getAllPlayerPositions()
|
|
343
|
+
);
|
|
344
|
+
rpc.addMethod(
|
|
345
|
+
"getEnvironmentPresets",
|
|
346
|
+
() => this.omegga.getEnvironmentPresets()
|
|
347
|
+
);
|
|
348
|
+
rpc.addMethod("resetEnvironment", () => this.omegga.resetEnvironment());
|
|
349
|
+
rpc.addMethod(
|
|
350
|
+
"saveEnvironment",
|
|
351
|
+
(name2) => this.omegga.saveEnvironment(name2)
|
|
352
|
+
);
|
|
353
|
+
rpc.addMethod(
|
|
354
|
+
"loadEnvironment",
|
|
355
|
+
(name2) => this.omegga.loadEnvironment(name2)
|
|
356
|
+
);
|
|
357
|
+
rpc.addMethod(
|
|
358
|
+
"loadEnvironmentData",
|
|
359
|
+
(data) => this.omegga.loadEnvironmentData(data)
|
|
360
|
+
);
|
|
361
|
+
rpc.addMethod("getServerStatus", () => this.omegga.getServerStatus());
|
|
362
|
+
rpc.addMethod("getMinigames", () => this.omegga.getMinigames());
|
|
363
|
+
rpc.addMethod("getMinigamePresets", () => this.omegga.getMinigamePresets());
|
|
364
|
+
rpc.addMethod(
|
|
365
|
+
"saveMinigame",
|
|
366
|
+
({ index, name: name2 }) => this.omegga.saveMinigame(index, name2)
|
|
367
|
+
);
|
|
368
|
+
rpc.addMethod(
|
|
369
|
+
"loadMinigame",
|
|
370
|
+
({ name: name2, owner }) => this.omegga.loadMinigame(name2, owner)
|
|
371
|
+
);
|
|
372
|
+
rpc.addMethod(
|
|
373
|
+
"nextRoundMinigame",
|
|
374
|
+
(index) => this.omegga.nextRoundMinigame(index)
|
|
375
|
+
);
|
|
376
|
+
rpc.addMethod(
|
|
377
|
+
"resetMinigame",
|
|
378
|
+
(index) => this.omegga.resetMinigame(index)
|
|
379
|
+
);
|
|
380
|
+
rpc.addMethod(
|
|
381
|
+
"deleteMinigame",
|
|
382
|
+
(index) => this.omegga.deleteMinigame(index)
|
|
383
|
+
);
|
|
384
|
+
rpc.addMethod("listMinigames", () => this.omegga.listMinigames());
|
|
385
|
+
rpc.addMethod("getHostId", () => this.omegga.getHostId());
|
|
386
|
+
rpc.addMethod("getRoleSetup", () => this.omegga.getRoleSetup());
|
|
387
|
+
rpc.addMethod("getBanList", () => this.omegga.getBanList());
|
|
388
|
+
rpc.addMethod("getSaves", () => this.omegga.getSaves());
|
|
389
|
+
rpc.addMethod(
|
|
390
|
+
"getSavePath",
|
|
391
|
+
(name2) => this.omegga.getSavePath(name2)
|
|
392
|
+
);
|
|
393
|
+
rpc.addMethod(
|
|
394
|
+
"clearBricks",
|
|
395
|
+
({ target, quiet = false }) => this.omegga.clearBricks(target, quiet)
|
|
396
|
+
);
|
|
397
|
+
rpc.addMethod(
|
|
398
|
+
"clearAllBricks",
|
|
399
|
+
(quiet) => this.omegga.clearAllBricks(quiet)
|
|
400
|
+
);
|
|
401
|
+
rpc.addMethod(
|
|
402
|
+
"saveBricks",
|
|
403
|
+
(name2) => this.omegga.saveBricks(name2)
|
|
404
|
+
);
|
|
405
|
+
rpc.addMethod(
|
|
406
|
+
"loadBricks",
|
|
407
|
+
({
|
|
408
|
+
name: name2,
|
|
409
|
+
offX = 0,
|
|
410
|
+
offY = 0,
|
|
411
|
+
offZ = 0,
|
|
412
|
+
quiet = false
|
|
413
|
+
}) => this.omegga.loadBricks(name2, { offX, offY, offZ, quiet })
|
|
414
|
+
);
|
|
415
|
+
rpc.addMethod(
|
|
416
|
+
"loadBricksOnPlayer",
|
|
417
|
+
({
|
|
418
|
+
name: name2,
|
|
419
|
+
player,
|
|
420
|
+
offX = 0,
|
|
421
|
+
offY = 0,
|
|
422
|
+
offZ = 0
|
|
423
|
+
}) => this.omegga.loadBricksOnPlayer(name2, player, { offX, offY, offZ })
|
|
424
|
+
);
|
|
425
|
+
rpc.addMethod(
|
|
426
|
+
"readSaveData",
|
|
427
|
+
(name2) => this.omegga.readSaveData(name2)
|
|
428
|
+
);
|
|
429
|
+
rpc.addMethod("getSaveData", () => this.omegga.getSaveData());
|
|
430
|
+
rpc.addMethod(
|
|
431
|
+
"loadSaveData",
|
|
432
|
+
({
|
|
433
|
+
data,
|
|
434
|
+
offX = 0,
|
|
435
|
+
offY = 0,
|
|
436
|
+
offZ = 0,
|
|
437
|
+
quiet = false
|
|
438
|
+
}) => this.omegga.loadSaveData(data, { offX, offY, offZ, quiet })
|
|
439
|
+
);
|
|
440
|
+
rpc.addMethod(
|
|
441
|
+
"loadSaveDataOnPlayer",
|
|
442
|
+
({
|
|
443
|
+
data,
|
|
444
|
+
player,
|
|
445
|
+
offX = 0,
|
|
446
|
+
offY = 0,
|
|
447
|
+
offZ = 0
|
|
448
|
+
}) => this.omegga.loadSaveDataOnPlayer(data, player, { offX, offY, offZ })
|
|
449
|
+
);
|
|
450
|
+
rpc.addMethod(
|
|
451
|
+
"changeMap",
|
|
452
|
+
(map) => this.omegga.changeMap(map)
|
|
453
|
+
);
|
|
454
|
+
rpc.addMethod("unload", () => this.unload());
|
|
455
|
+
rpc.addMethod("reload", async () => {
|
|
456
|
+
await this.unload();
|
|
457
|
+
await this.load();
|
|
458
|
+
});
|
|
459
|
+
const addPlayerMethod = (name2) => rpc.addMethod(
|
|
460
|
+
`player.${name2}`,
|
|
461
|
+
(player) => this.omegga.getPlayer(player)?.[name2]()
|
|
462
|
+
);
|
|
463
|
+
rpc.addMethod("player.get", (target) => {
|
|
464
|
+
let player = this.omegga.getPlayer(target);
|
|
465
|
+
return player && { ...player, host: player.isHost() };
|
|
466
|
+
});
|
|
467
|
+
addPlayerMethod("getRoles");
|
|
468
|
+
addPlayerMethod("getPermissions");
|
|
469
|
+
addPlayerMethod("getNameColor");
|
|
470
|
+
addPlayerMethod("getPosition");
|
|
471
|
+
addPlayerMethod("getGhostBrick");
|
|
472
|
+
addPlayerMethod("getPaint");
|
|
473
|
+
addPlayerMethod("getTemplateBounds");
|
|
474
|
+
addPlayerMethod("getTemplateBoundsData");
|
|
475
|
+
rpc.addMethod(
|
|
476
|
+
"player.loadDataAtGhostBrick",
|
|
477
|
+
({
|
|
478
|
+
target,
|
|
479
|
+
data,
|
|
480
|
+
rotate = true,
|
|
481
|
+
offX = 0,
|
|
482
|
+
offY = 0,
|
|
483
|
+
offZ = 0,
|
|
484
|
+
quiet = false
|
|
485
|
+
}) => this.omegga.getPlayer(target)?.loadDataAtGhostBrick(data, { rotate, offX, offY, offZ, quiet })
|
|
486
|
+
);
|
|
487
|
+
rpc.addMethod(
|
|
488
|
+
"player.loadSaveData",
|
|
489
|
+
({
|
|
490
|
+
target,
|
|
491
|
+
data,
|
|
492
|
+
offX = 0,
|
|
493
|
+
offY = 0,
|
|
494
|
+
offZ = 0
|
|
495
|
+
}) => this.omegga.getPlayer(target)?.loadSaveData(data, { offX, offY, offZ })
|
|
496
|
+
);
|
|
497
|
+
rpc.addMethod("plugin.get", async (name2) => {
|
|
498
|
+
const plugin = this.omegga.pluginLoader.plugins.find(
|
|
499
|
+
(p) => p.getName() === name2
|
|
500
|
+
);
|
|
501
|
+
if (plugin) {
|
|
502
|
+
return {
|
|
503
|
+
name: name2,
|
|
504
|
+
documentation: plugin.getDocumentation(),
|
|
505
|
+
loaded: plugin.isLoaded()
|
|
506
|
+
};
|
|
507
|
+
} else {
|
|
508
|
+
return null;
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
rpc.addMethod(
|
|
512
|
+
"plugin.emit",
|
|
513
|
+
async ([name2, event, ...args]) => {
|
|
514
|
+
const plugin = this.omegga.pluginLoader.plugins.find(
|
|
515
|
+
(p) => p.getName() === name2
|
|
516
|
+
);
|
|
517
|
+
if (plugin) {
|
|
518
|
+
return plugin.emitPlugin(event, this.getName(), args);
|
|
519
|
+
} else {
|
|
520
|
+
return null;
|
|
442
521
|
}
|
|
522
|
+
}
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
// emit a custom plugin event
|
|
526
|
+
async emitPlugin(event, from, args) {
|
|
527
|
+
return await this.emit("plugin:emit", [event, from, ...args]);
|
|
528
|
+
}
|
|
529
|
+
// emit a message to the plugin via the jsonrpc client and expect a response
|
|
530
|
+
emit(type, arg) {
|
|
531
|
+
return this.#rpc.request(type, arg);
|
|
532
|
+
}
|
|
533
|
+
// emit a message to the plugin via the jsonrpc client, don't expect a response
|
|
534
|
+
notify(type, arg) {
|
|
535
|
+
try {
|
|
536
|
+
this.#rpc.notify(type, arg);
|
|
537
|
+
} catch (e) {
|
|
443
538
|
}
|
|
539
|
+
}
|
|
444
540
|
}
|
|
445
|
-
_RpcPlugin_child = new WeakMap(), _RpcPlugin_rpc = new WeakMap(), _RpcPlugin_errInterface = new WeakMap(), _RpcPlugin_outInterface = new WeakMap();
|
|
446
541
|
exports.default = RpcPlugin;
|
|
447
|
-
//# sourceMappingURL=plugin_jsonrpc_stdio.js.map
|
|
542
|
+
//# sourceMappingURL=plugin_jsonrpc_stdio.js.map
|