NOREFLECT WORKING!!!!!!!!!!!!!

This commit is contained in:
ZXMushroom63 2024-05-24 16:39:34 +08:00
parent 02b7958928
commit 66706815cf
2 changed files with 44 additions and 16 deletions

View File

@ -4,14 +4,14 @@ BaseData reflect_%classname% = new ModData();
ArrayList<BaseData> reflect_%classname%_constructors = new ArrayList<BaseData>();
%constructordefs%
BaseData[] reflect_%classname%_constructors_arr = new BaseData[reflectProfiles.size()];
BaseData[] reflect_%classname%_constructors_arr = new BaseData[reflect_%classname%_constructors.size()];
for (int i = 0; i < reflect_%classname%_constructors_arr.length; i++) {
reflect_%classname%_constructors_arr[i] = reflect_%classname%_constructors.get(i);
}
ArrayList<BaseData> reflect_%classname%_methods = new ArrayList<BaseData>();
%methoddefs%
BaseData[] reflect_%classname%_methods_arr = new BaseData[reflectProfiles.size()];
BaseData[] reflect_%classname%_methods_arr = new BaseData[reflect_%classname%_methods.size()];
for (int i = 0; i < reflect_%classname%_methods_arr.length; i++) {
reflect_%classname%_methods_arr[i] = reflect_%classname%_methods.get(i);
}
@ -31,7 +31,7 @@ BaseData reflect_%classname%_constructor_%constructorname%_%idx% = new ModData()
reflect_%classname%_constructor_%constructorname%_%idx%.set("returnType", %returntype%);
reflect_%classname%_constructor_%constructorname%_%idx%.set("argnames", %argkeys%);
reflect_%classname%_constructor_%constructorname%_%idx%.set("argtypes", %argvalues%);
reflect_%classname%_constructors_%idx%.%constructorimpl%
reflect_%classname%_constructor_%constructorname%_%idx%.%constructorimpl%
reflect_%classname%_constructors.add(reflect_%classname%_constructor_%constructorname%_%idx%);
`;
@ -49,6 +49,11 @@ reflect_%classname%_methods.add(reflect_%classname%_method_%methodname%_%idx%);
const templateManager = `
import net.eaglerforge.api.*;
import java.util.ArrayList;
import java.lang.Exception;
//AUTOGENERATED BY NOREFLECT
//Made by ZXMushroom63
public class PLReflect {
public static ModData makeModData() {
ModData plReflectGlobal = new ModData();
@ -209,7 +214,6 @@ async function generate(fileList) {
var classToLocationMap = new Map();
var cfg;
var output = new JSZip();
const reader = new FileReader();
var classDataDump = {};
logClear();
logTxt("[INIT] Build @ "+(new Date()));
@ -234,13 +238,14 @@ async function generate(fileList) {
classToLocationMap.set(className, classId);
if (cfg.targetFiles.includes(classId)) {
logTxt("Found "+classId+" ["+file.name+"], processing...");
var javaFileContent = await process(file, reader, classDataDump, className);
var javaFileContent = await process(file, new FileReader(), classDataDump, className);
if (cfg.includeReadFiles) {
output.file(file.webkitRelativePath.replaceAll("java/", ""), javaFileContent);
}
}
}
}
console.log(classDataDump);
logTxt(`Creating manager file...`);
createManagerFile(templateManager, cfg, output, classDataDump, classToLocationMap);

View File

@ -7,6 +7,15 @@ const getStatements = {
"char": "params.getChar(%s)",
"double": "params.getDouble(%s)",
}
const primitiveDefaultValues = {
"int": "0",
"String": "\"\"",
"boolean": "false",
"float": "0.0f",
"byte": "(byte) 0",
"char": "\'a\'",
"double": "0.0d",
}
const callbackStatements = {
"boolean": "setCallbackBooleanWithDataArg",
"int": "setCallbackIntWithDataArg",
@ -26,7 +35,7 @@ function reconJ(java, className) {
let constructorRegex = /(public|protected|private|static|\s) +(\w+) *\(([^)]*)\)/g;
let constructors = [...javaText.matchAll(constructorRegex).filter((line)=>{
return !line[0].includes(" private ") && !line[0].includes(" protected ");
return !line[0].includes(" private ") && !line[0].includes(" protected ") && !line[0].includes("\n\t\t") && line[1] !== "private" && line[1] !== "protected";
})];
let constructorDetails = constructors.map((constructor) => {
@ -56,7 +65,7 @@ function reconJ(java, className) {
}
let impl = `setCallbackReflectiveWithArgs("${constructorName}", (BaseData params) -> {
let impl = `setCallbackReflectiveWithDataArg("${constructorName}", (BaseData params) -> {
return new ${className}(${argStr});
});
`;
@ -65,14 +74,15 @@ function reconJ(java, className) {
name: constructorName,
idx: constructors.indexOf(constructor),
arguments: arguments,
impl: impl
impl: impl,
data: constructor
};
});
let methodRegex = /(public|static|\s)* +([\w\<\>\[\]]+)\s+(\w+) *\(([^)]*)\)/g;
let methodRegex = /(public|static|private|protected|\s)* +([\w\<\>\[\]]+)\s+(\w+) *\(([^)]*)\)/g;
let methods = [...javaText.matchAll(methodRegex).filter((line)=>{
return !line[0].includes("> ") && !line[0].startsWith(" else ") && !line[0].startsWith(" new ") && !line[0].includes(" private ") && !line[0].includes(" protected ");
return !line[0].includes("> ") && !line[0].startsWith(" else ") && !line[0].startsWith(" new ") && !line[0].includes(" private ") && !line[0].includes("\tprotected ") && !line[0].includes("\tprivate ") && !line[0].includes(" protected ") && !line[0].includes("\n\t\t");
//Doesn't support Type<Subtype> yet
})];
@ -106,19 +116,31 @@ function reconJ(java, className) {
let prefix = isStatic ? className : `((${className}) params.getReflective("_self"))`;
let impl;
if (returnType === "void") {
impl = `setCallbackVoidWithArgs("${methodName}", (BaseData params) -> {
${prefix}.${methodName}(${argStr});
impl = `setCallbackVoidWithDataArg("${methodName}", (BaseData params) -> {
try {
${prefix}.${methodName}(${argStr});
} catch (Exception _exception_reflect_) {
return;
}
});
`;
} else if (callbackStatementsTypes.includes(returnType)) {
impl = `${callbackStatements[returnType]}("${methodName}", (BaseData params) -> {
return (${returnType}) ${prefix}.${methodName}(${argStr});
try {
return (${returnType}) ${prefix}.${methodName}(${argStr});
} catch (Exception _exception_reflect_) {
return ${primitiveDefaultValues[returnType]};
}
});
`;
} else {
usedClasses.push(returnType);
impl = `setCallbackReflectiveWithArgs("${methodName}", (BaseData params) -> {
return (${returnType}) ${prefix}.${methodName}(${argStr});
impl = `setCallbackReflectiveWithDataArg("${methodName}", (BaseData params) -> {
try {
return (${returnType}) ${prefix}.${methodName}(${argStr});
} catch (Exception _exception_reflect_) {
return null;
}
});
`;
}
@ -130,7 +152,8 @@ function reconJ(java, className) {
isStatic: isStatic,
arguments: arguments,
impl: impl,
idx: methods.indexOf(method)
idx: methods.indexOf(method),
data: method
};
});
return {