From 628bf91b63c78a9ad012a7cf240c76628e15901c Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sun, 12 May 2024 17:13:17 +0200 Subject: more PROGRESS --- .../mixins/HandledScreenProviderMixin.java | 6 +-- .../tabhud/config/WidgetsConfigurationScreen.java | 14 +++--- .../skyblock/tabhud/config/WidgetsElementList.java | 22 ++++++++- .../skyblock/tabhud/config/WidgetsOrderingTab.java | 50 +++++++++++++++++--- .../tabhud/config/entries/BooleanEntry.java | 47 +++++++++++++++++++ .../tabhud/config/entries/DefaultEntry.java | 50 ++++++++++++++++++++ .../tabhud/config/entries/EditableEntry.java | 54 ++++++++++++++++++++++ .../tabhud/config/entries/IslandEntry.java | 54 ---------------------- .../tabhud/config/entries/WidgetEntry.java | 19 ++++---- .../tabhud/config/entries/WidgetsListEntry.java | 5 ++ .../skyblock/tabhud/util/PlayerListMgr.java | 3 +- .../skyblock/tabhud/widget/ElectionWidget.java | 2 +- 12 files changed, 243 insertions(+), 83 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/BooleanEntry.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/DefaultEntry.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/EditableEntry.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java index ac81bfec..9b47f736 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java @@ -95,11 +95,11 @@ public interface HandledScreenProviderMixin { } // Excessive widgets config - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled && (nameLowercase.startsWith("widgets in") || nameLowercase.startsWith("widgets on") || nameLowercase.equals("tablist widgets")) -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled && (nameLowercase.startsWith("widgets in") || nameLowercase.startsWith("widgets on") || nameLowercase.equals("tablist widgets") || nameLowercase.endsWith("widget settings") || (nameLowercase.startsWith("shown") && client.currentScreen instanceof WidgetsConfigurationScreen)) -> { client.player.currentScreenHandler = containerScreenHandler; switch (client.currentScreen) { - case WidgetsConfigurationScreen screen -> screen.updateHandler(containerScreenHandler); - case null, default -> client.setScreen(new WidgetsConfigurationScreen(containerScreenHandler)); + case WidgetsConfigurationScreen screen -> screen.updateHandler(containerScreenHandler, nameLowercase); + case null, default -> client.setScreen(new WidgetsConfigurationScreen(containerScreenHandler, nameLowercase)); } ci.cancel(); } 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 index 2b76bef6..3b999e18 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java @@ -3,7 +3,6 @@ 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; @@ -14,11 +13,10 @@ 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; + private String titleLowercase; // Tabs and stuff private final TabManager tabManager = new TabManager(this::addDrawableChild, this::remove); @@ -28,10 +26,11 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL private boolean switchingToPopup = false; - public WidgetsConfigurationScreen(GenericContainerScreenHandler handler) { + public WidgetsConfigurationScreen(GenericContainerScreenHandler handler, String titleLowercase) { super(Text.literal("Widgets Configuration")); this.handler = handler; handler.addListener(this); + this.titleLowercase = titleLowercase; } @Override @@ -57,10 +56,11 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL } } - public void updateHandler(GenericContainerScreenHandler newHandler) { + public void updateHandler(GenericContainerScreenHandler newHandler, String title) { handler.removeListener(this); handler = newHandler; handler.addListener(this); + this.titleLowercase = title; widgetsOrderingTab.updateHandler(handler); } @@ -79,8 +79,8 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL widgetsOrderingTab.hopper(null); } } - if (slotId > 9 && slotId < this.handler.getRows() * 9 - 9) { - widgetsOrderingTab.updateEntries(); + if (slotId > 9 && slotId < this.handler.getRows() * 9 - 9 || slotId == 45 || slotId == 53) { + widgetsOrderingTab.updateEntries(titleLowercase); } } 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 index 8836e8ba..f3c84c73 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsElementList.java @@ -16,6 +16,8 @@ public class WidgetsElementList extends ElementListWidget { 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 boolean upArrowHovered = false; + private boolean downArrowHovered = false; private int editingPosition = - 1; @@ -48,8 +50,11 @@ public class WidgetsElementList extends ElementListWidget { 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); + boolean xGood = mouseX >= x + entryWidth && mouseX < x + entryWidth + 15; + upArrowHovered = xGood && mouseY >= y && mouseY < y + entryHeight / 2; + downArrowHovered = xGood && mouseY >= y + entryHeight / 2 && mouseY < y + entryHeight; + context.drawGuiTexture(upArrowHovered ? MOVE_UP_HIGHLIGHTED_TEXTURE : MOVE_UP_TEXTURE, getRowRight() - 16, y, 32, 32); + context.drawGuiTexture(downArrowHovered ? MOVE_DOWN_HIGHLIGHTED_TEXTURE : MOVE_DOWN_TEXTURE, getRowRight() - 16, y, 32, 32); } if (Objects.equals(getHoveredEntry(), getEntry(index))) { this.x = x; @@ -73,6 +78,19 @@ public class WidgetsElementList extends ElementListWidget { this.editingPosition = editingPosition; } + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (upArrowHovered) { + parent.shiftClickAndWaitForServer(13, 1); + return true; + } + if (downArrowHovered) { + parent.shiftClickAndWaitForServer(13, 0); + return true; + } + return super.mouseClicked(mouseX, mouseY, button); + } + @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (keyCode == GLFW.GLFW_KEY_UP && editingPosition != -1) { 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 index 258b5c68..983ec41b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java @@ -1,6 +1,8 @@ package de.hysky.skyblocker.skyblock.tabhud.config; -import de.hysky.skyblocker.skyblock.tabhud.config.entries.IslandEntry; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.BooleanEntry; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.DefaultEntry; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.EditableEntry; import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetEntry; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.client.MinecraftClient; @@ -13,6 +15,7 @@ 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.MutableText; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; @@ -23,8 +26,11 @@ public class WidgetsOrderingTab implements Tab { private final WidgetsElementList widgetsElementList; private final ButtonWidget back; + private final ButtonWidget previousPage; + private final ButtonWidget nextPage; private GenericContainerScreenHandler handler; private final MinecraftClient client; + private boolean waitingForServer = false; public WidgetsOrderingTab(MinecraftClient client, GenericContainerScreenHandler handler) { widgetsElementList = new WidgetsElementList(this, client, 0, 0, 0); @@ -33,6 +39,12 @@ public class WidgetsOrderingTab implements Tab { back = ButtonWidget.builder(Text.literal("Back"), button -> clickAndWaitForServer(48, 0)) .size(64, 12) .build(); + previousPage = ButtonWidget.builder(Text.literal("Previous Page"), button -> clickAndWaitForServer(45, 0)) + .size(100, 12) + .build(); + nextPage = ButtonWidget.builder(Text.literal("Next Page"), button -> clickAndWaitForServer(53, 0)) + .size(100, 12) + .build(); } @Override @@ -43,12 +55,23 @@ public class WidgetsOrderingTab implements Tab { @Override public void forEachChild(Consumer consumer) { consumer.accept(back); + consumer.accept(previousPage); + consumer.accept(nextPage); consumer.accept(widgetsElementList); } public void clickAndWaitForServer(int slot, int button) { + if (waitingForServer) return; if (client.interactionManager == null || this.client.player == null) return; client.interactionManager.clickSlot(handler.syncId, slot, button, SlotActionType.PICKUP, this.client.player); + waitingForServer = true; + } + + public void shiftClickAndWaitForServer(int slot, int button) { + if (waitingForServer) return; + if (client.interactionManager == null || this.client.player == null) return; + client.interactionManager.clickSlot(handler.syncId, slot, button, SlotActionType.QUICK_MOVE, this.client.player); + waitingForServer = true; } public void updateHandler(GenericContainerScreenHandler newHandler) { @@ -77,25 +100,38 @@ public class WidgetsOrderingTab implements Tab { widgetsElementList.setEditingPosition(editing - start); } - public void updateEntries() { + public void updateEntries(String titleLowercase) { + waitingForServer = false; widgetsElementList.clearEntries(); - for (int i = 9; i < handler.getRows() * 9 - 9; i++) { + for (int i = titleLowercase.equals("tablist widgets") ? 9: 18; 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; + if (stack.isEmpty() || stack.isOf(Items.BLACK_STAINED_GLASS_PANE)) continue; String lowerCase = stack.getName().getString().trim().toLowerCase(); - if (lowerCase.startsWith("widgets on") || lowerCase.startsWith("widgets in")) { - widgetsElementList.addEntry(new IslandEntry(this, i, stack)); + List lore = ItemUtils.getLore(stack); + String lastLowerCase = lore.getLast().getString().toLowerCase(); + if (lowerCase.startsWith("widgets on") || lowerCase.startsWith("widgets in") || lastLowerCase.contains("click to edit")) { + widgetsElementList.addEntry(new EditableEntry(this, i, stack)); } else if (lowerCase.endsWith("widget")) { widgetsElementList.addEntry(new WidgetEntry(this, i, stack)); + } else if (lastLowerCase.contains("enable") || lastLowerCase.contains("disable")) { + widgetsElementList.addEntry(new BooleanEntry(this, i, stack)); + } else { + widgetsElementList.addEntry(new DefaultEntry(this, i, stack)); } } + // Force it to update the scrollbar (it is stupid) + widgetsElementList.setScrollAmount(widgetsElementList.getScrollAmount()); + previousPage.visible = handler.getRows() == 6 && handler.getSlot(45).getStack().isOf(Items.ARROW); + nextPage.visible = handler.getRows() == 6 && handler.getSlot(53).getStack().isOf(Items.ARROW); } @Override public void refreshGrid(ScreenRect tabArea) { back.setPosition(16, tabArea.getTop() + 4); widgetsElementList.setY(tabArea.getTop()); - widgetsElementList.setDimensions(tabArea.width(), tabArea.height()); + widgetsElementList.setDimensions(tabArea.width(), tabArea.height() - 20); + previousPage.setPosition(widgetsElementList.getRowLeft(), widgetsElementList.getBottom() + 4); + nextPage.setPosition(widgetsElementList.getScrollbarX() - 100, widgetsElementList.getBottom() + 4); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/BooleanEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/BooleanEntry.java new file mode 100644 index 00000000..18d888ea --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/BooleanEntry.java @@ -0,0 +1,47 @@ +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.gui.DrawContext; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; + +import java.util.List; + +public class BooleanEntry extends WidgetsListEntry { + + private final ButtonWidget enableButton; + + public BooleanEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) { + super(parent, slotId, icon); + boolean enabled = !ItemUtils.getLore(icon).getLast().getString().toLowerCase().contains("enable"); + enableButton = ButtonWidget.builder(enabled ? ENABLED_TEXT : DISABLED_TEXT, 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 - 70 && mouseY >= y && mouseY <= y + entryHeight) { + List lore = ItemUtils.getLore(icon); + context.drawTooltip(MinecraftClient.getInstance().textRenderer, lore.subList(0, lore.size() - 2), mouseX, mouseY); + } + } + + @Override + public List children() { + return List.of(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) { + renderIconAndText(context, y, x, entryHeight); + enableButton.setPosition(x + entryWidth - 70, y + (entryHeight - 12) / 2); + enableButton.render(context, mouseX, mouseY, tickDelta); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/DefaultEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/DefaultEntry.java new file mode 100644 index 00000000..635d3bf8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/DefaultEntry.java @@ -0,0 +1,50 @@ +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.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 java.util.List; + +public class DefaultEntry extends WidgetsListEntry{ + + private final ButtonWidget leftClick; + private final ButtonWidget rightClick; + + public DefaultEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) { + super(parent, slotId, icon); + leftClick = ButtonWidget.builder(Text.literal("LEFT"),button -> this.parent.clickAndWaitForServer(this.slotId, 0)) + .size(32, 12) + .build(); + rightClick = ButtonWidget.builder(Text.literal("RIGHT"), button -> this.parent.clickAndWaitForServer(this.slotId, 1)) + .size(32, 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 - 80 && mouseY >= y && mouseY <= y + entryHeight) { + List lore = ItemUtils.getLore(icon); + context.drawTooltip(MinecraftClient.getInstance().textRenderer, lore, mouseX, mouseY); + } + } + + @Override + public List children() { + return List.of(leftClick, rightClick); + } + + @Override + public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + renderIconAndText(context, y, x, entryHeight); + rightClick.setPosition(x + entryWidth - 40, y + (entryHeight - 12) / 2); + rightClick.render(context, mouseX, mouseY, tickDelta); + leftClick.setPosition(x + entryWidth - 80, y + (entryHeight - 12) / 2); + leftClick.render(context, mouseX, mouseY, tickDelta); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/EditableEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/EditableEntry.java new file mode 100644 index 00000000..97eda9b5 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/EditableEntry.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 EditableEntry extends WidgetsListEntry { + + private final ButtonWidget editButton; + private final boolean locked; + + public EditableEntry(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 lore = ItemUtils.getLore(icon); + context.drawTooltip(MinecraftClient.getInstance().textRenderer, locked ? lore : lore.subList(0, lore.size() - 2), mouseX, mouseY); + } + } + + @Override + public List 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/IslandEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java deleted file mode 100644 index 8ca1248b..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/entries/IslandEntry.java +++ /dev/null @@ -1,54 +0,0 @@ -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 lore = ItemUtils.getLore(icon); - context.drawTooltip(MinecraftClient.getInstance().textRenderer, locked ? lore : lore.subList(0, lore.size() - 2), mouseX, mouseY); - } - } - - @Override - public List 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 index b2835008..b360f8e8 100644 --- 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 @@ -10,18 +10,17 @@ 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; + private final boolean alwaysEnabled; public WidgetEntry(WidgetsOrderingTab parent, int slotId, ItemStack icon) { super(parent, slotId, icon); @@ -35,16 +34,17 @@ public class WidgetEntry extends WidgetsListEntry { } 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)) + enableButton = ButtonWidget.builder(state.equals(State.ENABLED) ? ENABLED_TEXT : DISABLED_TEXT, button -> this.parent.clickAndWaitForServer(this.slotId, 0)) .size(64, 12) .build(); + alwaysEnabled = ItemUtils.getLoreLineIf(icon, s -> s.toLowerCase().contains("always enable")) != 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) { + if (mouseX >= x && mouseX <= x + entryWidth - 110 && mouseY >= y && mouseY <= y + entryHeight) { List lore = ItemUtils.getLore(icon); context.drawTooltip(MinecraftClient.getInstance().textRenderer, state == State.LOCKED ? lore : lore.subList(0, lore.size() - 3), mouseX, mouseY); } @@ -52,7 +52,7 @@ public class WidgetEntry extends WidgetsListEntry { @Override public List children() { - return List.of(editButton, enableButton); + return alwaysEnabled ? List.of(editButton) : List.of(editButton, enableButton); } @Override @@ -61,11 +61,14 @@ public class WidgetEntry extends WidgetsListEntry { 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); + if (!alwaysEnabled) { + 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); } 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 index 1765e3f6..45651f50 100644 --- 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 @@ -7,12 +7,17 @@ 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.text.Text; import net.minecraft.util.Colors; +import net.minecraft.util.Formatting; import java.util.List; public abstract class WidgetsListEntry extends ElementListWidget.Entry { + protected static final Text ENABLED_TEXT = Text.literal("ENABLED").formatted(Formatting.GREEN); + protected static final Text DISABLED_TEXT = Text.literal("DISABLED").formatted(Formatting.RED); + protected final int slotId; protected final WidgetsOrderingTab parent; protected final ItemStack icon; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 8832e6f0..44946b5c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.tabhud.util; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.mixins.accessors.PlayerListHudAccessor; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; import de.hysky.skyblocker.skyblock.tabhud.widget.TabHudWidget; @@ -57,7 +58,7 @@ public class PlayerListMgr { public static void updateList() { - if (!Utils.isOnSkyblock()) { + if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index 6aedded7..c967b8e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -46,7 +46,7 @@ public class ElectionWidget extends TabHudWidget { MAYOR_DATA.put("Marina", Ico.FISH_ROD); } - private static final Formatting[] COLS = { Formatting.GOLD, Formatting.RED, Formatting.LIGHT_PURPLE }; + private static final Formatting[] COLS = { Formatting.RED, Formatting.LIGHT_PURPLE, Formatting.GREEN, Formatting.AQUA, Formatting.YELLOW }; public ElectionWidget() { super("Election", TITLE, Formatting.YELLOW.getColorValue()); -- cgit