aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorviciscat <51047087+viciscat@users.noreply.github.com>2024-05-11 14:09:16 +0200
committerviciscat <51047087+viciscat@users.noreply.github.com>2024-12-12 18:19:04 +0100
commit49cb5e05a35072939f76a90921b72962c478a73b (patch)
tree9be41316f73b4b5bd3c4b7951dfa5abd2c8a5bbb /src
parentac73162054a4aba93c96b4039f2cf71b1ce4dc79 (diff)
downloadSkyblocker-49cb5e05a35072939f76a90921b72962c478a73b.tar.gz
Skyblocker-49cb5e05a35072939f76a90921b72962c478a73b.tar.bz2
Skyblocker-49cb5e05a35072939f76a90921b72962c478a73b.zip
rebase config and widgets screen progress
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java29
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java120
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java87
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java101
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetEntry.java79
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetsListEntry.java42
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java43
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java0
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java0
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ServerWidget.java4
12 files changed, 513 insertions, 59 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java
index fb292269..ac81bfec 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java
@@ -8,6 +8,7 @@ import de.hysky.skyblocker.skyblock.auction.AuctionViewScreen;
import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen;
import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableScreenHandler;
import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableScreen;
+import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ingame.HandledScreens;
@@ -30,7 +31,7 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> {
if (player == null) return;
if (!Utils.isOnSkyblock()) return;
T screenHandler = type.create(id, player.getInventory());
- String nameLowercase = name.getString().toLowerCase();
+ String nameLowercase = name.getString().trim().toLowerCase();
switch (screenHandler) {
// Better party finder
@@ -93,6 +94,16 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> {
ci.cancel();
}
+ // Excessive widgets config
+ case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled && (nameLowercase.startsWith("widgets in") || nameLowercase.startsWith("widgets on") || nameLowercase.equals("tablist widgets")) -> {
+ client.player.currentScreenHandler = containerScreenHandler;
+ switch (client.currentScreen) {
+ case WidgetsConfigurationScreen screen -> screen.updateHandler(containerScreenHandler);
+ case null, default -> client.setScreen(new WidgetsConfigurationScreen(containerScreenHandler));
+ }
+ ci.cancel();
+ }
+
case null, default -> {}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java
deleted file mode 100644
index 5fcde767..00000000
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package de.hysky.skyblocker.skyblock.tabhud.config;
-
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.item.ItemStack;
-import net.minecraft.screen.GenericContainerScreenHandler;
-import net.minecraft.screen.ScreenHandler;
-import net.minecraft.screen.ScreenHandlerListener;
-import net.minecraft.text.Text;
-
-public class WidgetsConfiguration extends Screen implements ScreenHandlerListener {
-
- private GenericContainerScreenHandler handler;
-
- protected WidgetsConfiguration(GenericContainerScreenHandler handler) {
- super(Text.literal("Widgets Configuration"));
- this.handler = handler;
- }
-
- public void updateHandler(GenericContainerScreenHandler newHandler) {
- handler = newHandler;
- }
-
- @Override
- public void onSlotUpdate(ScreenHandler handler, int slotId, ItemStack stack) {
- }
-
- @Override
- public void onPropertyUpdate(ScreenHandler handler, int property, int value) {}
-}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java
new file mode 100644
index 00000000..2b76bef6
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java
@@ -0,0 +1,120 @@
+package de.hysky.skyblocker.skyblock.tabhud.config;
+
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.client.gui.ScreenRect;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.screen.world.CreateWorldScreen;
+import net.minecraft.client.gui.tab.TabManager;
+import net.minecraft.client.gui.widget.TabNavigationWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.screen.GenericContainerScreenHandler;
+import net.minecraft.screen.ScreenHandler;
+import net.minecraft.screen.ScreenHandlerListener;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerListener {
+
+ private GenericContainerScreenHandler handler;
+
+ // Tabs and stuff
+ private final TabManager tabManager = new TabManager(this::addDrawableChild, this::remove);
+ @Nullable
+ private TabNavigationWidget tabNavigation;
+ private WidgetsOrderingTab widgetsOrderingTab;
+
+ private boolean switchingToPopup = false;
+
+ public WidgetsConfigurationScreen(GenericContainerScreenHandler handler) {
+ super(Text.literal("Widgets Configuration"));
+ this.handler = handler;
+ handler.addListener(this);
+ }
+
+ @Override
+ protected void init() {
+ widgetsOrderingTab = new WidgetsOrderingTab(this.client, this.handler);
+ this.tabNavigation = TabNavigationWidget.builder(this.tabManager, this.width)
+ .tabs(this.widgetsOrderingTab)
+ .build();
+ this.tabNavigation.selectTab(0, false);
+ this.addDrawableChild(tabNavigation);
+ switchingToPopup = false;
+ this.initTabNavigation();
+ }
+
+ @Override
+ protected void initTabNavigation() {
+ if (this.tabNavigation != null) {
+ this.tabNavigation.setWidth(this.width);
+ this.tabNavigation.init();
+ int i = this.tabNavigation.getNavigationFocus().getBottom();
+ ScreenRect screenRect = new ScreenRect(0, i, this.width, this.height - i - 20 /* A bit of a footer */);
+ this.tabManager.setTabArea(screenRect);
+ }
+ }
+
+ public void updateHandler(GenericContainerScreenHandler newHandler) {
+ handler.removeListener(this);
+ handler = newHandler;
+ handler.addListener(this);
+ widgetsOrderingTab.updateHandler(handler);
+ }
+
+ private @Nullable ItemStack slotThirteenBacklog = null;
+
+ @Override
+ public void onSlotUpdate(ScreenHandler handler, int slotId, ItemStack stack) {
+ if (widgetsOrderingTab == null) {
+ if (slotId == 13) slotThirteenBacklog = stack.copy();
+ return;
+ }
+ if (slotId == 13) {
+ if (stack.isOf(Items.HOPPER)) {
+ widgetsOrderingTab.hopper(ItemUtils.getLore(stack));
+ } else {
+ widgetsOrderingTab.hopper(null);
+ }
+ }
+ if (slotId > 9 && slotId < this.handler.getRows() * 9 - 9) {
+ widgetsOrderingTab.updateEntries();
+ }
+ }
+
+ @Override
+ public void tick() {
+ super.tick();
+ if (slotThirteenBacklog != null && widgetsOrderingTab != null) {
+ widgetsOrderingTab.hopper(ItemUtils.getLore(slotThirteenBacklog));
+ slotThirteenBacklog = null;
+ }
+ if (!this.client.player.isAlive() || this.client.player.isRemoved()) {
+ this.client.player.closeHandledScreen();
+ }
+ }
+
+ @Override
+ public void close() {
+ this.client.player.closeHandledScreen();
+ super.close();
+ }
+
+ @Override
+ public void onPropertyUpdate(ScreenHandler handler, int property, int value) {}
+
+ @Override
+ public void removed() {
+ if (!switchingToPopup && this.client != null && this.client.player != null) {
+ this.handler.onClosed(this.client.player);
+ }
+ handler.removeListener(this);
+ }
+
+ @Override
+ public boolean shouldPause() {
+ return false;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java
new file mode 100644
index 00000000..8836e8ba
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java
@@ -0,0 +1,87 @@
+package de.hysky.skyblocker.skyblock.tabhud.config;
+
+import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetsListEntry;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.widget.ElementListWidget;
+import net.minecraft.util.Identifier;
+import org.lwjgl.glfw.GLFW;
+
+import java.util.Objects;
+
+public class WidgetsElementList extends ElementListWidget<WidgetsListEntry> {
+
+ static final Identifier MOVE_UP_HIGHLIGHTED_TEXTURE = new Identifier("transferable_list/move_up_highlighted");
+ static final Identifier MOVE_UP_TEXTURE = new Identifier("transferable_list/move_up");
+ static final Identifier MOVE_DOWN_HIGHLIGHTED_TEXTURE = new Identifier("transferable_list/move_down_highlighted");
+ static final Identifier MOVE_DOWN_TEXTURE = new Identifier("transferable_list/move_down");
+ private final WidgetsOrderingTab parent;
+
+ private int editingPosition = - 1;
+
+ public WidgetsElementList(WidgetsOrderingTab parent, MinecraftClient minecraftClient, int width, int height, int y) {
+ super(minecraftClient, width, height, y, 32);
+ this.parent = parent;
+ }
+
+
+ @Override
+ public void clearEntries() {
+ super.clearEntries();
+ }
+
+ @Override
+ public int addEntry(WidgetsListEntry entry) {
+ return super.addEntry(entry);
+ }
+
+ private int x, y, entryWidth, entryHeight;
+
+ @Override
+ protected void renderList(DrawContext context, int mouseX, int mouseY, float delta) {
+ super.renderList(context, mouseX, mouseY, delta);
+ WidgetsListEntry hoveredEntry = getHoveredEntry();
+ if (hoveredEntry != null) hoveredEntry.renderTooltip(context, x, y, entryWidth, entryHeight, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderEntry(DrawContext context, int mouseX, int mouseY, float delta, int index, int x, int y, int entryWidth, int entryHeight) {
+ super.renderEntry(context, mouseX, mouseY, delta, index, x, y, entryWidth, entryHeight);
+ if (index == editingPosition) {
+ context.drawGuiTexture(MOVE_UP_TEXTURE, getRowRight() - 16, y, 32, 32);
+ context.drawGuiTexture(MOVE_DOWN_TEXTURE, getRowRight() - 16, y, 32, 32);
+ }
+ if (Objects.equals(getHoveredEntry(), getEntry(index))) {
+ this.x = x;
+ this.y = y;
+ this.entryWidth = entryWidth;
+ this.entryHeight = entryHeight;
+ }
+ }
+
+ @Override
+ protected int getScrollbarX() {
+ return super.getScrollbarX() + (editingPosition != -1 ? 15 : 0);
+ }
+
+ @Override
+ public int getRowWidth() {
+ return 280;
+ }
+
+ public void setEditingPosition(int editingPosition) {
+ this.editingPosition = editingPosition;
+ }
+
+ @Override
+ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
+ if (keyCode == GLFW.GLFW_KEY_UP && editingPosition != -1) {
+ parent.clickAndWaitForServer(13, 1);
+ return true;
+ } else if (keyCode == GLFW.GLFW_KEY_DOWN && editingPosition != -1) {
+ parent.clickAndWaitForServer(13, 0);
+ return true;
+ }
+ return super.keyPressed(keyCode, scanCode, modifiers);
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java
new file mode 100644
index 00000000..258b5c68
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java
@@ -0,0 +1,101 @@
+package de.hysky.skyblocker.skyblock.tabhud.config;
+
+import de.hysky.skyblocker.skyblock.tabhud.config.entries.IslandEntry;
+import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetEntry;
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.ScreenRect;
+import net.minecraft.client.gui.tab.Tab;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.ClickableWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.screen.GenericContainerScreenHandler;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.screen.slot.SlotActionType;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+import java.util.function.Consumer;
+
+public class WidgetsOrderingTab implements Tab {
+
+ private final WidgetsElementList widgetsElementList;
+ private final ButtonWidget back;
+ private GenericContainerScreenHandler handler;
+ private final MinecraftClient client;
+
+ public WidgetsOrderingTab(MinecraftClient client, GenericContainerScreenHandler handler) {
+ widgetsElementList = new WidgetsElementList(this, client, 0, 0, 0);
+ this.client = client;
+ this.handler = handler;
+ back = ButtonWidget.builder(Text.literal("Back"), button -> clickAndWaitForServer(48, 0))
+ .size(64, 12)
+ .build();
+ }
+
+ @Override
+ public Text getTitle() {
+ return Text.literal("Widgets");
+ }
+
+ @Override
+ public void forEachChild(Consumer<ClickableWidget> consumer) {
+ consumer.accept(back);
+ consumer.accept(widgetsElementList);
+ }
+
+ public void clickAndWaitForServer(int slot, int button) {
+ if (client.interactionManager == null || this.client.player == null) return;
+ client.interactionManager.clickSlot(handler.syncId, slot, button, SlotActionType.PICKUP, this.client.player);
+ }
+
+ public void updateHandler(GenericContainerScreenHandler newHandler) {
+ this.handler = newHandler;
+ }
+
+ public void hopper(@Nullable List<Text> hopperTooltip) {
+ if (hopperTooltip == null) {
+ widgetsElementList.setEditingPosition(-1);
+ return;
+ }
+ int start = -1;
+ int editing = 1;
+ for (int i = 0; i < hopperTooltip.size(); i++) {
+ Text text = hopperTooltip.get(i);
+ String string = text.getString();
+ System.out.println(string);
+ if (start == -1 && string.contains("▶")) {
+ start = i;
+ }
+ if (string.contains("(EDITING)")) {
+ editing = i;
+ break;
+ }
+ }
+ widgetsElementList.setEditingPosition(editing - start);
+ }
+
+ public void updateEntries() {
+ widgetsElementList.clearEntries();
+ for (int i = 9; i < handler.getRows() * 9 - 9; i++) {
+ Slot slot = handler.getSlot(i);
+ ItemStack stack = slot.getStack();
+ if (stack.isEmpty() || stack.isOf(Items.BLACK_STAINED_GLASS)) continue;
+ String lowerCase = stack.getName().getString().trim().toLowerCase();
+ if (lowerCase.startsWith("widgets on") || lowerCase.startsWith("widgets in")) {
+ widgetsElementList.addEntry(new IslandEntry(this, i, stack));
+ } else if (lowerCase.endsWith("widget")) {
+ widgetsElementList.addEntry(new WidgetEntry(this, i, stack));
+ }
+ }
+ }
+
+ @Override
+ public void refreshGrid(ScreenRect tabArea) {
+ back.setPosition(16, tabArea.getTop() + 4);
+ widgetsElementList.setY(tabArea.getTop());
+ widgetsElementList.setDimensions(tabArea.width(), tabArea.height());
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java
new file mode 100644
index 00000000..8ca1248b
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java
@@ -0,0 +1,54 @@
+package de.hysky.skyblocker.skyblock.tabhud.config.entries;
+
+import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsOrderingTab;
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.Element;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+import net.minecraft.util.Colors;
+
+import java.util.List;
+
+public class IslandEntry extends WidgetsListEntry {
+
+ private final ButtonWidget editButton;
+ private final boolean locked;
+
+ public IslandEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) {
+ super(parent, slotId, icon);
+ editButton = ButtonWidget.builder(Text.literal("EDIT"), button -> this.parent.clickAndWaitForServer(this.slotId, 0))
+ .size(32, 12)
+ .build();
+ this.locked = ItemUtils.getLoreLineIf(icon, s -> s.startsWith("Click to edit")) == null;
+ }
+
+ @Override
+ public void renderTooltip(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY) {
+ if (mouseX >= x && mouseX <= x + entryWidth - 50 && mouseY >= y && mouseY <= y + entryHeight) {
+ List<Text> lore = ItemUtils.getLore(icon);
+ context.drawTooltip(MinecraftClient.getInstance().textRenderer, locked ? lore : lore.subList(0, lore.size() - 2), mouseX, mouseY);
+ }
+ }
+
+ @Override
+ public List<? extends Element> children() {
+ return List.of(editButton);
+ }
+
+ @Override
+ public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
+ int textY = y + (entryHeight - 9) / 2;
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ renderIconAndText(context, y, x, entryHeight);
+ if (locked) {
+ context.drawText(textRenderer, "LOCKED", x + entryWidth - 50, textY, Colors.RED, true);
+ } else {
+ editButton.setPosition(x + entryWidth - 40, y + (entryHeight - 12) / 2);
+ editButton.render(context, mouseX, mouseY, tickDelta);
+ }
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetEntry.java
new file mode 100644
index 00000000..b2835008
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetEntry.java
@@ -0,0 +1,79 @@
+package de.hysky.skyblocker.skyblock.tabhud.config.entries;
+
+import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsOrderingTab;
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.Element;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+import net.minecraft.util.Colors;
+import net.minecraft.util.Formatting;
+
+import java.util.List;
+
+public class WidgetEntry extends WidgetsListEntry {
+
+ private static final Text ENABLED = Text.literal("ENABLED").formatted(Formatting.GREEN);
+ private static final Text DISABLED = Text.literal("DISABLED").formatted(Formatting.RED);
+
+ private final ButtonWidget editButton;
+ private final State state;
+ private final ButtonWidget enableButton;
+
+ public WidgetEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) {
+ super(parent, slotId, icon);
+ editButton = ButtonWidget.builder(Text.literal("EDIT"), button -> this.parent.clickAndWaitForServer(this.slotId, 1))
+ .size(32, 12)
+ .build();
+
+ String string = icon.getName().getString().trim();
+ if (string.startsWith("✔")) {
+ state = State.ENABLED;
+ } else if (string.startsWith("✖")) {
+ state = State.DISABLED;
+ } else state = State.LOCKED;
+ enableButton = ButtonWidget.builder(state.equals(State.ENABLED) ? ENABLED : DISABLED, button -> this.parent.clickAndWaitForServer(this.slotId, 0))
+ .size(64, 12)
+ .build();
+
+ }
+
+
+ @Override
+ public void renderTooltip(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY) {
+ if (mouseX >= x && mouseX <= x + entryWidth - 50 && mouseY >= y && mouseY <= y + entryHeight) {
+ List<Text> lore = ItemUtils.getLore(icon);
+ context.drawTooltip(MinecraftClient.getInstance().textRenderer, state == State.LOCKED ? lore : lore.subList(0, lore.size() - 3), mouseX, mouseY);
+ }
+ }
+
+ @Override
+ public List<? extends Element> children() {
+ return List.of(editButton, enableButton);
+ }
+
+ @Override
+ public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
+ int textY = y + (entryHeight - 9) / 2;
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ renderIconAndText(context, y, x, entryHeight);
+ if (state != State.LOCKED) {
+ editButton.setPosition(x + entryWidth - 40, y + (entryHeight - 12) / 2);
+ editButton.render(context, mouseX, mouseY, tickDelta);
+
+ enableButton.setPosition(x + entryWidth - 110, y + (entryHeight - 12) / 2);
+ enableButton.render(context, mouseX, mouseY, tickDelta);
+ } else {
+ context.drawText(textRenderer, "LOCKED", x + entryWidth - 50, textY, Colors.RED, true);
+ }
+ }
+
+ enum State {
+ ENABLED,
+ DISABLED,
+ LOCKED
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetsListEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetsListEntry.java
new file mode 100644
index 00000000..1765e3f6
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/WidgetsListEntry.java
@@ -0,0 +1,42 @@
+package de.hysky.skyblocker.skyblock.tabhud.config.entries;
+
+import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsOrderingTab;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.Selectable;
+import net.minecraft.client.gui.widget.ElementListWidget;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Colors;
+
+import java.util.List;
+
+public abstract class WidgetsListEntry extends ElementListWidget.Entry<WidgetsListEntry> {
+
+ protected final int slotId;
+ protected final WidgetsOrderingTab parent;
+ protected final ItemStack icon;
+
+ public WidgetsListEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) {
+ this.parent = parent;
+ this.slotId = slotId;
+ this.icon = icon;
+ }
+ @Override
+ public List<? extends Selectable> selectableChildren() {
+ return List.of();
+ }
+
+ public abstract void renderTooltip(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY);
+
+ @Override
+ public void drawBorder(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
+ if (hovered) context.drawBorder(x, y, entryWidth, entryHeight, -1);
+ }
+
+ protected void renderIconAndText(DrawContext context, int y, int x, int entryHeight) {
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ context.drawItem(icon, x + 2, y + (entryHeight - 16) / 2);
+ context.drawText(textRenderer, icon.getName(), x + 20, y + (entryHeight - 9) / 2, Colors.WHITE, true);
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java
index 7624c3cf..2b0bb0a0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java
@@ -34,34 +34,23 @@ public class FireSaleWidget extends TabHudWidget {
// TODO make it work (waiting for a fire sale to see the widget)
@Override
- public void updateContent(List<Text> ignore) {
- Text event = PlayerListMgr.textAt(46);
-
- if (event == null) {
- this.addComponent(new PlainTextComponent(Text.literal("No Fire Sales!").formatted(Formatting.GRAY)));
- return;
- }
-
- String text = event.getString();
-
- //We're keeping both cases as it might have something to do with having multiple fire sales at once vs having only one
- if (text.contains("starting in") || text.contains("Starts in")) {
- this.addComponent(new IcoTextComponent(Ico.CLOCK, event));
- return;
- }
-
- for (int i = 46;; i++) {
- Matcher m = PlayerListMgr.regexAt(i, FIRE_PATTERN);
- if (m == null) {
- break;
+ public void updateContent(List<Text> lines) {
+ for (int i = 1; i < lines.size(); i++) {
+ Text text = lines.get(i);
+ Matcher m = FIRE_PATTERN.matcher(text.getString());
+ if (m.matches()) {
+ String avail = m.group("avail");
+ Text itemTxt = Text.literal(m.group("item"));
+ float total = Float.parseFloat(m.group("total")) * 1000;
+ Text prgressTxt = Text.literal(String.format("%s/%.0f", avail, total));
+ float pcnt = (Float.parseFloat(avail) / (total)) * 100f;
+ ProgressComponent pc = new ProgressComponent(Ico.GOLD, itemTxt, prgressTxt, pcnt, Colors.pcntToCol(pcnt));
+ this.addComponent(pc);
+ } else if (text.getString().toLowerCase() instanceof String s && (s.contains("starts") || s.contains("starting"))) {
+ this.addComponent(new IcoTextComponent(Ico.CLOCK, text));
+ } else {
+ this.addComponent(new PlainTextComponent(text));
}
- String avail = m.group("avail");
- Text itemTxt = Text.literal(m.group("item"));
- float total = Float.parseFloat(m.group("total")) * 1000;
- Text prgressTxt = Text.literal(String.format("%s/%.0f", avail, total));
- float pcnt = (Float.parseFloat(avail) / (total)) * 100f;
- ProgressComponent pc = new ProgressComponent(Ico.GOLD, itemTxt, prgressTxt, pcnt, Colors.pcntToCol(pcnt));
- this.addComponent(pc);
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java
deleted file mode 100644
index e69de29b..00000000
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java
+++ /dev/null
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
deleted file mode 100644
index e69de29b..00000000
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
+++ /dev/null
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ServerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ServerWidget.java
index 78a833b1..756cbe0e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ServerWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ServerWidget.java
@@ -26,12 +26,12 @@ public class ServerWidget extends TabHudWidget {
@Override
public void updateContent(List<Text> lines) {
- this.addComponent(new IcoTextComponent(Ico.MAP, Text.literal("Area:").append(lines.getFirst().copy().formatted(Formatting.DARK_AQUA))));
+ this.addComponent(new IcoTextComponent(Ico.MAP, Text.literal("Area: ").append(lines.getFirst().copy().formatted(Formatting.DARK_AQUA))));
for (int i = 1; i < lines.size(); i++) {
Text text = lines.get(i);
String string = text.getString();
switch (string.toLowerCase()) {
- case String s when s.contains("server") -> this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, string);
+ case String s when s.contains("server") -> this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, string.split(":", 2)[1]);
case String s when s.contains("gems") -> this.addComponent(new IcoTextComponent(Ico.EMERALD, text));
case String s when s.contains("crystals") -> this.addComponent(new IcoTextComponent(Ico.EMERALD, text));
case String s when s.contains("copper") -> this.addComponent(new IcoTextComponent(Ico.COPPER, text));