aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java16
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java21
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java (renamed from src/main/java/me/shedaniel/rei/REIMixinInit.java)2
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java2
-rw-r--r--src/main/java/me/shedaniel/rei/api/IItemRegisterer.java35
-rw-r--r--src/main/java/me/shedaniel/rei/api/IPluginDisabler.java23
-rw-r--r--src/main/java/me/shedaniel/rei/api/IRecipePlugin.java12
-rw-r--r--src/main/java/me/shedaniel/rei/api/PluginFunction.java5
-rw-r--r--src/main/java/me/shedaniel/rei/client/ClientHelper.java53
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigHelper.java19
-rw-r--r--src/main/java/me/shedaniel/rei/client/GuiHelper.java18
-rw-r--r--src/main/java/me/shedaniel/rei/client/ItemListHelper.java53
-rw-r--r--src/main/java/me/shedaniel/rei/client/REIConfig.java1
-rw-r--r--src/main/java/me/shedaniel/rei/client/RecipeHelper.java20
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java62
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java77
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigGui.java207
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java22
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsGui.java64
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java49
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java177
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java9
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java43
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java37
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidgetGui.java10
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java1
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/IMixinGuiContainer.java15
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinGuiContainer.java21
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinNetHandlerPlayClient.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java69
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/PluginManager.java43
-rw-r--r--src/main/java/me/shedaniel/rei/update/UpdateChecker.java6
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/de_de.json5
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/en_ud.json37
-rwxr-xr-xsrc/main/resources/assets/roughlyenoughitems/lang/en_us.json13
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/et_ee.json4
-rwxr-xr-xsrc/main/resources/assets/roughlyenoughitems/lang/fr_fr.json2
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/lol_us.json37
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json2
-rw-r--r--src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json2
-rw-r--r--src/main/resources/riftmod.json12
-rw-r--r--version.json7
46 files changed, 957 insertions, 432 deletions
diff --git a/build.gradle b/build.gradle
index b455b1b17..7a554e790 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,7 +16,7 @@ apply plugin: 'org.spongepowered.mixin'
apply plugin: 'java'
group 'me.shedaniel'
-version '2.2.0.16'
+version '2.3.0.17'
archivesBaseName = 'RoughlyEnoughItems'
sourceCompatibility = 1.8
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index b7104b301..90e1f5217 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -1,7 +1,10 @@
package me.shedaniel.rei;
-import me.shedaniel.rei.client.ClientHelper;
+import me.shedaniel.rei.api.IItemRegisterer;
+import me.shedaniel.rei.api.IPluginDisabler;
+import me.shedaniel.rei.client.ItemListHelper;
import me.shedaniel.rei.client.RecipeHelper;
+import me.shedaniel.rei.plugin.PluginManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -9,14 +12,19 @@ public class RoughlyEnoughItemsCore {
public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
private static final RecipeHelper RECIPE_HELPER = new RecipeHelper();
- private static final ClientHelper CLIENT_HELPER = new ClientHelper();
+ private static final ItemListHelper ITEM_LIST_HELPER = new ItemListHelper();
+ private static final PluginManager PLUGIN_MANAGER = new PluginManager();
public static RecipeHelper getRecipeHelper() {
return RECIPE_HELPER;
}
- public static ClientHelper getClientHelper() {
- return CLIENT_HELPER;
+ public static IItemRegisterer getItemRegisterer() {
+ return ITEM_LIST_HELPER;
+ }
+
+ public static IPluginDisabler getPluginDisabler() {
+ return PLUGIN_MANAGER;
}
}
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java
new file mode 100644
index 000000000..8459bdb33
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInit.java
@@ -0,0 +1,21 @@
+package me.shedaniel.rei;
+
+import me.shedaniel.rei.update.UpdateChecker;
+import org.dimdev.riftloader.listener.InitializationListener;
+
+import java.lang.reflect.InvocationTargetException;
+
+public class RoughlyEnoughItemsInit implements InitializationListener {
+
+ @Override
+ public void onInitialization() {
+ UpdateChecker.onInitialization();
+ try {
+ Class<?> pluginClass = Class.forName("me.shedaniel.rei.RoughlyEnoughItemsPlugin");
+ pluginClass.getMethod("discoverPlugins").invoke(null);
+ } catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/REIMixinInit.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java
index 39f3639e2..3cd7cca6d 100644
--- a/src/main/java/me/shedaniel/rei/REIMixinInit.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsMixin.java
@@ -4,7 +4,7 @@ import org.dimdev.riftloader.listener.InitializationListener;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.Mixins;
-public class REIMixinInit implements InitializationListener {
+public class RoughlyEnoughItemsMixin implements InitializationListener {
@Override
public void onInitialization() {
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
index ad3c15ba6..2bb33bfc4 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugin.java
@@ -35,6 +35,7 @@ public class RoughlyEnoughItemsPlugin {
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());
+ plugin.onFirstLoad(RoughlyEnoughItemsCore.getPluginDisabler());
return plugin;
}
@@ -77,7 +78,6 @@ public class RoughlyEnoughItemsPlugin {
RoughlyEnoughItemsPlugin.LOGGER.error("REI: Failed to load plugin file from %s. (%s)", (Object) modInfo.id, (Object) e.getLocalizedMessage());
}
});
- 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());
diff --git a/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java b/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java
new file mode 100644
index 000000000..f397b15c0
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/IItemRegisterer.java
@@ -0,0 +1,35 @@
+package me.shedaniel.rei.api;
+
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+
+import java.util.List;
+
+public interface IItemRegisterer {
+
+ public List<ItemStack> getItemList();
+
+ @Deprecated
+ public List<ItemStack> getModifiableItemList();
+
+ public ItemStack[] getAllStacksFromItem(Item item);
+
+ public void registerItemStack(Item afterItem, ItemStack stack);
+
+ default public void registerItemStack(Item afterItem, ItemStack... stacks) {
+ for(ItemStack stack : stacks)
+ if (stack != null && !stack.isEmpty())
+ registerItemStack(afterItem, stack);
+ }
+
+ default public void registerItemStack(ItemStack... stacks) {
+ for(ItemStack stack : stacks)
+ if (stack != null && !stack.isEmpty())
+ registerItemStack(null, stack);
+ }
+
+ default boolean alreadyContain(ItemStack stack) {
+ return getItemList().stream().anyMatch(stack1 -> ItemStack.areItemStacksEqual(stack, stack1));
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java b/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java
new file mode 100644
index 000000000..836cd3e6f
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/IPluginDisabler.java
@@ -0,0 +1,23 @@
+package me.shedaniel.rei.api;
+
+import net.minecraft.util.ResourceLocation;
+
+public interface IPluginDisabler {
+
+ default public void disablePluginFunctions(ResourceLocation plugin, PluginFunction... functions) {
+ for(PluginFunction function : functions)
+ disablePluginFunction(plugin, function);
+ }
+
+ default public void enablePluginFunctions(ResourceLocation plugin, PluginFunction... functions) {
+ for(PluginFunction function : functions)
+ enablePluginFunction(plugin, function);
+ }
+
+ public void disablePluginFunction(ResourceLocation plugin, PluginFunction function);
+
+ public void enablePluginFunction(ResourceLocation plugin, PluginFunction function);
+
+ public boolean isFunctionEnabled(ResourceLocation plugin, PluginFunction function);
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
index 13b7518bf..6ba6c70e7 100644
--- a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
+++ b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
@@ -1,14 +1,18 @@
package me.shedaniel.rei.api;
+import me.shedaniel.rei.client.RecipeHelper;
+
public interface IRecipePlugin {
- default public void onFirstLoad() {}
+ default public void onFirstLoad(IPluginDisabler pluginDisabler) {}
+
+ public void registerItems(IItemRegisterer itemRegisterer);
- public void registerPluginCategories();
+ public void registerPluginCategories(RecipeHelper recipeHelper);
- public void registerRecipes();
+ public void registerRecipeDisplays(RecipeHelper recipeHelper);
- public void registerSpeedCraft();
+ public void registerSpeedCraft(RecipeHelper recipeHelper);
default public int getPriority() {
return 0;
diff --git a/src/main/java/me/shedaniel/rei/api/PluginFunction.java b/src/main/java/me/shedaniel/rei/api/PluginFunction.java
new file mode 100644
index 000000000..bef757db1
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/PluginFunction.java
@@ -0,0 +1,5 @@
+package me.shedaniel.rei.api;
+
+public enum PluginFunction {
+ REGISTER_ITEMS, REGISTER_CATEGORIES, REGISTER_RECIPE_DISPLAYS, REGISTER_SPEED_CRAFT;
+}
diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java
index 87e438ab3..fd5418516 100644
--- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java
@@ -1,21 +1,17 @@
package me.shedaniel.rei.client;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
import me.shedaniel.rei.api.IRecipeCategory;
import me.shedaniel.rei.api.IRecipeDisplay;
import me.shedaniel.rei.gui.ContainerGuiOverlay;
-import me.shedaniel.rei.gui.widget.ConfigWidget;
+import me.shedaniel.rei.gui.config.ConfigGui;
import me.shedaniel.rei.gui.widget.RecipeViewingWidgetGui;
import me.shedaniel.rei.network.CreateItemsPacket;
import me.shedaniel.rei.network.DeleteItemsPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHelper;
import net.minecraft.client.gui.GuiScreen;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.init.Items;
-import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
@@ -24,19 +20,13 @@ import org.dimdev.riftloader.RiftLoader;
import java.awt.*;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ClientHelper {
- private static List<ItemStack> itemList;
private static boolean cheating = false;
- public ClientHelper() {
- this.itemList = Lists.newLinkedList();
- }
-
public static String getModFromItemStack(ItemStack stack) {
if (!stack.isEmpty()) {
ResourceLocation location = IRegistry.ITEM.getKey(stack.getItem());
@@ -53,10 +43,6 @@ public class ClientHelper {
return "";
}
- public static List<ItemStack> getItemList() {
- return itemList;
- }
-
public static Point getMouseLocation() {
Minecraft client = Minecraft.getInstance();
MouseHelper mouse = client.mouseHelper;
@@ -117,7 +103,7 @@ public class ClientHelper {
}
public static void openConfigWindow(GuiScreen parent) {
- Minecraft.getInstance().displayGuiScreen(new ConfigWidget(parent));
+ Minecraft.getInstance().displayGuiScreen(new ConfigGui(parent));
}
public static List<ItemStack> getInventoryItemsTypes() {
@@ -130,39 +116,4 @@ public class ClientHelper {
return inventoryStacks;
}
- public void clientLoaded() {
- IRegistry.ITEM.forEach(item -> {
- if (!item.equals(Items.ENCHANTED_BOOK))
- registerItem(item);
- });
- IRegistry.ENCHANTMENT.forEach(enchantment -> {
- for(int i = enchantment.getMinLevel(); i < enchantment.getMaxLevel(); i++) {
- Map<Enchantment, Integer> map = new HashMap<>();
- map.put(enchantment, i);
- ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK);
- EnchantmentHelper.setEnchantments(map, itemStack);
- registerItemStack(itemStack);
- }
- });
- }
-
- public void registerItem(Item item) {
- registerItemStack(item.getDefaultInstance());
- NonNullList<ItemStack> stacks = NonNullList.create();
- item.fillItemGroup(item.getGroup(), stacks);
- stacks.forEach(this::registerItemStack);
- }
-
- public void registerItemStack(ItemStack stack) {
- if (!stack.getItem().equals(Items.AIR) && !alreadyContain(stack))
- itemList.add(stack);
- }
-
- private boolean alreadyContain(ItemStack stack) {
- for(ItemStack itemStack : itemList)
- if (ItemStack.areItemStacksEqual(stack, itemStack))
- return true;
- return false;
- }
-
}
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
index 9b6c15596..ff03ba720 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
@@ -11,15 +11,11 @@ import java.nio.file.Files;
public class ConfigHelper {
+ private static ConfigHelper instance = new ConfigHelper();
private final File configFile;
private REIConfig config;
- private static ConfigHelper instance = new ConfigHelper();
private boolean craftableOnly;
- public static ConfigHelper getInstance() {
- return instance;
- }
-
public ConfigHelper() {
this.configFile = new File(RiftLoader.instance.configDir, "rei.json");
this.craftableOnly = false;
@@ -27,11 +23,16 @@ public class ConfigHelper {
if (!configFile.getParentFile().exists() || !configFile.getParentFile().isDirectory())
configFile.getParentFile().mkdirs();
loadConfig();
+ RoughlyEnoughItemsCore.LOGGER.info("REI: Config is loaded.");
} catch (IOException e) {
e.printStackTrace();
}
}
+ public static ConfigHelper getInstance() {
+ return instance;
+ }
+
public void saveConfig() throws IOException {
configFile.getParentFile().mkdirs();
if (!configFile.exists() && !configFile.createNewFile()) {
@@ -126,4 +127,12 @@ public class ConfigHelper {
config.mirrorItemPanel = mirrorItemPanel;
}
+ public boolean isLoadingDefaultPlugin() {
+ return config.loadDefaultPlugin;
+ }
+
+ public void setLoadingDefaultPlugin(boolean loadDefaultPlugin) {
+ config.loadDefaultPlugin = loadDefaultPlugin;
+ }
+
}
diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java
index 1f603463b..78e283b52 100644
--- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java
@@ -19,7 +19,6 @@ public class GuiHelper implements ClientTickable {
private static boolean overlayVisible = true;
private static ContainerGuiOverlay overlay;
private static GuiContainer lastGuiContainer;
- private static IMixinGuiContainer lastMixinGuiContainer;
public static boolean isOverlayVisible() {
return overlayVisible;
@@ -29,13 +28,16 @@ public class GuiHelper implements ClientTickable {
overlayVisible = !overlayVisible;
}
- public static ContainerGuiOverlay getLastOverlay() {
+ public static ContainerGuiOverlay getLastOverlay(boolean reset) {
+ if (overlay == null || reset) {
+ overlay = new ContainerGuiOverlay();
+ overlay.onInitialized();
+ }
return overlay;
}
- public static void setOverlay(ContainerGuiOverlay overlay) {
- GuiHelper.overlay = overlay;
- overlay.onInitialized();
+ public static ContainerGuiOverlay getLastOverlay() {
+ return getLastOverlay(false);
}
public static GuiContainer getLastGuiContainer() {
@@ -47,18 +49,14 @@ public class GuiHelper implements ClientTickable {
}
public static IMixinGuiContainer getLastMixinGuiContainer() {
- return lastMixinGuiContainer;
+ return (IMixinGuiContainer) lastGuiContainer;
}
- public static void setLastMixinGuiContainer(IMixinGuiContainer lastMixinGuiContainer) {
- GuiHelper.lastMixinGuiContainer = lastMixinGuiContainer;
- }
@Override
public void clientTick(Minecraft client) {
if (client.currentScreen instanceof GuiContainer && lastGuiContainer != client.currentScreen) {
GuiHelper.lastGuiContainer = (GuiContainer) client.currentScreen;
- GuiHelper.lastMixinGuiContainer = (IMixinGuiContainer) lastGuiContainer;
}
UpdateAnnouncer.clientTick(client);
}
diff --git a/src/main/java/me/shedaniel/rei/client/ItemListHelper.java b/src/main/java/me/shedaniel/rei/client/ItemListHelper.java
new file mode 100644
index 000000000..731c8e70c
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/client/ItemListHelper.java
@@ -0,0 +1,53 @@
+package me.shedaniel.rei.client;
+
+import com.google.common.collect.Lists;
+import me.shedaniel.rei.api.IItemRegisterer;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.NonNullList;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+public class ItemListHelper implements IItemRegisterer {
+
+ private final List<ItemStack> itemList = Lists.newLinkedList();
+
+ @Override
+ public List<ItemStack> getItemList() {
+ return Collections.unmodifiableList(itemList);
+ }
+
+ @Deprecated
+ @Override
+ public List<ItemStack> getModifiableItemList() {
+ return itemList;
+ }
+
+ @Override
+ public ItemStack[] getAllStacksFromItem(Item item) {
+ NonNullList<ItemStack> list = NonNullList.create();
+ list.add(item.getDefaultInstance());
+ item.fillItemGroup(item.getGroup(), list);
+ TreeSet<ItemStack> stackSet = list.stream().collect(Collectors.toCollection(() -> new TreeSet<ItemStack>((p1, p2) -> ItemStack.areItemStacksEqual(p1, p2) ? 0 : 1)));
+ return Lists.newArrayList(stackSet).toArray(new ItemStack[0]);
+ }
+
+ @Override
+ public void registerItemStack(Item afterItem, ItemStack stack) {
+ if (!stack.isEmpty() && !alreadyContain(stack))
+ if (afterItem == null || afterItem.equals(Items.AIR))
+ itemList.add(stack);
+ else {
+ int last = itemList.size();
+ for(int i = 0; i < itemList.size(); i++)
+ if (itemList.get(i).getItem().equals(afterItem))
+ last = i + 1;
+ itemList.add(last, stack);
+ }
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/client/REIConfig.java b/src/main/java/me/shedaniel/rei/client/REIConfig.java
index b5b798371..be4eabfeb 100644
--- a/src/main/java/me/shedaniel/rei/client/REIConfig.java
+++ b/src/main/java/me/shedaniel/rei/client/REIConfig.java
@@ -14,5 +14,6 @@ public class REIConfig {
public String giveCommandPrefix = "/give";
public boolean checkUpdates = true;
public boolean mirrorItemPanel = false;
+ public boolean loadDefaultPlugin = true;
}
diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
index eec9f4bbc..79128d814 100644
--- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
@@ -18,9 +18,9 @@ public class RecipeHelper {
private final Map<ResourceLocation, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
private final List<IRecipeCategory> categories = Lists.newArrayList();
- private RecipeManager recipeManager;
private final Map<ResourceLocation, SpeedCraftAreaSupplier> speedCraftAreaSupplierMap = Maps.newHashMap();
private final Map<ResourceLocation, List<SpeedCraftFunctional>> speedCraftFunctionalMap = Maps.newHashMap();
+ private RecipeManager recipeManager;
public static RecipeHelper getInstance() {
return RoughlyEnoughItemsCore.getRecipeHelper();
@@ -60,7 +60,7 @@ public class RecipeHelper {
recipeCategoryListMap.put(category.getResourceLocation(), Lists.newLinkedList());
}
- public void registerRecipe(ResourceLocation categoryIdentifier, IRecipeDisplay display) {
+ public void registerDisplay(ResourceLocation categoryIdentifier, IRecipeDisplay display) {
if (!recipeCategoryListMap.containsKey(categoryIdentifier))
return;
recipeCategoryListMap.get(categoryIdentifier).add(display);
@@ -148,6 +148,7 @@ public class RecipeHelper {
speedCraftFunctionalMap.put(category, list);
}
+ @SuppressWarnings("deprecation")
public void recipesLoaded(RecipeManager recipeManager) {
this.recipeManager = recipeManager;
this.recipeCategoryListMap.clear();
@@ -163,10 +164,19 @@ public class RecipeHelper {
return resourceLocation == null ? "NULL" : resourceLocation;
}).collect(Collectors.toList())));
Collections.reverse(plugins);
+ RoughlyEnoughItemsCore.getItemRegisterer().getModifiableItemList().clear();
+ IPluginDisabler pluginDisabler = RoughlyEnoughItemsCore.getPluginDisabler();
plugins.forEach(plugin -> {
- plugin.registerPluginCategories();
- plugin.registerRecipes();
- plugin.registerSpeedCraft();
+ String location = RoughlyEnoughItemsPlugin.getPluginResourceLocation(plugin);
+ ResourceLocation resourceLocation = new ResourceLocation(location == null ? "null" : location);
+ if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_ITEMS))
+ plugin.registerItems(RoughlyEnoughItemsCore.getItemRegisterer());
+ if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_CATEGORIES))
+ plugin.registerPluginCategories(this);
+ if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_RECIPE_DISPLAYS))
+ plugin.registerRecipeDisplays(this);
+ if (pluginDisabler.isFunctionEnabled(resourceLocation, PluginFunction.REGISTER_SPEED_CRAFT))
+ plugin.registerSpeedCraft(this);
});
RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(category -> {
return category.getCategoryName();
diff --g