29
29
import java .nio .file .Paths ;
30
30
import java .util .ArrayList ;
31
31
import java .util .Collections ;
32
+ import java .util .HashMap ;
32
33
import java .util .HashSet ;
33
34
import java .util .List ;
34
35
import java .util .Locale ;
36
+ import java .util .Map ;
37
+ import java .util .ServiceLoader ;
35
38
import java .util .Set ;
36
39
import java .util .regex .Pattern ;
37
40
38
41
import net .fabricmc .tinyremapper .TinyRemapper .LinkedMethodPropagation ;
39
- import net .fabricmc .tinyremapper .extension .mixin .MixinExtension ;
40
42
41
43
public class Main {
42
44
public static void main (String [] rawArgs ) {
@@ -60,7 +62,12 @@ public static void main(String[] rawArgs) {
60
62
boolean inferNameFromSameLvIndex = false ;
61
63
NonClassCopyMode ncCopyMode = NonClassCopyMode .FIX_META_INF ;
62
64
int threads = -1 ;
63
- boolean enableMixin = false ;
65
+
66
+ Map <String , TinyRemapper .CLIExtensionProvider > providerMap = new HashMap <>();
67
+ List <TinyRemapper .Extension > providedExtensions = new ArrayList <>();
68
+ ServiceLoader <TinyRemapper .CLIExtensionProvider > cliProviderLoader =
69
+ ServiceLoader .load (TinyRemapper .CLIExtensionProvider .class );
70
+ cliProviderLoader .iterator ().forEachRemaining (provider -> providerMap .put (provider .name (), provider ));
64
71
65
72
for (String arg : rawArgs ) {
66
73
if (arg .startsWith ("--" )) {
@@ -143,7 +150,11 @@ public static void main(String[] rawArgs) {
143
150
144
151
break ;
145
152
case "mixin" :
146
- enableMixin = true ;
153
+ handleExtension (providerMap , "mixin" , providedExtensions );
154
+ break ;
155
+ case "ext" :
156
+ case "extension" :
157
+ handleExtension (providerMap , arg .substring (valueSepPos + 1 ), providedExtensions );
147
158
break ;
148
159
default :
149
160
System .out .println ("invalid argument: " +arg +"." );
@@ -255,8 +266,8 @@ public static void main(String[] rawArgs) {
255
266
.inferNameFromSameLvIndex (inferNameFromSameLvIndex )
256
267
.threads (threads );
257
268
258
- if ( enableMixin ) {
259
- builder = builder . extension ( new MixinExtension () );
269
+ for ( TinyRemapper . Extension ext : providedExtensions ) {
270
+ ext . attach ( builder );
260
271
}
261
272
262
273
TinyRemapper remapper = builder .build ();
@@ -276,4 +287,19 @@ public static void main(String[] rawArgs) {
276
287
277
288
System .out .printf ("Finished after %.2f ms.\n " , (System .nanoTime () - startTime ) / 1e6 );
278
289
}
290
+
291
+ private static void handleExtension (Map <String , TinyRemapper .CLIExtensionProvider > providerMap , String extName , List <TinyRemapper .Extension > providedExtensions ) {
292
+ TinyRemapper .CLIExtensionProvider provider = providerMap .get (extName );
293
+
294
+ if (provider == null ) {
295
+ System .err .println ("No such extension: " + extName );
296
+ System .exit (1 );
297
+ }
298
+
299
+ TinyRemapper .Extension extension = provider .provideExtension ();
300
+
301
+ if (extension != null ) {
302
+ providedExtensions .add (extension );
303
+ }
304
+ }
279
305
}
0 commit comments