aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
new file mode 100644
index 00000000..b8907e27
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java
@@ -0,0 +1,185 @@
+package de.hysky.skyblocker.skyblock.searchoverlay;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Style;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.Identifier;
+import org.lwjgl.glfw.GLFW;
+
+import static de.hysky.skyblocker.skyblock.itemlist.ItemRepository.getItemStack;
+
+public class OverlayScreen extends Screen {
+
+ protected static final Identifier SEARCH_ICON_TEXTURE = new Identifier("icon/search");
+ private static final int rowHeight = 20;
+ private TextFieldWidget searchField;
+ private ButtonWidget finishedButton;
+ private ButtonWidget[] suggestionButtons;
+ private ButtonWidget[] historyButtons;
+
+ public OverlayScreen(Text title) {
+ super(title);
+ }
+
+ /**
+ * Creates the layout for the overlay screen.
+ */
+ @Override
+ protected void init() {
+ super.init();
+ int rowWidth = (int) (this.width * 0.4);
+ int startX = (int) (this.width * 0.5) - rowWidth / 2;
+ int startY = (int) ((int) (this.height * 0.5) - (rowHeight * (1 + SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions + 0.75 + SkyblockerConfigManager.get().general.searchOverlay.historyLength)) / 2);
+
+ // Search field
+ this.searchField = new TextFieldWidget(textRenderer, startX, startY, rowWidth - rowHeight, rowHeight, Text.translatable("gui.recipebook.search_hint"));
+ searchField.setText(SearchOverManager.search);
+ searchField.setChangedListener(SearchOverManager::updateSearch);
+ searchField.setMaxLength(30);
+
+ // finish buttons
+ finishedButton = ButtonWidget.builder(Text.literal("").setStyle(Style.EMPTY.withColor(Formatting.GREEN)), a -> close())
+ .position(startX + rowWidth - rowHeight, startY)
+ .size(rowHeight, rowHeight).build();
+
+ // suggested item buttons
+ int rowOffset = rowHeight;
+ int totalSuggestions = SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions;
+ this.suggestionButtons = new ButtonWidget[totalSuggestions];
+ for (int i = 0; i < totalSuggestions; i++) {
+ suggestionButtons[i] = ButtonWidget.builder(Text.literal(SearchOverManager.getSuggestion(i)).setStyle(Style.EMPTY), a -> {
+ SearchOverManager.updateSearch(a.getMessage().getString());
+ close();
+ })
+ .position(startX, startY + rowOffset)
+ .size(rowWidth, rowHeight).build();
+ suggestionButtons[i].visible = false;
+ rowOffset += rowHeight;
+ }
+ // history item buttons
+ rowOffset += (int) (rowHeight * 0.75);
+ int historyLength = SkyblockerConfigManager.get().general.searchOverlay.historyLength;
+ this.historyButtons = new ButtonWidget[historyLength];
+ for (int i = 0; i < historyLength; i++) {
+ String text = SearchOverManager.getHistory(i);
+ if (text != null) {
+ historyButtons[i] = ButtonWidget.builder(Text.literal(text).setStyle(Style.EMPTY), (a) -> {
+ SearchOverManager.updateSearch(a.getMessage().getString());
+ close();
+ })
+ .position(startX, startY + rowOffset)
+ .size(rowWidth, rowHeight).build();
+ rowOffset += rowHeight;
+ } else {
+ break;
+ }
+ }
+
+ //add drawables in order to make tab navigation sensible
+ addDrawableChild(searchField);
+ for (ButtonWidget suggestion : suggestionButtons) {
+ addDrawableChild(suggestion);
+ }
+ for (ButtonWidget historyOption : historyButtons) {
+ if (historyOption != null) {
+ addDrawableChild(historyOption);
+ }
+ }
+ addDrawableChild(finishedButton);
+
+ //focus the search box
+ this.setInitialFocus(searchField);
+ }
+
+ /**
+ * Renders the search icon, label for the history and item Stacks for item names
+ */
+ @Override
+ public void render(DrawContext context, int mouseX, int mouseY, float delta) {
+ super.render(context, mouseX, mouseY, delta);
+ int renderOffset = (rowHeight - 16) / 2;
+ context.drawGuiTexture(SEARCH_ICON_TEXTURE, finishedButton.getX() + renderOffset, finishedButton.getY() + renderOffset, 16, 16);
+ if (historyButtons.length > 0 && historyButtons[0] != null) {
+ context.drawText(textRenderer, Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.historyLabel"), historyButtons[0].getX() + renderOffset, historyButtons[0].getY() - rowHeight / 2, 0xFFFFFFFF, true);
+ }
+
+ //draw item stacks and tooltip to buttons
+ for (int i = 0; i < suggestionButtons.length; i++) {
+ drawItemAndTooltip(context, mouseX, mouseY, SearchOverManager.getSuggestionId(i), suggestionButtons[i], renderOffset);
+ }
+ for (int i = 0; i < historyButtons.length; i++) {
+ drawItemAndTooltip(context, mouseX, mouseY, SearchOverManager.getHistoryId(i), historyButtons[i], renderOffset);
+ }
+ }
+
+ /**
+ * Draws the item and tooltip for the given button
+ */
+ private void drawItemAndTooltip(DrawContext context, int mouseX, int mouseY, String id, ButtonWidget button, int renderOffset) {
+ if (id == null || id.isEmpty()) return;
+ ItemStack item = getItemStack(id);
+ if (item == null) return;
+ context.drawItem(item, button.getX() + renderOffset, button.getY() + renderOffset);
+
+ // Draw tooltip
+ if (button.isMouseOver(mouseX, mouseY)) {
+ context.drawItemTooltip(textRenderer, item, mouseX, mouseY);
+ }
+ }
+
+ /**
+ * updates if the suggestions buttons should be visible based on if they have a value
+ */
+ @Override
+ public final void tick() {
+ super.tick();
+ //update suggestion buttons text
+ for (int i = 0; i < SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions; i++) {
+ String text = SearchOverManager.getSuggestion(i);
+ if (!text.isEmpty()) {
+ suggestionButtons[i].visible = true;
+
+ boolean isNewText = !text.equals(suggestionButtons[i].getMessage().getString());
+ if (!isNewText) continue;
+
+ suggestionButtons[i].setMessage(Text.literal(text).setStyle(Style.EMPTY));
+ } else {
+ suggestionButtons[i].visible = false;
+ }
+ }
+ }
+
+ /**
+ * When a key is pressed. If enter key pressed and search box selected close
+ */
+ @Override
+ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
+ if (keyCode == GLFW.GLFW_KEY_ENTER && searchField.isActive()) {
+ close();
+ return true;
+ }
+ return super.keyPressed(keyCode, scanCode, modifiers);
+ }
+
+ @Override
+ public boolean shouldPause() {
+ return false;
+ }
+
+ /**
+ * Closes the overlay screen and gets the manager to send a packet update about the sign
+ */
+ @Override
+ public void close() {
+ assert this.client != null;
+ assert this.client.player != null;
+ SearchOverManager.pushSearch();
+ super.close();
+ }
+}