diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-05 20:36:52 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-05 20:36:52 +0800 |
| commit | 41f73b4416d707eabeecb7825ee8a982bb5e530a (patch) | |
| tree | f00d81effad5945734e842f85d532de024f11e94 /src/main/java | |
| parent | c1892ad29b0b05521c46be1508dd440a13bd5456 (diff) | |
| download | RoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.tar.gz RoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.tar.bz2 RoughlyEnoughItems-41f73b4416d707eabeecb7825ee8a982bb5e530a.zip | |
Custom Ordering works
Diffstat (limited to 'src/main/java')
| -rwxr-xr-x | src/main/java/me/shedaniel/api/IDisplayCategory.java | 30 | ||||
| -rwxr-xr-x | src/main/java/me/shedaniel/api/IREIPlugin.java | 7 | ||||
| -rw-r--r-- | src/main/java/me/shedaniel/gui/ConfigGui.java | 11 | ||||
| -rwxr-xr-x | src/main/java/me/shedaniel/gui/GuiItemList.java | 33 | ||||
| -rwxr-xr-x | src/main/java/me/shedaniel/impl/REIRecipeManager.java | 30 |
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) { |
