Tuna-bytes is an all-purpose powerful class and bytecode manipulation mixins for Java, which is intended at those with minimal understanding of the Java bytecode structure.
- Full support for the notorious Java 9+ versions, as well as Java 8.
- Does not require access to the source code of classes, and works well even on third-party resources.
- Does not require any knowledge of the Java bytecode.
- Requires zero overhead to get started. Just add Tuna-Bytes as a dependency and as an annotation processor, and Tuna-Bytes will handle the rest.
- Does not require any additional Java execution arguments, like what Java agents do.
Check the wiki for a full overview on the library.
- Maven setup
- Gradle setup
- Getting started
- Example: Overwrite a method
- Example: Inject into a method
- Example: Create accessors for inaccessible fields and methods
- Example: Mirroring a field or a method
Just like any other bytecode manipulation library, manipulating a class after is has been loaded is not possible without things like instrumentation, agents or such. Tuna-bytes assumes that any class it is about to modify has not been loaded, and will otherwise throw an exception. To suppress Class XX has already been loaded
exceptions, use MixinsBootstrap.init(true)