Skip to content

Commit acf2589

Browse files
authored
add autoload custom libs
1 parent eb0608e commit acf2589

1 file changed

Lines changed: 32 additions & 23 deletions

File tree

src/main/java/net/minecraftforge/fml/common/ModClassLoader.java

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,20 @@
1919

2020
package 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+
2229
import 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.*;
2831
import java.util.ArrayList;
2932
import java.util.Arrays;
3033
import java.util.List;
3134
import 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

Comments
 (0)