Unknown 6 ani în urmă
părinte
comite
6531e42054
38 a modificat fișierele cu 169 adăugiri și 166 ștergeri
  1. 1 1
      build.gradle
  2. 11 11
      src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
  3. 3 3
      src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java
  4. 1 1
      src/main/java/me/shedaniel/rei/api/ButtonAreaSupplier.java
  5. 15 0
      src/main/java/me/shedaniel/rei/api/DisplaySettings.java
  6. 0 11
      src/main/java/me/shedaniel/rei/api/IDisplaySettings.java
  7. 0 18
      src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java
  8. 1 1
      src/main/java/me/shedaniel/rei/api/ItemRegistry.java
  9. 2 2
      src/main/java/me/shedaniel/rei/api/REIPlugin.java
  10. 6 7
      src/main/java/me/shedaniel/rei/api/RecipeCategory.java
  11. 6 6
      src/main/java/me/shedaniel/rei/api/RecipeDisplay.java
  12. 9 9
      src/main/java/me/shedaniel/rei/api/RecipeHelper.java
  13. 4 4
      src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java
  14. 5 5
      src/main/java/me/shedaniel/rei/client/ClientHelper.java
  15. 2 2
      src/main/java/me/shedaniel/rei/client/ItemRegistryImpl.java
  16. 29 29
      src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java
  17. 0 1
      src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
  18. 23 16
      src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
  19. 0 1
      src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java
  20. 3 3
      src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
  21. 9 0
      src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java
  22. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
  23. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java
  24. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java
  25. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java
  26. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java
  27. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java
  28. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java
  29. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java
  30. 5 5
      src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
  31. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java
  32. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java
  33. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
  34. 2 3
      src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java
  35. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java
  36. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java
  37. BIN
      src/main/resources/pack.png
  38. 6 1
      version.json

+ 1 - 1
build.gradle

@@ -6,7 +6,7 @@ sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 archivesBaseName = "RoughlyEnoughItems"
-version = "2.3.1.53"
+version = "2.3.2.54"
 
 def minecraftVersion = "19w09a"
 def yarnVersion = "19w09a.1"

+ 11 - 11
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -1,9 +1,9 @@
 package me.shedaniel.rei;
 
 import com.google.common.collect.Maps;
-import me.shedaniel.rei.api.ItemRegisterer;
-import me.shedaniel.rei.api.IRecipePlugin;
+import me.shedaniel.rei.api.ItemRegistry;
 import me.shedaniel.rei.api.PluginDisabler;
+import me.shedaniel.rei.api.REIPlugin;
 import me.shedaniel.rei.api.RecipeHelper;
 import me.shedaniel.rei.client.*;
 import me.shedaniel.rei.plugin.DefaultPlugin;
@@ -32,10 +32,10 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
     public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
     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 RecipeHelperImpl RECIPE_HELPER = new RecipeHelperImpl();
-    private static final PluginDisablerImpl PLUGIN_DISABLER = new PluginDisablerImpl();
-    private static final ItemRegistererImpl ITEM_REGISTERER = new ItemRegistererImpl();
-    private static final Map<Identifier, IRecipePlugin> plugins = Maps.newHashMap();
+    private static final RecipeHelper RECIPE_HELPER = new RecipeHelperImpl();
+    private static final PluginDisabler PLUGIN_DISABLER = new PluginDisablerImpl();
+    private static final ItemRegistry ITEM_REGISTRY = new ItemRegistryImpl();
+    private static final Map<Identifier, REIPlugin> plugins = Maps.newHashMap();
     private static ConfigHelper configHelper;
     
     public static RecipeHelper getRecipeHelper() {
@@ -46,26 +46,26 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
         return configHelper;
     }
     
