diff options
author | olim <bobq4582@gmail.com> | 2024-02-16 21:18:16 +0000 |
---|---|---|
committer | olim <bobq4582@gmail.com> | 2024-02-16 21:18:16 +0000 |
commit | 2787e958d990972f62834c7083978ff7012e7095 (patch) | |
tree | d88f4a7ccae9eb1170902c15e1dd9a371869156e /src/main/java/de/hysky | |
parent | db8aa8cf1b8978099379187213f2b78535291066 (diff) | |
download | Skyblocker-2787e958d990972f62834c7083978ff7012e7095.tar.gz Skyblocker-2787e958d990972f62834c7083978ff7012e7095.tar.bz2 Skyblocker-2787e958d990972f62834c7083978ff7012e7095.zip |
greatly improve the config ui
improve the layout and use of the config ui to be close to its final state hopefully
Diffstat (limited to 'src/main/java/de/hysky')
4 files changed, 88 insertions, 80 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java index b3cf1200..c38271f5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java @@ -88,8 +88,8 @@ public class ChatRuleConfigScreen extends Screen { filterLabelTextPos = currentPos; lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.filter")) + SPACER_X; filterInput = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); - filterInput.setText(chatRule.getFilter()); filterInput.setMaxLength(96); + filterInput.setText(chatRule.getFilter()); currentPos = IntIntPair.of(currentPos.leftInt(),currentPos.rightInt() + SPACER_Y); lineXOffset = 0; @@ -168,13 +168,13 @@ public class ChatRuleConfigScreen extends Screen { replaceMessageLabelTextPos = currentPos; lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace")) + SPACER_X; replaceMessageInput = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); - replaceMessageInput.setText(chatRule.getReplaceMessage()); replaceMessageInput.setMaxLength(96); + replaceMessageInput.setText(chatRule.getReplaceMessage()); finishButton = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.finish"), a -> { close(); }) - .position((int) (this.width * 0.66), this.height - SPACER_Y) + .position(this.width - 75 - SPACER_Y, this.height - SPACER_Y) .size(75,20) .build(); @@ -193,7 +193,7 @@ public class ChatRuleConfigScreen extends Screen { /** * works out the width of the maximum line - * @return + * @return the max used width */ private int getMaxUsedWidth() { if (client == null) return 0; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java index 07397f98..347e40a0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java @@ -4,17 +4,19 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; +import net.minecraft.client.gui.screen.ConfirmScreen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.screen.narration.NarrationPart; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ElementListWidget; +import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.List; -public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfigListWidget.chatRuleConfigEntry> { +public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfigListWidget.AbstractChatRuleEntry> { private final ChatRulesConfigScreen screen; @@ -25,6 +27,8 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig super(minecraftClient, width, height, y, itemHeight); this.screen = screen; this.hasChanged = false; + //add labels + addEntry(new chatRuleLabelsEntry()); //add entry fall all existing rules for (int i = 0; i < (long) ChatRulesHandler.chatRuleList.size(); i++){ addEntry(new chatRuleConfigEntry(i)); @@ -41,20 +45,16 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig return super.getScrollbarPositionX() + 50; } - @Override - public void setSelected(@Nullable ChatRulesConfigListWidget.chatRuleConfigEntry entry) { - super.setSelected(entry); - screen.updateButtons(); - } + protected void addRuleAfterSelected() { hasChanged = true; int newIndex = children().indexOf(getSelectedOrNull()) + 1; ChatRulesHandler.chatRuleList.add(newIndex, new ChatRule()); - children().add(newIndex, new chatRuleConfigEntry(newIndex)); + children().add(newIndex + 1, new chatRuleConfigEntry(newIndex)); } - protected boolean removeEntry(chatRuleConfigEntry entry) { + protected boolean removeEntry(AbstractChatRuleEntry entry) { hasChanged = true; return super.removeEntry(entry); } @@ -67,28 +67,52 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig protected boolean hasChanges(){ - return (hasChanged || children().stream().anyMatch(chatRuleConfigEntry::hasChange)); + return (hasChanged || children().stream().filter(chatRuleConfigEntry.class::isInstance).map(chatRuleConfigEntry.class::cast).anyMatch(chatRuleConfigEntry::isChange)); + } + + protected static abstract class AbstractChatRuleEntry extends Entry<ChatRulesConfigListWidget.AbstractChatRuleEntry> { } - public class chatRuleConfigEntry extends Entry<chatRuleConfigEntry> { + private class chatRuleLabelsEntry extends AbstractChatRuleEntry { - private static final int SPACING = 20; + @Override + public List<? extends Selectable> selectableChildren() { + return List.of(); + } + + @Override + public List<? extends Element> children() { + return List.of(); + } + + @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(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleName"), width / 2 - 125, y + 5, 0xFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleEnabled"), width / 2, y + 5, 0xFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.modify"), width / 2 + 100, y + 5, 0xFFFFFF); + } + } + private class chatRuleConfigEntry extends AbstractChatRuleEntry { //data private int chatRuleIndex; private ChatRule chatRule; + private final List<? extends Element> children; + - private final List<? extends Element> children; + //widgets + private final ButtonWidget enabledButton; + private final ButtonWidget openConfigButton; + private final ButtonWidget deleteButton; - //widgets - private final ButtonWidget enabledWidget; - private final ButtonWidget openConfigWidget; //text locations - private final int labelX; - private final int enabledX; + private final int nameX = width / 2 - 125; + + //saved data + private double oldScrollAmount = 0; public chatRuleConfigEntry(int chatRuleIndex) { @@ -96,48 +120,57 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig this.chatRule = ChatRulesHandler.chatRuleList.get(chatRuleIndex); //initialize the widgets - int currentX = width / 2 - 160; - labelX = currentX; - currentX += client.textRenderer.getWidth("Rule: \"" + chatRule.getName() + "\""); - currentX += SPACING; //spacer - - enabledX = currentX; - currentX += client.textRenderer.getWidth("Enabled:"); - enabledWidget = ButtonWidget.builder(enabledButtonText() , a -> { + + enabledButton = ButtonWidget.builder(enabledButtonText() , a -> { toggleEnabled(); }) .size(50,20) - .position(currentX,5) + .position(width / 2 - 25,5) .build() ; - currentX += 50; - currentX += SPACING; //spacer - openConfigWidget = ButtonWidget.builder(Text.of("Edit Rule"), a -> { + openConfigButton = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.editRule"), a -> { client.setScreen(new ChatRuleConfigScreen(screen, chatRuleIndex)); }) - .size(100,20) - .position(currentX,5) + .size(50,20) + .position(width / 2 + 45,5) .build() ; + deleteButton = ButtonWidget.builder(Text.translatable("selectServer.delete"), a -> { + oldScrollAmount = getScrollAmount(); + client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", chatRule.getName()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); + }) + .size(50,20) + .position(width / 2 + 105,5) + .build() + ; + - children = List.of(enabledWidget, openConfigWidget); + children = List.of(enabledButton, openConfigButton, deleteButton); } private Text enabledButtonText() { if (chatRule.getEnabled()){ - return Text.literal("TRUE").withColor(Color.green.getRGB()); + return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.true").withColor(Color.green.getRGB()); }else { - return Text.literal("FALSE").withColor(Color.red.getRGB()); + return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.false").withColor(Color.red.getRGB()); } } private void toggleEnabled() { hasChanged = true; chatRule.setEnabled(!chatRule.getEnabled()); - enabledWidget.setMessage(enabledButtonText()); + enabledButton.setMessage(enabledButtonText()); } - + private void deleteEntry(boolean confirmedAction) { + if (confirmedAction){ + //delete this + ChatRulesHandler.chatRuleList.remove(chatRuleIndex); + removeEntry(this); + } + client.setScreen(screen); + setScrollAmount(oldScrollAmount); + } @Override public List<? extends Selectable> selectableChildren() { @@ -162,16 +195,17 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig @Override public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { //todo get strings form en_us.json //widgets - enabledWidget.setY(y); - enabledWidget.render(context, mouseX, mouseY, tickDelta); - openConfigWidget.setY(y); - openConfigWidget.render(context, mouseX, mouseY, tickDelta); + enabledButton.setY(y); + enabledButton.render(context, mouseX, mouseY, tickDelta); + openConfigButton.setY(y); + openConfigButton.render(context, mouseX, mouseY, tickDelta); + deleteButton.setY(y); + deleteButton.render(context, mouseX, mouseY, tickDelta); //text - context.drawTextWithShadow(client.textRenderer, "Rule: \"" + chatRule.getName() + "\"", labelX, y + 5, 0xFFFFFF); - context.drawTextWithShadow(client.textRenderer, "enabled:", enabledX, y + 5, 0xFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, chatRule.getName(), nameX, y + 5, 0xFFFFFF); } - public boolean hasChange() { + public boolean isChange() { return (!chatRule.getEnabled().equals(ChatRulesHandler.chatRuleList.get(chatRuleIndex).getEnabled())); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java index bbc3f14b..4890d7cd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java @@ -14,10 +14,8 @@ import net.minecraft.text.Text; public class ChatRulesConfigScreen extends Screen { private ChatRulesConfigListWidget chatRulesConfigListWidget; - private ButtonWidget buttonDelete; private ButtonWidget buttonNew; private ButtonWidget buttonDone; - private double scrollAmount; private final Screen parent; public ChatRulesConfigScreen() { @@ -25,7 +23,7 @@ public class ChatRulesConfigScreen extends Screen { } public ChatRulesConfigScreen(Screen parent) { - super(Text.translatable("skyblocker.shortcuts.config")); //todo correct name for whole code + super(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen")); this.parent = parent; } @@ -41,44 +39,24 @@ public class ChatRulesConfigScreen extends Screen { addDrawableChild(chatRulesConfigListWidget); GridWidget gridWidget = new GridWidget(); gridWidget.getMainPositioner().marginX(5).marginY(2); - GridWidget.Adder adder = gridWidget.createAdder(2); - buttonDelete = ButtonWidget.builder(Text.translatable("selectServer.delete"), button -> { - ChatRulesConfigListWidget.chatRuleConfigEntry currentChatRuleConfigEntry = chatRulesConfigListWidget.getSelectedOrNull(); - if (client != null && currentChatRuleConfigEntry != null ) { - scrollAmount = chatRulesConfigListWidget.getScrollAmount(); - client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.translatable("skyblocker.shortcuts.deleteWarning", currentChatRuleConfigEntry), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); //todo load text for this config - } - }).build(); - adder.add(buttonDelete); - buttonNew = ButtonWidget.builder(Text.translatable("skyblocker.shortcuts.new"), buttonNew -> chatRulesConfigListWidget.addRuleAfterSelected()).build(); - adder.add(buttonNew); + GridWidget.Adder adder = gridWidget.createAdder(3); adder.add(ButtonWidget.builder(ScreenTexts.CANCEL, button -> { if (client != null) { close(); } }).build()); + buttonNew = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.new"), buttonNew -> chatRulesConfigListWidget.addRuleAfterSelected()).build(); + adder.add(buttonNew); buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { chatRulesConfigListWidget.saveRules(); if (client != null) { close(); } - }).tooltip(Tooltip.of(Text.translatable("skyblocker.shortcuts.commandSuggestionTooltip"))).build(); + }).build(); adder.add(buttonDone); gridWidget.refreshPositions(); SimplePositioningWidget.setPos(gridWidget, 0, this.height - 64, this.width, 64); gridWidget.forEachChild(this::addDrawableChild); - updateButtons(); - } - - private void deleteEntry(boolean confirmedAction) { - if (client != null) { - ChatRulesConfigListWidget.chatRuleConfigEntry currentChatRuleConfigEntry = chatRulesConfigListWidget.getSelectedOrNull(); - if (confirmedAction && currentChatRuleConfigEntry != null) { - chatRulesConfigListWidget.removeEntry(currentChatRuleConfigEntry); - } - client.setScreen(this); // Re-inits the screen and keeps the old instance of ShortcutsConfigListWidget - chatRulesConfigListWidget.setScrollAmount(scrollAmount); - } } @Override @@ -101,8 +79,4 @@ public class ChatRulesConfigScreen extends Screen { this.client.setScreen(parent); } } - - protected void updateButtons() { - buttonDelete.active = chatRulesConfigListWidget.getSelectedOrNull() != null; - } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java index 3e933f1a..035e7e8f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java @@ -69,7 +69,7 @@ public class ChatRulesHandler { if (!Utils.isOnSkyblock()) return true; //do not work not on skyblock if (overlay) return true; //ignore messages in overlay String plain = trimItemColor(message.getString()); - for (ChatRule rule : chatRuleList) { + for (ChatRule rule : chatRuleList) { if (rule.isMatch(plain)) { //get a replacement message Text newMessage; @@ -77,7 +77,7 @@ public class ChatRulesHandler { newMessage = Text.of(rule.getReplaceMessage()); } else { - newMessage =message; + newMessage = message; } if (rule.getShowAnnouncement()){ |