Skip to content

Commit 652c339

Browse files
committed
advanced module loader system
1 parent e726df5 commit 652c339

26 files changed

+331
-337
lines changed

src/main/java/rml/deserializer/Argument.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public void execute(DeserializerManager manager, JsonObject jsonObject, Deserial
159159
if (element != null){
160160
if (!element.isJsonObject()) throw new JsonDeserializeException(jsonObject, "field" + name + "is required be json object.");
161161
try {
162-
Map<String, T> map = element.getAsJsonObject().entrySet().stream().collect(Collectors.toMap((entry) -> entry.getKey(), (entry) -> manager.decodeSilently(clazz, entry.getValue())));
162+
Map<String, T> map = element.getAsJsonObject().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, (entry) -> manager.decodeSilently(clazz, entry.getValue())));
163163
context.put(name, map);
164164
}catch (Exception e){
165165
throw new JsonDeserializeException(element, e);

src/main/java/rml/deserializer/DeserializerManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public ResourceLocation parseLocation(String toSplit)
209209
}
210210

211211
public <T, F> AbstractDeserializer<T> map(final Class<T> tClass, final Class<F> fClass, final ResourceLocation resourceLocation, final Function<F, T> function){
212-
return new AbstractDeserializer<T>(resourceLocation, tClass, jsonElement -> function.apply(DeserializerManager.this.decode(fClass, jsonElement)));
212+
return new AbstractDeserializer<>(resourceLocation, tClass, jsonElement -> function.apply(DeserializerManager.this.decode(fClass, jsonElement)));
213213
}
214214

