Add displayToChat, js string to jcl string

This commit is contained in:
ZXMushroom63 2024-08-23 18:09:56 +08:00
parent d33afdeff6
commit 4aebb8bab7
3 changed files with 89 additions and 11 deletions

View File

@ -9,7 +9,7 @@ var GrappleHookPlugin = {
}; };
PluginAPI.addEventListener("update", () => { //Every client tick PluginAPI.addEventListener("update", () => { //Every client tick
if (!PluginAPI.player.fishEntity) { //If the fish hook does not exist. if (!PluginAPI.player.fishEntity) { //If the fish hook does not exist.
if (GrappleHookPlugin.prev === "GROUND" && (!GrappleHookPlugin.crouchToCancel || !PluginAPI.player.isSneaking.apply(PluginAPI.javaClient.$thePlayer, []))) { //If the old state was ground if (GrappleHookPlugin.prev === "GROUND" && (!GrappleHookPlugin.crouchToCancel || !PluginAPI.player.isSneaking())) { //If the old state was ground
GrappleHookPlugin.prev = "NONE"; //Update the state GrappleHookPlugin.prev = "NONE"; //Update the state
var mx = GrappleHookPlugin.oldXYZ[0] - PluginAPI.player.posX; //Get delta X var mx = GrappleHookPlugin.oldXYZ[0] - PluginAPI.player.posX; //Get delta X
var my = GrappleHookPlugin.oldXYZ[1] - PluginAPI.player.posY; //Get delta Y var my = GrappleHookPlugin.oldXYZ[1] - PluginAPI.player.posY; //Get delta Y

View File

@ -6,7 +6,7 @@
<title>EaglerForge Injector</title> <title>EaglerForge Injector</title>
<style> <style>
* { * {
font-family: sans-serif; font-family: monospace;
} }
button { button {
border: 2px solid black; border: 2px solid black;
@ -249,9 +249,9 @@ var main;(function(){`
); );
const extractConstructorRegex = const extractConstructorRegex =
/^\s*function (\S*?)__init_\d+?\((?!\$)/gm; /^\s*function (\S*?)__init_\d*?\((?!\$)/gm;
const extractConstructorFullNameRegex = const extractConstructorFullNameRegex =
/function (\S*?)__init_[0-9]+/gm; /function (\S*?)__init_[0-9]*/gm;
patchedFile = patchedFile.replaceAll( patchedFile = patchedFile.replaceAll(
extractConstructorRegex, extractConstructorRegex,
(match) => { (match) => {
@ -285,7 +285,7 @@ var main;(function(){`
} }
ModAPI.hooks._rippedMethodTypeMap[\`${fullName}\`] = \`${ ModAPI.hooks._rippedMethodTypeMap[\`${fullName}\`] = \`${
match.includes("function " + fullName + "($this") match.includes("function " + fullName + "($this")
? "instance" ? "instance" //Todo: fix static/instance detection
: "static" : "static"
}\`; }\`;
ModAPI.hooks.methods[\`${fullName}\`]=` + ModAPI.hooks.methods[\`${fullName}\`]=` +
@ -381,8 +381,18 @@ var main;(function(){`
} }
var outProp = "$" + prop; var outProp = "$" + prop;
console.log(outProp); var outputValue = Reflect.get(target, outProp, receiver);
return Reflect.get(target, outProp, receiver); if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
return outputValue;
}, },
set(object, prop, value) { set(object, prop, value) {
var outProp = "$" + prop; var outProp = "$" + prop;
@ -403,9 +413,14 @@ var main;(function(){`
var outProp = "$" + prop; var outProp = "$" + prop;
var outputValue = Reflect.get(target, outProp, receiver); var outputValue = Reflect.get(target, outProp, receiver);
if (outputValue && typeof outputValue === "object") { if (outputValue && typeof outputValue === "object" && !Array.isArray(outputValue)) {
return new Proxy(outputValue, TeaVM_to_Recursive_BaseData_ProxyConf); return new Proxy(outputValue, TeaVM_to_Recursive_BaseData_ProxyConf);
} }
if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
return outputValue; return outputValue;
}, },
set(object, prop, value) { set(object, prop, value) {
@ -519,6 +534,30 @@ var main;(function(){`
console.error(error); console.error(error);
} }
} }
ModAPI.util.stringToUint16Array = function stringToUint16Array(str) {
const buffer = new ArrayBuffer(str.length * 2); // 2 bytes for each char
const uint16Array = new Uint16Array(buffer);
for (let i = 0; i < str.length; i++) {
uint16Array[i] = str.charCodeAt(i);
}
return uint16Array;
}
var stringDefaultConstructor = ModAPI.hooks._classMap["java.lang.String"].constructors.filter(x => {return x.length === 0})[0];
ModAPI.util.string = ModAPI.util.str = function (string) {
var jclString = stringDefaultConstructor();
jclString.$characters.data = ModAPI.util.stringToUint16Array(string);
return jclString;
}
ModAPI.displayToChat = function (param) {
var v = typeof param === "object" ? param.msg : (param + "");
v ||= "";
var jclString = ModAPI.util.string(v);
ModAPI.hooks.methods["nmcg_GuiNewChat_printChatMessage"](ModAPI.javaClient.$ingameGUI.$persistantChatGUI, ModAPI.hooks._classMap["net.minecraft.util.ChatComponentText"].constructors[0](jclString));
}
const updateMethodName = ModAPI.util.getMethodFromPackage("net.minecraft.client.entity.EntityPlayerSP", "onUpdate"); const updateMethodName = ModAPI.util.getMethodFromPackage("net.minecraft.client.entity.EntityPlayerSP", "onUpdate");
const originalUpdate = ModAPI.hooks.methods[updateMethodName]; const originalUpdate = ModAPI.hooks.methods[updateMethodName];
ModAPI.hooks.methods[updateMethodName] = function (...args) { ModAPI.hooks.methods[updateMethodName] = function (...args) {

View File

@ -75,8 +75,18 @@
} }
var outProp = "$" + prop; var outProp = "$" + prop;
console.log(outProp); var outputValue = Reflect.get(target, outProp, receiver);
return Reflect.get(target, outProp, receiver); if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
return outputValue;
}, },
set(object, prop, value) { set(object, prop, value) {
var outProp = "$" + prop; var outProp = "$" + prop;
@ -97,9 +107,14 @@
var outProp = "$" + prop; var outProp = "$" + prop;
var outputValue = Reflect.get(target, outProp, receiver); var outputValue = Reflect.get(target, outProp, receiver);
if (outputValue && typeof outputValue === "object") { if (outputValue && typeof outputValue === "object" && !Array.isArray(outputValue)) {
return new Proxy(outputValue, TeaVM_to_Recursive_BaseData_ProxyConf); return new Proxy(outputValue, TeaVM_to_Recursive_BaseData_ProxyConf);
} }
if (outputValue && typeof outputValue === "function") {
return function (...args) {
return outputValue.apply(target, args);
}
}
return outputValue; return outputValue;
}, },
set(object, prop, value) { set(object, prop, value) {
@ -213,6 +228,30 @@
console.error(error); console.error(error);
} }
} }
ModAPI.util.stringToUint16Array = function stringToUint16Array(str) {
const buffer = new ArrayBuffer(str.length * 2); // 2 bytes for each char
const uint16Array = new Uint16Array(buffer);
for (let i = 0; i < str.length; i++) {
uint16Array[i] = str.charCodeAt(i);
}
return uint16Array;
}
var stringDefaultConstructor = ModAPI.hooks._classMap["java.lang.String"].constructors.filter(x => {return x.length === 0})[0];
ModAPI.util.string = ModAPI.util.str = function (string) {
var jclString = stringDefaultConstructor();
jclString.$characters.data = ModAPI.util.stringToUint16Array(string);
return jclString;
}
ModAPI.displayToChat = function (param) {
var v = typeof param === "object" ? param.msg : (param + "");
v ||= "";
var jclString = ModAPI.util.string(v);
ModAPI.hooks.methods["nmcg_GuiNewChat_printChatMessage"](ModAPI.javaClient.$ingameGUI.$persistantChatGUI, ModAPI.hooks._classMap["net.minecraft.util.ChatComponentText"].constructors[0](jclString));
}
const updateMethodName = ModAPI.util.getMethodFromPackage("net.minecraft.client.entity.EntityPlayerSP", "onUpdate"); const updateMethodName = ModAPI.util.getMethodFromPackage("net.minecraft.client.entity.EntityPlayerSP", "onUpdate");
const originalUpdate = ModAPI.hooks.methods[updateMethodName]; const originalUpdate = ModAPI.hooks.methods[updateMethodName];
ModAPI.hooks.methods[updateMethodName] = function (...args) { ModAPI.hooks.methods[updateMethodName] = function (...args) {