flying-squid/src/lib/plugins/external.js

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);
});
};