150 lines
6.8 KiB
JavaScript
150 lines
6.8 KiB
JavaScript
const _lang = require("minecraft-data")("1.20.2").language;
|
|
let lang=Object.create(null); //Without constructor function
|
|
for(const i in _lang){
|
|
lang[i]=_lang[i];
|
|
}
|
|
const consoleColors={
|
|
"dark_red":"\x1B[0m\x1B[38;2;170;0;0m",
|
|
"red":"\x1B[0m\x1B[38;2;255;85;85m",
|
|
"dark_green":"\x1B[0m\x1B[38;2;0;170;0m",
|
|
"green":"\x1B[0m\x1B[38;2;85;255;85m",
|
|
"gold":"\x1B[0m\x1B[38;2;255;170;0m",
|
|
"yellow":"\x1B[0m\x1B[38;2;255;255;85m",
|
|
"dark_blue":"\x1B[0m\x1B[38;2;0;0;170m",
|
|
"blue":"\x1B[0m\x1B[38;2;85;85;255m",
|
|
"dark_purple":"\x1B[0m\x1B[38;2;170;0;170m",
|
|
"light_purple":"\x1B[0m\x1B[38;2;255;85;255m",
|
|
"dark_aqua":"\x1B[0m\x1B[38;2;0;170;170m",
|
|
"aqua":"\x1B[0m\x1B[38;2;85;255;255m",
|
|
"black":"\x1B[0m\x1B[48;2;220;220;220m\x1B[38;2;0;0;0m",
|
|
"gray":"\x1B[0m\x1B[38;2;170;170;170m",
|
|
"dark_gray":"\x1B[0m\x1B[38;2;85;85;85m",
|
|
"white":"\x1B[0m\x1B[38;2;255;255;255m",
|
|
"reset":"\x1B[0m\x1B[38;2;255;255;255m"
|
|
}
|
|
const hexColorParser=(color)=>{
|
|
let out="\x1B[0m";//\x1B[48;2;220;220;220m\x1B[38;2;0;0;0m
|
|
const redChannel=Number("0x"+color.slice(1,3));
|
|
const greenChannel=Number("0x"+color.slice(3,5));
|
|
const blueChannel=Number("0x"+color.slice(5,7));
|
|
if(redChannel < 96 && greenChannel < 96 && blueChannel < 96){
|
|
out+="\x1B[48;2;220;220;220m";
|
|
}
|
|
return out+`\x1B[38;2;${redChannel};${greenChannel};${blueChannel}m`
|
|
}
|
|
const parse=function(_data, l = 0, resetColor = [consoleColors.reset]){
|
|
if (l >= 12) {
|
|
return ['', '', '']
|
|
}
|
|
let data;
|
|
if(typeof _data == "string"){
|
|
try {
|
|
data=JSON.parse(_data);
|
|
} catch(e){
|
|
data={text:_data, color: "reset"}
|
|
}
|
|
} else if(typeof _data == "number"){
|
|
data={text:_data+"", color: "reset"}
|
|
} else {
|
|
data=_data;
|
|
}
|
|
let nkt=false;
|
|
const out=["","",""]; //console plain minecraft
|
|
if(data[""]){
|
|
data.text=data[""];
|
|
nkt=true;
|
|
}
|
|
if(data.color){
|
|
if(data.color=="reset"){
|
|
out[0]+=resetColor[0]
|
|
} else if (data.color.startsWith("#")){
|
|
out[0]+=hexColorParser(data.color);
|
|
} else {
|
|
out[0]+=consoleColors[data.color];
|
|
}
|
|
} else {
|
|
out[0]+=resetColor[0]
|
|
}
|
|
if(data.text){
|
|
let _text=data.text;
|
|
if(typeof _text=="number"){
|
|
_text=_text.toString()
|
|
}
|
|
if(nkt){
|
|
out[0]+=resetColor[0];
|
|
out[2]+=resetColor[1];
|
|
}
|
|
out[0]+=_text.replace(/\u001b/g,""); //Remove escape codes from console format
|
|
out[1]+=_text;
|
|
out[2]+=_text;
|
|
}
|
|
if (data.translate) {
|
|
let trans = data.translate.replace(/%%/g, '\ue123').replace(/\u001b/g,""); //Remove escape codes from console format
|
|
let trans2 = data.translate.replace(/%%/g, '\ue123')
|
|
let trans3 = data.translate.replace(/%%/g, '\ue123')
|
|
if (lang[trans] !== undefined) {
|
|
trans = lang[trans].replace(/%%/g, '\ue123')
|
|
trans2 = lang[trans2].replace(/%%/g, '\ue123')
|
|
trans3 = lang[trans3].replace(/%%/g, '\ue123')
|
|
}
|
|
for (const i in data.with) {
|
|
const j2 = parse(data.with[i], l + 1, data.color?[consoleColors[data.color],""]:resetColor)
|
|
trans = trans.replace(/%s/, j2[0].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans2 = trans2.replace(/%s/, j2[1].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans3 = trans3.replace(/%s/, j2[2].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
}
|
|
// %n$s only goes up to 4 normally
|
|
if (data.with) {
|
|
if (data.with[0]) {
|
|
const j2_1 = parse(data.with[0], l + 1, data.color?[consoleColors[data.color],""]:resetColor)
|
|
trans = trans.replace(/%1\$s/g, j2_1[0].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans2 = trans2.replace(/%1\$s/g, j2_1[1].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans3 = trans3.replace(/%1\$s/g, j2_1[2].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
}
|
|
if (data.with[1]) {
|
|
const j2_2 = parse(data.with[1], l + 1, data.color?[consoleColors[data.color],""]:resetColor)
|
|
trans = trans.replace(/%2\$s/g, j2_2[0].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans2 = trans2.replace(/%2\$s/g, j2_2[1].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans3 = trans3.replace(/%2\$s/g, j2_2[2].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
}
|
|
if (data.with[2]) {
|
|
const j2_3 = parse(data.with[2], l + 1, data.color?[consoleColors[data.color],""]:resetColor)
|
|
trans = trans.replace(/%3\$s/g, j2_3[0].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans2 = trans2.replace(/%3\$s/g, j2_3[1].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans3 = trans3.replace(/%3\$s/g, j2_3[2].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
}
|
|
if (data.with[3]) {
|
|
const j2_4 = parse(data.with[3], l + 1, data.color?[consoleColors[data.color],""]:resetColor)
|
|
trans = trans.replace(/%4\$s/g, j2_4[0].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans2 = trans2.replace(/%4\$s/g, j2_4[1].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
trans3 = trans3.replace(/%4\$s/g, j2_4[2].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
|
}
|
|
}
|
|
out[0] += trans.replace(/%([0-9]*\$){0,1}s/g, '').replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
|
out[1] += trans2.replace(/%([0-9]*\$){0,1}s/g, '').replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
|
out[2] += trans3.replace(/%([0-9]*\$){0,1}s/g, '').replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
|
}
|
|
if(data.extra){
|
|
for(const i in data.extra){
|
|
parsed=parse(data.extra[i], l, data.color?[consoleColors[data.color],""]:resetColor)
|
|
out[0]+=parsed[0];
|
|
out[1]+=parsed[1];
|
|
out[2]+=parsed[2];
|
|
}
|
|
}
|
|
out[0]+=resetColor[0];
|
|
return out;
|
|
}
|
|
const parse2=function(_data, l, resetColor){
|
|
try{
|
|
return parse(_data)
|
|
} catch(e){
|
|
console.error(e)
|
|
return [
|
|
"\x1B[0m\x1B[38;2;255;85;85mAn error occured while parsing a message. See console for more information.\nJSON that caused the error: "+JSON.stringify(_data),
|
|
"An error occured while parsing a message. See console for more information. JSON that caused the error: "+JSON.stringify(_data),
|
|
"§cAn error occured while parsing a message. See console for more information. JSON that caused the error: "+JSON.stringify(_data)
|
|
]
|
|
}
|
|
}
|
|
module.exports = parse2
|