From c13c901279a69d91e20167d8d24c3fccf26727d9 Mon Sep 17 00:00:00 2001 From: DemiPixel Date: Wed, 25 Nov 2015 16:08:18 -0800 Subject: [PATCH] Added colors, made some fixes to command.js --- src/lib/command.js | 5 +- src/lib/plugins/chat.js | 122 ++++++++++++++++++++++++++++++++++-- src/lib/plugins/external.js | 13 ++-- src/lib/plugins/login.js | 2 +- src/lib/plugins/logout.js | 2 +- 5 files changed, 132 insertions(+), 12 deletions(-) diff --git a/src/lib/command.js b/src/lib/command.js index fc533a6..8557368 100644 --- a/src/lib/command.js +++ b/src/lib/command.js @@ -36,8 +36,11 @@ class Command { pars = pars.match(parse); } } + + var val = res[0].params.action(res[1]) + if (val && val.catch) res = await val.catch((err)=> setTimeout(() => {throw err;},0)); + else res = val; - res = await com.params.action(pars); if(res) return '' + res; } else { return 'Command not found'; diff --git a/src/lib/plugins/chat.js b/src/lib/plugins/chat.js index 38bad80..8dbf5cc 100644 --- a/src/lib/plugins/chat.js +++ b/src/lib/plugins/chat.js @@ -1,10 +1,120 @@ module.exports.server=function(serv) { - serv.broadcast = (message, color) => - serv.players.forEach(player => player.chat({ - "text": message, - "color": color - })); + serv.broadcast = (message, {whitelist=serv.players,blacklist=[],system=false}={}) => { + if (whitelist.type == 'player') whitelist = [whitelist]; + + if (typeof message == 'string') message = serv.parseClassic(message); + + whitelist.filter(w => blacklist.indexOf(w) == 0).forEach(player => { + if (!system) player.chat(message); + else player.system(message); + }); + } + + serv.color = { + 'black': '&0', + 'dark_blue': '&1', + 'dark_green': '&2', + 'dark_cyan': '&3', + 'dark_red': '&4', + 'purple': '&5', + 'dark_purple': '&5', + 'gold': '&6', + 'gray': '&7', + 'grey': '&7', + 'dark_gray': '&8', + 'dark_grey': '&8', + 'blue': '&9', + 'green': '&a', + 'aqua': '&b', + 'cyan': '&b', + 'red': '&c', + 'pink': '&d', + 'light_purple': '&d', + 'yellow': '&e', + 'white': '&f', + 'random': '&k', + 'obfuscated': '&k', + 'bold': '&l', + 'strikethrough': '&m', + 'underlined': '&n', + 'underline': '&n', + 'italic': '&o', + 'italics': '&o', + 'reset': '&r' + }; + + serv.parseClassic = (message) => { + var messageList = []; + var text = ''; + var nextChanged = false; + var color = 'white'; + var bold = false; + var italic = false; + var underlined = false; + var strikethrough = false; + var random = false; + var colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f', 'k','l','m','n','o','r','&'] + var convertColor = ['black', 'dark_blue','dark_green','dark_cyan','dark_red','dark_purple','gold', + 'gray', 'dark_gray', 'blue', 'green', 'aqua', 'red', 'light_purple', 'yellow', 'white', + 'random', 'bold', 'strikethrough', 'underlined', 'italic', 'reset', '&']; + + function createJSON() { + if (!text.trim()) return; + messageList.push({ + text: text, + color: color, + bold: bold, + italic: italic, + underlined: underlined, + strikethrough: strikethrough, + obfuscated: random + }); + text = ''; + } + + while (message != '') { + var currChar = message[0]; + if (nextChanged) { + var newColor = convertColor[colors.indexOf(currChar)]; + if (newColor) { + if (newColor == 'bold') bold = true; + else if (newColor == 'strikethrough') strikethrough = true; + else if (newColor == 'underlined') underlined = true; + else if (newColor == 'italic') italic = true; + else if (newColor == 'random') random = true; + else if (newColor == '&') text += '&'; + else if (newColor == 'reset') { + strikethrough = false; + bold = false; + underlined = false; + random = false; + italic = false; + color = 'white'; + } else color = newColor; + } + nextChanged = false; + } else if (currChar == '&') { + if (nextChanged) { + text += '&'; + nextChanged = false; + } else { + nextChanged = true; + createJSON(); + } + } else { + text += currChar; + } + + message = message.slice(1, message.length); + } + createJSON(); + + return { + text: '', + extra: messageList + } + } }; module.exports.player=function(player,serv) @@ -24,10 +134,12 @@ module.exports.player=function(player,serv) }); player.chat = message => { + if (typeof message == 'string') message = serv.parseClassic(message); player._client.write('chat', { message: JSON.stringify(message), position: 0 }); }; player.system = message => { + if (typeof message == 'string') message = serv.parseClassic(message); player._client.write('chat', { message: JSON.stringify(message), position: 2 }); }; }; \ No newline at end of file diff --git a/src/lib/plugins/external.js b/src/lib/plugins/external.js index 6bc3416..f82adb4 100644 --- a/src/lib/plugins/external.js +++ b/src/lib/plugins/external.js @@ -1,5 +1,3 @@ -var fs = require('fs'); - module.exports.server = function(serv, settings) { serv.plugins = {}; serv.pluginCount = 0; @@ -26,12 +24,12 @@ module.exports.server = function(serv, settings) { require.resolve(p); // Check if it exists, if not do catch, otherwise jump to bottom } catch (err) { try { // Throw error if cannot find plugin - fs.accessSync('./dist/plugins/' + p); + require.resolve('../../plugins/' + p); } catch (err) { throw new Error('Cannot find plugin "' + p + '"'); } serv.addPlugin(p, require('../../plugins/' + p), settings.plugins[p]); - return; + continue; } serv.addPlugin(p, require(p), settings.plugins[p]); }); @@ -39,6 +37,13 @@ module.exports.server = function(serv, settings) { 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 (var p in serv.plugins) { + serv.log('[PLUGINS] Loaded "' + serv.plugins[p].name + '"'); + } + }); + serv.externalPluginsLoaded = true; }; diff --git a/src/lib/plugins/login.js b/src/lib/plugins/login.js index 9898f4d..41ac053 100644 --- a/src/lib/plugins/login.js +++ b/src/lib/plugins/login.js @@ -124,7 +124,7 @@ module.exports.player=function(player,serv) function announceJoin() { - serv.broadcast(player.username + ' joined the game.', "yellow"); + serv.broadcast(serv.color.yellow + player.username + ' joined the game.'); player.emit("connected"); } diff --git a/src/lib/plugins/logout.js b/src/lib/plugins/logout.js index c4b67a9..2735d12 100644 --- a/src/lib/plugins/logout.js +++ b/src/lib/plugins/logout.js @@ -20,7 +20,7 @@ module.exports.player=function(player,serv) player._client.on('end', () => { if(player) { - serv.broadcast(player.username + ' quit the game.', "yellow"); + serv.broadcast(serv.color.yellow + player.username + ' quit the game.'); player._writeOthers('player_info', { action: 4, data: [{