diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-04-01 20:01:34 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-04-01 20:01:34 +0800 |
| commit | 66abc317e5fc36a397ca1cc919e388fbe143956b (patch) | |
| tree | 915cc4799d89297b8d4bd2dbe1046c177f4d1627 /src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java | |
| parent | 3919ec1e15d6eb9a8aa4564bb2d4e4dfdbeb54e3 (diff) | |
| download | RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.tar.gz RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.tar.bz2 RoughlyEnoughItems-66abc317e5fc36a397ca1cc919e388fbe143956b.zip | |
ScrollingContainer & SubsetsMenu && 20w18b
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java | 98 |
1 files changed, 74 insertions, 24 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index 82bd199e5..fc7f8f950 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -34,7 +34,9 @@ import me.shedaniel.rei.api.widgets.Button; import me.shedaniel.rei.api.widgets.Tooltip; import me.shedaniel.rei.api.widgets.Widgets; import me.shedaniel.rei.gui.config.SearchFieldLocation; +import me.shedaniel.rei.gui.subsets.SubsetsMenu; import me.shedaniel.rei.gui.widget.*; +import me.shedaniel.rei.impl.ClientHelperImpl; import me.shedaniel.rei.impl.InternalWidgets; import me.shedaniel.rei.impl.ScreenHelper; import me.shedaniel.rei.impl.Weather; @@ -110,8 +112,13 @@ public class ContainerScreenOverlay extends WidgetWithBounds { }; private Rectangle bounds; private Window window; - private List<LateRenderable> lateRenderables = Lists.newArrayList(); private Button leftButton, rightButton; + @ApiStatus.Experimental + private Rectangle subsetsButtonBounds; + @ApiStatus.Experimental + @Nullable + private SubsetsMenu subsetsMenu = null; + private Widget wrappedSubsetsMenu = null; public static EntryListWidget getEntryListWidget() { return ENTRY_LIST_WIDGET; @@ -122,6 +129,12 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return favoritesListWidget; } + @ApiStatus.Experimental + @Nullable + public SubsetsMenu getSubsetsMenu() { + return subsetsMenu; + } + public void init(boolean useless) { init(); } @@ -130,6 +143,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { this.shouldReInit = false; //Update Variables this.children().clear(); + this.wrappedSubsetsMenu = null; + this.subsetsMenu = null; this.window = MinecraftClient.getInstance().getWindow(); @SuppressWarnings({"RawTypeCanBeGeneric", "rawtypes"}) DisplayHelper.DisplayBoundsHandler boundsHandler = DisplayHelper.getInstance().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass()); @@ -171,8 +186,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } final Rectangle configButtonArea = getConfigButtonArea(); - LateRenderable tmp; - widgets.add((Widget) (tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( + Widget tmp; + widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( Widgets.createButton(configButtonArea, NarratorManager.EMPTY) .onClick(button -> { if (Screen.hasShiftDown()) { @@ -209,17 +224,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { helper.drawTexture(configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14); }) ) - ))); - ((Widget) tmp).setZ(600); - lateRenderables.add(tmp); -// widgets.add((Widget) (tmp = InternalWidgets.wrapLateRenderable(Widgets.createTexturedWidget(CHEST_GUI_TEXTURE, configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14)))); -// widgets.add((Widget) (tmp = InternalWidgets.wrapLateRenderable(Widgets.createDrawableWidget((helper, mouseX, mouseY, delta) -> { -// RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); -// MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); -// helper.blit(configButtonArea.x + 3, configButtonArea.y + 3, 0, 0, 14, 14); -// })))); -// ((Widget) tmp).setZ(600); -// lateRenderables.add(tmp); + )); + tmp.setZ(600); if (ConfigObject.getInstance().doesShowUtilsButtons()) { widgets.add(Widgets.createButton(ConfigObject.getInstance().isLowerConfigButton() ? new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10, 10, 20, 20) : new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 55 : 35, 10, 20, 20), NarratorManager.EMPTY) .onClick(button -> MinecraftClient.getInstance().player.sendChatMessage(ConfigObject.getInstance().getGamemodeCommand().replaceAll("\\{gamemode}", getNextGameMode(Screen.hasShiftDown()).getName()))) @@ -243,6 +249,20 @@ public class ContainerScreenOverlay extends WidgetWithBounds { xxx += ConfigObject.getInstance().isLeftHandSidePanel() ? -25 : 25; } } + subsetsButtonBounds = getSubsetsButtonBounds(); + if (ConfigObject.getInstance().isSubsetsEnabled()) { + widgets.add(InternalWidgets.wrapLateRenderable(Widgets.createButton(subsetsButtonBounds, ((ClientHelperImpl) ClientHelper.getInstance()).isAprilFools.get() ? I18n.translate("text.rei.tiny_potato") : I18n.translate("text.rei.subsets")) + .onClick(button -> { + if (subsetsMenu == null) { + wrappedSubsetsMenu = InternalWidgets.wrapTranslate(InternalWidgets.wrapLateRenderable(this.subsetsMenu = SubsetsMenu.createFromRegistry(new Point(this.subsetsButtonBounds.x, this.subsetsButtonBounds.getMaxY()))), 0, 0, 400); + this.widgets.add(this.wrappedSubsetsMenu); + } else { + this.widgets.remove(this.wrappedSubsetsMenu); + this.subsetsMenu = null; + this.wrappedSubsetsMenu = null; + } + }))); + } if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { widgets.add(Widgets.createClickableLabel(new Point(bounds.x + (bounds.width / 2), bounds.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 10), "", label -> { ENTRY_LIST_WIDGET.setPage(0); @@ -256,7 +276,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { Rectangle area = getCraftableToggleArea(); ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); ItemStack icon = new ItemStack(Blocks.CRAFTING_TABLE); - this.widgets.add((Widget) (tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( + this.widgets.add(tmp = InternalWidgets.wrapLateRenderable(InternalWidgets.mergeWidgets( Widgets.createButton(area, NarratorManager.EMPTY) .focusable(false) .onClick(button -> { @@ -271,12 +291,27 @@ public class ContainerScreenOverlay extends WidgetWithBounds { itemRenderer.renderGuiItemIcon(icon, area.x + 2, area.y + 2); itemRenderer.zOffset = 0.0F; })) - ))); - ((Widget) tmp).setZ(600); - lateRenderables.add(tmp); + )); + tmp.setZ(600); } } + @ApiStatus.Experimental + private Rectangle getSubsetsButtonBounds() { + if (ConfigObject.getInstance().isSubsetsEnabled()) { + if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { + RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; + return new Rectangle(widget.getBounds().x, 3, widget.getBounds().width, 18); + } + if (MinecraftClient.getInstance().currentScreen instanceof VillagerRecipeViewingScreen) { + VillagerRecipeViewingScreen widget = (VillagerRecipeViewingScreen) MinecraftClient.getInstance().currentScreen; + return new Rectangle(widget.bounds.x, 3, widget.bounds.width, 18); + } + return new Rectangle(((ContainerScreenHooks) ScreenHelper.getLastHandledScreen()).rei_getContainerLeft(), 3, ((ContainerScreenHooks) ScreenHelper.getLastHandledScreen()).rei_getContainerWidth(), 18); + } + return null; + } + private Weather getNextWeather() { try { Weather current = getCurrentWeather(); @@ -417,10 +452,15 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public void lateRender(int mouseX, int mouseY, float delta) { if (ScreenHelper.isOverlayVisible()) { ScreenHelper.getSearchField().laterRender(mouseX, mouseY, delta); - for (LateRenderable lateRenderable : lateRenderables) { - lateRenderable.lateRender(mouseX, mouseY, delta); + for (Widget widget : widgets) { + if (widget instanceof LateRenderable && wrappedSubsetsMenu != widget) + widget.render(mouseX, mouseY, delta); } } + if (wrappedSubsetsMenu != null) { + TOOLTIPS.clear(); + wrappedSubsetsMenu.render(mouseX, mouseY, delta); + } Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) for (Tooltip tooltip : TOOLTIPS) { @@ -462,7 +502,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { rightButton.setEnabled(ENTRY_LIST_WIDGET.getTotalPages() > 1); } for (Widget widget : widgets) { - widget.render(int_1, int_2, float_1); + if (!(widget instanceof LateRenderable)) + widget.render(int_1, int_2, float_1); } } @@ -470,6 +511,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public boolean mouseScrolled(double i, double j, double amount) { if (!ScreenHelper.isOverlayVisible()) return false; + if (wrappedSubsetsMenu != null && wrappedSubsetsMenu.mouseScrolled(i, j, amount)) + return true; if (isInside(PointHelper.ofMouse())) { if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { if (amount > 0 && leftButton.isEnabled()) @@ -487,7 +530,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return true; } for (Widget widget : widgets) - if (widget != ENTRY_LIST_WIDGET && (favoritesListWidget == null || widget != favoritesListWidget) && widget.mouseScrolled(i, j, amount)) + if (widget != ENTRY_LIST_WIDGET && (favoritesListWidget == null || widget != favoritesListWidget) && (wrappedSubsetsMenu == null || widget != wrappedSubsetsMenu) && widget.mouseScrolled(i, j, amount)) return true; return false; } @@ -540,7 +583,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } @Override - public List<? extends Element> children() { + public List<Widget> children() { return widgets; } @@ -548,6 +591,13 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public boolean mouseClicked(double double_1, double double_2, int int_1) { if (!ScreenHelper.isOverlayVisible()) return false; + if (wrappedSubsetsMenu != null && wrappedSubsetsMenu.mouseClicked(double_1, double_2, int_1)) { + this.setFocused(wrappedSubsetsMenu); + if (int_1 == 0) + this.setDragging(true); + ScreenHelper.getSearchField().setFocused(false); + return true; + } if (MinecraftClient.getInstance().currentScreen instanceof HandledScreen && ConfigObject.getInstance().areClickableRecipeArrowsEnabled()) { ContainerScreenHooks hooks = (ContainerScreenHooks) MinecraftClient.getInstance().currentScreen; for (RecipeHelper.ScreenClickArea area : RecipeHelper.getInstance().getScreenClickAreas()) @@ -559,7 +609,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } } for (Element element : widgets) - if (element.mouseClicked(double_1, double_2, int_1)) { + if (element != wrappedSubsetsMenu && element.mouseClicked(double_1, double_2, int_1)) { this.setFocused(element); if (int_1 == 0) this.setDragging(true); |
