mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-18 05:51:12 +00:00
see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const and https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
73 lines
No EOL
2.1 KiB
JavaScript
73 lines
No EOL
2.1 KiB
JavaScript
module.exports.server = function(serv, settings) {
|
|
serv.plugins = {};
|
|
serv.pluginCount = 0;
|
|
serv.externalPluginsLoaded = false;
|
|
|
|
serv.addPlugin = (name, plugin, set) => {
|
|
if (!name || !plugin) throw new Error('You need a name and object for your plugin!');
|
|
serv.plugins[name] = {
|
|
id: serv.pluginCount,
|
|
name: name,
|
|
player: plugin.player,
|
|
entity: plugin.entity,
|
|
server: plugin.server,
|
|
settings: set,
|
|
enabled: true
|
|
};
|
|
serv.pluginCount++;
|
|
if (serv.externalPluginsLoaded && plugin.server) serv.plugins[name].server.call(p, serv, settings);
|
|
};
|
|
|
|
Object.keys(settings.plugins).forEach((p) =>{
|
|
if (settings.plugins[p].disabled) return;
|
|
try {
|
|
require.resolve(p); // Check if it exists, if not do catch, otherwise jump to bottom
|
|
} catch (err) {
|
|
try { // Throw error if cannot find plugin
|
|
require.resolve('../../plugins/' + p);
|
|
} catch (err) {
|
|
throw new Error('Cannot find plugin "' + p + '"');
|
|
}
|
|
serv.addPlugin(p, require('../../plugins/' + p), settings.plugins[p]);
|
|
return;
|
|
}
|
|
serv.addPlugin(p, require(p), settings.plugins[p]);
|
|
});
|
|
|
|
Object.keys(serv.plugins).forEach((p) =>{
|
|
if (serv.plugins[p].server) serv.plugins[p].server.call(serv.plugins[p], serv, settings);
|
|
});
|
|
|
|
serv.on('asap', () => {
|
|
for (let p in serv.plugins) {
|
|
serv.log('[PLUGINS] Loaded "' + serv.plugins[p].name + '"');
|
|
}
|
|
});
|
|
|
|
serv.externalPluginsLoaded = true;
|
|
};
|
|
|
|
module.exports.player = function(player, serv) {
|
|
Object.keys(serv.plugins).forEach(p => {
|
|
const plugin = serv.plugins[p];
|
|
if (plugin.player) plugin.player.call(plugin, player, serv);
|
|
});
|
|
};
|
|
|
|
module.exports.entity = function(entity, serv) {
|
|
entity.pluginData = {};
|
|
|
|
Object.keys(serv.plugins).forEach(p => {
|
|
entity.pluginData[p] = {};
|
|
});
|
|
|
|
entity.getData = (pluginName) => {
|
|
if (typeof pluginName == 'object') pluginName = pluginName.name;
|
|
return entity.pluginData[pluginName] || null;
|
|
};
|
|
|
|
Object.keys(serv.plugins).forEach(p => {
|
|
const plugin = serv.plugins[p];
|
|
if (plugin.entity) plugin.entity.call(plugin, entity, serv);
|
|
});
|
|
}; |