fix some issue
This commit is contained in:
parent
063291c3e2
commit
168b0520fe
1 changed files with 45 additions and 51 deletions
96
kick.js
96
kick.js
|
@ -7,18 +7,12 @@ function uuidFromIntArray (arr) {
|
||||||
return buf.toString('hex')
|
return buf.toString('hex')
|
||||||
}
|
}
|
||||||
|
|
||||||
function processNbtMessage(msg) {
|
function processNbtMessage (msg) {
|
||||||
try {
|
try {
|
||||||
if (typeof msg === 'string') { // just create simple nbt structure
|
if (!msg || msg.type === 'end') return null;
|
||||||
msg = {
|
if (typeof msg === 'string') return msg
|
||||||
id: 'string',
|
|
||||||
value: msg
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!msg || msg.type === 'end') return msg;
|
const simplified = simplify(msg); // Ensure nbt is defined elsewhere
|
||||||
|
|
||||||
const simplified = nbt.simplify(msg); // Ensure nbt is defined elsewhere
|
|
||||||
const json = JSON.stringify(simplified, (key, val) => {
|
const json = JSON.stringify(simplified, (key, val) => {
|
||||||
if (key === 'id' && Array.isArray(val)) return uuidFromIntArray(val);
|
if (key === 'id' && Array.isArray(val)) return uuidFromIntArray(val);
|
||||||
return val;
|
return val;
|
||||||
|
@ -26,7 +20,7 @@ function processNbtMessage(msg) {
|
||||||
|
|
||||||
return json;
|
return json;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return '{"text":""}';
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,33 +53,28 @@ console.log(kickparser(processNbtMessage(msg2.reason)));
|
||||||
// lazy to make it color
|
// lazy to make it color
|
||||||
function kickparser(component) {
|
function kickparser(component) {
|
||||||
if (component === undefined) return;
|
if (component === undefined) return;
|
||||||
try {
|
if (typeof component === "string") return component;
|
||||||
jsonComponent = JSON.parse(component);
|
|
||||||
} catch (e) {
|
|
||||||
console.error("Invalid JSON format:", component);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
function kickparserText(comp) {
|
function kickparserText(comp) {
|
||||||
let text = '';
|
let text = '';
|
||||||
|
|
||||||
if (typeof comp === 'string') {
|
if (comp.text && typeof comp.text === 'string' || typeof comp.text === 'number') {
|
||||||
text += comp;
|
text += comp.text;
|
||||||
}
|
}
|
||||||
if (typeof comp.value === 'string') {
|
if (comp[""] && typeof comp[""] === 'string' || typeof comp[""] === 'number') {
|
||||||
text += comp.value;
|
text += comp[""];
|
||||||
}
|
}
|
||||||
if (comp.with) {
|
if (comp && typeof comp === 'string' || typeof comp === 'number') {
|
||||||
text += kickparserText(comp.with);
|
return comp;
|
||||||
}
|
|
||||||
|
|
||||||
if (comp.value) {
|
|
||||||
[comp.value].forEach(subComp => {
|
|
||||||
if (typeof subComp === 'string') text += subComp;
|
|
||||||
text += kickparserText(subComp);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (comp.extra) {
|
||||||
|
if (!Array.isArray(comp.extra)) comp.extra = [comp.extra]
|
||||||
|
comp.extra.forEach(subComp => {
|
||||||
|
text += extractText(subComp);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (comp.translate) {
|
if (comp.translate) {
|
||||||
let translateString = lang[comp.translate] || comp.translate;
|
let translateString = lang[comp.translate] || comp.translate;
|
||||||
let DefaultTranslateString = lang[comp.translate] || comp.translate;
|
let DefaultTranslateString = lang[comp.translate] || comp.translate;
|
||||||
|
@ -93,29 +82,27 @@ function kickparser(component) {
|
||||||
|
|
||||||
if (comp.with) {
|
if (comp.with) {
|
||||||
const withArgs = comp.with.map(arg => extractText(arg));
|
const withArgs = comp.with.map(arg => extractText(arg));
|
||||||
|
|
||||||
let usedReplacements = 0;
|
let usedReplacements = 0;
|
||||||
|
|
||||||
|
translateString = translateString.replace(/thing__placeholder__/g, 'default_thing__placeholder__');
|
||||||
translateString = translateString.replace(/%s/g, (match, offset, string) => {
|
translateString = translateString.replace(/%s/g, (match, offset, string) => {
|
||||||
if (offset > 0 && string[offset - 1] === '%') {
|
if (offset > 0 && string[offset - 1] === '%') {
|
||||||
return 's';
|
return 's';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usedReplacements < withArgs.length) {
|
if (usedReplacements < withArgs.length) {
|
||||||
const formattedArg = withArgs[usedReplacements];
|
if (translateString.length + withArgs[usedReplacements].length > 2048) return 'Translate Crash'; // Prevent translate crash
|
||||||
if (translateString.length + formattedArg.length > 2048) return 'Translate Crash';
|
return `thing__placeholder__${usedReplacements++}`;
|
||||||
usedReplacements++;
|
|
||||||
return formattedArg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultMsg = true;
|
DefaultMsg = true;
|
||||||
return "%s";
|
return "%s";
|
||||||
});
|
});
|
||||||
|
|
||||||
translateString = translateString.replace(/%(\d+)\$s/g, (match, index, stringindex, string) => {
|
translateString = translateString.replace(/%(-?\d+)\$s/g, (match, index, stringindex, string) => {
|
||||||
const argIndex = parseInt(index) - 1;
|
const argIndex = parseInt(index, 10) - 1;
|
||||||
|
|
||||||
if (argIndex >= withArgs.length) {
|
if (argIndex < 0 || argIndex >= withArgs.length) {
|
||||||
DefaultMsg = true;
|
DefaultMsg = true;
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
@ -124,13 +111,21 @@ function kickparser(component) {
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
const formattedArg = withArgs[argIndex];
|
if (translateString.length + withArgs[argIndex].length > 2048) return 'Translate Crash'; // Prevent translate crash
|
||||||
if (translateString.length + formattedArg.length > 2048) return 'Translate Crash';
|
return `thing__placeholder__${argIndex}`;
|
||||||
return formattedArg;
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (DefaultMsg) {
|
for (let i = 0; i < withArgs.length; i++) {
|
||||||
|
if (translateString.length + withArgs[i].length > 2048) return 'Translate Crash'; // Prevent translate crash
|
||||||
|
translateString = translateString.replace(new RegExp(`thing__placeholder__${i}`, 'g'), (match) => {
|
||||||
|
const formattedArg = withArgs[i];
|
||||||
|
return formattedArg;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
translateString = translateString.replace(/default_thing__placeholder__/g, 'thing__placeholder__');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DefaultMsg) {
|
||||||
text += DefaultTranslateString;
|
text += DefaultTranslateString;
|
||||||
} else {
|
} else {
|
||||||
text += translateString;
|
text += translateString;
|
||||||
|
@ -141,7 +136,6 @@ function kickparser(component) {
|
||||||
|
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
// console.log(simplify(component));
|
||||||
|
return kickparserText(simplify(component));
|
||||||
return kickparserText(jsonComponent);
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue