aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/api
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-21 22:16:38 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-21 22:16:38 +0800
commitbbb92072372d8ceab79bb86186637af02cae6779 (patch)
tree9a50fce070b6fb9506ef904e82d8772247ab84ac /src/main/java/me/shedaniel/rei/api
parent855f72d9f730ce54be6167259f33bf1785b140fb (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--src/main/java/me/shedaniel/rei/api/IRecipeCategory.java14
-rw-r--r--src/main/java/me/shedaniel/rei/api/REIPluginInfo.java34
-rw-r--r--src/main/java/me/shedaniel/rei/api/RoughlyEnoughItemsPlugin.java75
3 files changed, 119 insertions, 4 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java b/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java
index 44fb1ad4d..dbc4a7204 100644
--- a/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java
+++ b/src/main/java/me/shedaniel/rei/api/IRecipeCategory.java
@@ -2,7 +2,12 @@ package me.shedaniel.rei.api;
import me.shedaniel.rei.gui.widget.IWidget;
import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
+import me.shedaniel.rei.gui.widget.RecipeViewingWidget;
import me.shedaniel.rei.listeners.IMixinGuiContainer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
@@ -27,4 +32,13 @@ public interface IRecipeCategory<T extends IRecipeDisplay> {
return Arrays.asList(new RecipeBaseWidget(bounds));
}
+ default public void drawCategoryBackground(Rectangle bounds) {
+ GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+ RenderHelper.disableStandardItemLighting();
+ Minecraft.getInstance().getTextureManager().bindTexture(RecipeViewingWidget.CHEST_GUI_TEXTURE);
+ new Gui() {
+
+ }.drawTexturedModalRect((int) bounds.getX(), (int) bounds.getY(), 0, 0, (int) bounds.getWidth(), (int) bounds.getHeight());
+ }
+
}
diff --git a/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java b/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java
new file mode 100644
index 000000000..38519f743
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java
@@ -0,0 +1,34 @@
+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
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() + ")");
+ }
+ });
+ });
}
}