1.0.1 • Published 2 months ago

@jesusqc/omnicordpatcher v1.0.1

Weekly downloads
-
License
GPL-3.0
Repository
-
Last release
2 months ago

OmnicordPatcher

Simplified monkey patching library to help with modding.

Installation

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

My first patch

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!

Unpatching

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);

Example

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!

Multi Prefixes, Postfixes and Overrides

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

1.0.1

2 months ago

1.0.0

2 months ago