diff options
Diffstat (limited to 'src/main/java/de')
26 files changed, 520 insertions, 711 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java index e671406a..5ed4493a 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java @@ -42,13 +42,14 @@ public abstract class GenericContainerScreenHandlerMixin extends ScreenHandler { } case null, default -> {} } - onContentChanged(slots.get(slot).inventory); // this should be default behavior + sendContentUpdates(); } @Override public void updateSlotStacks(int revision, List<ItemStack> stacks, ItemStack cursorStack) { super.updateSlotStacks(revision, stacks, cursorStack); ContainerSolverManager.markHighlightsDirty(); + sendContentUpdates(); if (MinecraftClient.getInstance().currentScreen instanceof PartyFinderScreen screen) { screen.markDirty(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java index 01f591a0..122f6c6e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java @@ -9,6 +9,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.math.RotationAxis; import org.joml.Vector2i; @@ -16,6 +17,7 @@ import org.joml.Vector2ic; import java.util.List; import java.util.Map; +import java.util.Set; @RegisterWidget public class CrystalsHudWidget extends HudWidget { @@ -66,12 +68,23 @@ public class CrystalsHudWidget extends HudWidget { return (clipped * 360f) / 16f; } - @Override - public boolean shouldRender(Location location) { + @Override + public Set<Location> availableLocations() { + return Set.of(Location.CRYSTAL_HOLLOWS); + } + + @Override + public boolean isEnabledIn(Location location) { return location.equals(Location.CRYSTAL_HOLLOWS) && SkyblockerConfigManager.get().mining.crystalsHud.enabled; } - public void update() { + @Override + public void setEnabledIn(Location location, boolean enabled) { + if (!location.equals(Location.CRYSTAL_HOLLOWS)) return; + SkyblockerConfigManager.get().mining.crystalsHud.enabled = enabled; + } + + public void update() { if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsHud.enabled) return; @@ -134,4 +147,9 @@ public class CrystalsHudWidget extends HudWidget { context.drawTexture(RenderLayer::getGuiTextured, MAP_ICON, 0, 0, 2, 0, 5, 7, 8, 8); matrices.pop(); } + + @Override + public Text getDisplayName() { + return Text.of("Crystals HUD"); + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index d56a03ca..fdf5b785 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -18,6 +18,7 @@ import net.minecraft.util.Formatting; import java.text.NumberFormat; import java.util.Locale; import java.util.Optional; +import java.util.Set; @RegisterWidget public class EndHudWidget extends ComponentBasedWidget { @@ -48,11 +49,22 @@ public class EndHudWidget extends ComponentBasedWidget { this.update(); } @Override - public boolean shouldRender(Location location) { + public boolean isEnabledIn(Location location) { return location.equals(Location.THE_END) && SkyblockerConfigManager.get().otherLocations.end.hudEnabled; } - @Override + @Override + public void setEnabledIn(Location location, boolean enabled) { + if (!location.equals(Location.THE_END)) return; + SkyblockerConfigManager.get().otherLocations.end.hudEnabled = enabled; + } + + @Override + public Set<Location> availableLocations() { + return Set.of(Location.THE_END); + } + + @Override public void updateContent() { // Zealots if (SkyblockerConfigManager.get().otherLocations.end.zealotKillsEnabled) { @@ -80,8 +92,8 @@ public class EndHudWidget extends ComponentBasedWidget { } @Override - public String getNiceName() { - return "End Hud"; + public Text getDisplayName() { + return Text.literal("End Hud"); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index 215956c5..47b28fcc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -20,6 +20,7 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; import java.util.Map; +import java.util.Set; @RegisterWidget public class FarmingHudWidget extends ComponentBasedWidget { @@ -119,12 +120,23 @@ public class FarmingHudWidget extends ComponentBasedWidget { } @Override - public boolean shouldRender(Location location) { + public boolean isEnabledIn(Location location) { return location.equals(Location.GARDEN) && SkyblockerConfigManager.get().farming.garden.farmingHud.enableHud; } - @Override - public String getNiceName() { - return "Farming Hud"; + @Override + public void setEnabledIn(Location location, boolean enabled) { + if (!location.equals(Location.GARDEN)) return; + SkyblockerConfigManager.get().farming.garden.farmingHud.enableHud = enabled; + } + + @Override + public Set<Location> availableLocations() { + return Set.of(Location.GARDEN); + } + + @Override + public Text getDisplayName() { + return Text.literal("Farming HUD"); } } 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 6e15a831..0b7029a6 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 @@ -1,9 +1,12 @@ package de.hysky.skyblocker.skyblock.tabhud.config; import com.mojang.logging.LogUtils; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetEntry; import de.hysky.skyblocker.skyblock.tabhud.config.preview.PreviewTab; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; @@ -73,7 +76,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL private final TabManager tabManager = new TabManager(this::addDrawableChild, this::remove); @Nullable private TabNavigationWidget tabNavigation; - private WidgetsOrderingTab widgetsOrderingTab; + private WidgetsListTab widgetsListTab; private boolean switchingToPopup = false; @@ -126,10 +129,12 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL .build(); previewTab.goToLayer(ScreenMaster.getScreenBuilder(currentLocation).getPositionRuleOrDefault(widgetsLayer).screenLayer()); } else { - widgetsOrderingTab = new WidgetsOrderingTab(this.client, this.handler); + widgetsListTab = new WidgetsListTab(this.client, this.handler); this.tabNavigation = TabNavigationWidget.builder(this.tabManager, this.width) - .tabs(this.widgetsOrderingTab, this.previewTab, previewDungeons) + .tabs(this.widgetsListTab, this.previewTab, previewDungeons) .build(); + widgetsListTab.setShouldShowEntries(titleLowercase.startsWith("widgets ")); + updateCustomWidgets(); } this.tabNavigation.selectTab(0, false); switchingToPopup = false; @@ -155,24 +160,40 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL handler.addListener(this); this.titleLowercase = titleLowercase; parseLocation(); - widgetsOrderingTab.updateHandler(handler); + widgetsListTab.updateHandler(handler); } + public void updateCustomWidgets() { + List<WidgetEntry> entries = new ArrayList<>(); + for (HudWidget value : ScreenMaster.widgetInstances.values()) { + if (!value.availableLocations().contains(currentLocation)) continue; + entries.add(new WidgetEntry(value, currentLocation)); + } + widgetsListTab.setEntries(entries); + } + + public void setCurrentLocation(Location location) { + Location old = this.currentLocation; + currentLocation = location; + if (old != currentLocation) { + ScreenMaster.getScreenBuilder(currentLocation).backupPositioning(); + updateCustomWidgets(); + } + } + private void parseLocation() { - String trim = this.titleLowercase + boolean b = titleLowercase.startsWith("widgets "); + if (widgetsListTab != null) widgetsListTab.setShouldShowEntries(b); + String trim = this.titleLowercase .replace("widgets in", "") .replace("widgets on", "") .trim(); if (nameToLocation.containsKey(trim)) { - Location old = currentLocation; - currentLocation = nameToLocation.get(trim); - if (old != currentLocation) { - ScreenMaster.getScreenBuilder(currentLocation).backupPositioning(); - } + setCurrentLocation(nameToLocation.get(trim)); } else { //currentLocation = Utils.getLocation(); - if (this.titleLowercase.startsWith("widgets ")) + if (b) LOGGER.warn("[Skyblocker] Couldn't find location for {} (trimmed: {})", this.titleLowercase, trim); } } @@ -189,19 +210,19 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL if (slotId == 4) { tabPreview = stack.isOf(Items.PLAYER_HEAD); } - if (widgetsOrderingTab == null) { + if (widgetsListTab == null) { if (slotId == 13) slotThirteenBacklog = stack.copy(); return; } if (slotId == 13) { if (stack.isOf(Items.HOPPER)) { - widgetsOrderingTab.hopper(ItemUtils.getLore(stack)); + widgetsListTab.hopper(ItemUtils.getLore(stack)); } else { - widgetsOrderingTab.hopper(null); + widgetsListTab.hopper(null); } } - if (slotId > 9 && slotId < this.handler.getRows() * 9 - 9 || slotId == 45 || slotId == 53) { - widgetsOrderingTab.updateEntries(titleLowercase); + if (slotId > (titleLowercase.startsWith("tablist widgets") ? 9 : 18) && slotId < this.handler.getRows() * 9 - 9 || slotId == 45 || slotId == 53 || slotId == 50) { + widgetsListTab.onSlotChange(slotId, stack); } } @@ -209,8 +230,8 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL public void tick() { super.tick(); if (noHandler) return; - if (slotThirteenBacklog != null && widgetsOrderingTab != null) { - widgetsOrderingTab.hopper(ItemUtils.getLore(slotThirteenBacklog)); + if (slotThirteenBacklog != null && widgetsListTab != null) { + widgetsListTab.hopper(ItemUtils.getLore(slotThirteenBacklog)); slotThirteenBacklog = null; } if (!this.client.player.isAlive() || this.client.player.isRemoved()) { @@ -239,6 +260,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL } handler.removeListener(this); Scheduler.INSTANCE.schedule(PlayerListMgr::updateList, 1); + SkyblockerConfigManager.save(); } @Override @@ -250,7 +272,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL List<Location> locations = new ArrayList<>(List.of(Location.hudLocations())); locations.remove(Location.DUNGEON); // there's already a tab for that return new DropdownWidget<>(client, 0, 0, 50, 50, locations, location -> { - this.currentLocation = location; + setCurrentLocation(location); onLocationChanged.accept(location); }, locations.contains(currentLocation) ? currentLocation : Location.HUB); } 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 6d587e74..804bc222 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 @@ -1,12 +1,19 @@ package de.hysky.skyblocker.skyblock.tabhud.config; import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetsListEntry; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.slot.WidgetsListSlotEntry; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.IntComparators; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.Element; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import java.util.Objects; public class WidgetsElementList extends ElementListWidget<WidgetsListEntry> { @@ -15,7 +22,23 @@ public class WidgetsElementList extends ElementListWidget<WidgetsListEntry> { static final Identifier MOVE_DOWN_HIGHLIGHTED_TEXTURE = Identifier.ofVanilla("transferable_list/move_down_highlighted"); static final Identifier MOVE_DOWN_TEXTURE = Identifier.ofVanilla("transferable_list/move_down"); - private final WidgetsOrderingTab parent; + static final WidgetsListEntry SEPARATOR = new WidgetsListEntry() { + + @Override + public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + context.drawCenteredTextWithShadow(MinecraftClient.getInstance().textRenderer, Text.of("- Skyblocker Widgets -"), x + entryWidth / 2, y + (entryHeight - 9) / 2, 0xFFFFFF); + } + + @Override + public List<? extends Element> children() { + return List.of(); + } + + @Override + public void drawBorder(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {} + }; + + private final WidgetsListTab parent; private boolean rightUpArrowHovered = false; private boolean rightDownArrowHovered = false; private boolean leftUpArrowHovered = false; @@ -23,28 +46,30 @@ public class WidgetsElementList extends ElementListWidget<WidgetsListEntry> { private int editingPosition = - 1; - public WidgetsElementList(WidgetsOrderingTab parent, MinecraftClient minecraftClient, int width, int height, int y) { + public WidgetsElementList(WidgetsListTab 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 public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { + if (parent.listNeedsUpdate()) { + ArrayList<Int2ObjectMap.Entry<WidgetsListSlotEntry>> entries = new ArrayList<>(parent.getEntries()); + clearEntries(); + entries.stream() + .sorted((a, b) -> IntComparators.NATURAL_COMPARATOR.compare(a.getIntKey(), b.getIntKey())) + .map(Map.Entry::getValue) + .forEach(this::addEntry); + if (!parent.getWidgetEntries().isEmpty() && parent.shouldShowEntries()) { + if (!children().isEmpty()) addEntry(SEPARATOR); + parent.getWidgetEntries().forEach(this::addEntry); + } + setScrollAmount(getScrollAmount()); + } super.renderWidget(context, mouseX, mouseY, delta); - WidgetsListEntry hoveredEntry = getHoveredEntry(); + WidgetsListEntry hoveredEntry = getHoveredEntry(); if (hoveredEntry != null) hoveredEntry.renderTooltip(context, x, y, entryWidth, entryHeight, mouseX, mouseY); if (rightUpArrowHovered || rightDownArrowHovered) { context.drawTooltip(client.textRenderer, Text.literal("Move widget"), mouseX, mouseY); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsListTab.java index 9ed827a5..97233c5d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsListTab.java @@ -1,8 +1,12 @@ package de.hysky.skyblocker.skyblock.tabhud.config; -import de.hysky.skyblocker.skyblock.tabhud.config.entries.*; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetEntry; +import de.hysky.skyblocker.skyblock.tabhud.config.entries.slot.*; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.scheduler.Scheduler; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectSet; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ScreenRect; import net.minecraft.client.gui.tab.Tab; @@ -12,26 +16,52 @@ 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.ArrayList; +import java.util.Collection; import java.util.List; import java.util.function.Consumer; // TODO: recommend disabling spacing and enabling wrapping -public class WidgetsOrderingTab implements Tab { +public class WidgetsListTab implements Tab { private final WidgetsElementList widgetsElementList; private final ButtonWidget back; private final ButtonWidget previousPage; private final ButtonWidget nextPage; private final ButtonWidget thirdColumnButton; - private GenericContainerScreenHandler handler; + private @Nullable GenericContainerScreenHandler handler; private final MinecraftClient client; private boolean waitingForServer = false; - public WidgetsOrderingTab(MinecraftClient client, GenericContainerScreenHandler handler) { + private final Int2ObjectMap<WidgetsListSlotEntry> entries = new Int2ObjectOpenHashMap<>(); + private final List<WidgetEntry> widgetEntries = new ArrayList<>(); + private boolean listNeedsUpdate = false; + private boolean shouldShowEntries = false; + + + public void setEntries(Collection<WidgetEntry> entries) { + this.widgetEntries.clear(); + this.widgetEntries.addAll(entries); + } + + public List<WidgetEntry> getWidgetEntries() { + return widgetEntries; + } + + public boolean listNeedsUpdate() { + boolean b = listNeedsUpdate; + listNeedsUpdate = false; + return b; + } + + public ObjectSet<Int2ObjectMap.Entry<WidgetsListSlotEntry>> getEntries() { + return entries.int2ObjectEntrySet(); + } + + public WidgetsListTab(MinecraftClient client, @Nullable GenericContainerScreenHandler handler) { widgetsElementList = new WidgetsElementList(this, client, 0, 0, 0); this.client = client; this.handler = handler; @@ -48,6 +78,7 @@ public class WidgetsOrderingTab implements Tab { nextPage = ButtonWidget.builder(Text.literal("Next Page"), button -> clickAndWaitForServer(53, 0)) .size(100, 15) .build(); + if (handler == null) back.visible = false; } @Override @@ -65,14 +96,14 @@ public class WidgetsOrderingTab implements Tab { } public void clickAndWaitForServer(int slot, int button) { - if (waitingForServer) return; + if (waitingForServer || handler == null) 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 (waitingForServer || handler == null) return; if (client.interactionManager == null || this.client.player == null) return; client.interactionManager.clickSlot(handler.syncId, slot, button, SlotActionType.QUICK_MOVE, this.client.player); // When moving a widget down it gets stuck sometimes @@ -82,6 +113,9 @@ public class WidgetsOrderingTab implements Tab { public void updateHandler(GenericContainerScreenHandler newHandler) { this.handler = newHandler; + back.visible = handler != null; + entries.clear(); + listNeedsUpdate = true; } public void hopper(@Nullable List<Text> hopperTooltip) { @@ -105,41 +139,49 @@ public class WidgetsOrderingTab implements Tab { widgetsElementList.setEditingPosition(editing - start); } - public void updateEntries(String titleLowercase) { - waitingForServer = false; - widgetsElementList.clearEntries(); - 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_PANE)) continue; - String lowerCase = stack.getName().getString().trim().toLowerCase(); - List<Text> lore = ItemUtils.getLore(stack); - String lastLowerCase = lore.getLast().getString().toLowerCase(); - if (lowerCase.startsWith("widgets on") || lowerCase.startsWith("widgets in") || lastLowerCase.contains("click to edit") || stack.isOf(Items.RED_STAINED_GLASS_PANE)) { - 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); - thirdColumnButton.visible = handler.getRows() == 6 && (handler.getSlot(50).getStack().isOf(Items.BOOKSHELF) || handler.getSlot(50).getStack().isOf(Items.STONE_BUTTON)); - if (thirdColumnButton.visible) { - ItemStack stack = handler.getSlot(50).getStack(); - if (stack.isOf(Items.STONE_BUTTON)) - thirdColumnButton.setMessage(Text.literal("Apply to all locations")); - else if (ItemUtils.getLoreLineIf(stack, s -> s.contains("DISABLED")) == null) - thirdColumnButton.setMessage(Text.literal("3rd Column: ").append(WidgetsListEntry.ENABLED_TEXT)); - else - thirdColumnButton.setMessage(Text.literal("3rd Column: ").append(WidgetsListEntry.DISABLED_TEXT)); - } - } + public void onSlotChange(int slot, ItemStack stack) { + waitingForServer = false; + listNeedsUpdate = true; + switch (slot) { + case 45 -> {previousPage.visible = stack.isOf(Items.ARROW); return;} + case 53 -> {nextPage.visible = stack.isOf(Items.ARROW); return;} + case 50 -> { + thirdColumnButton.visible = stack.isOf(Items.BOOKSHELF) || stack.isOf(Items.STONE_BUTTON); + if (thirdColumnButton.visible) { + if (stack.isOf(Items.STONE_BUTTON)) + thirdColumnButton.setMessage(Text.literal("Apply to all locations")); + else if (ItemUtils.getLoreLineIf(stack, s -> s.contains("DISABLED")) == null) + thirdColumnButton.setMessage(Text.literal("3rd Column: ").append(WidgetsListSlotEntry.ENABLED_TEXT)); + else + thirdColumnButton.setMessage(Text.literal("3rd Column: ").append(WidgetsListSlotEntry.DISABLED_TEXT)); + } + return; + } + } + + if (stack.isEmpty() || stack.isOf(Items.BLACK_STAINED_GLASS_PANE)) { + entries.remove(slot); + return; + } + + + String lowerCase = stack.getName().getString().trim().toLowerCase(); + List<Text> lore = ItemUtils.getLore(stack); + String lastLowerCase = lore.getLast().getString().toLowerCase(); + + WidgetsListSlotEntry entry; + if (lowerCase.startsWith("widgets on") || lowerCase.startsWith("widgets in") || lastLowerCase.contains("click to edit") || stack.isOf(Items.RED_STAINED_GLASS_PANE)) { + entry = new EditableSlotEntry(this, slot, stack); + } else if (lowerCase.endsWith("widget")) { + entry = new WidgetSlotEntry(this, slot, stack); + } else if (lastLowerCase.contains("enable") || lastLowerCase.contains("disable")) { + entry = new BooleanSlotEntry(this, slot, stack); + } else { + entry = new DefaultSlotEntry(this, slot, stack); + } + entries.put(slot, entry); + + } @Override public void refreshGrid(ScreenRect tabArea) { @@ -150,4 +192,12 @@ public class WidgetsOrderingTab implements Tab { nextPage.setPosition(widgetsElementList.getScrollbarX() - 100, widgetsElementList.getBottom() + 4); thirdColumnButton.setPosition(widgetsElementList.getScrollbarX() + 5, widgetsElementList.getBottom() + 4); } + + public boolean shouldShowEntries() { + return shouldShowEntries; + } + + public void setShouldShowEntries(boolean shouldShowEntries) { + this.shouldShowEntries = shouldShowEntries; + } } 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 33bf1c00..bb6e2c34 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 @@ -1,79 +1,49 @@ package de.hysky.skyblocker.skyblock.tabhud.config.entries; -import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsOrderingTab; -import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; +import de.hysky.skyblocker.utils.Location; 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 WidgetEntry extends WidgetsListEntry { - private final ButtonWidget editButton; - private final State state; |