-    public static ItemRegisterer getItemRegisterer() {
-        return ITEM_REGISTERER;
+    public static ItemRegistry getItemRegisterer() {
+        return ITEM_REGISTRY;
     }
     
     public static PluginDisabler getPluginDisabler() {
         return PLUGIN_DISABLER;
     }
     
-    public static IRecipePlugin registerPlugin(Identifier identifier, IRecipePlugin plugin) {
+    public static REIPlugin registerPlugin(Identifier identifier, REIPlugin plugin) {
         plugins.put(identifier, plugin);
         RoughlyEnoughItemsCore.LOGGER.info("REI: Registered plugin %s from %s", identifier.toString(), plugin.getClass().getSimpleName());
         plugin.onFirstLoad(getPluginDisabler());
         return plugin;
     }
     
-    public static List<IRecipePlugin> getPlugins() {
+    public static List<REIPlugin> getPlugins() {
         return new LinkedList<>(plugins.values());
     }
     
-    public static Optional<Identifier> getPluginIdentifier(IRecipePlugin plugin) {
+    public static Optional<Identifier> getPluginIdentifier(REIPlugin plugin) {
         for(Identifier identifier : plugins.keySet())
             if (identifier != null && plugins.get(identifier).equals(plugin))
                 return Optional.of(identifier);

+ 3 - 3
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java

@@ -3,7 +3,7 @@ package me.shedaniel.rei;
 import info.tehnut.pluginloader.LoaderCreator;
 import info.tehnut.pluginloader.PluginLoaderBuilder;
 import info.tehnut.pluginloader.ValidationStrategy;
-import me.shedaniel.rei.api.IRecipePlugin;
+import me.shedaniel.rei.api.REIPlugin;
 import net.fabricmc.loader.language.LanguageAdapter;
 import net.fabricmc.loader.language.LanguageAdapterException;
 import net.minecraft.util.Identifier;
@@ -14,10 +14,10 @@ public class RoughlyEnoughItemsPlugins implements LoaderCreator {
     public void createLoaders() {
         LanguageAdapter.Options instantiationOptions = new LanguageAdapter.Options();
         
-        new PluginLoaderBuilder("roughlyenoughitems").withValidator(ValidationStrategy.hasInterface(IRecipePlugin.class)).withInitializer((aClass, container) -> {
+        new PluginLoaderBuilder("roughlyenoughitems").withValidator(ValidationStrategy.hasInterface(REIPlugin.class)).withInitializer((aClass, container) -> {
             Identifier id = new Identifier(container.getOwner().getInfo().getId(), container.getInfo().getId());
             try {
-                IRecipePlugin plugin = (IRecipePlugin) container.getOwner().getAdapter().createInstance(aClass, instantiationOptions);
+                REIPlugin plugin = (REIPlugin) container.getOwner().getAdapter().createInstance(aClass, instantiationOptions);
                 RoughlyEnoughItemsCore.registerPlugin(id, plugin);
             } catch (LanguageAdapterException e) {
                 RoughlyEnoughItemsCore.LOGGER.error("REI: Error loading plugin %s", id, e);

+ 1 - 1
src/main/java/me/shedaniel/rei/api/SpeedCraftAreaSupplier.java → src/main/java/me/shedaniel/rei/api/ButtonAreaSupplier.java

@@ -2,7 +2,7 @@ package me.shedaniel.rei.api;
 
 import java.awt.*;
 
-public interface SpeedCraftAreaSupplier {
+public interface ButtonAreaSupplier {
     
     Rectangle get(Rectangle bounds);
     

+ 15 - 0
src/main/java/me/shedaniel/rei/api/DisplaySettings.java

@@ -0,0 +1,15 @@
+package me.shedaniel.rei.api;
+
+public interface DisplaySettings<T extends RecipeDisplay> {
+    
+    int getDisplayHeight(RecipeCategory category);
+    
+    int getDisplayWidth(RecipeCategory category, T display);
+    
+    int getMaximumRecipePerPage(RecipeCategory category);
+    
+    default int getFixedRecipesPerPage() {
+        return -1;
+    }
+    
+}

+ 0 - 11
src/main/java/me/shedaniel/rei/api/IDisplaySettings.java

@@ -1,11 +0,0 @@
-package me.shedaniel.rei.api;
-
-public interface IDisplaySettings<T extends IRecipeDisplay> {
-    
-    int getDisplayHeight(IRecipeCategory category);
-    
-    int getDisplayWidth(IRecipeCategory category, T display);
-    
-    int getMaximumRecipePerPage(IRecipeCategory category);
-    
-}

+ 0 - 18
src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java

@@ -1,18 +0,0 @@
-package me.shedaniel.rei.api;
-
-import me.shedaniel.rei.gui.widget.IWidget;
-import me.shedaniel.rei.listeners.IMixinContainerScreen;
-import net.minecraft.client.gui.Screen;
-
-import java.awt.*;
-import java.util.List;
-
-public interface IRecipeCategoryCraftable<T extends IRecipeDisplay> {
-    
-    boolean canAutoCraftHere(Class<? extends Screen> screenClasses, T recipe);
-    
-    boolean performAutoCraft(Screen gui, T recipe);
-    
-    void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerScreen parentScreen, T recipe);
-    
-}

+ 1 - 1
src/main/java/me/shedaniel/rei/api/ItemRegisterer.java → src/main/java/me/shedaniel/rei/api/ItemRegistry.java

@@ -5,7 +5,7 @@ import net.minecraft.item.ItemStack;
 
 import java.util.List;
 
-public interface ItemRegisterer {
+public interface ItemRegistry {
     
     List<ItemStack> getItemList();
     

+ 2 - 2
src/main/java/me/shedaniel/rei/api/IRecipePlugin.java → src/main/java/me/shedaniel/rei/api/REIPlugin.java

@@ -1,10 +1,10 @@
 package me.shedaniel.rei.api;
 
-public interface IRecipePlugin {
+public interface REIPlugin {
     
     default void onFirstLoad(PluginDisabler pluginDisabler) {}
     
-    void registerItems(ItemRegisterer itemRegisterer);
+    void registerItems(ItemRegistry itemRegistry);
     
     void registerPluginCategories(RecipeHelper recipeHelper);
     

+ 6 - 7
src/main/java/me/shedaniel/rei/api/IRecipeCategory.java → src/main/java/me/shedaniel/rei/api/RecipeCategory.java

@@ -8,13 +8,12 @@ import net.minecraft.item.ItemStack;
 import net.minecraft.util.Identifier;
 
 import java.awt.*;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.function.Supplier;
 
 
-public interface IRecipeCategory<T extends IRecipeDisplay> {
+public interface RecipeCategory<T extends RecipeDisplay> {
     
     Identifier getIdentifier();
     
@@ -32,20 +31,20 @@ public interface IRecipeCategory<T extends IRecipeDisplay> {
         DrawableHelper.drawRect(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, RecipeViewingScreen.SUB_COLOR.getRGB());
     }
     
-    default IDisplaySettings getDisplaySettings() {
-        return new IDisplaySettings<T>() {
+    default DisplaySettings getDisplaySettings() {
+        return new DisplaySettings<T>() {
             @Override
-            public int getDisplayHeight(IRecipeCategory category) {
+            public int getDisplayHeight(RecipeCategory category) {
                 return 66;
             }
             
             @Override
-            public int getDisplayWidth(IRecipeCategory category, T display) {
+            public int getDisplayWidth(RecipeCategory category, T display) {
                 return 150;
             }
             
             @Override
-            public int getMaximumRecipePerPage(IRecipeCategory category) {
+            public int getMaximumRecipePerPage(RecipeCategory category) {
                 return 99;
             }
         };

+ 6 - 6
src/main/java/me/shedaniel/rei/api/IRecipeDisplay.java → src/main/java/me/shedaniel/rei/api/RecipeDisplay.java

@@ -8,18 +8,18 @@ import net.minecraft.util.Identifier;
 import java.util.List;
 import java.util.Optional;
 
-public interface IRecipeDisplay<T extends Recipe> {
+public interface RecipeDisplay<T extends Recipe> {
     
     Optional<T> getRecipe();
-
+    
     List<List<ItemStack>> getInput();
-
+    
     List<ItemStack> getOutput();
-
+    
     default List<List<ItemStack>> getRequiredItems() {
         return Lists.newArrayList();
     }
-
+    
     Identifier getRecipeCategory();
-
+    
 }

+ 9 - 9
src/main/java/me/shedaniel/rei/api/RecipeHelper.java

@@ -19,26 +19,26 @@ public interface RecipeHelper {
     
     List<ItemStack> findCraftableByItems(List<ItemStack> inventoryItems);
     
-    void registerCategory(IRecipeCategory category);
+    void registerCategory(RecipeCategory category);
     
-    void registerDisplay(Identifier categoryIdentifier, IRecipeDisplay display);
+    void registerDisplay(Identifier categoryIdentifier, RecipeDisplay display);
     
-    Map<IRecipeCategory, List<IRecipeDisplay>> getRecipesFor(ItemStack stack);
+    Map<RecipeCategory, List<RecipeDisplay>> getRecipesFor(ItemStack stack);
     
     RecipeManager getRecipeManager();
     
-    List<IRecipeCategory> getAllCategories();
+    List<RecipeCategory> getAllCategories();
     
-    Map<IRecipeCategory, List<IRecipeDisplay>> getUsagesFor(ItemStack stack);
+    Map<RecipeCategory, List<RecipeDisplay>> getUsagesFor(ItemStack stack);
     
-    Optional<SpeedCraftAreaSupplier> getSpeedCraftButtonArea(IRecipeCategory category);
+    Optional<ButtonAreaSupplier> getSpeedCraftButtonArea(RecipeCategory category);
     
-    void registerSpeedCraftButtonArea(Identifier category, SpeedCraftAreaSupplier rectangle);
+    void registerSpeedCraftButtonArea(Identifier category, ButtonAreaSupplier rectangle);
     
-    List<SpeedCraftFunctional> getSpeedCraftFunctional(IRecipeCategory category);
+    List<SpeedCraftFunctional> getSpeedCraftFunctional(RecipeCategory category);
     
     void registerSpeedCraftFunctional(Identifier category, SpeedCraftFunctional functional);
     
-    Map<IRecipeCategory, List<IRecipeDisplay>> getAllRecipes();
+    Map<RecipeCategory, List<RecipeDisplay>> getAllRecipes();
     
 }

+ 4 - 4
src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java

@@ -2,12 +2,12 @@ package me.shedaniel.rei.api;
 
 import net.minecraft.client.gui.Screen;
 
-public interface SpeedCraftFunctional<T extends IRecipeDisplay> {
+public interface SpeedCraftFunctional<T extends RecipeDisplay> {
     
     Class[] getFunctioningFor();
-
+    
     boolean performAutoCraft(Screen screen, T recipe);
-
+    
     boolean acceptRecipe(Screen screen, T recipe);
-
+    
 }

+ 5 - 5
src/main/java/me/shedaniel/rei/client/ClientHelper.java

@@ -3,8 +3,8 @@ package me.shedaniel.rei.client;
 import com.google.common.collect.ImmutableList;
 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.api.RecipeCategory;
+import me.shedaniel.rei.api.RecipeDisplay;
 import me.shedaniel.rei.api.RecipeHelper;
 import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.gui.RecipeViewingScreen;
@@ -111,14 +111,14 @@ public class ClientHelper implements ClientModInitializer {
     }
     
     public static boolean executeRecipeKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
-        Map<IRecipeCategory, List<IRecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack);
+        Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack);
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;
     }
     
     public static boolean executeUsageKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
-        Map<IRecipeCategory, List<IRecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack);
+        Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack);
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;
@@ -139,7 +139,7 @@ public class ClientHelper implements ClientModInitializer {
     }
     
     public static boolean executeViewAllRecipesKeyBind(ContainerScreenOverlay lastOverlay) {
-        Map<IRecipeCategory, List<IRecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes();
+        Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes();
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;

+ 2 - 2
src/main/java/me/shedaniel/rei/client/ItemRegistererImpl.java → src/main/java/me/shedaniel/rei/client/ItemRegistryImpl.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.client;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.ItemRegisterer;
+import me.shedaniel.rei.api.ItemRegistry;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
@@ -12,7 +12,7 @@ import java.util.List;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
-public class ItemRegistererImpl implements ItemRegisterer {
+public class ItemRegistryImpl implements ItemRegistry {
     
     private final List<ItemStack> itemList = Lists.newLinkedList();
     

+ 29 - 29
src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java

@@ -17,17 +17,17 @@ import java.util.stream.Collectors;
 public class RecipeHelperImpl implements RecipeHelper {
     
     private final AtomicInteger recipeCount = new AtomicInteger();
-    private final Map<Identifier, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
-    private final List<IRecipeCategory> categories = Lists.newArrayList();
-    private final Map<Identifier, SpeedCraftAreaSupplier> speedCraftAreaSupplierMap = Maps.newHashMap();
+    private final Map<Identifier, List<RecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
+    private final List<RecipeCategory> categories = Lists.newArrayList();
+    private final Map<Identifier, ButtonAreaSupplier> speedCraftAreaSupplierMap = Maps.newHashMap();
     private final Map<Identifier, List<SpeedCraftFunctional>> speedCraftFunctionalMap = Maps.newHashMap();
     private RecipeManager recipeManager;
     
     @Override
     public List<ItemStack> findCraftableByItems(List<ItemStack> inventoryItems) {
         List<ItemStack> craftables = new ArrayList<>();
-        for(List<IRecipeDisplay> value : recipeCategoryListMap.values())
-            for(IRecipeDisplay recipeDisplay : value) {
+        for(List<RecipeDisplay> value : recipeCategoryListMap.values())
+            for(RecipeDisplay recipeDisplay : value) {
                 int slotsCraftable = 0;
                 List<List<ItemStack>> requiredInput = (List<List<ItemStack>>) recipeDisplay.getRequiredItems();
                 for(List<ItemStack> slot : requiredInput) {
@@ -54,13 +54,13 @@ public class RecipeHelperImpl implements RecipeHelper {
     }
     
     @Override
-    public void registerCategory(IRecipeCategory category) {
+    public void registerCategory(RecipeCategory category) {
         categories.add(category);
         recipeCategoryListMap.put(category.getIdentifier(), Lists.newLinkedList());
     }
     
     @Override
-    public void registerDisplay(Identifier categoryIdentifier, IRecipeDisplay display) {
+    public void registerDisplay(Identifier categoryIdentifier, RecipeDisplay display) {
         if (!recipeCategoryListMap.containsKey(categoryIdentifier))
             return;
         recipeCount.incrementAndGet();
@@ -68,17 +68,17 @@ public class RecipeHelperImpl implements RecipeHelper {
     }
     
     @Override
-    public Map<IRecipeCategory, List<IRecipeDisplay>> getRecipesFor(ItemStack stack) {
-        Map<Identifier, List<IRecipeDisplay>> categoriesMap = new HashMap<>();
+    public Map<RecipeCategory, List<RecipeDisplay>> getRecipesFor(ItemStack stack) {
+        Map<Identifier, List<RecipeDisplay>> categoriesMap = new HashMap<>();
         categories.forEach(f -> categoriesMap.put(f.getIdentifier(), Lists.newArrayList()));
-        for(Map.Entry<Identifier, List<IRecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
-            IRecipeCategory category = getCategory(entry.getKey());
-            for(IRecipeDisplay recipeDisplay : entry.getValue())
+        for(Map.Entry<Identifier, List<RecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
+            RecipeCategory category = getCategory(entry.getKey());
+            for(RecipeDisplay recipeDisplay : entry.getValue())
                 for(ItemStack outputStack : (List<ItemStack>) recipeDisplay.getOutput())
                     if (category.checkTags() ? ItemStack.areEqual(stack, outputStack) : ItemStack.areEqualIgnoreTags(stack, outputStack))
                         categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay);
         }
-        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
+        Map<RecipeCategory, List<RecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
         categories.forEach(category -> {
             if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
                 recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()));
@@ -86,7 +86,7 @@ public class RecipeHelperImpl implements RecipeHelper {
         return recipeCategoryListMap;
     }
     
-    private IRecipeCategory getCategory(Identifier identifier) {
+    private RecipeCategory getCategory(Identifier identifier) {
         return categories.stream().filter(category -> category.getIdentifier().equals(identifier)).findFirst().orElse(null);
     }
     
@@ -96,12 +96,12 @@ public class RecipeHelperImpl implements RecipeHelper {
     }
     
     @Override
-    public Map<IRecipeCategory, List<IRecipeDisplay>> getUsagesFor(ItemStack stack) {
-        Map<Identifier, List<IRecipeDisplay>> categoriesMap = new HashMap<>();
+    public Map<RecipeCategory, List<RecipeDisplay>> getUsagesFor(ItemStack stack) {
+        Map<Identifier, List<RecipeDisplay>> categoriesMap = new HashMap<>();
         categories.forEach(f -> categoriesMap.put(f.getIdentifier(), Lists.newArrayList()));
-        for(Map.Entry<Identifier, List<IRecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
-            IRecipeCategory category = getCategory(entry.getKey());
-            for(IRecipeDisplay recipeDisplay : entry.getValue()) {
+        for(Map.Entry<Identifier, List<RecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
+            RecipeCategory category = getCategory(entry.getKey());
+            for(RecipeDisplay recipeDisplay : entry.getValue()) {
                 boolean found = false;
                 for(List<ItemStack> input : (List<List<ItemStack>>) recipeDisplay.getInput()) {
                     for(ItemStack itemStack : input) {
@@ -116,7 +116,7 @@ public class RecipeHelperImpl implements RecipeHelper {
                 }
             }
         }
-        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
+        Map<RecipeCategory, List<RecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
         categories.forEach(category -> {
             if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
                 recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()));
@@ -125,24 +125,24 @@ public class RecipeHelperImpl implements RecipeHelper {
     }
     
     @Override
-    public List<IRecipeCategory> getAllCategories() {
+    public List<RecipeCategory> getAllCategories() {
         return new LinkedList<>(categories);
     }
     
     @Override
-    public Optional<SpeedCraftAreaSupplier> getSpeedCraftButtonArea(IRecipeCategory category) {
+    public Optional<ButtonAreaSupplier> getSpeedCraftButtonArea(RecipeCategory category) {
         if (!speedCraftAreaSupplierMap.containsKey(category.getIdentifier()))
             return Optional.of(bounds -> new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10));
         return Optional.ofNullable(speedCraftAreaSupplierMap.get(category.getIdentifier()));
     }
     
     @Override
-    public void registerSpeedCraftButtonArea(Identifier category, SpeedCraftAreaSupplier rectangle) {
+    public void registerSpeedCraftButtonArea(Identifier category, ButtonAreaSupplier rectangle) {
         speedCraftAreaSupplierMap.put(category, rectangle);
     }
     
     @Override
-    public List<SpeedCraftFunctional> getSpeedCraftFunctional(IRecipeCategory category) {
+    public List<SpeedCraftFunctional> getSpeedCraftFunctional(RecipeCategory category) {
         if (speedCraftFunctionalMap.get(category.getIdentifier()) == null)
             return Lists.newArrayList();
         return speedCraftFunctionalMap.get(category.getIdentifier());
@@ -163,7 +163,7 @@ public class RecipeHelperImpl implements RecipeHelper {
         this.categories.clear();
         this.speedCraftAreaSupplierMap.clear();
         this.speedCraftFunctionalMap.clear();
-        List<IRecipePlugin> plugins = new LinkedList<>(RoughlyEnoughItemsCore.getPlugins());
+        List<REIPlugin> plugins = new LinkedList<>(RoughlyEnoughItemsCore.getPlugins());
         plugins.sort((first, second) -> {
             return second.getPriority() - first.getPriority();
         });
@@ -184,7 +184,7 @@ public class RecipeHelperImpl implements RecipeHelper {
             if (pluginDisabler.isFunctionEnabled(identifier, PluginFunction.REGISTER_SPEED_CRAFT))
                 plugin.registerSpeedCraft(this);
         });
-        RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(IRecipeCategory::getCategoryName).collect(Collectors.toList())));
+        RoughlyEnoughItemsCore.LOGGER.info("Registered REI Categories: " + String.join(", ", categories.stream().map(RecipeCategory::getCategoryName).collect(Collectors.toList())));
         RoughlyEnoughItemsCore.LOGGER.info("Registered %d recipes for REI.", recipeCount.get());
     }
     
@@ -194,9 +194,9 @@ public class RecipeHelperImpl implements RecipeHelper {
     }
     
     @Override
-    public Map<IRecipeCategory, List<IRecipeDisplay>> getAllRecipes() {
-        Map<IRecipeCategory, List<IRecipeDisplay>> map = Maps.newLinkedHashMap();
-        Map<Identifier, List<IRecipeDisplay>> tempMap = Maps.newLinkedHashMap();
+    public Map<RecipeCategory, List<RecipeDisplay>> getAllRecipes() {
+        Map<RecipeCategory, List<RecipeDisplay>> map = Maps.newLinkedHashMap();
+        Map<Identifier, List<RecipeDisplay>> tempMap = Maps.newLinkedHashMap();
         recipeCategoryListMap.forEach((identifier, recipeDisplays) -> tempMap.put(identifier, new LinkedList<>(recipeDisplays)));
         categories.forEach(category -> {
             if (tempMap.containsKey(category.getIdentifier()))

+ 0 - 1
src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java

@@ -24,7 +24,6 @@ import net.minecraft.text.TranslatableTextComponent;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.world.GameMode;
-import net.minecraft.world.World;
 
 import java.awt.*;
 import java.util.Arrays;

+ 23 - 16
src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java

@@ -40,12 +40,12 @@ public class RecipeViewingScreen extends Screen {
     private List<TabWidget> tabs;
     private Window window;
     private Rectangle bounds;
-    private Map<IRecipeCategory, List<IRecipeDisplay>> categoriesMap;
-    private List<IRecipeCategory> categories;
-    private IRecipeCategory selectedCategory;
+    private Map<RecipeCategory, List<RecipeDisplay>> categoriesMap;
+    private List<RecipeCategory> categories;
+    private RecipeCategory selectedCategory;
     private ButtonWidget recipeBack, recipeNext, categoryBack, categoryNext;
     
-    public RecipeViewingScreen(Window window, Map<IRecipeCategory, List<IRecipeDisplay>> categoriesMap) {
+    public RecipeViewingScreen(Window window, Map<RecipeCategory, List<RecipeDisplay>> categoriesMap) {
         this.categoryPages = 0;
         this.window = window;
         this.widgets = Lists.newArrayList();
@@ -61,7 +61,7 @@ public class RecipeViewingScreen extends Screen {
         this.choosePageActivated = false;
     }
     
-    public static SpeedCraftFunctional getSpeedCraftFunctionalByCategory(ContainerScreen containerScreen, IRecipeCategory category) {
+    public static SpeedCraftFunctional getSpeedCraftFunctionalByCategory(ContainerScreen containerScreen, RecipeCategory category) {
         for(SpeedCraftFunctional functional : RecipeHelper.getInstance().getSpeedCraftFunctional(category))
             for(Class aClass : functional.getFunctioningFor())
                 if (containerScreen.getClass().isAssignableFrom(aClass))
@@ -100,7 +100,7 @@ public class RecipeViewingScreen extends Screen {
         this.largestWidth = window.getScaledWidth() - 100;
         this.largestHeight = window.getScaledHeight() - 40;
         this.guiWidth = MathHelper.clamp(getCurrentDisplayed().stream().map(display -> selectedCategory.getDisplayWidth(display)).max(Integer::compareTo).orElse(150) + 30, 0, largestWidth);
-        this.guiHeight = MathHelper.floor(MathHelper.clamp((selectedCategory.getDisplayHeight() + 7) * (getRecipesPerPage() + 1) + 40f, 186f, (float) largestHeight));
+        this.guiHeight = MathHelper.floor(MathHelper.clamp((selectedCategory.getDisplayHeight() + 7d) * (getRecipesPerPage() + 1d) + 40d, 186d, (double) largestHeight));
         this.bounds = new Rectangle(window.getScaledWidth() / 2 - guiWidth / 2, window.getScaledHeight() / 2 - guiHeight / 2, guiWidth, guiHeight);
         this.page = MathHelper.clamp(page, 0, getTotalPages(selectedCategory) - 1);
         
@@ -205,13 +205,13 @@ public class RecipeViewingScreen extends Screen {
                 tab.setItem(categories.get(j).getCategoryIcon(), categories.get(j).getCategoryName(), tab.getId() + categoryPages * 6 == categories.indexOf(selectedCategory));
             }
         }
-        Optional<SpeedCraftAreaSupplier> supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory);
+        Optional<ButtonAreaSupplier> supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory);
         final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(GuiHelper.getLastContainerScreen(), selectedCategory);
         int recipeHeight = selectedCategory.getDisplayHeight();
-        List<IRecipeDisplay> currentDisplayed = getCurrentDisplayed();
+        List<RecipeDisplay> currentDisplayed = getCurrentDisplayed();
         for(int i = 0; i < currentDisplayed.size(); i++) {
             int finalI = i;
-            final Supplier<IRecipeDisplay> displaySupplier = () -> {
+            final Supplier<RecipeDisplay> displaySupplier = () -> {
                 return currentDisplayed.get(finalI);
             };
             int displayWidth = selectedCategory.getDisplayWidth(displaySupplier.get());
@@ -224,23 +224,23 @@ public class RecipeViewingScreen extends Screen {
             recipeChoosePageWidget = new RecipeChoosePageWidget(this, page, getTotalPages(selectedCategory));
         else
             recipeChoosePageWidget = null;
-    
+        
         GuiHelper.getLastOverlay().onInitialized();
         listeners.addAll(tabs);
         listeners.add(GuiHelper.getLastOverlay());
         listeners.addAll(widgets);
     }
     
-    public List<IRecipeDisplay> getCurrentDisplayed() {
-        List<IRecipeDisplay> list = Lists.newArrayList();
+    public List<RecipeDisplay> getCurrentDisplayed() {
+        List<RecipeDisplay> list = Lists.newArrayList();
         int recipesPerPage = getRecipesPerPage();
         for(int i = 0; i <= recipesPerPage; i++)
-            if (recipesPerPage > 0 && page * (recipesPerPage + 1) + i < categoriesMap.get(selectedCategory).size())
+            if (page * (recipesPerPage + 1) + i < categoriesMap.get(selectedCategory).size())
                 list.add(categoriesMap.get(selectedCategory).get(page * (recipesPerPage + 1) + i));
         return list;
     }
     
-    public IRecipeCategory getSelectedCategory() {
+    public RecipeCategory getSelectedCategory() {
         return selectedCategory;
     }
     
@@ -253,8 +253,15 @@ public class RecipeViewingScreen extends Screen {
     }
     
     private int getRecipesPerPage() {
+        if (selectedCategory.getDisplaySettings().getFixedRecipesPerPage() > 0)
+            return selectedCategory.getDisplaySettings().getFixedRecipesPerPage() - 1;
+        int height = selectedCategory.getDisplayHeight();
+        return MathHelper.clamp(MathHelper.floor(((double) largestHeight - 40d) / ((double) height + 7d)) - 1, 0, Math.min(RoughlyEnoughItemsCore.getConfigHelper().getConfig().maxRecipePerPage - 1, selectedCategory.getMaximumRecipePerPage() - 1));
+    }
+    
+    private int getRecipesPerPageByHeight() {
         int height = selectedCategory.getDisplayHeight();
-        return MathHelper.clamp(MathHelper.floor(((float) largestHeight - 40f) / ((float) height + 7f)) - 1, 0, Math.min(RoughlyEnoughItemsCore.getConfigHelper().getConfig().maxRecipePerPage - 1, selectedCategory.getMaximumRecipePerPage() - 1));
+        return MathHelper.clamp(MathHelper.floor(((double) guiHeight - 40d) / ((double) height + 7d)) - 1, 0, Math.min(RoughlyEnoughItemsCore.getConfigHelper().getConfig().maxRecipePerPage - 1, selectedCategory.getMaximumRecipePerPage() - 1));
     }
     
     @Override
@@ -288,7 +295,7 @@ public class RecipeViewingScreen extends Screen {
         }
     }
     
-    public int getTotalPages(IRecipeCategory category) {
+    public int getTotalPages(RecipeCategory category) {
         return MathHelper.ceil(categoriesMap.get(category).size() / (double) (getRecipesPerPage() + 1));
     }
     

+ 0 - 1
src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java

@@ -4,7 +4,6 @@ import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.RelativePoint;
-import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.ConfigHelper;
 import me.shedaniel.rei.gui.RecipeViewingScreen;
 import net.minecraft.client.MinecraftClient;

+ 3 - 3
src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java

@@ -1,6 +1,6 @@
 package me.shedaniel.rei.gui.widget;
 
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import me.shedaniel.rei.api.SpeedCraftFunctional;
 import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
@@ -13,10 +13,10 @@ import java.util.function.Supplier;
 
 public class SpeedCraftingButtonWidget extends ButtonWidget {
     
-    private final Supplier<IRecipeDisplay> displaySupplier;
+    private final Supplier<RecipeDisplay> displaySupplier;
     private final SpeedCraftFunctional functional;
     
-    public SpeedCraftingButtonWidget(Rectangle rectangle, String text, SpeedCraftFunctional functional, Supplier<IRecipeDisplay> displaySupplier) {
+    public SpeedCraftingButtonWidget(Rectangle rectangle, String text, SpeedCraftFunctional functional, Supplier<RecipeDisplay> displaySupplier) {
         super(rectangle, text);
         this.displaySupplier = displaySupplier;
         this.functional = functional;

+ 9 - 0
src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java

@@ -1,5 +1,6 @@
 package me.shedaniel.rei.mixin;
 
+import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.listeners.IMixinTabGetter;
 import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
@@ -59,4 +60,12 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
             }
     }
     
+    @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
+    public void mouseClicked(double i, double j, int k, CallbackInfoReturnable<Boolean> ci) {
+        if (GuiHelper.getLastOverlay().mouseClicked(i, j, k)) {
+            ci.setReturnValue(true);
+            ci.cancel();
+        }
+    }
+    
 }

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -19,7 +19,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultBlastingCategory implements IRecipeCategory<DefaultBlastingDisplay> {
+public class DefaultBlastingCategory implements RecipeCategory<DefaultBlastingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.block.entity.FurnaceBlockEntity;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -13,7 +13,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-public class DefaultBlastingDisplay implements IRecipeDisplay<BlastingRecipe> {
+public class DefaultBlastingDisplay implements RecipeDisplay<BlastingRecipe> {
     
     private BlastingRecipe display;
     private List<List<ItemStack>> input;

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -20,7 +20,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultBrewingCategory implements IRecipeCategory<DefaultBrewingDisplay> {
+public class DefaultBrewingCategory implements RecipeCategory<DefaultBrewingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java

@@ -1,6 +1,6 @@
 package me.shedaniel.rei.plugin;
 
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.block.Blocks;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
@@ -13,7 +13,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 
-public class DefaultBrewingDisplay implements IRecipeDisplay {
+public class DefaultBrewingDisplay implements RecipeDisplay {
     
     private ItemStack input, output;
     private Ingredient reactant;

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -19,7 +19,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultCampfireCategory implements IRecipeCategory<DefaultCampfireDisplay> {
+public class DefaultCampfireCategory implements RecipeCategory<DefaultCampfireDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.item.ItemStack;
 import net.minecraft.recipe.Ingredient;
 import net.minecraft.recipe.cooking.CampfireCookingRecipe;
@@ -13,7 +13,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class DefaultCampfireDisplay implements IRecipeDisplay<CampfireCookingRecipe> {
+public class DefaultCampfireDisplay implements RecipeDisplay<CampfireCookingRecipe> {
     
     private List<ItemStack> inputs, output;
     private int cookTime;

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -19,7 +19,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingDisplay> {
+public class DefaultCraftingCategory implements RecipeCategory<DefaultCraftingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultCraftingDisplay.java

@@ -1,10 +1,10 @@
 package me.shedaniel.rei.plugin;
 
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.recipe.Recipe;
 import net.minecraft.util.Identifier;
 
-public interface DefaultCraftingDisplay<T> extends IRecipeDisplay<Recipe> {
+public interface DefaultCraftingDisplay<T> extends RecipeDisplay<Recipe> {
     
     @Override
     default Identifier getRecipeCategory() {

+ 5 - 5
src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java

@@ -29,7 +29,7 @@ import net.minecraft.util.registry.Registry;
 
 import java.util.*;
 
-public class DefaultPlugin implements IRecipePlugin {
+public class DefaultPlugin implements REIPlugin {
     
     public static final Identifier CRAFTING = new Identifier("roughlyenoughitems", "plugins/crafting");
     public static final Identifier SMELTING = new Identifier("roughlyenoughitems", "plugins/smelting");
@@ -57,11 +57,11 @@ public class DefaultPlugin implements IRecipePlugin {
     }
     
     @Override
-    public void registerItems(ItemRegisterer itemRegisterer) {
+    public void registerItems(ItemRegistry itemRegistry) {
         Registry.ITEM.stream().forEach(item -> {
-            itemRegisterer.registerItemStack(item.getDefaultStack());
+            itemRegistry.registerItemStack(item.getDefaultStack());
             try {
-                itemRegisterer.registerItemStack(itemRegisterer.getAllStacksFromItem(item));
+                itemRegistry.registerItemStack(itemRegistry.getAllStacksFromItem(item));
             } catch (Exception e) {
             }
         });
@@ -71,7 +71,7 @@ public class DefaultPlugin implements IRecipePlugin {
                 map.put(enchantment, i);
                 ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK);
                 EnchantmentHelper.set(map, itemStack);
-                itemRegisterer.registerItemStack(Items.ENCHANTED_BOOK, itemStack);
+                itemRegistry.registerItemStack(Items.ENCHANTED_BOOK, itemStack);
             }
         });
     }

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -19,7 +19,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingDisplay> {
+public class DefaultSmeltingCategory implements RecipeCategory<DefaultSmeltingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.block.entity.FurnaceBlockEntity;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -13,7 +13,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-public class DefaultSmeltingDisplay implements IRecipeDisplay<SmeltingRecipe> {
+public class DefaultSmeltingDisplay implements RecipeDisplay<SmeltingRecipe> {
     
     private SmeltingRecipe display;
     private List<List<ItemStack>> input;

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -19,7 +19,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultSmokingCategory implements IRecipeCategory<DefaultSmokingDisplay> {
+public class DefaultSmokingCategory implements RecipeCategory<DefaultSmokingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 3
src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java

@@ -1,11 +1,10 @@
 package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.block.entity.FurnaceBlockEntity;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
-import net.minecraft.recipe.cooking.SmeltingRecipe;
 import net.minecraft.recipe.cooking.SmokingRecipe;
 import net.minecraft.util.Identifier;
 
@@ -14,7 +13,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-public class DefaultSmokingDisplay implements IRecipeDisplay<SmokingRecipe> {
+public class DefaultSmokingDisplay implements RecipeDisplay<SmokingRecipe> {
     
     private SmokingRecipe display;
     private List<List<ItemStack>> input;

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
@@ -18,7 +18,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DefaultStoneCuttingCategory implements IRecipeCategory<DefaultStoneCuttingDisplay> {
+public class DefaultStoneCuttingCategory implements RecipeCategory<DefaultStoneCuttingDisplay> {
     
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.plugin;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.api.IRecipeDisplay;
+import me.shedaniel.rei.api.RecipeDisplay;
 import net.minecraft.item.ItemStack;
 import net.minecraft.recipe.Ingredient;
 import net.minecraft.recipe.StonecuttingRecipe;
@@ -13,7 +13,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class DefaultStoneCuttingDisplay implements IRecipeDisplay<StonecuttingRecipe> {
+public class DefaultStoneCuttingDisplay implements RecipeDisplay<StonecuttingRecipe> {
     
     private List<ItemStack> inputs, output;
     private StonecuttingRecipe display;

BIN
src/main/resources/pack.png


+ 6 - 1
version.json

@@ -30,7 +30,7 @@
     },
     {
       "game": "19w09a",
-      "mod": "2.3.1.53"
+      "mod": "2.3.2.54"
     },
     {
       "game": "none",
@@ -68,6 +68,11 @@
         "version": "2.3.1.53",
         "text": "7 New features + Several Bug Fixes",
         "level": "useful"
+      },
+      {
+        "version": "2.3.2.54",
+        "text": "Fixed Creative Screen + full page recipes",
+        "level": "useful"
       }
     ]
   }