From 516f882d348cd9535a963f3674597ca680c49909 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 26 Nov 2019 20:59:59 +0800 Subject: 3.2.12 Fixed #29 --- .../shedaniel/rei/gui/ContainerScreenOverlay.java | 100 ++++++++++----------- 1 file changed, 45 insertions(+), 55 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java') diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 3e5cdb04c..764d82d0e 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -36,20 +36,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.sound.SoundEvents; import net.minecraft.util.ActionResult; import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.GameMode; import org.apache.logging.log4j.util.TriConsumer; import javax.annotation.Nullable; import java.util.*; -public class ContainerScreenOverlay extends Widget { +public class ContainerScreenOverlay extends WidgetWithBounds { private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private static final List QUEUED_TOOLTIPS = Lists.newArrayList(); - public static String searchTerm = ""; - private static int page = 0; - private static EntryListWidget entryListWidget; + private static final EntryListWidget ENTRY_LIST_WIDGET = new EntryListWidget(); private final List widgets = Lists.newLinkedList(); public boolean shouldReInit = false; private int tooltipWidth; @@ -88,11 +85,7 @@ public class ContainerScreenOverlay extends Widget { private ButtonWidget buttonLeft, buttonRight; public static EntryListWidget getEntryListWidget() { - return entryListWidget; - } - - public static void setPage(int page) { - ContainerScreenOverlay.page = page; + return ENTRY_LIST_WIDGET; } public void init() { @@ -108,17 +101,23 @@ public class ContainerScreenOverlay extends Widget { @SuppressWarnings({"RawTypeCanBeGeneric", "rawtypes"}) DisplayHelper.DisplayBoundsHandler boundsHandler = DisplayHelper.getInstance().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); this.rectangle = ConfigManager.getInstance().getConfig().isLeftHandSidePanel() ? boundsHandler.getLeftBounds(MinecraftClient.getInstance().currentScreen) : boundsHandler.getRightBounds(MinecraftClient.getInstance().currentScreen); - widgets.add(entryListWidget = new EntryListWidget(page)); - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, false); - + widgets.add(ENTRY_LIST_WIDGET); + if (ScreenHelper.getSearchField() == null) + ScreenHelper.setSearchField(new OverlaySearchField(0, 0, 0, 0)); + ENTRY_LIST_WIDGET.updateArea(boundsHandler, ScreenHelper.getSearchField().getText()); + ScreenHelper.getSearchField().getBounds().setBounds(getTextFieldArea()); + this.widgets.add(ScreenHelper.getSearchField()); + ScreenHelper.getSearchField().setChangedListener(s -> { + ENTRY_LIST_WIDGET.updateSearch(s); + }); if (!ConfigManager.getInstance().getConfig().isEntryListWidgetScrolled()) { widgets.add(buttonLeft = new ButtonWidget(new Rectangle(rectangle.x, rectangle.y + (ConfigManager.getInstance().getConfig().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.left_arrow")) { @Override public void onPressed() { - page--; - if (page < 0) - page = getTotalPage(); - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, false); + ENTRY_LIST_WIDGET.previousPage(); + if (ENTRY_LIST_WIDGET.getPage() < 0) + ENTRY_LIST_WIDGET.setPage(ENTRY_LIST_WIDGET.getTotalPages() - 1); + ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } @Override @@ -139,10 +138,10 @@ public class ContainerScreenOverlay extends Widget { widgets.add(buttonRight = new ButtonWidget(new Rectangle(rectangle.x + rectangle.width - 18, rectangle.y + (ConfigManager.getInstance().getConfig().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.right_arrow")) { @Override public void onPressed() { - page++; - if (page > getTotalPage()) - page = 0; - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, false); + ENTRY_LIST_WIDGET.nextPage(); + if (ENTRY_LIST_WIDGET.getPage() >= ENTRY_LIST_WIDGET.getTotalPages()) + ENTRY_LIST_WIDGET.setPage(0); + ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } @Override @@ -162,9 +161,6 @@ public class ContainerScreenOverlay extends Widget { }); } - if (setPage) - page = MathHelper.clamp(page, 0, getTotalPage()); - widgets.add(new ButtonWidget(new Rectangle(ConfigManager.getInstance().getConfig().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10, 10, 20, 20), "") { @Override public void onPressed() { @@ -283,8 +279,7 @@ public class ContainerScreenOverlay extends Widget { widgets.add(new ClickableLabelWidget(new Point(rectangle.x + (rectangle.width / 2), rectangle.y + (ConfigManager.getInstance().getConfig().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 10), "") { @Override public void render(int mouseX, int mouseY, float delta) { - page = MathHelper.clamp(page, 0, getTotalPage()); - setText(String.format("%s/%s", page + 1, getTotalPage() + 1)); + setText(String.format("%s/%s", ENTRY_LIST_WIDGET.getPage() + 1, ENTRY_LIST_WIDGET.getTotalPages())); super.render(mouseX, mouseY, delta); } @@ -296,39 +291,30 @@ public class ContainerScreenOverlay extends Widget { @Override public void onLabelClicked() { MinecraftClient.getInstance().getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); - page = 0; - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, false); + ENTRY_LIST_WIDGET.setPage(0); + ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } @Override public boolean changeFocus(boolean boolean_1) { return false; } - }.clickable(getTotalPage() > 0)); - buttonLeft.enabled = buttonRight.enabled = getTotalPage() > 0; - } - if (ScreenHelper.getSearchField() == null) { - ScreenHelper.setSearchField(new OverlaySearchField(0, 0, 0, 0)); + }.clickable(ENTRY_LIST_WIDGET.getTotalPages() != 1)); + buttonLeft.enabled = buttonRight.enabled = ENTRY_LIST_WIDGET.getTotalPages() != 1; } - ScreenHelper.getSearchField().getBounds().setBounds(getTextFieldArea()); - this.widgets.add(ScreenHelper.getSearchField()); - ScreenHelper.getSearchField().setText(searchTerm); - ScreenHelper.getSearchField().setChangedListener(s -> { - searchTerm = s; - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, true); - }); if (ConfigManager.getInstance().getConfig().isCraftableFilterEnabled()) this.widgets.add(toggleButtonWidget = new CraftableToggleButtonWidget(getCraftableToggleArea()) { @Override public void onPressed() { ConfigManager.getInstance().toggleCraftableOnly(); - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, true); + ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } @Override public void lateRender(int mouseX, int mouseY, float delta) { setBlitOffset(300); super.lateRender(mouseX, mouseY, delta); + setBlitOffset(0); } @Override @@ -338,7 +324,6 @@ public class ContainerScreenOverlay extends Widget { }); else toggleButtonWidget = null; - this.entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, false); } private Weather getNextWeather() { @@ -419,21 +404,30 @@ public class ContainerScreenOverlay extends Widget { return I18n.translate(String.format("%s%s", "text.rei.", ClientHelper.getInstance().isCheating() ? "cheat" : "nocheat")); } - public Rectangle getRectangle() { + @Override + public Rectangle getBounds() { return rectangle; } @Override public void render(int mouseX, int mouseY, float delta) { List currentStacks = ClientHelper.getInstance().getInventoryItemsTypes(); - if (DisplayHelper.getInstance().getBaseBoundsHandler() != null && DisplayHelper.getInstance().getBaseBoundsHandler().shouldRecalculateArea(!ConfigManager.getInstance().getConfig().isLeftHandSidePanel(), rectangle)) - shouldReInit = true; if (shouldReInit) init(true); - else if (ConfigManager.getInstance().isCraftableOnlyEnabled() && ((currentStacks.size() != ScreenHelper.inventoryStacks.size()) || !hasSameListContent(new LinkedList<>(ScreenHelper.inventoryStacks), currentStacks))) { + else { + for (DisplayHelper.DisplayBoundsHandler handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { + if (handler != null && handler.shouldRecalculateArea(!ConfigManager.getInstance().getConfig().isLeftHandSidePanel(), rectangle)) { + init(true); + break; + } + } + } + // if (DisplayHelper.getInstance().getBaseBoundsHandler() != null && DisplayHelper.getInstance().getBaseBoundsHandler().shouldRecalculateArea(!ConfigManager.getInstance().getConfig().isLeftHandSidePanel(), rectangle)) + // entryListWidget.updateArea(DisplayHelper.getInstance().getResponsibleBoundsHandler()); + // else + if (ConfigManager.getInstance().isCraftableOnlyEnabled() && ((currentStacks.size() != ScreenHelper.inventoryStacks.size()) || !hasSameListContent(new LinkedList<>(ScreenHelper.inventoryStacks), currentStacks))) { ScreenHelper.inventoryStacks = currentStacks; - DisplayHelper.DisplayBoundsHandler boundsHandler = DisplayHelper.getInstance().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); - entryListWidget.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, true); + ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); } if (OverlaySearchField.isSearching) { GuiLighting.disable(); @@ -442,7 +436,7 @@ public class ContainerScreenOverlay extends Widget { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; int left = hooks.rei_getContainerLeft(), top = hooks.rei_getContainerTop(); for (Slot slot : ((AbstractContainerScreen) MinecraftClient.getInstance().currentScreen).getContainer().slotList) - if (!slot.hasStack() || !entryListWidget.filterEntry(EntryStack.create(slot.getStack()), entryListWidget.getLastSearchArgument())) + if (!slot.hasStack() || !ENTRY_LIST_WIDGET.canLastSearchTermsBeAppliedTo(EntryStack.create(slot.getStack()))) fillGradient(left + slot.xPosition, top + slot.yPosition, left + slot.xPosition + 16, top + slot.yPosition + 16, -601874400, -601874400); } setBlitOffset(0); @@ -509,7 +503,7 @@ public class ContainerScreenOverlay extends Widget { if (!ScreenHelper.isOverlayVisible()) return; if (!ConfigManager.getInstance().getConfig().isEntryListWidgetScrolled()) - buttonLeft.enabled = buttonRight.enabled = getTotalPage() > 0; + buttonLeft.enabled = buttonRight.enabled = ENTRY_LIST_WIDGET.getTotalPages() != 1; widgets.forEach(widget -> { GuiLighting.disable(); widget.render(int_1, int_2, float_1); @@ -517,10 +511,6 @@ public class ContainerScreenOverlay extends Widget { GuiLighting.disable(); } - private int getTotalPage() { - return entryListWidget.getTotalPage(); - } - @Override public boolean mouseScrolled(double i, double j, double amount) { if (!ScreenHelper.isOverlayVisible()) @@ -535,7 +525,7 @@ public class ContainerScreenOverlay extends Widget { return false; return true; } else { - return entryListWidget.mouseScrolled(i, j, amount); + return ENTRY_LIST_WIDGET.mouseScrolled(i, j, amount); } } for (Widget widget : widgets) -- cgit