aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/gui')
-rw-r--r--src/main/java/me/shedaniel/gui/ConfigGui.java29
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/Drawable.java2
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/GuiItemList.java74
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/REIRenderHelper.java6
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/RecipeGui.java11
-rw-r--r--src/main/java/me/shedaniel/gui/SearchArgument.java1
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/Button.java2
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/Control.java6
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/IFocusable.java2
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/REISlot.java1
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/TextBox.java1
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/widget/WidgetArrow.java2
12 files changed, 119 insertions, 18 deletions
diff --git a/src/main/java/me/shedaniel/gui/ConfigGui.java b/src/main/java/me/shedaniel/gui/ConfigGui.java
index 266347adf..6deeb24ea 100644
--- a/src/main/java/me/shedaniel/gui/ConfigGui.java
+++ b/src/main/java/me/shedaniel/gui/ConfigGui.java
@@ -76,6 +76,30 @@ 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) {
+ Core.config.enableCraftableOnlyButton = !Core.config.enableCraftableOnlyButton;
+ try {
+ Core.saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void draw(int int_1, int int_2, float float_1) {
+ GuiLighting.disable();
+ this.text = I18n.translate("text.rei.enable_craftable_only.button", Core.config.enableCraftableOnlyButton ? "§a" : "§c", Core.config.enableCraftableOnlyButton);
+ super.draw(int_1, int_2, float_1);
+ if (this.hovered)
+ drawSuggestion(int_1, int_2);
+ }
+
+ protected void drawSuggestion(int x, int y) {
+ drawTooltip(Arrays.asList(I18n.translate("text.rei.enable_craftable_only.tooltip").split("\n")), x, y);
+ }
+ });
+ addButton(new ButtonWidget(1002, parent.width / 2 - 90, 180, 150, 20, "") {
+ @Override
+ public void onPressed(double double_1, double double_2) {
int index = Arrays.asList(REIItemListOrdering.values()).indexOf(Core.config.itemListOrdering) + 1;
if (index >= REIItemListOrdering.values().length) {
index = 0;
@@ -89,7 +113,7 @@ public class ConfigGui extends Gui {
e.printStackTrace();
}
}
-
+
@Override
public void draw(int int_1, int int_2, float float_1) {
GuiLighting.disable();
@@ -112,7 +136,7 @@ public class ConfigGui extends Gui {
text = I18n.translate("key.rei.hide") + ": ";
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 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 150 + 6, -1);
+ drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 95 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 180 + 6, -1);
}
@Override
@@ -126,4 +150,5 @@ public class ConfigGui extends Gui {
return super.keyPressed(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_);
}
}
+
}
diff --git a/src/main/java/me/shedaniel/gui/Drawable.java b/src/main/java/me/shedaniel/gui/Drawable.java
index 76d49e049..a2e5740a4 100755
--- a/src/main/java/me/shedaniel/gui/Drawable.java
+++ b/src/main/java/me/shedaniel/gui/Drawable.java
@@ -9,6 +9,7 @@ import java.awt.*;
* Created by James on 7/28/2018.
*/
public abstract class Drawable implements IDrawable {
+
protected Rectangle rect;
public Drawable(int x, int y, int width, int height) {
@@ -30,4 +31,5 @@ public abstract class Drawable implements IDrawable {
}
return false;
}
+
}
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);
diff --git a/src/main/java/me/shedaniel/gui/REIRenderHelper.java b/src/main/java/me/shedaniel/gui/REIRenderHelper.java
index 99f22c120..81d5be801 100755
--- a/src/main/java/me/shedaniel/gui/REIRenderHelper.java
+++ b/src/main/java/me/shedaniel/gui/REIRenderHelper.java
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
* Created by James on 7/28/2018.
*/
public class REIRenderHelper {
+
static Point mouseLoc;
static public GuiItemList reiGui;
static ContainerGui overlayedGui;
@@ -230,6 +231,10 @@ public class REIRenderHelper {
reiGui.tick();
}
+ public static boolean isGuiVisible() {
+ return reiGui != null && reiGui.visible;
+ }
+
public static boolean recipeKeyBind() {
if (!(MinecraftClient.getInstance().currentGui instanceof ContainerGui))
return false;
@@ -271,4 +276,5 @@ public class REIRenderHelper {
}
return false;
}
+
}
diff --git a/src/main/java/me/shedaniel/gui/RecipeGui.java b/src/main/java/me/shedaniel/gui/RecipeGui.java
index 11731b120..7e6acdef9 100755
--- a/src/main/java/me/shedaniel/gui/RecipeGui.java
+++ b/src/main/java/me/shedaniel/gui/RecipeGui.java
@@ -1,7 +1,7 @@
package me.shedaniel.gui;
import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.api.DisplayCategoryCraftable;
+import me.shedaniel.api.IDisplayCategoryCraftable;
import me.shedaniel.api.IDisplayCategory;
import me.shedaniel.api.IRecipe;
import me.shedaniel.gui.widget.Button;
@@ -166,12 +166,12 @@ public class RecipeGui extends ContainerGui {
List<Control> newControls = new LinkedList<>();
selectedCategory.addWidget(newControls, 0);
- if (selectedCategory instanceof DisplayCategoryCraftable)
- ((DisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipe, 0);
+ if (selectedCategory instanceof IDisplayCategoryCraftable)
+ ((IDisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipe, 0);
if (recipes.get(selectedCategory).size() >= recipePointer + 2) {
selectedCategory.addWidget(newControls, 1);
- if (selectedCategory instanceof DisplayCategoryCraftable)
- ((DisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipes.get(selectedCategory).get(recipePointer + 1), 1);
+ if (selectedCategory instanceof IDisplayCategoryCraftable)
+ ((IDisplayCategoryCraftable) selectedCategory).registerAutoCraftButton(newControls, this, getPrevScreen(), recipes.get(selectedCategory).get(recipePointer + 1), 1);
}
newControls.forEach(f -> f.move(left, top));
controls.addAll(newControls);
@@ -283,4 +283,5 @@ public class RecipeGui extends ContainerGui {
private int getTotalPages() {
return MathHelper.clamp(riseDoublesToInt(recipes.get(selectedCategory).size() / 2d), 1, Integer.MAX_VALUE);
}
+
}
diff --git a/src/main/java/me/shedaniel/gui/SearchArgument.java b/src/main/java/me/shedaniel/gui/SearchArgument.java
index 253f87814..5eeddf01c 100644
--- a/src/main/java/me/shedaniel/gui/SearchArgument.java
+++ b/src/main/java/me/shedaniel/gui/SearchArgument.java
@@ -32,4 +32,5 @@ public class SearchArgument {
public String toString() {
return String.format("Argument[%s]: name = %s, include = %b", argumentType.name(), text, include);
}
+
}
diff --git a/src/main/java/me/shedaniel/gui/widget/Button.java b/src/main/java/me/shedaniel/gui/widget/Button.java
index e4339fd64..f87b72f73 100755
--- a/src/main/java/me/shedaniel/gui/widget/Button.java
+++ b/src/main/java/me/shedaniel/gui/widget/Button.java
@@ -17,7 +17,6 @@ public class Button extends Control {
private String buttonText;
protected static final Identifier BUTTON_TEXTURES = new Identifier("textures/gui/widgets.png");
-
public Button(int x, int y, int width, int height, String buttonText) {
super(x, y, width, height);
this.buttonText = buttonText;
@@ -32,7 +31,6 @@ public class Button extends Control {
buttonText = text;
}
-
@Override
public void draw() {
GlStateManager.pushMatrix();
diff --git a/src/main/java/me/shedaniel/gui/widget/Control.java b/src/main/java/me/shedaniel/gui/widget/Control.java
index 9be17a0c2..18e89113f 100755
--- a/src/main/java/me/shedaniel/gui/widget/Control.java
+++ b/src/main/java/me/shedaniel/gui/widget/Control.java
@@ -1,7 +1,7 @@
package me.shedaniel.gui.widget;
import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.api.TriBooleanProducer;
+import me.shedaniel.api.TriBooleanSupplier;
import me.shedaniel.gui.Drawable;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
@@ -15,9 +15,10 @@ import java.util.function.IntFunction;
* Created by James on 7/29/2018.
*/
public abstract class Control extends Drawable {
+
private boolean enabled = true;
public IntFunction<Boolean> onClick;
- public TriBooleanProducer onKeyDown;
+ public TriBooleanSupplier onKeyDown;
public BiConsumer<Character, Integer> charPressed;
public Control(int x, int y, int width, int height) {
@@ -55,7 +56,6 @@ public abstract class Control extends Drawable {
p_drawRect_1_ = p_drawRect_3_;
p_drawRect_3_ = lvt_5_3_;
}
-
float lvt_5_3_1 = (float) (p_drawRect_4_ >> 24 & 255) / 255.0F;
float lvt_6_1_ = (float) (p_drawRect_4_ >> 16 & 255) / 255.0F;
float lvt_7_1_ = (float) (p_drawRect_4_ >> 8 & 255) / 255.0F;
diff --git a/src/main/java/me/shedaniel/gui/widget/IFocusable.java b/src/main/java/me/shedaniel/gui/widget/IFocusable.java
index 54a0b9426..5735ab3f1 100755
--- a/src/main/java/me/shedaniel/gui/widget/IFocusable.java
+++ b/src/main/java/me/shedaniel/gui/widget/IFocusable.java
@@ -4,7 +4,9 @@ package me.shedaniel.gui.widget;
* Created by James on 8/3/2018.
*/
public interface IFocusable {
+
public boolean hasFocus();
public void setFocused(boolean val);
+
}
diff --git a/src/main/java/me/shedaniel/gui/widget/REISlot.java b/src/main/java/me/shedaniel/gui/widget/REISlot.java
index d1a41ac59..6896163cf 100755
--- a/src/main/java/me/shedaniel/gui/widget/REISlot.java
+++ b/src/main/java/me/shedaniel/gui/widget/REISlot.java
@@ -22,6 +22,7 @@ import java.util.stream.Collectors;
* Created by James on 7/28/2018.
*/
public class REISlot extends Control {
+
private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
private boolean cheatable = false;
private List<ItemStack> itemList = new LinkedList<>();
diff --git a/src/main/java/me/shedaniel/gui/widget/TextBox.java b/src/main/java/me/shedaniel/gui/widget/TextBox.java
index 6329c5c23..566839eb2 100755
--- a/src/main/java/me/shedaniel/gui/widget/TextBox.java
+++ b/src/main/java/me/shedaniel/gui/widget/TextBox.java
@@ -81,4 +81,5 @@ public class TextBox extends Control implements IFocusable {
public void tick() {
textField.tick();
}
+
}
diff --git a/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java b/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java
index 524f1ce39..8c0229f36 100755
--- a/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java
+++ b/src/main/java/me/shedaniel/gui/widget/WidgetArrow.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.GuiLighting;
import net.minecraft.util.Identifier;
public class WidgetArrow extends Control {
+
private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
private int progress = 0;
private int updateTick = 0;
@@ -45,4 +46,5 @@ public class WidgetArrow extends Control {
progress = 0;
}
}
+
}