Node Plugins
Node plugins are effectively require’d into omegga. They have the potential to crash the entire service through uncaught exceptions and also can be insecure. Develop and run these at your own risk - your server stability may suffer.
These plugins receive a direct reference to the omegga that wraps the brickadia server. As a result, they can directly modify how omegga runs.
Cleanup is important as code can still be running after the plugin is unloaded resulting in strange and undefined behavior. Make sure to run clearInterval and clearTimeout
Register custom /commands by returning {registeredCommands: ['foo', 'bar']} (registers command /foo and /bar) in the async init() method.
By defining an async pluginEvent(event, from, ...args) method in your plugin class, you can respond to events from other plugins, where from is the name of the other plugin, event is the name of the custom event, and args is an array of any passed arguments.
Globals
OMEGGA_UTIL- access to thesrc/util/index.jsmodule
Folder Structure
In a plugins directory create the following folder structure:
plugins/myPlugin- plugin folder (required)plugins/myPlugin/doc.jsonplugins/myPlugin/omegga.main.js- js plugin main file (required)
omegga.main.js (example)
class PluginName {
// config and store variables are optional but provide access to the plugin data store
constructor(omegga, config, store) {
this.omegga = omegga;
this.config = config;
this.store = store;
}
async init() {
this.omegga
.on('chatcmd:ping', (name, ...args) => {
this.omegga.broadcast(`pong @ ${name} + ${args.length} args`);
})
.on('chatcmd:pos', async name => {
const [x, y, z] = await this.omegga.getPlayer(name).getPosition();
this.omegga.broadcast(`<b>${name}</> is at ${x} ${y} ${z}`);
});
}
async stop() {
this.omegga
.removeAllListeners('chatcmd:ping')
.removeAllListeners('chatcmd:pos');
}
// optional: respond to events from other plugins
async pluginEvent(event, from, ...args) {
if (event === 'greeting') {
return `Hello from ${from}!`;
}
}
}
module.exports = PluginName;
See also
- Plugin structure for
doc.json,plugin.json, config, and the store - Omegga, Player, and Events for what the plugin can reach
- Plugin metrics for exporting your own Prometheus metrics