diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-21 22:16:38 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-21 22:16:38 +0800 |
| commit | bbb92072372d8ceab79bb86186637af02cae6779 (patch) | |
| tree | 9a50fce070b6fb9506ef904e82d8772247ab84ac /src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java | |
| parent | 855f72d9f730ce54be6167259f33bf1785b140fb (diff) | |
| download | RoughlyEnoughItems-2.1.0.12.tar.gz RoughlyEnoughItems-2.1.0.12.tar.bz2 RoughlyEnoughItems-2.1.0.12.zip | |
v2.1.0.12v2.1.0.12
- Cheating in servers / realms
- New Plugin loader
- Better language files
- Resizable Recipe Base
Diffstat (limited to 'src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java index 9930ca63f..d1db0cc3f 100644 --- a/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java +++ b/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java @@ -1,19 +1,33 @@ package me.shedaniel.rei.api; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.plugin.DefaultPlugin; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; import net.minecraft.util.ResourceLocation; +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.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; +import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.jar.JarFile; +import java.util.zip.ZipEntry; public class RoughlyEnoughItemsPlugin implements InitializationListener { + public static final Logger LOGGER = LogManager.getFormatterLogger("REI"); private static final Map<ResourceLocation, IRecipePlugin> plugins = Maps.newHashMap(); - public static final ResourceLocation DEFAULT_PLUGIN = new ResourceLocation("roughlyenoughitems", "default_plugin"); public static IRecipePlugin registerPlugin(ResourceLocation ResourceLocation, IRecipePlugin plugin) { plugins.put(ResourceLocation, plugin); @@ -33,7 +47,60 @@ public class RoughlyEnoughItemsPlugin implements InitializationListener { @Override public void onInitialization() { - RoughlyEnoughItemsPlugin.registerPlugin(RoughlyEnoughItemsPlugin.DEFAULT_PLUGIN, new DefaultPlugin()); + discoverPlugins(); + } + + private void discoverPlugins() { + Collection<ModInfo> modInfoCollection = RiftLoader.instance.getMods(); + List<REIPluginInfo> pluginInfoList = Lists.newArrayList(); + JsonParser parser = new JsonParser(); + modInfoCollection.forEach(modContainer -> { + JsonElement jsonElement = null; + if (modContainer.source.isFile()) + try (JarFile file = new JarFile(modContainer.source)) { + ZipEntry entry = file.getEntry("plugins" + File.separatorChar + "rei.plugin.json"); + if (entry != null) { + Reader reader = new InputStreamReader(file.getInputStream(entry)); + jsonElement = parser.parse(reader); + reader.close(); + } + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load plugin file from " + modContainer.id + ". (" + e.getLocalizedMessage() + ")"); + } + else if (modContainer.source.isDirectory()) { + File modInfo = new File(modContainer.source, "plugins" + File.separatorChar + "rei.plugin.json"); + if (modInfo.exists()) + try { + Reader reader = new InputStreamReader(Files.newInputStream(modInfo.toPath(), StandardOpenOption.READ)); + jsonElement = parser.parse(reader); + reader.close(); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load plugin file from " + modContainer.id + ". (" + e.getLocalizedMessage() + ")"); + } + } + if (jsonElement != null && jsonElement.isJsonObject()) { + try { + REIPluginInfo info = REIPluginInfo.GSON.fromJson(jsonElement, REIPluginInfo.class); + if (info != null) + pluginInfoList.add(info); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load REI plugin info from " + modContainer.id + ". (" + e.getLocalizedMessage() + ")"); + } + } + }); + pluginInfoList.stream().forEachOrdered(reiPluginInfo -> { + reiPluginInfo.getPlugins().forEach(reiPlugin -> { + try { + ResourceLocation identifier = new ResourceLocation(reiPlugin.getIdentifier()); + Class<?> aClass = Class.forName(reiPlugin.getPluginClass()); + IRecipePlugin plugin = IRecipePlugin.class.cast(aClass.newInstance()); + RoughlyEnoughItemsPlugin.registerPlugin(identifier, plugin); + RoughlyEnoughItemsPlugin.LOGGER.info("REI: Registered REI plugin: " + reiPlugin.getIdentifier()); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to register REI plugin: " + reiPlugin.getIdentifier() + ". (" + e.getLocalizedMessage() + ")"); + } + }); + }); } } |
