From 2129c4d2284a4f78d94e74b3e328b8e056607fe9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 4 Jul 2023 10:19:20 +0800 Subject: Refactor ShortcutsConfigListWidget --- .../skyblocker/mixin/HandledScreenMixin.java | 4 +- .../shortcut/ShortcutsConfigListWidget.java | 100 ++++++++++++--------- .../skyblock/shortcut/ShortcutsConfigScreen.java | 6 +- 3 files changed, 61 insertions(+), 49 deletions(-) (limited to 'src/main/java/me/xmrvizzy') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 903d3992..13272323 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -30,6 +30,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; + @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { protected HandledScreenMixin(Text title) { @@ -96,7 +98,7 @@ public abstract class HandledScreenMixin extends Screen { superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); } else if (experimentSolver instanceof UltrasequencerSolver ultrasequencerSolver && slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; - ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().map(Map.Entry::getKey).ifPresentOrElse(ultrasequencerSolver::setUltrasequencerNextSlot, () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java index 9fe30a87..f29470bf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigListWidget.java @@ -11,32 +11,28 @@ import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; +import java.util.stream.Stream; public class ShortcutsConfigListWidget extends ElementListWidget { private final ShortcutsConfigScreen screen; - protected final List categories; + private final List> shortcutMaps = new ArrayList<>(); public ShortcutsConfigListWidget(MinecraftClient minecraftClient, ShortcutsConfigScreen screen, int width, int height, int top, int bottom, int itemHeight) { super(minecraftClient, width, height, top, bottom, itemHeight); this.screen = screen; - ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); - addEntry(commandCategory); - if (!Shortcuts.isShortcutsLoaded()) { - addEntry(new ShortcutLoadingEntry()); + ShortcutCategoryEntry commandCategory = new ShortcutCategoryEntry(Shortcuts.commands, "skyblocker.shortcuts.command.target", "skyblocker.shortcuts.command.replacement"); + if (Shortcuts.isShortcutsLoaded()) { + commandCategory.shortcutsMap.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandCategory, commandTarget))); } else { - Shortcuts.commands.keySet().stream().sorted().forEach(commandTarget -> addEntry(new ShortcutEntry(commandCategory, commandTarget, Shortcuts.commands.get(commandTarget)))); - } - ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry("skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); - addEntry(commandArgCategory); - if (!Shortcuts.isShortcutsLoaded()) { addEntry(new ShortcutLoadingEntry()); + } + ShortcutCategoryEntry commandArgCategory = new ShortcutCategoryEntry(Shortcuts.commandArgs, "skyblocker.shortcuts.commandArg.target", "skyblocker.shortcuts.commandArg.replacement", "skyblocker.shortcuts.commandArg.tooltip"); + if (Shortcuts.isShortcutsLoaded()) { + commandArgCategory.shortcutsMap.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget))); } else { - Shortcuts.commandArgs.keySet().stream().sorted().forEach(commandArgTarget -> addEntry(new ShortcutEntry(commandArgCategory, commandArgTarget, Shortcuts.commandArgs.get(commandArgTarget)))); + addEntry(new ShortcutLoadingEntry()); } - categories = List.of(commandCategory, commandArgCategory); } @Override @@ -58,14 +54,6 @@ public class ShortcutsConfigListWidget extends ElementListWidget getShortcutsMap(ShortcutCategoryEntry category) { - return switch (categories.indexOf(category)) { - case 0 -> Shortcuts.commands; - case 1 -> Shortcuts.commandArgs; - default -> throw new IllegalStateException("Unexpected category: " + category); - }; - } - @Override public void setSelected(@Nullable ShortcutsConfigListWidget.AbstractShortcutEntry entry) { super.setSelected(entry); @@ -81,39 +69,46 @@ public class ShortcutsConfigListWidget extends ElementListWidget getNotEmptyShortcuts() { + return children().stream().filter(ShortcutEntry.class::isInstance).map(ShortcutEntry.class::cast).filter(ShortcutEntry::isNotEmpty); + } + protected static abstract class AbstractShortcutEntry extends ElementListWidget.Entry { } - protected class ShortcutCategoryEntry extends AbstractShortcutEntry { + private class ShortcutCategoryEntry extends AbstractShortcutEntry { + private final Map shortcutsMap; private final Text targetName; private final Text replacementName; @Nullable private final Text tooltip; - private ShortcutCategoryEntry(String targetName, String replacementName) { - this(targetName, replacementName, (Text) null); + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName) { + this(shortcutsMap, targetName, replacementName, (Text) null); } - private ShortcutCategoryEntry(String targetName, String replacementName, String tooltip) { - this(targetName, replacementName, Text.translatable(tooltip)); + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName, String tooltip) { + this(shortcutsMap, targetName, replacementName, Text.translatable(tooltip)); } - private ShortcutCategoryEntry(String targetName, String replacementName, @Nullable Text tooltip) { + private ShortcutCategoryEntry(Map shortcutsMap, String targetName, String replacementName, @Nullable Text tooltip) { + this.shortcutsMap = shortcutsMap; this.targetName = Text.translatable(targetName); this.replacementName = Text.translatable(replacementName); this.tooltip = tooltip; + shortcutMaps.add(shortcutsMap); + addEntry(this); } @Override @@ -181,23 +176,28 @@ public class ShortcutsConfigListWidget extends ElementListWidget children; - protected final ShortcutCategoryEntry category; - protected final TextFieldWidget target; - protected final TextFieldWidget replacement; + private final ShortcutCategoryEntry category; + private final TextFieldWidget target; + private final TextFieldWidget replacement; - protected ShortcutEntry(ShortcutCategoryEntry category) { - this(category, "", ""); + private ShortcutEntry(ShortcutCategoryEntry category) { + this(category, ""); } - private ShortcutEntry(ShortcutCategoryEntry category, String targetString, String replacementString) { + private ShortcutEntry(ShortcutCategoryEntry category, String targetString) { this.category = category; target = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 - 160, 5, 150, 20, category.targetName); replacement = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, width / 2 + 10, 5, 150, 20, category.replacementName); target.setText(targetString); - replacement.setText(replacementString); + replacement.setText(category.shortcutsMap.getOrDefault(targetString, "")); children = List.of(target, replacement); } + @Override + public String toString() { + return target.getText() + " → " + replacement.getText(); + } + @Override public List children() { return children; @@ -208,6 +208,18 @@ public class ShortcutsConfigListWidget extends ElementListWidget { if (client != null && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { scrollAmount = shortcutsConfigListWidget.getScrollAmount(); - client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", shortcutEntry.target.getText() + " → " + shortcutEntry.replacement.getText()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); + client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", shortcutEntry), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); } }).build(); adder.add(buttonDelete); @@ -58,7 +57,6 @@ public class ShortcutsConfigScreen extends Screen { }).build()); buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { shortcutsConfigListWidget.saveShortcuts(); - saved = true; if (client != null) { close(); } @@ -88,7 +86,7 @@ public class ShortcutsConfigScreen extends Screen { @Override public void close() { - if (!saved && client != null) { + if (client != null && shortcutsConfigListWidget.hasChanges()) { client.setScreen(new ConfirmScreen(confirmedAction -> { if (confirmedAction) { super.close(); -- cgit