diff options
| author | olim <bobq4582@gmail.com> | 2024-02-18 11:48:58 +0000 | 
|---|---|---|
| committer | olim <bobq4582@gmail.com> | 2024-02-18 11:48:58 +0000 | 
| commit | 1aa1a1328f91f6cab39a958396a7eb854ad2ca13 (patch) | |
| tree | a9aee6a974f47afd99f49620d838fbdbe7d70abc /src | |
| parent | 9bd0c579527dd973862ad74167b9aec0f67c6b8d (diff) | |
| download | Skyblocker-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
Diffstat (limited to 'src')
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 | 
