1919
2020package net .minecraftforge .fml .common ;
2121
22+ import com .google .common .collect .ImmutableList ;
23+ import com .google .common .collect .Lists ;
24+ import net .minecraft .launchwrapper .LaunchClassLoader ;
25+ import net .minecraftforge .fml .common .asm .transformers .ModAPITransformer ;
26+ import net .minecraftforge .fml .common .discovery .ASMDataTable ;
27+ import top .outlands .foundation .TransformerDelegate ;
28+
2229import java .io .File ;
23- import java .net .MalformedURLException ;
24- import java .net .URI ;
25- import java .net .URISyntaxException ;
26- import java .net .URL ;
27- import java .net .URLClassLoader ;
30+ import java .net .*;
2831import java .util .ArrayList ;
2932import java .util .Arrays ;
3033import java .util .List ;
3134import java .util .Set ;
3235
33- import net .minecraft .launchwrapper .IClassTransformer ;
34- import net .minecraft .launchwrapper .LaunchClassLoader ;
35- import net .minecraftforge .fml .common .asm .transformers .ModAPITransformer ;
36- import net .minecraftforge .fml .common .discovery .ASMDataTable ;
37-
38- import org .apache .logging .log4j .Level ;
39-
40- import com .google .common .collect .ImmutableList ;
41- import com .google .common .collect .Lists ;
42-
4336/**
4437 * A simple delegating class loader used to load mods into the system
4538 *
@@ -55,17 +48,34 @@ public class ModClassLoader extends URLClassLoader
5548
5649 public ModClassLoader (ClassLoader parent ) {
5750 super (new URL [0 ], null );
58- if (parent instanceof LaunchClassLoader )
59- {
51+ this .sources = Lists .newArrayList ();
52+
53+ if (parent instanceof LaunchClassLoader ) {
6054 this .mainClassLoader = (LaunchClassLoader )parent ;
55+ File customLibFolder = new File ("./libraries/customize_libraries" );
56+ if (!customLibFolder .exists ()) customLibFolder .mkdir ();
57+
58+ if (customLibFolder .isDirectory ()) {
59+ File [] files = customLibFolder .listFiles ();
60+ if (files != null ) {
61+ for (File file : files ) {
62+ if (file .isFile () && file .getName ().endsWith (".jar" )) {
63+ try {
64+ this .addFile (file );
65+ FMLLog .log .info ("Loaded custom library {}" , file .getName ());
66+ } catch (MalformedURLException e ) {
67+ FMLLog .log .error ("Unable to add custom mod file {} to the mod classloader" , file .getAbsolutePath (), e );
68+ }
69+ }
70+ }
71+ }
72+ }
6173 }
62- this .sources = Lists .newArrayList ();
6374 }
6475
6576 public void addFile (File modFile ) throws MalformedURLException
6677 {
67- URL url = modFile .toURI ().toURL ();
68- mainClassLoader .addURL (url );
78+ mainClassLoader .addURL (modFile .getAbsoluteFile ().toURI ().toURL ());
6979 this .sources .add (modFile );
7080 }
7181
@@ -173,9 +183,8 @@ public void clearNegativeCacheFor(Set<String> classList)
173183
174184 public ModAPITransformer addModAPITransformer (ASMDataTable dataTable )
175185 {
176- mainClassLoader .registerTransformer ("net.minecraftforge.fml.common.asm.transformers.ModAPITransformer" );
177- List <IClassTransformer > transformers = mainClassLoader .getTransformers ();
178- ModAPITransformer modAPI = (ModAPITransformer ) transformers .get (transformers .size ()-1 );
186+ ModAPITransformer modAPI = new ModAPITransformer ();
187+ TransformerDelegate .registerTransformerByInstance (modAPI );
179188 modAPI .initTable (dataTable );
180189 return modAPI ;
181190 }
0 commit comments