diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-01-24 23:05:57 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-01-24 23:05:57 +0800 |
| commit | e4d5665de955e8f9377df2fc15bbfeb765dcaa95 (patch) | |
| tree | 95fe2cffb67e86bb84827758994e8b019277be18 /src/main/java/me/shedaniel/rei/gui | |
| parent | c230eab17af075bd58bcf8e6c6961e81bf53202a (diff) | |
| download | RoughlyEnoughItems-e4d5665de955e8f9377df2fc15bbfeb765dcaa95.tar.gz RoughlyEnoughItems-e4d5665de955e8f9377df2fc15bbfeb765dcaa95.tar.bz2 RoughlyEnoughItems-e4d5665de955e8f9377df2fc15bbfeb765dcaa95.zip | |
3.3.16
Diffstat (limited to 'src/main/java/me/shedaniel/rei/gui')
4 files changed, 92 insertions, 49 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index ebf883e5f..a9976dbd5 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -81,10 +81,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { RenderSystem.enableDepthTest(); RenderSystem.enableRescaleNormal(); }; - private Rectangle rectangle; + private Rectangle bounds; private Window window; - private CraftableToggleButtonWidget toggleButtonWidget; - private ButtonWidget buttonLeft, buttonRight; + @Nullable private LateRenderedButton craftableToggleButton; + private LateRenderedButton configButton; + private ButtonWidget leftButton, rightButton; public static EntryListWidget getEntryListWidget() { return ENTRY_LIST_WIDGET; @@ -107,7 +108,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { this.window = MinecraftClient.getInstance().getWindow(); @SuppressWarnings({"RawTypeCanBeGeneric", "rawtypes"}) 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); + this.bounds = 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) @@ -118,11 +119,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { if (ScreenHelper.getSearchField() == null) { ScreenHelper.setSearchField(new OverlaySearchField(0, 0, 0, 0)); } - ScreenHelper.getSearchField().getBounds().setBounds(getTextFieldArea()); + ScreenHelper.getSearchField().getBounds().setBounds(getSearchFieldArea()); this.widgets.add(ScreenHelper.getSearchField()); ScreenHelper.getSearchField().setChangedListener(ENTRY_LIST_WIDGET::updateSearch); if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { - widgets.add(buttonLeft = new ButtonWidget(new Rectangle(rectangle.x, rectangle.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.left_arrow")) { + widgets.add(leftButton = new ButtonWidget(new Rectangle(bounds.x, bounds.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.left_arrow")) { @Override public void onPressed() { ENTRY_LIST_WIDGET.previousPage(); @@ -146,7 +147,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return isNotInExclusionZones(mouseX, mouseY) && super.containsMouse(mouseX, mouseY); } }); - widgets.add(buttonRight = new ButtonWidget(new Rectangle(rectangle.x + rectangle.width - 18, rectangle.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.right_arrow")) { + widgets.add(rightButton = new ButtonWidget(new Rectangle(bounds.x + bounds.width - 18, bounds.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 5, 16, 16), I18n.translate("text.rei.right_arrow")) { @Override public void onPressed() { ENTRY_LIST_WIDGET.nextPage(); @@ -172,7 +173,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { }); } - widgets.add(new ButtonWidget(new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10, 10, 20, 20), "") { + widgets.add(configButton = new LateRenderedButton(getConfigButtonArea(), "") { @Override public void onPressed() { if (Screen.hasShiftDown()) { @@ -184,6 +185,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { @Override public void render(int mouseX, int mouseY, float delta) { + } + + @Override + public void lateRender(int mouseX, int mouseY, float delta) { + setBlitOffset(600); super.render(mouseX, mouseY, delta); Rectangle bounds = getBounds(); if (ClientHelper.getInstance().isCheating() && RoughlyEnoughItemsCore.hasOperatorPermission()) { @@ -195,6 +201,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); blit(bounds.x + 3, bounds.y + 3, 0, 0, 14, 14); + setBlitOffset(0); } @Override @@ -223,7 +230,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } }); if (ConfigObject.getInstance().doesShowUtilsButtons()) { - widgets.add(new ButtonWidget(new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 55 : 35, 10, 20, 20), "") { + widgets.add(new ButtonWidget(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), "") { @Override public void onPressed() { MinecraftClient.getInstance().player.sendChatMessage(ConfigObject.getInstance().getGamemodeCommand().replaceAll("\\{gamemode}", getNextGameMode(Screen.hasShiftDown()).getName())); @@ -285,7 +292,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } } if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { - widgets.add(new ClickableLabelWidget(new Point(rectangle.x + (rectangle.width / 2), rectangle.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 10), "") { + widgets.add(new ClickableLabelWidget(new Point(bounds.x + (bounds.width / 2), bounds.y + (ConfigObject.getInstance().getSearchFieldLocation() == SearchFieldLocation.TOP_SIDE ? 24 : 0) + 10), "") { @Override public void render(int mouseX, int mouseY, float delta) { clickable(ENTRY_LIST_WIDGET.getTotalPages() > 1); @@ -306,8 +313,8 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } }.tooltip(() -> I18n.translate("text.rei.go_back_first_page"))); } - if (ConfigObject.getInstance().isCraftableFilterEnabled()) - this.widgets.add(toggleButtonWidget = new CraftableToggleButtonWidget(getCraftableToggleArea()) { + if (ConfigObject.getInstance().isCraftableFilterEnabled()) { + this.widgets.add(craftableToggleButton = new CraftableToggleButtonWidget(getCraftableToggleArea()) { @Override public void onPressed() { ConfigManager.getInstance().toggleCraftableOnly(); @@ -315,19 +322,13 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } @Override - public void lateRender(int mouseX, int mouseY, float delta) { - setBlitOffset(300); - super.lateRender(mouseX, mouseY, delta); - setBlitOffset(0); - } - - @Override public boolean containsMouse(double mouseX, double mouseY) { return isNotInExclusionZones(mouseX, mouseY) && super.containsMouse(mouseX, mouseY); } }); - else - toggleButtonWidget = null; + } else { + craftableToggleButton = null; + } } private Weather getNextWeather() { @@ -379,13 +380,13 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return MinecraftClient.getInstance().getNetworkHandler().getPlayerListEntry(MinecraftClient.getInstance().player.getGameProfile().getId()).getGameMode(); } - private Rectangle getTextFieldArea() { - int widthRemoved = ConfigObject.getInstance().isCraftableFilterEnabled() ? 22 : 2; + private Rectangle getSearchFieldArea() { + int widthRemoved = 1 + (ConfigObject.getInstance().isCraftableFilterEnabled() ? 22 : 0) + (ConfigObject.getInstance().isLowerConfigButton() ? 22 : 0); SearchFieldLocation searchFieldLocation = ConfigObject.getInstance().getSearchFieldLocation(); if (searchFieldLocation == SearchFieldLocation.BOTTOM_SIDE) - return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6 - widthRemoved, 18); + return new Rectangle(bounds.x + 2, window.getScaledHeight() - 22, bounds.width - 6 - widthRemoved, 18); if (searchFieldLocation == SearchFieldLocation.TOP_SIDE) - return new Rectangle(rectangle.x + 2, 4, rectangle.width - 6 - widthRemoved, 18); + return new Rectangle(bounds.x + 2, 4, bounds.width - 6 - widthRemoved, 18); if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) { RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen; return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18); @@ -398,10 +399,20 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } private Rectangle getCraftableToggleArea() { - Rectangle searchBoxArea = getTextFieldArea(); - searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 1); - searchBoxArea.setSize(20, 20); - return searchBoxArea; + Rectangle area = getSearchFieldArea(); + area.setLocation(area.x + area.width + 4, area.y - 1); + area.setSize(20, 20); + return area; + } + + private Rectangle getConfigButtonArea() { + if (ConfigObject.getInstance().isLowerConfigButton()) { + Rectangle area = getSearchFieldArea(); + area.setLocation(area.x + area.width + (ConfigObject.getInstance().isCraftableFilterEnabled() ? 26 : 4), area.y - 1); + area.setSize(20, 20); + return area; + } + return new Rectangle(ConfigObject.getInstance().isLeftHandSidePanel() ? window.getScaledWidth() - 30 : 10, 10, 20, 20); } private String getCheatModeText() { @@ -410,7 +421,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { @Override public Rectangle getBounds() { - return rectangle; + return bounds; } @Override @@ -420,7 +431,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { init(); else { for (DisplayHelper.DisplayBoundsHandler<?> handler : DisplayHelper.getInstance().getSortedBoundsHandlers(minecraft.currentScreen.getClass())) { - if (handler != null && handler.shouldRecalculateArea(!ConfigObject.getInstance().isLeftHandSidePanel(), rectangle)) { + if (handler != null && handler.shouldRecalculateArea(!ConfigObject.getInstance().isLeftHandSidePanel(), bounds)) { init(); break; } @@ -458,8 +469,9 @@ public class ContainerScreenOverlay extends WidgetWithBounds { public void lateRender(int mouseX, int mouseY, float delta) { if (ScreenHelper.isOverlayVisible()) { ScreenHelper.getSearchField().laterRender(mouseX, mouseY, delta); - if (toggleButtonWidget != null) - toggleButtonWidget.lateRender(mouseX, mouseY, delta); + if (craftableToggleButton != null) + craftableToggleButton.lateRender(mouseX, mouseY, delta); + configButton.lateRender(mouseX, mouseY, delta); } Screen currentScreen = MinecraftClient.getInstance().currentScreen; if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated) @@ -470,7 +482,6 @@ public class ContainerScreenOverlay extends WidgetWithBounds { QUEUED_TOOLTIPS.clear(); } - @SuppressWarnings("deprecation") public void renderTooltip(QueuedTooltip tooltip) { if (tooltip.getConsumer() == null) renderTooltip(tooltip.getText(), tooltip.getX(), tooltip.getY()); @@ -498,12 +509,11 @@ public class ContainerScreenOverlay extends WidgetWithBounds { QUEUED_TOOLTIPS.add(queuedTooltip); } - @SuppressWarnings("deprecation") public void renderWidgets(int int_1, int int_2, float float_1) { if (!ScreenHelper.isOverlayVisible()) return; if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) - buttonLeft.enabled = buttonRight.enabled = ENTRY_LIST_WIDGET.getTotalPages() > 1; + leftButton.enabled = rightButton.enabled = ENTRY_LIST_WIDGET.getTotalPages() > 1; for (Widget widget : widgets) { widget.render(int_1, int_2, float_1); } @@ -515,10 +525,10 @@ public class ContainerScreenOverlay extends WidgetWithBounds { return false; if (isInside(PointHelper.fromMouse())) { if (!ConfigObject.getInstance().isEntryListWidgetScrolled()) { - if (amount > 0 && buttonLeft.enabled) - buttonLeft.onPressed(); - else if (amount < 0 && buttonRight.enabled) - buttonRight.onPressed(); + if (amount > 0 && leftButton.enabled) + leftButton.onPressed(); + else if (amount < 0 && rightButton.enabled) + rightButton.onPressed(); else return false; return true; @@ -621,7 +631,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds { } public boolean isInside(double mouseX, double mouseY) { - return rectangle.contains(mouseX, mouseY) && isNotInExclusionZones(mouseX, mouseY); + return bounds.contains(mouseX, mouseY) && isNotInExclusionZones(mouseX, mouseY); } public boolean isNotInExclusionZones(double mouseX, double mouseY) { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java index 01aa60655..24f34e8d2 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java @@ -5,11 +5,9 @@ package me.shedaniel.rei.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.api.ConfigManager; import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; @@ -19,10 +17,11 @@ import org.jetbrains.annotations.ApiStatus; import java.util.Optional; @ApiStatus.Internal -public abstract class CraftableToggleButtonWidget extends ButtonWidget { +public abstract class CraftableToggleButtonWidget extends LateRenderedButton { public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private ItemRenderer itemRenderer; + private static final ItemStack ICON = new ItemStack(Blocks.CRAFTING_TABLE); public CraftableToggleButtonWidget(Rectangle rectangle) { super(rectangle, ""); @@ -33,17 +32,17 @@ public abstract class CraftableToggleButtonWidget extends ButtonWidget { this(new Rectangle(x, y, width, height)); } + @Override public void lateRender(int mouseX, int mouseY, float delta) { + setBlitOffset(600); super.render(mouseX, mouseY, delta); - this.itemRenderer.zOffset = getBlitOffset(); + this.itemRenderer.zOffset = getBlitOffset() - 98; Rectangle bounds = getBounds(); - this.itemRenderer.renderGuiItem(new ItemStack(Blocks.CRAFTING_TABLE), bounds.x + 2, bounds.y + 2); + this.itemRenderer.renderGuiItemIcon(ICON, bounds.x + 2, bounds.y + 2); this.itemRenderer.zOffset = 0.0F; - MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); int color = ConfigManager.getInstance().isCraftableOnlyEnabled() ? 939579655 : 956235776; - setBlitOffset(getBlitOffset() + 10); + setBlitOffset(getBlitOffset() + 1); this.fillGradient(bounds.x + 1, bounds.y + 1, bounds.getMaxX() - 1, bounds.getMaxY() - 1, color, color); setBlitOffset(0); } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/LateRenderable.java b/src/main/java/me/shedaniel/rei/gui/widget/LateRenderable.java new file mode 100644 index 000000000..22b927af6 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/LateRenderable.java @@ -0,0 +1,13 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.gui.widget; + +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public interface LateRenderable { + void lateRender(int mouseX, int mouseY, float delta); +} diff --git a/src/main/java/me/shedaniel/rei/gui/widget/LateRenderedButton.java b/src/main/java/me/shedaniel/rei/gui/widget/LateRenderedButton.java new file mode 100644 index 000000000..e29e33261 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/LateRenderedButton.java @@ -0,0 +1,21 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.gui.widget; + +import me.shedaniel.math.api.Rectangle; +import net.minecraft.text.Text; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public abstract class LateRenderedButton extends ButtonWidget implements LateRenderable { + protected LateRenderedButton(Rectangle rectangle, Text text) { + super(rectangle, text); + } + + protected LateRenderedButton(Rectangle rectangle, String text) { + super(rectangle, text); + } +} |
