1+ package mods .Hileb .shotaasm .api ;
2+
3+
4+ import top .outlands .foundation .TransformerDelegate ;
5+
6+ import net .minecraft .launchwrapper .IClassNameTransformer ;
7+ import net .minecraft .launchwrapper .IClassTransformer ;
8+ import top .outlands .foundation .boot .TransformerHolder ;
9+
10+ import java .util .*;
11+
12+ import static net .minecraft .launchwrapper .Launch .classLoader ;
13+ import static top .outlands .foundation .boot .Foundation .LOGGER ;
14+ import static top .outlands .foundation .boot .TransformerHolder .*;
15+
16+ import org .objectweb .asm .ClassReader ;
17+ import org .objectweb .asm .ClassWriter ;
18+ import org .objectweb .asm .tree .ClassNode ;
19+ import top .outlands .foundation .IExplicitTransformer ;
20+
21+ public class TransformerRegistry {
22+
23+ public static void registerRenameTransformer (IClassNameTransformer transformer ) {
24+ TransformerDelegate .registerRenameTransformer (transformer );
25+ }
26+
27+ public static void registerExplicitTransformer (final int priorty , final IExplicitTransformer transformer , String ... targets ) {
28+ TransformerDelegate .registerExplicitTransformer (new IExplicitTransformer () {
29+
30+ @ Override
31+ public byte [] transform (byte [] basicClass ) {
32+ return transformer .transform (basicClass );
33+ }
34+
35+ @ Override
36+ public int getPriority () {
37+ return priorty ;
38+ }
39+ }, targets );
40+ }
41+
42+ public static void registerASMExplicitTransformer (final Consumer <ClassNode > transformer , String ... targets ) {
43+ TransformerDelegate .registerExplicitTransformer (new IExplicitTransformer () {
44+
45+ @ Override
46+ public byte [] transform (byte [] basicClass ) {
47+ ClassReader classReader = new ClassReader (bytes );
48+ ClassNode classNode = new ClassNode ();
49+ classReader .accept (classNode , 0 );
50+ transformer .apply (classNode );
51+ ClassWriter classWriter = new ClassWriter (classNode );
52+ classNode .accept (classWriter );
53+ return classWriter .toByteArray ();
54+ }
55+
56+ @ Override
57+ public int getPriority () {
58+ return priorty ;
59+ }
60+ }, targets );
61+ }
62+
63+ public static void registerASMExplicitTransformer (final int priorty , final Consumer <ClassNode > transformer , String ... targets ) {
64+ TransformerDelegate .registerExplicitTransformer (new IExplicitTransformer () {
65+ @ Override
66+ public byte [] transform (byte [] basicClass ) {
67+ ClassReader classReader = new ClassReader (bytes );
68+ ClassNode classNode = new ClassNode ();
69+ classReader .accept (classNode , 0 );
70+ transformer .apply (classNode );
71+ ClassWriter classWriter = new ClassWriter (classNode );
72+ classNode .accept (classWriter );
73+ return classWriter .toByteArray ();
74+ }
75+ }, targets );
76+ }
77+
78+ public static void registerExplicitTransformer (IExplicitTransformer transformer , String ... targets ) {
79+ TransformerDelegate .registerExplicitTransformer (transformer , targets );
80+ }
81+
82+ public static void registerClassTransformer (IClassTransformer transformer ) {
83+ TransformerDelegate .registerClassTransformer (transformer );
84+ }
85+
86+ public static void unregisterClassTransformer (IClassTransformer transformer ) {
87+ TransformerDelegate .unRegisterTransformer (transformer );
88+ }
89+ }
0 commit comments