aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/gui/GuiItemList.java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-08 18:23:00 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-08 18:23:00 +0800
commit72e1653cbb38282f8dce59a00fb381e18bfc795d (patch)
tree468a1d03c3a7295b43f28e71b84856a512e72b3f /src/main/java/me/shedaniel/gui/GuiItemList.java
parent6d5101aad169bc5d4d8bcd638aee0d4ce71c120a (diff)
downloadRoughlyEnoughItems-72e1653cbb38282f8dce59a00fb381e18bfc795d.tar.gz
RoughlyEnoughItems-72e1653cbb38282f8dce59a00fb381e18bfc795d.tar.bz2
RoughlyEnoughItems-72e1653cbb38282f8dce59a00fb381e18bfc795d.zip
Craftable Only WIP
Diffstat (limited to 'src/main/java/me/shedaniel/gui/GuiItemList.java')
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/GuiItemList.java74
1 files changed, 68 insertions, 6 deletions
diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java
index 18ea59d9b..18f8c3db8 100755
--- a/src/main/java/me/shedaniel/gui/GuiItemList.java
+++ b/src/main/java/me/shedaniel/gui/GuiItemList.java
@@ -1,8 +1,10 @@
package me.shedaniel.gui;
+import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.ClientListener;
import me.shedaniel.Core;
+import me.shedaniel.api.IRecipe;
import me.shedaniel.config.REIItemListOrdering;
import me.shedaniel.gui.widget.Button;
import me.shedaniel.gui.widget.Control;
@@ -14,12 +16,15 @@ 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.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.text.TextComponent;
import net.minecraft.text.TranslatableTextComponent;
+import net.minecraft.util.DefaultedList;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.Registry;
@@ -45,10 +50,11 @@ public class GuiItemList extends Drawable {
protected boolean visible = true;
private int oldGuiLeft = 0;
private boolean cheatMode = false;
+ private List<ItemStack> lastPlayerItems = new ArrayList<>();
public GuiItemList(ContainerGui overlayedGui) {
super(calculateRect(overlayedGui));
- FOOTERSIZE = Core.centreSearchBox ? 18 : 44;
+ FOOTERSIZE = Core.runtimeConfig.centreSearchBox ? 18 : 44;
displaySlots = new ArrayList<>();
controls = new ArrayList<>();
this.overlayedGui = overlayedGui;
@@ -102,11 +108,21 @@ public class GuiItemList extends Drawable {
}
searchBox = new TextBox(getSearchBoxArea());
searchBox.setText(savedText);
+ if (Core.config.enableCraftableOnlyButton) {
+ Button buttonCraftableOnly = new Button(getCraftableToggleArea(), "");
+ buttonCraftableOnly.setOnClick(i -> {
+ Core.runtimeConfig.craftableOnly = !Core.runtimeConfig.craftableOnly;
+ REIRenderHelper.updateSearch();
+ return true;
+ });
+ controls.add(buttonCraftableOnly);
+ }
controls.add(searchBox);
buttonCheating = new Button(5, 5, 45, 20, getCheatModeText());
buttonCheating.onClick = this::cheatClicked;
buttonConfig = new Button(5, 28, 45, 20, I18n.translate("text.rei.config"));
buttonConfig.onClick = i -> {
+ MinecraftClient.getInstance().openGui(null);
MinecraftClient.getInstance().openGui(new ConfigGui(overlayedGui));
return true;
};
@@ -119,13 +135,21 @@ public class GuiItemList extends Drawable {
}
private Rectangle getSearchBoxArea() {
+ int widthOffset = Core.config.enableCraftableOnlyButton ? -24 : 0;
int ch = ((IMixinContainerGui) overlayedGui).getContainerHeight(), cw = ((IMixinContainerGui) overlayedGui).getContainerWidth();
- if (Core.centreSearchBox) {
+ if (Core.runtimeConfig.centreSearchBox) {
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);
+ return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height + 100, cw + widthOffset, 18);
+ return new Rectangle(overlayedGui.width / 2 - cw / 2, rect.height - 31, cw + widthOffset, 18);
}
- return new Rectangle(rect.x, rect.height - 31, rect.width - 4, 18);
+ return new Rectangle(rect.x, rect.height - 31, rect.width - 4 + widthOffset, 18);
+ }
+
+ private Rectangle getCraftableToggleArea() {
+ Rectangle searchBoxArea = getSearchBoxArea();
+ searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 2);
+ searchBoxArea.setSize(20, 20);
+ return searchBoxArea;
}
private void fillSlots() {
@@ -184,11 +208,22 @@ public class GuiItemList extends Drawable {
public void draw() {
if (!visible)
return;
+ if (MinecraftClient.getInstance().currentGui instanceof ContainerGui)
+ overlayedGui = (ContainerGui) MinecraftClient.getInstance().currentGui;
+ if (Core.runtimeConfig.craftableOnly) {
+ List<ItemStack> currentPlayerItems = getInventoryItemsTypes();
+ for(ItemStack item : lastPlayerItems)
+ if (!currentPlayerItems.contains(item) || currentPlayerItems.size() != lastPlayerItems.size()) {
+ lastPlayerItems = new ArrayList<>(currentPlayerItems);
+ updateView();
+ }
+ }
if (needsResize == true || oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft())
resize();
GlStateManager.pushMatrix();
updateButtons();
controls.forEach(Control::draw);
+ GuiLighting.disable();
String header = String.format("%s/%s", page + 1, MathHelper.ceil(view.size() / displaySlots.size()) + 1);
MinecraftClient.getInstance().fontRenderer.drawWithShadow(header, rect.x + (rect.width / 2) - (MinecraftClient.getInstance().fontRenderer.getStringWidth(header) / 2), rect.y + 10, -1);
GlStateManager.popMatrix();
@@ -283,11 +318,38 @@ public class GuiItemList extends Drawable {
stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add);
});
}
- view.addAll(stacks.stream().distinct().collect(Collectors.toList()));
+ List<ItemStack> workingItems = ClientListener.stackList == null ? new ArrayList<>() : ClientListener.stackList;
+ if (Core.runtimeConfig.craftableOnly) {
+ List<IRecipe> workingRecipes = new ArrayList<>();
+ REIRecipeManager.instance().findUsageForItems(getInventoryItemsTypes()).forEach(workingRecipes::add);
+ workingItems = new ArrayList<>();
+ for(IRecipe workingRecipe : workingRecipes) {
+ List list = workingRecipe.getOutput();
+ try {
+ workingItems.addAll((List<ItemStack>) list);
+ } catch (Exception e) {
+ }
+ }
+ }
+ final List<ItemStack> finalWorkingItems = workingItems;
+ view.addAll(stacks.stream().filter(itemStack -> {
+ for(ItemStack workingItem : finalWorkingItems)
+ if (itemStack.isEqualIgnoreTags(workingItem))
+ return true;
+ return false;
+ }).distinct().collect(Collectors.toList()));
page = 0;
fillSlots();
}
+ private List<ItemStack> getInventoryItemsTypes() {
+ List<DefaultedList<ItemStack>> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor
+ , MinecraftClient.getInstance().player.inventory.offHand);
+ List<ItemStack> inventoryStacks = new ArrayList<>();
+ field_7543.forEach(inventoryStacks::addAll);
+ return inventoryStacks.stream().distinct().collect(Collectors.toList());
+ }
+
private boolean filterItem(ItemStack itemStack, List<SearchArgument> arguments) {
String mod = getMod(itemStack);
List<String> toolTipsList = REIRenderHelper.getOverlayedGui().getStackTooltip(itemStack);