Exhibitionism is tiny class file transformation tool. Exhibitionism make all class, field and method to public, non final.
Clone project to your local machine and open terminal in directory where build.gradle located. Run following command to compile.
./gradlew installDist
Runnable script and runtime libraries will install under build/install/Exhibitionism
Open terminal at build/install/Exhibitionism/bin
. Execute Exhibitionism
(Mac/Linux) or Exhibitionism.bat
(Windows)
with following parameters.
Input file name.
Output file name. If file already exists, replace original.
Number of thread used to transform class.
If this flag is set, do not publify.
If this flag is set, do not open final class/field/method.
Restrict path to be opened. Usually, package name. You can set multiple path with deliminator ','
If this flag set, do not modify static final field, since such field is usually constant.
If set, Exhibitionism will ignore duplicated files and does not add them to the output file.
If not set, invalid access to classes will be fixed
./Exhibitionism --input bukkit.jar --output bukkit-open.jar -parallel 8 --path net.minecraft,org.bukkit.craftbukkit
Exhibitionism is hosted in heartpattern maven repository. To use Exhibitionism in your code, first add maven repository.
repositories {
maven {
url 'https://maven.heartpattern.kr/repository/maven-public/'
}
}
And add dependency
dependencies {
compile 'kr.heartpattern:Exhibitionism:1.0.0-SNAPSHOT'
}
API is quite tiny and simple. You can see example usage in App.kt
transform(
ExhibitionismOptions(
source = "bukkit.jar",
destination = "bukkit-open.jar",
parallel = 8,
path = setOf("net.minecraft", "org.bukkit.craftbukkit"),
logger = Logger.getGlobal(),
public = true,
open = true,
noStaticFinal = true
)
)