aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-05 20:36:52 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-05 20:36:52 +0800
commit41f73b4416d707eabeecb7825ee8a982bb5e530a (patch)
treef00d81effad5945734e842f85d532de024f11e94 /src/main/java
parentc1892ad29b0b05521c46be1508dd440a13bd5456 (diff)
downloadRoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.tar.gz
RoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.tar.bz2
RoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.zip
Custom Ordering works
Diffstat (limited to 'src/main/java')
-rwxr-xr-xsrc/main/java/me/shedaniel/api/IDisplayCategory.java30
-rwxr-xr-xsrc/main/java/me/shedaniel/api/IREIPlugin.java7
-rw-r--r--src/main/java/me/shedaniel/gui/ConfigGui.java11
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/GuiItemList.java33
-rwxr-xr-xsrc/main/java/me/shedaniel/impl/REIRecipeManager.java30
5 files changed, 85 insertions, 26 deletions
diff --git a/src/main/java/me/shedaniel/api/IDisplayCategory.java b/src/main/java/me/shedaniel/api/IDisplayCategory.java
index 7e41920bd..44e021846 100755
--- a/src/main/java/me/shedaniel/api/IDisplayCategory.java
+++ b/src/main/java/me/shedaniel/api/IDisplayCategory.java
@@ -2,6 +2,7 @@ package me.shedaniel.api;
import me.shedaniel.gui.widget.Control;
import me.shedaniel.gui.widget.REISlot;
+import net.minecraft.client.gui.Gui;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -10,22 +11,31 @@ import java.util.List;
/**
* Created by James on 8/7/2018.
*/
-public interface IDisplayCategory<T extends IRecipe> {
- public String getId();
+public abstract class IDisplayCategory<T extends IRecipe> {
+ public abstract String getId();
- public String getDisplayName();
+ public abstract String getDisplayName();
- public void addRecipe(T recipe);
+ public abstract void addRecipe(T recipe);
- public void resetRecipes();
+ public abstract void resetRecipes();
- public List<REISlot> setupDisplay(int number);
+ public abstract List<REISlot> setupDisplay(int number);
- public boolean canDisplay(T recipe);
+ public abstract boolean canDisplay(T recipe);
- public void drawExtras();
+ public abstract void drawExtras();
- public void addWidget(List<Control> controls, int number);
+ public abstract void addWidget(List<Control> controls, int number);
+
+ public abstract ItemStack getCategoryIcon();
+
+ public boolean canAutoCraft(Class<? extends Gui> guiClass, T recipe) {
+ return false;
+ }
+
+ public boolean performAutoCraft(Gui guiClass, T recipe) {
+
+ }
- public ItemStack getCategoryIcon();
}
diff --git a/src/main/java/me/shedaniel/api/IREIPlugin.java b/src/main/java/me/shedaniel/api/IREIPlugin.java
index bc80f40c9..2736cbf1d 100755
--- a/src/main/java/me/shedaniel/api/IREIPlugin.java
+++ b/src/main/java/me/shedaniel/api/IREIPlugin.java
@@ -7,5 +7,10 @@ import me.shedaniel.listenerdefinitions.IEvent;
*/
public interface IREIPlugin extends IEvent {
- public void register();
+ public void registerCategories();
+
+ public void registerRecipes();
+
+ public void registerSpecialGuiExclusion();
+
}
diff --git a/src/main/java/me/shedaniel/gui/ConfigGui.java b/src/main/java/me/shedaniel/gui/ConfigGui.java
index 1073c1f24..ab97be55f 100644
--- a/src/main/java/me/shedaniel/gui/ConfigGui.java
+++ b/src/main/java/me/shedaniel/gui/ConfigGui.java
@@ -75,7 +75,7 @@ public class ConfigGui extends Gui {
addButton(new ButtonWidget(1001, parent.width / 2 - 90, 150, 150, 20, "") {
@Override
public void onPressed(double double_1, double double_2) {
- int index = Arrays.asList(REIItemListOrdering.values()).indexOf(Core.config.itemListOrdering);
+ int index = Arrays.asList(REIItemListOrdering.values()).indexOf(Core.config.itemListOrdering) + 1;
if (index >= REIItemListOrdering.values().length) {
index = 0;
Core.config.isAscending = !Core.config.isAscending;
@@ -83,6 +83,7 @@ public class ConfigGui extends Gui {
Core.config.itemListOrdering = REIItemListOrdering.values()[index];
try {
Core.saveConfig();
+ REIRenderHelper.reiGui.updateView();
} catch (IOException e) {
e.printStackTrace();
}
@@ -102,13 +103,13 @@ public class ConfigGui extends Gui {
drawBackground();
super.draw(mouseX, mouseY, partialTicks);
String text = I18n.translate("key.rei.recipe") + ": ";
- drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 40 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 30 + 6, -1);
+ drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 30 + 6, -1);
text = I18n.translate("key.rei.use") + ": ";
- drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 40 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 60 + 6, -1);
+ drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 60 + 6, -1);
text = I18n.translate("key.rei.hide") + ": ";
- drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 40 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 90 + 6, -1);
+ drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 90 + 6, -1);
text = I18n.translate("text.rei.list_ordering") + ": ";
- drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 110 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 150 + 6, -1);
+ drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 150 + 6, -1);
}
@Override
diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java
index defdd6643..06bbd0104 100755
--- a/src/main/java/me/shedaniel/gui/GuiItemList.java
+++ b/src/main/java/me/shedaniel/gui/GuiItemList.java
@@ -3,16 +3,20 @@ package me.shedaniel.gui;
import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.ClientListener;
import me.shedaniel.Core;
+import me.shedaniel.config.REIItemListOrdering;
import me.shedaniel.gui.widget.Button;
import me.shedaniel.gui.widget.Control;
import me.shedaniel.gui.widget.REISlot;
import me.shedaniel.gui.widget.TextBox;
+import me.shedaniel.impl.REIRecipeManager;
import me.shedaniel.listenerdefinitions.IMixinContainerGui;
+import net.fabricmc.fabric.client.itemgroup.FabricCreativeGuiComponents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ContainerGui;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
+import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.text.TextComponent;
import net.minecraft.text.TranslatableTextComponent;
@@ -21,8 +25,7 @@ import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.Registry;
import java.awt.*;
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -118,7 +121,7 @@ public class GuiItemList extends Drawable {
private Rectangle getSearchBoxArea() {
int ch = ((IMixinContainerGui) overlayedGui).getContainerHeight(), cw = ((IMixinContainerGui) overlayedGui).getContainerWidth();
if (Core.centreSearchBox) {
- if (ch + 4 + 18 > rect.height) //Will be out of bounds
+ if (ch + 4 + 18 > MinecraftClient.getInstance().window.getScaledHeight()) //Will be out of bounds
return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw, 18);
return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw, 18);
}
@@ -162,9 +165,10 @@ public class GuiItemList extends Drawable {
while (true) {
REISlot slot = new REISlot(x + xOffset, y + yOffset);
slot.setCheatable(true);
+ if (REIRecipeManager.instance().canAddSlot(MinecraftClient.getInstance().currentGui.getClass(), slot.rect))
+ displaySlots.add(slot);
xOffset += 18;
currentX++;
- displaySlots.add(slot);
if (currentX >= perRow) {
xOffset = 0;
yOffset += 18;
@@ -247,7 +251,23 @@ public class GuiItemList extends Drawable {
List<ItemStack> stacks = new ArrayList<>();
if (ClientListener.stackList == null && !Registry.ITEM.isEmpty())
Core.getListeners(ClientListener.class).forEach(ClientListener::onDoneLoading);
- if (ClientListener.stackList != null)
+ if (ClientListener.stackList != null) {
+ List<ItemStack> stackList = new LinkedList<>(ClientListener.stackList);
+ List<ItemGroup> itemGroups = new LinkedList<>(Arrays.asList(ItemGroup.GROUPS));
+ FabricCreativeGuiComponents.COMMON_GROUPS.forEach(itemGroups::add);
+ itemGroups.add(null);
+ if (Core.config.itemListOrdering != REIItemListOrdering.REGISTRY)
+ Collections.sort(stackList, (itemStack, t1) -> {
+ switch (Core.config.itemListOrdering) {
+ case NAME:
+ return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+ case ITEM_GROUPS:
+ return itemGroups.indexOf(itemStack.getItem().getItemGroup()) - itemGroups.indexOf(t1.getItem().getItemGroup());
+ }
+ return 0;
+ });
+ if (!Core.config.isAscending)
+ Collections.reverse(stackList);
Arrays.stream(searchText.split("\\|")).forEachOrdered(s -> {
List<SearchArgument> arguments = new ArrayList<>();
while (s.startsWith(" ")) s = s.substring(1);
@@ -264,8 +284,9 @@ public class GuiItemList extends Drawable {
arguments.add(new SearchArgument(SearchArgument.ArgumentType.TEXT, s.substring(1), false));
else
arguments.add(new SearchArgument(SearchArgument.ArgumentType.TEXT, s, true));
- ClientListener.stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add);
+ stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add);
});
+ }
view.addAll(stacks.stream().distinct().collect(Collectors.toList()));
page = 0;
fillSlots();
diff --git a/src/main/java/me/shedaniel/impl/REIRecipeManager.java b/src/main/java/me/shedaniel/impl/REIRecipeManager.java
index a7cd44a19..a7196adb4 100755
--- a/src/main/java/me/shedaniel/impl/REIRecipeManager.java
+++ b/src/main/java/me/shedaniel/impl/REIRecipeManager.java
@@ -7,14 +7,17 @@ import me.shedaniel.api.IRecipe;
import me.shedaniel.api.IRecipeManager;
import me.shedaniel.gui.RecipeGui;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.Gui;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.recipe.RecipeManager;
+import net.minecraft.util.BooleanBiFunction;
-import java.util.HashMap;
-import java.util.LinkedList;
+import java.awt.*;
+import java.util.*;
import java.util.List;
-import java.util.Map;
+import java.util.function.BooleanSupplier;
+import java.util.function.Function;
/**
* Created by James on 8/7/2018.
@@ -23,12 +26,14 @@ public class REIRecipeManager implements IRecipeManager {
private Map<String, List<IRecipe>> recipeList;
private List<IDisplayCategory> displayAdapters;
public static RecipeManager recipeManager;
+ private Map<Class<? extends Gui>, List<Function<Rectangle, Boolean>>> guiExcludeMap;
private static REIRecipeManager myInstance;
private REIRecipeManager() {
recipeList = new HashMap<>();
displayAdapters = new LinkedList<>();
+ guiExcludeMap = new HashMap<>();
}
public List<IDisplayCategory> getDisplayAdapters() {
@@ -43,6 +48,22 @@ public class REIRecipeManager implements IRecipeManager {
return myInstance;
}
+ public void addExclusionOnGui(Class<? extends Gui> guiClass, Function<Rectangle, Boolean>... functions) {
+ List<Function<Rectangle, Boolean>> list = guiExcludeMap.containsKey(guiClass) ? new LinkedList<>(guiExcludeMap.get(guiClass)) : new ArrayList<>();
+ list.addAll(Arrays.asList(functions));
+ guiExcludeMap.put(guiClass, list);
+ }
+
+ public boolean canAddSlot(Class<? extends Gui> guiClass, Rectangle slotRect) {
+ if (!guiExcludeMap.containsKey(guiClass))
+ return true;
+ for(Function<Rectangle, Boolean> rectangleBooleanFunction : guiExcludeMap.get(guiClass)) {
+ if (!rectangleBooleanFunction.apply(slotRect))
+ return false;
+ }
+ return true;
+ }
+
@Override
public void addRecipe(String id, IRecipe recipe) {
if (recipeList.containsKey(id)) {
@@ -136,7 +157,8 @@ public class REIRecipeManager implements IRecipeManager {
recipeList.clear();
displayAdapters.clear();
REIRecipeManager.instance().recipeManager = manager;
- Core.getListeners(IREIPlugin.class).forEach(IREIPlugin::register);
+ Core.getListeners(IREIPlugin.class).forEach(IREIPlugin::registerCategories);
+ Core.getListeners(IREIPlugin.class).forEach(IREIPlugin::registerRecipes);
}
public void displayRecipesFor(ItemStack stack) {