aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorolim <bobq4582@gmail.com>2024-02-16 21:18:16 +0000
committerolim <bobq4582@gmail.com>2024-02-16 21:18:16 +0000
commit2787e958d990972f62834c7083978ff7012e7095 (patch)
treed88f4a7ccae9eb1170902c15e1dd9a371869156e /src/main/java/de/hysky
parentdb8aa8cf1b8978099379187213f2b78535291066 (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java120
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java36
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java4
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()){