diff options
| author | shedaniel <daniel@shedaniel.me> | 2019-12-15 21:25:49 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2019-12-15 21:25:49 +0800 |
| commit | c961a0c3995d58137ff9dece986bd092a358f3b6 (patch) | |
| tree | 52204d92ccc74e9dbfb084ae366d9cb6de04af0a /src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java | |
| parent | fca848e6b4e5e78bd2bec39f5fa91be18d6316b3 (diff) | |
| download | RoughlyEnoughItems-c961a0c3995d58137ff9dece986bd092a358f3b6.tar.gz RoughlyEnoughItems-c961a0c3995d58137ff9dece986bd092a358f3b6.tar.bz2 RoughlyEnoughItems-c961a0c3995d58137ff9dece986bd092a358f3b6.zip | |
3.2.22 Favorites
Close #127
Diffstat (limited to 'src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 61ccee599..ae9151f63 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -47,6 +47,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private static final List<QueuedTooltip> QUEUED_TOOLTIPS = Lists.newArrayList(); private static final EntryListWidget ENTRY_LIST_WIDGET = new EntryListWidget(); + private static FavoritesListWidget favoritesListWidget = null; private final List<Widget> widgets = Lists.newLinkedList(); public boolean shouldReInit = false; private int tooltipWidth; @@ -70,7 +71,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer()); matrixStack_1.translate(0.0D, 0.0D, getBlitOffset()); Matrix4f matrix4f_1 = matrixStack_1.peek().getModel(); - for (int lineIndex = 0; lineIndex < tooltipLines.size(); lineIndex++) { + for(int lineIndex = 0; lineIndex < tooltipLines.size(); lineIndex++) { font.draw(tooltipLines.get(lineIndex), x, currentY, -1, true, matrix4f_1, immediate, false, 0, 15728880); currentY += lineIndex == 0 ? 12 : 10; } @@ -88,6 +89,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return ENTRY_LIST_WIDGET; } + @Nullable + public static FavoritesListWidget getFavoritesListWidget() { + return favoritesListWidget; + } + public void init(boolean useless) { init(); } @@ -102,6 +108,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { DisplayHelper.DisplayBoundsHandler boundsHandler = DisplayHelper.getInstance().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); this.rectangle = ConfigObject.getInstance().isLeftHandSidePanel() ? boundsHandler.getLeftBounds(MinecraftClient.getInstance().currentScreen) : boundsHandler.getRightBounds(MinecraftClient.getInstance().currentScreen); widgets.add(ENTRY_LIST_WIDGET); + if (ConfigObject.getInstance().doDisplayFavoritesOnTheLeft() && ConfigObject.getInstance().isFavoritesEnabled()) { + if (favoritesListWidget == null) + favoritesListWidget = new FavoritesListWidget(); + widgets.add(favoritesListWidget); + } ENTRY_LIST_WIDGET.updateArea(boundsHandler, ScreenHelper.getSearchField() == null ? "" : null); if (ScreenHelper.getSearchField() == null) { ScreenHelper.setSearchField(new OverlaySearchField(0, 0, 0, 0)); @@ -242,7 +253,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } }); int xxx = ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10; - for (Weather weather : Weather.values()) { + for(Weather weather : Weather.values()) { widgets.add(new ButtonWidget(new Rectangle(xxx, 35, 20, 20), "") { @Override public void onPressed() { @@ -416,16 +427,13 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (shouldReInit) init(); else { - for (DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { if (handler != null && handler.shouldRecalculateArea(!ConfigObject.getInstance().isLeftHandSidePanel(), rectangle)) { init(); break; } } } - // if (DisplayHelper.getInstance().getBaseBoundsHandler() != null && DisplayHelper.getInstance().getBaseBoundsHandler().shouldRecalculateArea(!ConfigObject.getInstance().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; ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText()); @@ -436,7 +444,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; int left = hooks.rei_getContainerLeft(), top = hooks.rei_getContainerTop(); - for (Slot slot : ((AbstractContainerScreen<?>) MinecraftClient.getInstance().currentScreen).getContainer().slotList) + for(Slot slot : ((AbstractContainerScreen<?>) MinecraftClient.getInstance().currentScreen).getContainer().slotList) 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); } @@ -447,7 +455,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { this.renderWidgets(mouseX, mouseY, delta); if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; - for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) + for(RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass())) if (area.getRectangle().contains(mouseX - hooks.rei_getContainerLeft(), mouseY - hooks.rei_getContainerTop())) { String collect = CollectionUtils.mapAndJoinToString(area.getCategories(), identifier -> RecipeHelper.getInstance().getCategory(identifier).getCategoryName(), ", "); @@ -465,7 +473,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) - for (QueuedTooltip queuedTooltip : QUEUED_TOOLTIPS) { + for(QueuedTooltip queuedTooltip : QUEUED_TOOLTIPS) { if (queuedTooltip != null) renderTooltip(queuedTooltip); } @@ -525,22 +533,28 @@ public class ContainerScreenOverlay extends WidgetWithBounds { else return false; return true; - } else { - return ENTRY_LIST_WIDGET.mouseScrolled(i, j, amount); - } + } else if (ENTRY_LIST_WIDGET.mouseScrolled(i, j, amount)) + return true; } - for (Widget widget : widgets) - if (widget != ENTRY_LIST_WIDGET && widget.mouseScrolled(i, j, amount)) + if (isNotInExclusionZones(PointHelper.getMouseX(), PointHelper.getMouseY())) { + if (favoritesListWidget != null && favoritesListWidget.mouseScrolled(i, j, amount)) + return true; + } + for(Widget widget : widgets) + if (widget != ENTRY_LIST_WIDGET && (favoritesListWidget == null || widget != favoritesListWidget) && widget.mouseScrolled(i, j, amount)) return true; return false; } @Override public boolean keyPressed(int int_1, int int_2, int int_3) { - if (ScreenHelper.isOverlayVisible()) - for (Element listener : widgets) - if (listener.keyPressed(int_1, int_2, int_3)) + if (ScreenHelper.isOverlayVisible()) { + if (ScreenHelper.getSearchField().keyPressed(int_1, int_2, int_3)) + return true; + for(Element listener : widgets) + if (listener != ScreenHelper.getSearchField() && listener.keyPressed(int_1, int_2, int_3)) return true; + } if (ClientHelper.getInstance().getHideKeyBinding().matchesKey(int_1, int_2)) { ScreenHelper.toggleOverlayVisible(); return true; @@ -571,8 +585,10 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public boolean charTyped(char char_1, int int_1) { if (!ScreenHelper.isOverlayVisible()) return false; - for (Element listener : widgets) - if (listener.charTyped(char_1, int_1)) + if (ScreenHelper.getSearchField().charTyped(char_1, int_1)) + return true; + for(Element listener : widgets) + if (listener != ScreenHelper.getSearchField() && listener.charTyped(char_1, int_1)) return true; return false; } @@ -588,7 +604,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return false; if (MinecraftClient.getInstance().currentScreen instanceof AbstractContainerScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; - for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) + for(RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) if (area.getScreenClass().equals(MinecraftClient.getInstance().currentScreen.getClass())) if (area.getRectangle().contains(double_1 - hooks.rei_getContainerLeft(), double_2 - hooks.rei_getContainerTop())) { ClientHelper.getInstance().executeViewAllRecipesFromCategories(Arrays.asList(area.getCategories())); @@ -596,7 +612,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return true; } } - for (Element element : widgets) + for(Element element : widgets) if (element.mouseClicked(double_1, double_2, int_1)) { this.setFocused(element); if (int_1 == 0) @@ -616,7 +632,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public boolean isInside(double mouseX, double mouseY) { if (!rectangle.contains(mouseX, mouseY)) return false; - for (DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { ActionResult in = handler.isInZone(!ConfigObject.getInstance().isLeftHandSidePanel(), mouseX, mouseY); if (in != ActionResult.PASS) return in == ActionResult.SUCCESS; @@ -625,7 +641,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } public boolean isNotInExclusionZones(double mouseX, double mouseY) { - for (DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { + for(DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(MinecraftClient.getInstance().currentScreen.getClass())) { ActionResult in = handler.isInZone(true, mouseX, mouseY); if (in != ActionResult.PASS) return in == ActionResult.SUCCESS; |
