diff options
Diffstat (limited to 'src/main')
9 files changed, 121 insertions, 151 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java new file mode 100644 index 000000000..621730344 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java @@ -0,0 +1,111 @@ +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.JsonParser; +import com.mojang.datafixers.util.Pair; +import me.shedaniel.rei.api.IRecipePlugin; +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.*; +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(); + private static JsonParser parser = new JsonParser(); + + public static IRecipePlugin registerPlugin(ResourceLocation resourceLocation, IRecipePlugin plugin) { + plugins.put(resourceLocation, plugin); + RoughlyEnoughItemsPlugin.LOGGER.info("REI: Registered Plugin from %s by %s.", resourceLocation.toString(), plugin.getClass()); + return plugin; + } + + public static List<IRecipePlugin> getPlugins() { + return new LinkedList<>(plugins.values()); + } + + public static ResourceLocation getPluginResourceLocation(IRecipePlugin plugin) { + for(ResourceLocation ResourceLocation : plugins.keySet()) + if (plugins.get(ResourceLocation).equals(plugin)) + return ResourceLocation; + return null; + } + + @Override + public void onInitialization() { + discoverPlugins(); + } + + private void discoverPlugins() { + Collection<ModInfo> modInfoCollection = RiftLoader.instance.getMods(); + List<Pair<ResourceLocation, String>> plugins = Lists.newArrayList(); + modInfoCollection.forEach(modContainer -> { + JsonElement jsonArray = null; + if (modContainer.source.isFile()) + try (JarFile file = new JarFile(modContainer.source)) { + ZipEntry entry = file.getEntry("plugins" + File.separatorChar + "roughlyenoughitems.plugin.json"); + if (entry != null) + jsonArray = readFromInputStream(file.getInputStream(entry)); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to read plugin file from %s. (%s)", modContainer.id, e.getLocalizedMessage()); + } + else if (modContainer.source.isDirectory()) { + File modInfo = new File(modContainer.source, "plugins" + File.separatorChar + "roughlyenoughitems.plugin.json"); + if (modInfo.exists()) + try { + jsonArray = readFromInputStream(Files.newInputStream(modInfo.toPath(), StandardOpenOption.READ)); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to read plugin file from %s. (%s)", modContainer.id, e.getLocalizedMessage()); + } + } + if (jsonArray != null && jsonArray.isJsonArray()) { + try { + jsonArray.getAsJsonArray().forEach(element -> { + String id = element.getAsJsonObject().get("id").getAsString(); + String initializer = element.getAsJsonObject().get("initializer").getAsString(); + plugins.add(new Pair<>(new ResourceLocation(modContainer.id, id), initializer)); + }); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to grab plugin from %s. (%s)", modContainer.id, e.getLocalizedMessage()); + } + } + }); + plugins.stream().forEachOrdered(pair -> { + try { + Class<?> aClass = Class.forName(pair.getSecond()); + IRecipePlugin plugin = IRecipePlugin.class.cast(aClass.newInstance()); + RoughlyEnoughItemsPlugin.registerPlugin(pair.getFirst(), plugin); + } catch (Exception e) { + RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to register plugin from %s. (%s)", pair.getFirst().toString(), e.getLocalizedMessage()); + } + }); + } + + private JsonElement readFromInputStream(InputStream stream) throws IOException { + JsonElement element = readFromReader(new InputStreamReader(stream)); + stream.close(); + return element; + } + + private JsonElement readFromReader(Reader reader) throws IOException { + JsonElement element = parser.parse(reader); + reader.close(); + return element; + } + +} diff --git a/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java b/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java deleted file mode 100644 index 38519f743..000000000 --- a/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.shedaniel.rei.api; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -public class REIPluginInfo { - - public static Gson GSON = new GsonBuilder().create(); - - private List<REIPlugin> plugins; - - public List<REIPlugin> getPlugins() { - return plugins; - } - - public static class REIPlugin { - private String identifier; - @SerializedName("class") private String pluginClass; - - public String getIdentifier() { - if (identifier == null) - return "null:null"; - return identifier; - } - - public String getPluginClass() { - return pluginClass; - } - } - -} diff --git a/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java deleted file mode 100644 index d1db0cc3f..000000000 --- a/src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java +++ /dev/null @@ -1,106 +0,0 @@ -package me.shedaniel.rei.api; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -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 IRecipePlugin registerPlugin(ResourceLocation ResourceLocation, IRecipePlugin plugin) { - plugins.put(ResourceLocation, plugin); - return plugin; - } - - public static List<IRecipePlugin> getPlugins() { - return new LinkedList<>(plugins.values()); - } - - public static ResourceLocation getPluginResourceLocation(IRecipePlugin plugin) { - for(ResourceLocation ResourceLocation : plugins.keySet()) - if (plugins.get(ResourceLocation).equals(plugin)) - return ResourceLocation; - return null; - } - - @Override - public void onInitialization() { - 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() + ")"); - } - }); - }); - } - -} diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 4e7155a7e..84ecdd0ba 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -170,7 +170,7 @@ public class ClientHelper implements ClientLoaded { private boolean alreadyContain(ItemStack stack) { for(ItemStack itemStack : itemList) - if (ItemStack.areItemsEqual(stack, itemStack)) + if (ItemStack.areItemStacksEqual(stack, itemStack)) return true; return false; } diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java index da0c4aab4..d5a360ee0 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java @@ -3,6 +3,7 @@ package me.shedaniel.rei.client; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.RoughlyEnoughItemsPlugin; import me.shedaniel.rei.api.*; import me.shedaniel.rei.listeners.RecipeSync; import net.minecraft.item.ItemStack; diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java index 5e6d6225a..f376c2e3e 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java @@ -67,7 +67,7 @@ public class RecipeViewingWidget extends GuiScreen { @Override public boolean keyPressed(int int_1, int int_2, int int_3) { - if (int_1 == 256 && this.allowCloseWithEscape()) { + if ((int_1 == 256 || mc.gameSettings.keyBindInventory.matchesKey(int_1, int_2)) && this.allowCloseWithEscape()) { Minecraft.getInstance().displayGuiScreen(parent.getContainerGui()); return true; } diff --git a/src/main/resources/plugins/rei.plugin.json b/src/main/resources/plugins/rei.plugin.json deleted file mode 100644 index ab578d972..000000000 --- a/src/main/resources/plugins/rei.plugin.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "plugins": [ - { - "identifier": "roughlyenoughitems:default_plugin", - "class": "me.shedaniel.rei.plugin.DefaultPlugin" - } - ] -}
\ No newline at end of file diff --git a/src/main/resources/plugins/roughlyenoughitems.plugin.json b/src/main/resources/plugins/roughlyenoughitems.plugin.json new file mode 100644 index 000000000..8ea3542ee --- /dev/null +++ b/src/main/resources/plugins/roughlyenoughitems.plugin.json @@ -0,0 +1,6 @@ +[ + { + "id": "default_plugin", + "initializer": "me.shedaniel.rei.plugin.DefaultPlugin" + } +]
\ No newline at end of file diff --git a/src/main/resources/riftmod.json b/src/main/resources/riftmod.json index e1b266be4..3a019b629 100644 --- a/src/main/resources/riftmod.json +++ b/src/main/resources/riftmod.json @@ -11,7 +11,7 @@ "side": "client" }, { - "class": "me.shedaniel.rei.api.RoughlyEnoughItemsPlugin", + "class": "me.shedaniel.rei.RoughlyEnoughItemsPlugin", "side": "client", "priority": -1000 }, |
