mirror of
https://github.com/eaglerforge/EaglerForgeInjector
synced 2025-07-25 07:01:20 -09:00
Fix gun bug, add more static variables and add clinit methods
This commit is contained in:
parent
8c1ae93040
commit
a519eb7afa
@ -6,6 +6,7 @@
|
|||||||
ModAPI.meta.description("Requires AsyncSink.");
|
ModAPI.meta.description("Requires AsyncSink.");
|
||||||
|
|
||||||
function PistolItem() {
|
function PistolItem() {
|
||||||
|
var DamageSourceClass = ModAPI.reflect.getClassByName("DamageSource");
|
||||||
var creativeMiscTab = ModAPI.reflect.getClassById("net.minecraft.creativetab.CreativeTabs").staticVariables.tabMisc;
|
var creativeMiscTab = ModAPI.reflect.getClassById("net.minecraft.creativetab.CreativeTabs").staticVariables.tabMisc;
|
||||||
var itemClass = ModAPI.reflect.getClassById("net.minecraft.item.Item");
|
var itemClass = ModAPI.reflect.getClassById("net.minecraft.item.Item");
|
||||||
var itemSuper = ModAPI.reflect.getSuper(itemClass, (x) => x.length === 1);
|
var itemSuper = ModAPI.reflect.getSuper(itemClass, (x) => x.length === 1);
|
||||||
@ -53,7 +54,11 @@
|
|||||||
}
|
}
|
||||||
ModAPI.reflect.prototypeStack(itemClass, nmi_ItemPistol);
|
ModAPI.reflect.prototypeStack(itemClass, nmi_ItemPistol);
|
||||||
nmi_ItemPistol.prototype.$onItemRightClick = function ($itemstack, $world, $player) {
|
nmi_ItemPistol.prototype.$onItemRightClick = function ($itemstack, $world, $player) {
|
||||||
var cactus = ModAPI.reflect.getClassByName("DamageSource").staticVariables.cactus;
|
DamageSourceClass.staticMethods.$callClinit.method();
|
||||||
|
//Noticed that the gun only worked after an entity in the world takes damage XD
|
||||||
|
//TeaVM is very optimised. Using $callClinit tells it to hurry up pretty much lol
|
||||||
|
|
||||||
|
var cactus = DamageSourceClassstaticVariables.cactus;
|
||||||
var world = ModAPI.util.wrap($world);
|
var world = ModAPI.util.wrap($world);
|
||||||
var entityplayer = ModAPI.util.wrap($player);
|
var entityplayer = ModAPI.util.wrap($player);
|
||||||
var shotentity = entityRayCast(entityplayer, world, 12.0)
|
var shotentity = entityRayCast(entityplayer, world, 12.0)
|
||||||
|
27
injector.js
27
injector.js
@ -18,24 +18,17 @@ function entriesToStaticVariableProxy(entries, prefix) {
|
|||||||
var getComponents = "";
|
var getComponents = "";
|
||||||
entries.forEach((entry) => {
|
entries.forEach((entry) => {
|
||||||
getComponents += `
|
getComponents += `
|
||||||
case \`${entry.name}\`:
|
case \`${entry.name}\`: return ${entry.variable};`;
|
||||||
return ${entry.variable};
|
|
||||||
break;`;
|
|
||||||
});
|
});
|
||||||
getComponents += `
|
getComponents += `
|
||||||
default:
|
default: return Reflect.get(a,b,c);`
|
||||||
return Reflect.get(a,b,c);`
|
|
||||||
|
|
||||||
var setComponents = "";
|
var setComponents = "";
|
||||||
entries.forEach((entry) => {
|
entries.forEach((entry) => {
|
||||||
setComponents += `
|
setComponents += `
|
||||||
case \`${entry.name}\`:
|
case \`${entry.name}\`: ${entry.variable} = c; break;`;
|
||||||
${entry.variable} = c;
|
|
||||||
break;`;
|
|
||||||
});
|
});
|
||||||
setComponents += `
|
setComponents += ` default: a[b]=c;`
|
||||||
default:
|
|
||||||
a[b]=c;`
|
|
||||||
/*/
|
/*/
|
||||||
|
|
||||||
ModAPI.hooks._rippedStaticIndexer[\`${prefix.replace(
|
ModAPI.hooks._rippedStaticIndexer[\`${prefix.replace(
|
||||||
@ -196,8 +189,7 @@ var main;(function(){`
|
|||||||
(match) => {
|
(match) => {
|
||||||
if (
|
if (
|
||||||
match.includes("__init_") ||
|
match.includes("__init_") ||
|
||||||
match.includes("__clinit_") ||
|
match.includes("__clinit_")
|
||||||
match.includes("_$callClinit")
|
|
||||||
) {
|
) {
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
@ -212,13 +204,14 @@ var main;(function(){`
|
|||||||
ModAPI.hooks.methods[\`${fullName}\`]=` +
|
ModAPI.hooks.methods[\`${fullName}\`]=` +
|
||||||
match.replace(fullName + "(", "(")
|
match.replace(fullName + "(", "(")
|
||||||
);
|
);
|
||||||
return match;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
var staticVariables = [
|
var staticVariables = [
|
||||||
...patchedFile.matchAll(/var \S+?_\S+?_\S+? = null;/gm),
|
...patchedFile.matchAll(/var \S+?_\S+?_\S+? = /gm),
|
||||||
].flatMap((x) => {
|
].flatMap((x) => {
|
||||||
return x[0];
|
return x[0];
|
||||||
|
}).filter(x => {
|
||||||
|
return (!x.includes("$_clinit_$")) && (!x.includes("$lambda$"))
|
||||||
});
|
});
|
||||||
patchedFile = patchedFile.replaceAll(
|
patchedFile = patchedFile.replaceAll(
|
||||||
/var \S+?_\S+? = \$rt_classWithoutFields\(\S*?\);/gm,
|
/var \S+?_\S+? = \$rt_classWithoutFields\(\S*?\);/gm,
|
||||||
@ -232,7 +225,7 @@ var main;(function(){`
|
|||||||
if (entry.startsWith(prefix)) {
|
if (entry.startsWith(prefix)) {
|
||||||
var variableName = entry
|
var variableName = entry
|
||||||
.replace("var ", "")
|
.replace("var ", "")
|
||||||
.replace(" = null;", "");
|
.replace(" = ", "");
|
||||||
var segments = variableName.split("_");
|
var segments = variableName.split("_");
|
||||||
segments.splice(0, 2);
|
segments.splice(0, 2);
|
||||||
var name = segments.join("_");
|
var name = segments.join("_");
|
||||||
@ -262,7 +255,7 @@ var main;(function(){`
|
|||||||
if (entry.startsWith(prefix)) {
|
if (entry.startsWith(prefix)) {
|
||||||
var variableName = entry
|
var variableName = entry
|
||||||
.replace("var ", "")
|
.replace("var ", "")
|
||||||
.replace(" = null;", "");
|
.replace(" = ", "");
|
||||||
var segments = variableName.split("_");
|
var segments = variableName.split("_");
|
||||||
segments.splice(0, 2);
|
segments.splice(0, 2);
|
||||||
var name = segments.join("_");
|
var name = segments.join("_");
|
||||||
|
19
postinit.js
19
postinit.js
@ -890,14 +890,12 @@ globalThis.modapi_postinit = "(" + (() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ModAPI.events.newEvent("bootstrap", "server");
|
ModAPI.events.newEvent("bootstrap", "server");
|
||||||
ModAPI.events.newEvent("prebootstrap", "server");
|
|
||||||
const bootstrapClass = ModAPI.reflect.getClassById("net.minecraft.init.Bootstrap");
|
const bootstrapClass = ModAPI.reflect.getClassById("net.minecraft.init.Bootstrap");
|
||||||
const originalBootstrap = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.init.Bootstrap", "register")];
|
const originalBootstrap = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.init.Bootstrap", "register")];
|
||||||
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.init.Bootstrap", "register")] = function (...args) {
|
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.init.Bootstrap", "register")] = function (...args) {
|
||||||
if (bootstrapClass.staticVariables.alreadyRegistered) {
|
if (bootstrapClass.staticVariables.alreadyRegistered) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ModAPI.events.callEvent("prebootstrap", {});
|
|
||||||
var x = originalBootstrap.apply(this, args);
|
var x = originalBootstrap.apply(this, args);
|
||||||
ModAPI.util.bootstrap();
|
ModAPI.util.bootstrap();
|
||||||
console.log("[ModAPI] Hooked into bootstrap. .blocks, .items, .materials and .enchantments are now accessible.");
|
console.log("[ModAPI] Hooked into bootstrap. .blocks, .items, .materials and .enchantments are now accessible.");
|
||||||
@ -905,23 +903,6 @@ globalThis.modapi_postinit = "(" + (() => {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ModAPI.events.newEvent("registeritems", "server");
|
|
||||||
const originalItemRegister = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.item.Item", "registerItems")];
|
|
||||||
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.item.Item", "registerItems")] = function (...args) {
|
|
||||||
var x = originalItemRegister.apply(this, args);
|
|
||||||
ModAPI.events.callEvent("registeritems", {});
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
ModAPI.events.newEvent("registerblocks", "server");
|
|
||||||
const originalBlockRegister = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.block.Block", "registerBlocks")];
|
|
||||||
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.block.Block")] = function (...args) {
|
|
||||||
var x = originalBlockRegister.apply(this, args);
|
|
||||||
ModAPI.events.callEvent("registerblocks", {});
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
const originalOptionsInit = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.client.gui.GuiOptions", "initGui")];
|
const originalOptionsInit = ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.client.gui.GuiOptions", "initGui")];
|
||||||
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.client.gui.GuiOptions", "initGui")] = function (...args) {
|
ModAPI.hooks.methods[ModAPI.util.getMethodFromPackage("net.minecraft.client.gui.GuiOptions", "initGui")] = function (...args) {
|
||||||
var x = originalOptionsInit.apply(this, args);
|
var x = originalOptionsInit.apply(this, args);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user