aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-22 20:11:04 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-22 20:11:04 +0800
commit999b71d9da9c4c9dcc251f7be4578819a90d215f (patch)
tree1b73c92fbe9b23af74d16f79973c8c9e9d54b1d5 /src/main/java
parentbbb92072372d8ceab79bb86186637af02cae6779 (diff)
downloadRoughlyEnoughItems-2.1.0.13.tar.gz
RoughlyEnoughItems-2.1.0.13.tar.bz2
RoughlyEnoughItems-2.1.0.13.zip
v2.1.0.13v2.1.0.13
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java111
-rw-r--r--src/main/java/me/shedaniel/rei/api/REIPluginInfo.java34
-rw-r--r--src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java106
-rw-r--r--src/main/java/me/shedaniel/rei/client/ClientHelper.java2
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelper.java1
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java2
6 files changed, 114 insertions, 142 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;
}