EaglerForge/NoReflect/javaRecon.js

62 lines
2.0 KiB
JavaScript
Raw Normal View History

2024-05-21 06:07:24 -05:00
const getStatements = {
"int": "params.getInt(%s)",
"String": "params.getString(%s)",
"boolean": "params.getBoolean(%s)",
"float": "params.getFloat(%s)",
"byte": "params.getByte(%s)",
"char": "params.getChar(%s)",
"double": "params.getDouble(%s)",
}
const getStatementsTypes = Object.keys(getStatements);
function reconJ(java, className) {
let constructorRegex = /(public|protected|private|static|\s) +(\w+) *\(([^)]*)\)/g;
let constructors = [...java.matchAll(constructorRegex).filter((line)=>{
return !line.includes(" private ") || !line.includes(" protected ");
})];
let constructorDetails = constructors.map((constructor) => {
let constructorName = constructor[2];
let argumentString = constructor[3];
let arguments = {};
if (argumentString.trim().length > 0) {
let argumentList = argumentString.split(",");
argumentList.forEach((argument) => {
let [type, name] = argument.trim().split(" ");
arguments[name] = type;
});
}
let argStr = "";
var argumentsKeys = Object.keys(arguments);
for (let i = 0; i < argumentsKeys.length; i++) {
const key = argumentsKeys[i];
argStr += `(${arguments[key]}) ${getStatementsTypes.includes(arguments[key]) ? getStatements[arguments[key]].replaceAll("%s", "\""+key+"\"") : `params.getReflective("${key}")`}`;
if (i !== argumentsKeys.length - 1) {
argStr += ", "
}
}
let impl = `
setCallbackReflectiveWithArgs("${constructorName}", (BaseData params) -> {
return new ${className}(${argStr})
});
`;
return {
name: constructorName,
idx: constructors.indexOf(constructor),
arguments: arguments,
impl: impl
};
});
return {
className: className,
constructors: constructorDetails
}
}