Simplified monkey patching library to help with modding.
This is the classed version of the patcher, for Omnicord or any hermes app you can check the non-classed version in the official Omnicord repo.
npm i @jesusqc/omnicordpatcher
First import the patcher class.
import {OmnicordPatcher} from "OmnicordPatcher";
Then we can use it to patch any method easily!
// This prefixes the patched method with another method of our selection
OmnicordPatcher.addPrefix(targetObject, 'targetMethod', (args) => {
console.log("hello from a prefix");
});
// This postfixes the patched method with another method of our selection
OmnicordPatcher.addPostfix(targetObject, 'targetMethod', (args, result) => {
console.log("hello from a postfix");
// We can modify the result of the patched method!
value = 0;
});
// This overrides the patched method with another method of our selection
OmnicordPatcher.addOverride(targetObject, 'targetMethod', (args, originalMethod) => {
console.log("hello from an override");
// We could call the original method if needed
// originalMethod(args);
});
As you can see it is pretty simple!
For unpatching just save the returned method for your prefix, postfix or override:
const myPrefix = OmnicordPatcher.addPrefix(......
OmnicordPatcher.unpatchPrefix(targetObject, targetMethod, myPrefix);
You can also unpatch all prefixes, postfixes and overrides from a patched method:
OmnicordPatcher.unpatchAll(targetObject, targetMethod);
Imagine we have the function test inside the object window
:
function test(){
console.log("this is a test");
}
This is how all the seen methods would look like:
test();
// this is a test
const prefix = OmnicordPatcher.addPrefix(window, 'test', (_) => {
console.log("hello from a prefix");
});
test();
// hello from a prefix
// this is a test
const postfix = OmnicordPatcher.addPostfix(window, 'test', (_, __) => {
console.log("hello from a postfix");
});
test();
// hello from a prefix
// this is a test
// hello from a postfix
const override = OmnicordPatcher.addOverride(window, 'test', (_, __) => {
console.log("hello from an override");
});
test();
// hello from a prefix
// hello from an override
// hello from a postfix
And we could then unpatch if needed:
OmnicordPatcher.unpatchPrefix(window, 'test', prefix);
test();
// hello from an override
// hello from a postfix
OmnicordPatcher.unpatchPostfix(window, 'test', postfix);
test();
// hello from an override
OmnicordPatcher.unpatchOverride(window, 'test', override);
test();
// this is a test
As you can see we got the original function back after unpatching everything!
Yes, you can have multiple prefixes, postfixes and overrides for a single method, they will run in order of registration, meaning that the later you register a method, the later it will run