aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java53
1 files changed, 25 insertions, 28 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
index 8f91e7e0e..ad3c15ba6 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
@@ -3,6 +3,7 @@ package me.shedaniel.rei;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.shedaniel.rei.api.IRecipePlugin;
import net.minecraft.util.ResourceLocation;
@@ -10,7 +11,6 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dimdev.riftloader.ModInfo;
import org.dimdev.riftloader.RiftLoader;
-import org.dimdev.riftloader.listener.InitializationListener;
import java.io.File;
import java.io.FileReader;
@@ -24,14 +24,15 @@ import java.util.jar.JarFile;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
-public class RoughlyEnoughItemsPlugin implements InitializationListener {
+public class RoughlyEnoughItemsPlugin {
public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
- private static final Map<ResourceLocation, IRecipePlugin> plugins = Maps.newHashMap();
+ private static final Map<String, IRecipePlugin> plugins = Maps.newHashMap();
private static JsonParser parser = new JsonParser();
- private static List<ResourceLocation> disablingPlugins;
+ private static List<String> disablingPlugins;
+ private static boolean loaded = false;
- public static IRecipePlugin registerPlugin(ResourceLocation resourceLocation, IRecipePlugin plugin) {
+ public static IRecipePlugin registerPlugin(String resourceLocation, IRecipePlugin plugin) {
plugins.put(resourceLocation, plugin);
RoughlyEnoughItemsPlugin.LOGGER.info("REI: Registered Plugin from %s by %s.", resourceLocation.toString(), plugin.getClass().getSimpleName());
return plugin;
@@ -41,24 +42,22 @@ public class RoughlyEnoughItemsPlugin implements InitializationListener {
return new LinkedList<>(plugins.values());
}
- public static ResourceLocation getPluginResourceLocation(IRecipePlugin plugin) {
- for(ResourceLocation ResourceLocation : plugins.keySet())
- if (plugins.get(ResourceLocation).equals(plugin))
- return ResourceLocation;
+ public static String getPluginResourceLocation(IRecipePlugin plugin) {
+ for(String resourceLocation : plugins.keySet())
+ if (plugins.get(resourceLocation).equals(plugin))
+ return resourceLocation;
return null;
}
public static void disablePlugin(ResourceLocation location) {
- if (disablingPlugins.stream().noneMatch(location1 -> {return location.equals(location1);}))
- disablingPlugins.add(location);
+ if (disablingPlugins.stream().noneMatch(location1 -> {return location.toString().equals(location1);}))
+ disablingPlugins.add(location.toString());
}
- @Override
- public void onInitialization() {
- discoverPlugins();
- }
-
- private void discoverPlugins() {
+ public static void discoverPlugins() {
+ if (loaded)
+ return;
+ loaded = true;
LOGGER.info("REI: Discovering Plugins.");
disablingPlugins = Lists.newArrayList();
Collection<ModInfo> modInfoCollection = RiftLoader.instance.getMods();
@@ -78,29 +77,27 @@ public class RoughlyEnoughItemsPlugin implements InitializationListener {
RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load plugin file from %s. (%s)", (Object) modInfo.id, (Object) e.getLocalizedMessage());
}
});
- plugins.forEach((location, plugin) -> plugin.onFirstLoad());
- plugins.keySet().stream().filter(location -> {
- return disablingPlugins.contains(location);
- }).collect(Collectors.toList()).forEach(location -> {
+ plugins.values().forEach(IRecipePlugin::onFirstLoad);
+ new LinkedList<>(plugins.keySet()).stream().filter(location -> disablingPlugins.contains(location)).forEach(location -> {
plugins.remove(location);
LOGGER.info("REI: Disabled REI plugin %s.", location.toString());
});
- LOGGER.info("REI: Discovered %d REI Plugins%s", plugins.size(), (plugins.size() > 0 ? ": " + String.join(", ", plugins.keySet().stream().map(ResourceLocation::toString).collect(Collectors.toList())) : "."));
+ LOGGER.info("REI: Discovered %d REI Plugins%s", plugins.size(), (plugins.size() > 0 ? ": " + String.join(", ", plugins.keySet().stream().collect(Collectors.toList())) : "."));
}
- private void loadPluginInfo(ModInfo modInfo, Reader reader) throws Exception {
+ private static void loadPluginInfo(ModInfo modInfo, Reader reader) throws Exception {
JsonElement infoElement = parser.parse(reader);
if (infoElement.isJsonArray())
for(JsonElement jsonElement : infoElement.getAsJsonArray())
- parseAndRegisterPlugin(modInfo.id, jsonElement);
+ parseAndRegisterPlugin(modInfo.id, jsonElement.getAsJsonObject());
else
- parseAndRegisterPlugin(modInfo.id, infoElement);
+ parseAndRegisterPlugin(modInfo.id, infoElement.getAsJsonObject());
reader.close();
}
- private void parseAndRegisterPlugin(String modId, JsonElement jsonElement) throws Exception {
- ResourceLocation location = new ResourceLocation(modId, jsonElement.getAsJsonObject().getAsJsonPrimitive("id").getAsString());
- Class<?> aClass = Class.forName(jsonElement.getAsJsonObject().getAsJsonPrimitive("initializer").getAsString());
+ private static void parseAndRegisterPlugin(String modId, JsonObject jsonObject) throws Exception {
+ String location = modId + ":" + jsonObject.getAsJsonPrimitive("id").getAsString();
+ Class<?> aClass = Class.forName(jsonObject.getAsJsonPrimitive("initializer").getAsString());
IRecipePlugin plugin = IRecipePlugin.class.cast(aClass.newInstance());
registerPlugin(location, plugin);
}