aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java21
-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.java57
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigHelper.java9
-rw-r--r--src/main/java/me/shedaniel/rei/client/GuiHelper.java19
-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.java19
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java58
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java70
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.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/CreditsScreen.java64
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java42
-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.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidgetScreen.java3
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java1
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java15
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java23
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java4
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java93
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/PluginManager.java43
-rw-r--r--src/main/java/me/shedaniel/rei/update/UpdateChecker.java5
34 files changed, 834 insertions, 402 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 686e34006..faa647b3f 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -1,12 +1,15 @@
package me.shedaniel.rei;
import com.google.common.collect.Maps;
+import me.shedaniel.rei.api.IItemRegisterer;
+import me.shedaniel.rei.api.IPluginDisabler;
import me.shedaniel.rei.api.IRecipePlugin;
-import me.shedaniel.rei.client.ClientHelper;
import me.shedaniel.rei.client.ConfigHelper;
import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ItemListHelper;
import me.shedaniel.rei.client.RecipeHelper;
import me.shedaniel.rei.plugin.DefaultPlugin;
+import me.shedaniel.rei.plugin.PluginManager;
import me.shedaniel.rei.update.UpdateChecker;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.ModInitializer;
@@ -33,7 +36,8 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "delete_item");
public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "create_item");
private static final RecipeHelper RECIPE_HELPER = new RecipeHelper();
- private static final ClientHelper CLIENT_HELPER = new ClientHelper();
+ private static final PluginManager PLUGIN_MANAGER = new PluginManager();
+ private static final ItemListHelper ITEM_LIST_HELPER = new ItemListHelper();
private static final Map<Identifier, IRecipePlugin> plugins = Maps.newHashMap();
private static ConfigHelper configHelper;
@@ -45,13 +49,18 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
return configHelper;
}
- public static ClientHelper getClientHelper() {
- return CLIENT_HELPER;
+ public static IItemRegisterer getItemRegisterer() {
+ return ITEM_LIST_HELPER;
+ }
+
+ public static IPluginDisabler getPluginDisabler() {
+ return PLUGIN_MANAGER;
}
public static IRecipePlugin registerPlugin(Identifier identifier, IRecipePlugin plugin) {
plugins.put(identifier, plugin);
RoughlyEnoughItemsCore.LOGGER.info("REI: Registered plugin %s from %s", identifier.toString(), plugin.getClass().getSimpleName());
+ plugin.onFirstLoad(getPluginDisabler());
return plugin;
}
@@ -66,14 +75,16 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
return null;
}
+ @SuppressWarnings("deprecation")
@Override
public void onInitializeClient() {
+ configHelper = new ConfigHelper();
+
// If pluginloader is not installed, base functionality should still remain
if (!FabricLoader.INSTANCE.getModContainers().stream().map(modContainer -> modContainer.getInfo().getId()).anyMatch(s -> s.equalsIgnoreCase("pluginloader"))) {
RoughlyEnoughItemsCore.LOGGER.warn("REI: Plugin Loader is not loaded! Please consider installing https://minecraft.curseforge.com/projects/pluginloader for REI plugin compatibility!");
registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin());
}
- configHelper = new ConfigHelper();
ClientTickCallback.EVENT.register(GuiHelper::onTick);
if (getConfigHelper().checkUpdates())
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..090e26742
--- /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.areEqual(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..8663e76bd
--- /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.Identifier;
+
+public interface IPluginDisabler {
+
+ default public void disablePluginFunctions(Identifier plugin, PluginFunction... functions) {
+ for(PluginFunction function : functions)
+ disablePluginFunction(plugin, function);
+ }
+
+ default public void enablePluginFunctions(Identifier plugin, PluginFunction... functions) {
+ for(PluginFunction function : functions)
+ enablePluginFunction(plugin, function);
+ }
+
+ public void disablePluginFunction(Identifier plugin, PluginFunction function);
+
+ public void enablePluginFunction(Identifier plugin, PluginFunction function);
+
+ public boolean isFunctionEnabled(Identifier 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 064f20abe..6ba6c70e7 100644
--- a/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
+++ b/src/main/java/me/shedaniel/rei/api/IRecipePlugin.java
@@ -1,12 +1,18 @@
package me.shedaniel.rei.api;
+import me.shedaniel.rei.client.RecipeHelper;
+
public interface IRecipePlugin {
- public void registerPluginCategories();
+ default public void onFirstLoad(IPluginDisabler pluginDisabler) {}
+
+ public void registerItems(IItemRegisterer itemRegisterer);
+
+ 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 fb2522f01..474fdf1ce 100644
--- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java
@@ -1,26 +1,22 @@
package me.shedaniel.rei.client;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
import io.netty.buffer.Unpooled;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.IRecipeCategory;
import me.shedaniel.rei.api.IRecipeDisplay;
import me.shedaniel.rei.gui.ContainerScreenOverlay;
-import me.shedaniel.rei.gui.widget.ConfigWidget;
+import me.shedaniel.rei.gui.config.ConfigScreen;
import me.shedaniel.rei.gui.widget.RecipeViewingWidgetScreen;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl;
-import net.fabricmc.loader.FabricLoader;
+import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.Mouse;
import net.minecraft.client.gui.Screen;
import net.minecraft.client.util.InputUtil;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.enchantment.EnchantmentHelper;
-import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.util.DefaultedList;
@@ -30,7 +26,6 @@ import net.minecraft.util.registry.Registry;
import java.awt.*;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -40,13 +35,8 @@ public class ClientHelper implements ClientModInitializer {
private static final Identifier USAGE_KEYBIND = new Identifier("roughlyenoughitems", "usage_keybind");
private static final Identifier HIDE_KEYBIND = new Identifier("roughlyenoughitems", "hide_keybind");
public static FabricKeyBinding RECIPE, USAGE, HIDE;
- private static List<ItemStack> itemList;
private static boolean cheating;
- public ClientHelper() {
- this.itemList = Lists.newLinkedList();
- }
-
public static String getModFromItemStack(ItemStack stack) {
if (!stack.isEmpty()) {
Identifier location = Registry.ITEM.getId(stack.getItem());
@@ -54,7 +44,7 @@ public class ClientHelper implements ClientModInitializer {
String modid = location.getNamespace();
if (modid.equalsIgnoreCase("minecraft"))
return "Minecraft";
- return FabricLoader.INSTANCE.getModContainers().stream().map(modContainer -> {
+ return ((net.fabricmc.loader.FabricLoader) FabricLoader.getInstance()).getModContainers().stream().map(modContainer -> {
return modContainer.getInfo();
}).filter(modInfo -> modInfo.getId().equals(modid) || (modInfo.getName() != null && modInfo.getName().equals(modid))).findFirst().map(modInfo -> {
if (modInfo.getName() != null)
@@ -65,10 +55,6 @@ public class ClientHelper implements ClientModInitializer {
return "";
}
- public static List<ItemStack> getItemList() {
- return itemList;
- }
-
public static Point getMouseLocation() {
MinecraftClient client = MinecraftClient.getInstance();
Mouse mouse = client.mouse;
@@ -127,7 +113,7 @@ public class ClientHelper implements ClientModInitializer {
}
public static void openConfigWindow(Screen parent) {
- MinecraftClient.getInstance().openScreen(new ConfigWidget(parent));
+ MinecraftClient.getInstance().openScreen(new ConfigScreen(parent));
}
public static List<ItemStack> getInventoryItemsTypes() {
@@ -140,41 +126,6 @@ public class ClientHelper implements ClientModInitializer {
return inventoryStacks;
}
- public void clientLoaded() {
- Registry.ITEM.forEach(item -> {
- if (!item.equals(Items.ENCHANTED_BOOK))
- registerItem(item);
- });
- Registry.ENCHANTMENT.forEach(enchantment -> {
- for(int i = enchantment.getMinimumLevel(); i < enchantment.getMaximumLevel(); i++) {
- Map<Enchantment, Integer> map = new HashMap<>();
- map.put(enchantment, i);
- ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK);
- EnchantmentHelper.set(map, itemStack);
- registerItemStack(itemStack);
- }
- });
- }
-
- public void registerItem(Item item) {
- registerItemStack(item.getDefaultStack());
- DefaultedList<ItemStack> stacks = DefaultedList.create();
- item.addStacksForDisplay(item.getItemGroup(), 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.areEqual(stack, itemStack))
- return true;
- return false;
- }
-
@Override
public void onInitializeClient() {
this.cheating = false;
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
index ccc340af3..caf307313 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java
@@ -20,6 +20,7 @@ public class ConfigHelper {
this.craftableOnly = false;
try {
loadConfig();
+ RoughlyEnoughItemsCore.LOGGER.info("REI: Config is loaded.");
} catch (IOException e) {
e.printStackTrace();
}
@@ -119,4 +120,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 2b453c784..cf74fafbd 100644
--- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java
@@ -17,7 +17,6 @@ public class GuiHelper {
private static boolean overlayVisible = true;
private static ContainerScreenOverlay overlay;
private static ContainerScreen lastContainerScreen;
- private static IMixinContainerScreen lastMixinContainerScreen;
public static boolean isOverlayVisible() {
return overlayVisible;
@@ -27,19 +26,21 @@ public class GuiHelper {
overlayVisible = !overlayVisible;
}
- public static ContainerScreenOverlay getLastOverlay() {
+ public static ContainerScreenOverlay getLastOverlay(boolean reset) {
+ if (overlay == null || reset) {
+ overlay = new ContainerScreenOverlay();
+ overlay.onInitialized();
+ }
return overlay;
}
- public static void setOverlay(ContainerScreenOverlay overlay) {
- GuiHelper.overlay = overlay;
- overlay.onInitialized();
+ public static ContainerScreenOverlay getLastOverlay() {
+ return getLastOverlay(false);
}
public static void onTick(MinecraftClient client) {
if (client.currentScreen instanceof ContainerScreen && lastContainerScreen != client.currentScreen) {
GuiHelper.lastContainerScreen = (ContainerScreen) client.currentScreen;
- GuiHelper.lastMixinContainerScreen = (IMixinContainerScreen) lastContainerScreen;
}
}
@@ -52,11 +53,7 @@ public class GuiHelper {
}
public static IMixinContainerScreen getLastMixinContainerScreen() {
- return lastMixinContainerScreen;
- }
-
- public static void setLastMixinContainerScreen(IMixinContainerScreen lastMixinContainerScreen) {
- GuiHelper.lastMixinContainerScreen = lastMixinContainerScreen;
+ return (IMixinContainerScreen) lastContainerScreen;
}
}
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..81c882d49
--- /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.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.util.DefaultedList;
+
+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) {
+ DefaultedList<ItemStack> list = DefaultedList.create();
+ list.add(item.getDefaultStack());
+ item.addStacksForDisplay(item.getItemGroup(), list);
+ TreeSet<ItemStack> stackSet = list.stream().collect(Collectors.toCollection(() -> new TreeSet<ItemStack>((p1, p2) -> ItemStack.areEqual(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 80d76c5f1..96490c6dd 100644
--- a/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/RecipeHelper.java
@@ -59,7 +59,7 @@ public class RecipeHelper {
recipeCategoryListMap.put(category.getIdentifier(), Lists.newLinkedList());
}
- public void registerRecipe(Identifier categoryIdentifier, IRecipeDisplay display) {
+ public void registerDisplay(Identifier categoryIdentifier, IRecipeDisplay display) {
if (!recipeCategoryListMap.containsKey(categoryIdentifier))
return;
recipeCategoryListMap.get(categoryIdentifier).add(display);
@@ -147,6 +147,7 @@ public class RecipeHelper {
speedCraftFunctionalMap.put(category, list);
}
+ @SuppressWarnings("deprecation")
public void recipesLoaded(RecipeManager recipeManager) {
this.recipeManager = recipeManager;
this.recipeCategoryListMap.clear();
@@ -162,10 +163,20 @@ public class RecipeHelper {
return identifier == null ? "NULL" : identifier.toString();
}).collect(Collectors.toList())));
Collections.reverse(plugins);
+ RoughlyEnoughItemsCore.getItemRegisterer().getModifiableItemList().clear();
+ IPluginDisabler pluginDisabler = RoughlyEnoughItemsCore.getPluginDisabler();
plugins.forEach(plugin -> {
- plugin.registerPluginCategories();
- plugin.registerRecipes();
- plugin.registerSpeedCraft();
+ Identifier identifier = RoughlyEnoughItemsCore.getPluginIdentifier(plugin);
+ if (identifier == null)
+ identifier = new Identifier("null");
+ if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_ITEMS))
+ plugin.registerItems(RoughlyEnoughItemsCore.getItemRegisterer());
+ if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_CATEGORIES))
+ plugin.registerPluginCategories(this);
+ if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_RECIPE_DISPLAYS))
+ plugin.registerRecipeDisplays(this);
+ if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_SPEED_CRAFT))
+ plugin.registerSpeedCraft(this);
});
RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(category -> {
return category.getCategoryName();
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index eb1daa9a4..41700f7c1 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -5,11 +5,12 @@ import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.client.ClientHelper;
import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.gui.credits.CreditsScreen;
import me.shedaniel.rei.gui.widget.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.DrawableContainer;
import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.Screen;
import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
@@ -22,7 +23,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
-public class ContainerScreenOverlay extends Screen {
+public class ContainerScreenOverlay extends DrawableContainer {
private static final List<QueuedTooltip> QUEUED_TOOLTIPS = Lists.newArrayList();
public static String searchTerm = "";
@@ -80,7 +81,13 @@ public class ContainerScreenOverlay extends Screen {
ClientHelper.openConfigWindow(GuiHelper.getLastContainerScreen());
}
});
- this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
+ widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigHelper().isMirrorItemPanel() ? window.getScaledWidth() - 50 : 10, window.getScaledHeight() - 30, 40, 20, I18n.translate("text.rei.credits")) {
+ @Override
+ public void onPressed(int button, double mouseX, double mouseY) {
+ MinecraftClient.getInstance().openScreen(new CreditsScreen(GuiHelper.getLastContainerScreen()));
+ }
+ });
+ widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
@Override
public void draw(int mouseX, int mouseY, float partialTicks) {
page = MathHelper.clamp(page, 0, getTotalPage());
@@ -101,7 +108,7 @@ public class ContainerScreenOverlay extends Screen {
};
GuiHelper.searchField.setChangedListener(s -> {
searchTerm = s;
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
});
GuiHelper.searchField.setBounds(getTextFieldArea());
this.widgets.add(GuiHelper.searchField);
@@ -111,12 +118,11 @@ public class ContainerScreenOverlay extends Screen {
@Override
public void onPressed(int button, double mouseX, double mouseY) {
RoughlyEnoughItemsCore.getConfigHelper().toggleCraftableOnly();
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
}
});
this.itemListOverlay.updateList(getItemListArea(), page, searchTerm);
- this.listeners.addAll(widgets);
}
private Rectangle getTextFieldArea() {
@@ -127,7 +133,7 @@ public class ContainerScreenOverlay extends Screen {
RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18);
}
- return new Rectangle(GuiHelper.getLastMixinContainerScreen().getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().getContainerWidth() - widthRemoved, 18);
+ return new Rectangle(GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().rei_getContainerWidth() - widthRemoved, 18);
}
private Rectangle getCraftableToggleArea() {
@@ -149,13 +155,13 @@ public class ContainerScreenOverlay extends Screen {
return rectangle;
}
- public void render(int mouseX, int mouseY, float partialTicks) {
+ public void drawOverlay(int mouseX, int mouseY, float partialTicks) {
List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes();
if (getLeft() != lastLeft)
onInitialized();
else if (RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) {
GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes();
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
}
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiLighting.disable();
@@ -185,7 +191,6 @@ public class ContainerScreenOverlay extends Screen {
QUEUED_TOOLTIPS.add(queuedTooltip);
}
- @Override
public void draw(int int_1, int int_2, float float_1) {
if (!GuiHelper.isOverlayVisible())
return;
@@ -194,14 +199,11 @@ public class ContainerScreenOverlay extends Screen {
widget.draw(int_1, int_2, float_1);
});
GuiLighting.disable();
- itemListOverlay.draw(int_1, int_2, float_1);
- GuiLighting.disable();
- super.draw(int_1, int_2, float_1);