aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorolim <bobq4582@gmail.com>2024-02-18 11:48:58 +0000
committerolim <bobq4582@gmail.com>2024-02-18 11:48:58 +0000
commit1aa1a1328f91f6cab39a958396a7eb854ad2ca13 (patch)
treea9aee6a974f47afd99f49620d838fbdbe7d70abc
parent9bd0c579527dd973862ad74167b9aec0f67c6b8d (diff)
downloadSkyblocker-1aa1a1328f91f6cab39a958396a7eb854ad2ca13.tar.gz
Skyblocker-1aa1a1328f91f6cab39a958396a7eb854ad2ca13.tar.bz2
Skyblocker-1aa1a1328f91f6cab39a958396a7eb854ad2ca13.zip
add text style to the replacement text
make it so styles can be added to the replacement text
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java36
-rw-r--r--src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandlerTest.java35
6 files changed, 78 insertions, 14 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java
index e6300808..0ee3c2c5 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java
@@ -1,16 +1,13 @@
package de.hysky.skyblocker.skyblock.chat;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.dwarven.CrystalsHudConfigScreen;
-import de.hysky.skyblocker.utils.scheduler.Scheduler;
-import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
-import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
+
public class ChatRuleAnnouncementScreen {
private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
@@ -25,8 +22,11 @@ public class ChatRuleAnnouncementScreen {
}
render(context, tickDelta);
});
+
}
+
+
/**
* renders {@link ChatRuleAnnouncementScreen#text} to the middle of the top of the screen.
* @param context render context
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 f46af79b..7d2280f0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java
@@ -190,7 +190,11 @@ public class ChatRuleConfigScreen extends Screen {
}
MutableText newText = getSoundName();
soundsToggle.setMessage(newText);
- chatRule.setCustomSound(soundsLookup.get(newText));
+ SoundEvent sound = soundsLookup.get(newText);
+ chatRule.setCustomSound(sound);
+ if (client.player != null && sound != null) {
+ client.player.playSound(sound, 100f, 0.1f);
+ }
})
.position(currentPos.leftInt() + lineXOffset, currentPos.rightInt())
.size(100,20)
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 4e8038d6..84e9082d 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java
@@ -11,7 +11,6 @@ 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;
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 2cbb735b..11ea5a7a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java
@@ -1,10 +1,8 @@
package de.hysky.skyblocker.skyblock.chat;
-import de.hysky.skyblocker.skyblock.shortcut.Shortcuts;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ConfirmScreen;
import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.GridWidget;
import net.minecraft.client.gui.widget.SimplePositioningWidget;
@@ -53,7 +51,11 @@ public class ChatRulesConfigScreen extends Screen {
close();
}
}).build();
+ adder.add(buttonDone);
+ gridWidget.refreshPositions();
+ SimplePositioningWidget.setPos(gridWidget, 0, this.height - 64, this.width, 64);
gridWidget.forEachChild(this::addDrawableChild);
+
}
@Override
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 29ee1386..4afedc52 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
@@ -6,8 +6,10 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.sound.SoundEvents;
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Style;
import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,13 +71,13 @@ public class ChatRulesHandler {
private static boolean checkMessage(Text message, Boolean overlay) {
if (!Utils.isOnSkyblock()) return true; //do not work not on skyblock
if (overlay) return true; //ignore messages in overlay
- String plain = trimItemColor(message.getString());
+ String plain = Formatting.strip(message.getString());
for (ChatRule rule : chatRuleList) {
if (rule.isMatch(plain)) {
//get a replacement message
Text newMessage;
if (!rule.getReplaceMessage().isBlank()) {
- newMessage = Text.of(rule.getReplaceMessage());
+ newMessage = formatText(rule.getReplaceMessage());
}
else {
newMessage = message;
@@ -106,9 +108,31 @@ public class ChatRulesHandler {
}
return true;
}
- private static String trimItemColor(String str) {
- if (str.isBlank()) return str;
- return str.replaceAll("ยง[0-9a-g]", "");
+
+ /**
+ * Converts a string with color codes into a formatted Text object
+ * @param codedString the string with color codes in
+ * @return formatted text
+ */
+
+ protected static MutableText formatText(String codedString) {
+ if (codedString.contains(String.valueOf(Formatting.FORMATTING_CODE_PREFIX)) || codedString.contains("&")){
+ MutableText newText = Text.literal("");
+ String[] parts = codedString.split("[" + Formatting.FORMATTING_CODE_PREFIX +"&]");
+ Style style = Style.EMPTY;
+ for (String part : parts) {
+ if (part.isEmpty()) continue;
+ Formatting formatting = Formatting.byCode(part.charAt(0));
+ if (formatting != null){
+ style = style.withFormatting(formatting);
+ Text.literal(part.substring(1)).getWithStyle(style).forEach(newText::append);
+ } else {
+ newText.append(Text.of(part));
+ }
+ }
+ return newText;
+ }
+ return Text.literal(codedString);
}
}
diff --git a/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandlerTest.java b/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandlerTest.java
new file mode 100644
index 00000000..2c1b7956
--- /dev/null
+++ b/src/test/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandlerTest.java
@@ -0,0 +1,35 @@
+package de.hysky.skyblocker.skyblock.chat;
+
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Style;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.awt.*;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ChatRulesHandlerTest {
+
+ @Test
+ void formatText() {
+ //generate test text
+ MutableText testText = Text.empty();
+ Style style = Style.EMPTY.withFormatting(Formatting.DARK_BLUE);
+ Text.of("test").getWithStyle(style).forEach(testText::append);
+ style = style.withFormatting(Formatting.UNDERLINE);
+ Text.of("line").getWithStyle(style).forEach(testText::append);
+ style = style.withFormatting(Formatting.DARK_GREEN);
+ Text.of("dark green").getWithStyle(style).forEach(testText::append);
+ style = style.withFormatting(Formatting.ITALIC);
+ Text.of("italic").getWithStyle(style).forEach(testText::append);
+
+ //generated text
+ MutableText text = ChatRulesHandler.formatText("&1test&nline&2dark green&oitalic");
+
+ Assertions.assertEquals(text,testText);
+
+ }
+} \ No newline at end of file