mirror of
https://github.com/zaaarf/lillero.git
synced 2024-11-22 15:34:49 +01:00
docs: added README.md
This commit is contained in:
parent
5b574a7cbf
commit
9f2777dedb
1 changed files with 41 additions and 0 deletions
41
README.md
Normal file
41
README.md
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# lillero
|
||||||
|
*don't do coremods*
|
||||||
|
|
||||||
|
A simple and slim ASM patching framework, allowing to modify block game code.
|
||||||
|
|
||||||
|
## How
|
||||||
|
This library provides the core interface: `IInjector`. All patches which implement this interface and are defined as services will be loaded and applied at startup.
|
||||||
|
|
||||||
|
Some methods must be implemented, specifying which class and method will be patched:
|
||||||
|
* `targetClass()` : returns full name of class to patch (such as `net.minecraft.client.Minecraft`)
|
||||||
|
* `methodName()` : returns name (Searge obfuscated) of method to patch
|
||||||
|
* `methodDesc()` : returns descriptor (arguments and return type) of method to patch
|
||||||
|
* `inject(ClassNode clazz, MethodNode method)` : will be invoked providing correct class and method. This is where the actual patching happens
|
||||||
|
Some extra methods should also be implemented to help identify your patch:
|
||||||
|
* `name()` : returns patch name
|
||||||
|
* `reason()` : returns patch description
|
||||||
|
|
||||||
|
To make your classes service providers, a simple text file should be defined under `src/main/resources/META-INF/services` in your mod project: `ftbsc.lll.IInjector`. Inside such file, put full class paths of your patches.
|
||||||
|
|
||||||
|
To load patches created with this library, a Launch Plugin loader is necessary (such as our [lillero-loader](https://git.fantabos.co/lillero-loader/))
|
||||||
|
|
||||||
|
### Example
|
||||||
|
```java
|
||||||
|
// file src/main/java/example/patches/SamplePatch.java
|
||||||
|
package example.patches;
|
||||||
|
import ftbsc.lll.IInjector;
|
||||||
|
public class SamplePatch implements IInjector {
|
||||||
|
public String name() { return "SamplePatch"; }
|
||||||
|
public String targetClass() { return "net.minecraft.client.Minecraft"; }
|
||||||
|
public String methodName() { return "func_71407_l"; } // tick()
|
||||||
|
public String methodDesc() { return "()V"; }
|
||||||
|
public void inject(ClassNode clazz, MethodNode main) {
|
||||||
|
InsnList insnList = new InsnList();
|
||||||
|
insnList.add(new InsnNode(POP));
|
||||||
|
main.instructions.insert(insnList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// file src/main/resources/META-INF/services/ftbsc.lll.IInjector
|
||||||
|
example.patches.SamplePatch
|
||||||
|
```
|
Loading…
Reference in a new issue