215215
public static JsonElement getFromPath(JsonObject jsonObject, String path){

src/main/java/rml/layer/compat/crt/RMLCrTLoader.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33
import crafttweaker.runtime.IScriptProvider;
44
import net.minecraft.util.ResourceLocation;
55
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
6-
import org.apache.commons.io.FilenameUtils;
76
import rml.loader.api.annotations.PrivateAPI;
8-
import rml.loader.api.utils.file.FileHelper;
97
import rml.loader.ResourceModLoader;
108
import rml.loader.api.mods.module.ModuleType;
119
import rml.loader.core.RMLFMLLoadingPlugin;
12-
import rml.loader.api.config.v2.config.ConfigUtils;
13-
import rml.loader.api.config.v2.config.elements.*;
1410

1511
import java.io.IOException;
12+
import java.nio.charset.StandardCharsets;
1613

1714
/**
1815
* @Project ResourceModLoader
@@ -31,31 +28,28 @@ public class RMLCrTLoader {
3128
if(provider_1 instanceof EventScriptProvider){
3229
return provider_1;
3330
} else {
34-
RMLFMLLoadingPlugin.Container.LOGGER.info("Event Script Provider is injected into CrT:"+provider_1.toString());
31+
RMLFMLLoadingPlugin.Container.LOGGER.info("Event Script Provider is injected into CrT : {}", provider_1);
3532
return new EventScriptProvider(provider_1);
3633
}
3734
}
3835

3936
public static IScriptProvider getScriptProviders(){
4037
RMLScriptProvider providerCustom = new RMLScriptProvider();
41-
ResourceModLoader.loadModuleFindAssets(ModuleType.valueOf(new ResourceLocation("rml", "mod_crt")), (containerHolder, module, root, file) -> {
42-
String relative = root.relativize(file).toString();
43-
if (!"zs".equals(FilenameUtils.getExtension(file.toString())) || relative.startsWith("_"))
44-
return;
38+
ResourceModLoader.loadModule(ModuleType.valueOf(new ResourceLocation("rml", "mod_crt")), (context) -> {
39+
if (context.isExtension("zs")) {
4540

46-
String name = FilenameUtils.removeExtension(relative).replaceAll("\\\\", "/");
47-
ResourceLocation key = new ResourceLocation(containerHolder.getContainer().getModId(), name);
48-
name = "rml/"+key.getNamespace()+"/"+name;
49-
try{
50-
byte[] fileBytes = FileHelper.getByteSource(file).read();
41+
ResourceLocation key = context.getResourceLocation();
42+
try{
43+
byte[] fileBytes = context.getBytes(StandardCharsets.UTF_8);
5144

52-
providerCustom.add(name, fileBytes);
45+
providerCustom.add("rml/" + key.getNamespace() + "/" + key.getPath(), fileBytes);
5346

54-
RMLFMLLoadingPlugin.Container.LOGGER.info("Injected {} for CrT",key);
55-
} catch (IOException e) {
56-
throw new RuntimeException("IOException when RML loading " + file, e);
47+
RMLFMLLoadingPlugin.Container.LOGGER.debug("Injected {} for CrT", key);
48+
} catch (IOException e) {
49+
context.error(e, "IOException when RML loading {}", key);
50+
}
5751
}
58-
});
52+
}, RMLCrTLoader.class);
5953
return providerCustom;
6054
}
6155

src/main/java/rml/layer/compat/crt/RMLScriptProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public String getName() {
8080
}
8181

8282
@Override
83-
public InputStream open() throws IOException {
83+
public InputStream open() {
8484
return new BufferedInputStream(new ByteArrayInputStream(file));
8585
}
8686

src/main/java/rml/layer/compat/groovyscripts/RMLGrsLoader.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@
77
import rml.loader.api.annotations.PrivateAPI;
88
import rml.loader.api.annotations.RewriteWhenCleanroom;
99
import rml.loader.api.utils.ClassHelper;
10-
import rml.loader.api.utils.file.JsonHelper;
1110
import rml.loader.ResourceModLoader;
1211
import rml.loader.api.mods.ContainerHolder;
1312
import rml.loader.api.mods.module.ModuleType;
1413
import rml.loader.deserialize.Deserializer;
1514

16-
import java.nio.file.Files;
1715
import java.util.Map;
1816

1917
/**
@@ -27,14 +25,13 @@
2725
public class RMLGrsLoader {
2826
public static void load(){
2927
ClassHelper.forceInit(RunConfig.class);
30-
ResourceModLoader.loadModuleFindAssets(ModuleType.valueOf(new ResourceLocation("rml", "mod_groovy_script")), (containerHolder, module, root, file) -> {
28+
ResourceModLoader.loadModule(ModuleType.valueOf(new ResourceLocation("rml", "mod_groovy_script")), (context) -> {
3129
try {
32-
RunConfig config = Deserializer.decode(RunConfig.class, JsonHelper.parse(Files.newBufferedReader(file)));
33-
MOD.put(containerHolder, config);
30+
MOD.put(context.getContainerHolder(), context.deserialize(RunConfig.class));
3431
} catch (Exception ignored) {
3532

3633
}
37-
});
34+
}, RMLGrsLoader.class);
3835
}
3936
public static HashBiMap<ContainerHolder, RunConfig> MOD = HashBiMap.create();
4037

src/main/java/rml/layer/compat/justenoughdimensions/JEDLoader.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@
44
import com.google.gson.JsonSyntaxException;
55
import fi.dy.masa.justenoughdimensions.config.DimensionConfig;
66
import net.minecraft.util.ResourceLocation;
7-
import org.apache.commons.io.FilenameUtils;
7+
import rml.deserializer.JsonDeserializeException;
88
import rml.loader.api.reflection.jvm.MethodAccessor;
99
import rml.loader.api.reflection.jvm.ReflectionHelper;
10-
import rml.loader.api.utils.file.JsonHelper;
1110
import rml.loader.ResourceModLoader;
1211
import rml.loader.api.mods.module.ModuleType;
13-
import rml.loader.deserialize.RMLLoaders;
1412

1513
import java.io.IOException;
16-
import java.nio.file.Files;
1714

1815
/**
1916
* @Project ResourceModLoader
@@ -24,17 +21,15 @@ public class JEDLoader {
2421
public static final MethodAccessor<Void, fi.dy.masa.justenoughdimensions.config.DimensionConfig> parseDimensionConfig = ReflectionHelper.getMethodAccessor(DimensionConfig.class, "parseDimensionConfig", "parseDimensionConfig", JsonElement.class);
2522

2623
public static void load(){
27-
ResourceModLoader.loadModuleFindAssets(ModuleType.valueOf(new ResourceLocation("rml", "justenoughdimensions")), (containerHolder, module, root, file) -> {
24+
ResourceModLoader.loadModule(ModuleType.valueOf(new ResourceLocation("rml", "justenoughdimensions")), (context) -> {
2825
try{
29-
String relative = root.relativize(file).toString();
30-
if (!"json".equals(FilenameUtils.getExtension(file.toString())) || relative.startsWith("_"))
31-
return;
32-
JsonElement jsonElement = JsonHelper.getJson(Files.newBufferedReader(file));
33-
fromJson(jsonElement);
26+
if (context.isExtension("json")) {
27+
fromJson(context.toJson());
28+
}
3429
} catch (IOException e) {
35-
RMLLoaders.error(module.moduleType, containerHolder, e, "Could not read {}", file.toString());
36-
} catch (JsonSyntaxException e){
37-
RMLLoaders.error(module.moduleType, containerHolder, e, "Could not read as Json {}", file.toString());
30+
context.error(e, "Could not read {}", context.getResourceLocation());
31+
} catch (JsonSyntaxException | JsonDeserializeException e){
32+
context.error(e, "Could not read as Json {}", context.getResourceLocation());
3833
}
3934
});
4035
}

src/main/java/rml/layer/compat/kubejs/RMKKubeJs.java

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package rml.layer.compat.kubejs;
22

3+
import com.google.common.io.ByteSource;
34
import dev.latvian.kubejs.KubeJS;
45
import dev.latvian.kubejs.script.BindingsEvent;
56
import dev.latvian.kubejs.script.ScriptFile;
67
import dev.latvian.kubejs.script.ScriptManager;
78
import dev.latvian.kubejs.script.ScriptPack;
89
import net.minecraft.util.ResourceLocation;
910
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
10-
import org.apache.commons.io.FilenameUtils;
11-
import org.apache.commons.io.IOUtils;
1211
import rml.loader.api.annotations.PrivateAPI;
1312
import rml.loader.api.reflection.jvm.MethodAccessor;
1413
import rml.loader.api.reflection.jvm.ReflectionHelper;
1514
import rml.loader.ResourceModLoader;
1615
import rml.loader.api.mods.module.ModuleType;
1716
import rml.loader.core.RMLFMLLoadingPlugin;
1817

19-
import java.io.BufferedReader;
2018
import java.io.IOException;
21-
import java.nio.file.Files;
19+
import java.nio.charset.StandardCharsets;
2220
import java.util.Map;
2321

2422
/**
@@ -32,42 +30,32 @@ public class RMKKubeJs {
3230
@SubscribeEvent
3331
public static void onJSLoad(BindingsEvent event){
3432
RMLFMLLoadingPlugin.Container.LOGGER.info("Inject KubeJS");
35-
ResourceModLoader.loadModuleFindAssets(ModuleType.valueOf(new ResourceLocation("rml", "mod_kubejs")),
36-
(module, containerHolder) -> {
37-
if (!packs.containsKey(containerHolder.getContainer().getModId())) {
38-
packs.put(containerHolder.getContainer().getModId(), newPack.invoke(ScriptManager.instance, containerHolder.getContainer().getModId()));
39-
}
40-
},
41-
(containerHolder, module, root, file) -> {
42-
String relative = root.relativize(file).toString();
43-
if (!"js".equals(FilenameUtils.getExtension(file.toString())) || relative.startsWith("_"))
44-
return;
45-
BufferedReader bufferedReader=null;
46-
try {
47-
char[] fileBytes;
48-
bufferedReader=Files.newBufferedReader(file);
49-
fileBytes=IOUtils.toCharArray(bufferedReader);
50-
load(ScriptManager.instance, file.toUri().toString(), fileBytes, containerHolder.getContainer().getModId());
51-
52-
} catch (IOException e) {
53-
throw new RuntimeException(e);
54-
}finally {
55-
IOUtils.closeQuietly(bufferedReader);
56-
}
33+
ResourceModLoader.loadContainerHolders(ModuleType.valueOf(new ResourceLocation("rml", "mod_kubejs")), containerHolder -> {
34+
if (!packs.containsKey(containerHolder.getContainer().getModId())) {
35+
packs.put(containerHolder.getContainer().getModId(), newPack.invoke(ScriptManager.instance, containerHolder.getContainer().getModId()));
36+
}
37+
});
38+
ResourceModLoader.loadModule(ModuleType.valueOf(new ResourceLocation("rml", "mod_kubejs")), (context) -> {
39+
if (context.isExtension("js")) {
40+
try {
41+
char[] fileBytes = ByteSource.wrap(context.getBytes()).asCharSource(StandardCharsets.UTF_8).read().toCharArray();
42+
load(ScriptManager.instance, context.getFile().toUri().toString(), fileBytes, context.getContainerHolder().getContainer().getModId());
43+
} catch (IOException e) {
44+
context.error(e, "Error at Loading kubejs file for {}", context.getFile());
5745
}
58-
);
46+
}}, RMKKubeJs.class);
5947
}
6048
@PrivateAPI
6149
private static void load(ScriptManager manager, String name, char[] file, String modid) {
62-
KubeJS.LOGGER.info("Found script at " + name);
50+
KubeJS.LOGGER.debug("Found script at {}", name);
6351
int weight;
6452
weight = 0;
6553
if (name.endsWith("/init.js")) {
6654
weight = -100;
6755
}
6856
ScriptFile scriptFile = new BuffedJSFile(packs.get(modid), name, weight, file);
6957
manager.scripts.put(name, scriptFile);
70-
KubeJS.LOGGER.info("Load script at " + name);
58+
KubeJS.LOGGER.debug("Load script at {}", name);
7159
}
7260
@PrivateAPI public static final MethodAccessor<ScriptPack, ScriptManager> newPack = ReflectionHelper.getMethodAccessor(ScriptManager.class, "newPack", null, String.class);
7361
@PrivateAPI public static final Map<String, ScriptPack> packs;

src/main/java/rml/loader/ResourceModLoader.java

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@
22

33
import net.minecraftforge.fml.common.Loader;
44
import net.minecraftforge.fml.common.ModContainer;
5+
import org.apache.logging.log4j.LogManager;
56
import org.apache.logging.log4j.Logger;
7+
import org.apache.logging.log4j.util.ReflectionUtil;
68
import rml.loader.api.annotations.PrivateAPI;
79
import rml.loader.api.annotations.PublicAPI;
8-
import rml.loader.api.utils.file.FileHelper;
910
import rml.loader.api.event.RMLModuleLoadingEvent;
1011
import rml.loader.api.mods.BuffedModIDContainer;
1112
import rml.loader.api.mods.ContainerHolder;
1213
import rml.loader.api.mods.module.Module;
1314
import rml.loader.api.mods.module.ModuleType;
15+
import rml.loader.api.utils.file.FileHelper;
1416
import rml.loader.core.RMLFMLLoadingPlugin;
1517

1618
import javax.annotation.Nullable;
1719
import java.util.HashSet;
1820
import java.util.Set;
21+
import java.util.function.Consumer;
1922
import java.util.stream.Collectors;
2023

2124

@@ -83,39 +86,25 @@ public class ResourceModLoader {
8386
return containerHolders;
8487
}
8588

86-
public static void loadModule(ModuleType module, ContainerHolder.ModuleConsumer consumer){
89+
public static void loadContainerHolders(ModuleType module, Consumer<ContainerHolder> consumer){
8790
Set<ContainerHolder> containerHolders = RMLModuleLoadingEvent.post(getCurrentRMLContainerHolders(module), module);
8891
for(ContainerHolder containerHolder : containerHolders){
89-
ModContainer oldActive = Loader.instance().activeModContainer();
90-
Loader.instance().setActiveModContainer(containerHolder.container);
91-
consumer.accept(module, containerHolder);
92-
Loader.instance().setActiveModContainer(oldActive);
92+
consumer.accept(containerHolder);
9393
}
9494
}
9595

96-
public static void loadModuleFindAssets(ModuleType module, FileHelper.ModFileConsumer consumer){
96+
public static void loadModule(ModuleType module, Consumer<ContainerHolder.ModuleConsumeContext> consumer, Class<?> caller){
9797
Set<ContainerHolder> containerHolders = RMLModuleLoadingEvent.post(getCurrentRMLContainerHolders(module), module);
9898
for(ContainerHolder containerHolder : containerHolders){
99-
if (containerHolder.hasModule(module)) {
100-
ModContainer oldActive = Loader.instance().activeModContainer();
101-
Loader.instance().setActiveModContainer(containerHolder.container);
102-
FileHelper.findAssets(containerHolder, containerHolder.modules.get(module), consumer);
103-
Loader.instance().setActiveModContainer(oldActive);
104-
}
99+
ModContainer oldActive = Loader.instance().activeModContainer();
100+
Loader.instance().setActiveModContainer(containerHolder.getContainer());
101+
FileHelper.findAssets(LogManager.getLogger(caller), containerHolder, containerHolder.getModules().get(module), consumer);
102+
Loader.instance().setActiveModContainer(oldActive);
105103
}
106104
}
107105

108-
public static void loadModuleFindAssets(ModuleType module, ContainerHolder.ModuleConsumer moduleConsumer, FileHelper.ModFileConsumer consumer){
109-
Set<ContainerHolder> containerHolders = RMLModuleLoadingEvent.post(getCurrentRMLContainerHolders(module), module);
110-
for(ContainerHolder containerHolder : containerHolders){
111-
if (containerHolder.hasModule(module)) {
112-
ModContainer oldActive = Loader.instance().activeModContainer();
113-
Loader.instance().setActiveModContainer(containerHolder.container);
114-
moduleConsumer.accept(module, containerHolder);
115-
FileHelper.findAssets(containerHolder, containerHolder.modules.get(module), consumer);
116-
Loader.instance().setActiveModContainer(oldActive);
117-
}
118-
}
106+
public static void loadModule(ModuleType module, Consumer<ContainerHolder.ModuleConsumeContext> consumer){
107+
loadModule(module, consumer, ReflectionUtil.getCallerClass(2));
119108
}
120109

121110
@Nullable

src/main/java/rml/loader/api/bus/DefaultEventBus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static<T> DefaultEventBus<T> of(){
6363
}
6464

6565
public static<V, T extends V> DefaultEventBus<T> of(DefaultEventBus<V> parent) {
66-
return new DefaultEventBus<T>(parent);
66+
return new DefaultEventBus<>(parent);
6767
}
6868

6969
@FunctionalInterface

src/main/java/rml/loader/api/bus/SortedEventBus.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ public static<T> SortedEventBus<T> of(){
8686
}
8787

8888
public static<V, T extends V> SortedEventBus<T> of(DefaultEventBus<V> parent) {
89-
return new SortedEventBus<T>(parent);
89+
return new SortedEventBus<>(parent);
9090
}
9191

9292
public static<V, T extends V> SortedEventBus<T> of(SortedEventBus<V> parent) {
93-
return new SortedEventBus<T>(parent);
93+
return new SortedEventBus<>(parent);
9494
}
9595
}

0 commit comments

Comments
 (0)