diff --git a/.github/workflows/discord_publish.yml b/.github/workflows/discord_publish.yml index 1ba42fd..cc6cfa4 100644 --- a/.github/workflows/discord_publish.yml +++ b/.github/workflows/discord_publish.yml @@ -16,4 +16,10 @@ jobs: if: | !contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.pull_request.title, '[ci skip]') env: - discord_webhook: ${{ secrets.DISCORD_WEBHOOK }} \ No newline at end of file + discord_webhook: ${{ secrets.DISCORD_WEBHOOK }} + action_url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + - name: Capture build artifacts + uses: actions/upload-artifact@v2 + with: + name: Artifacts + path: build/libs/ \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 247cada..7f83444 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -26,7 +26,7 @@ jobs: modrinth_token: ${{ secrets.MODRINTH_TOKEN }} curseforge_token: ${{ secrets.CURSEFORGE_TOKEN }} github_token: ${{ secrets.GH_API_KEY }} - discord_release_webhook: ${{ secrets.DISCORD_ANNOUNCEMENT_WEBHOOK }} + discord_release_webhook: ${{ secrets.DISCORD_WEBHOOK }} - name: Capture build artifacts uses: actions/upload-artifact@v2 with: diff --git a/build.gradle b/build.gradle index 9be2ae2..ed6824d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,13 @@ plugins { - id 'fabric-loom' version '0.11-SNAPSHOT' + id 'fabric-loom' version '1.0-SNAPSHOT' id 'maven-publish' id "io.freefair.lombok" version "6.0.0-m2" - id "com.diffplug.spotless" version "5.17.1" } apply from: 'https://raw.githubusercontent.com/DarkKronicle/GradleScripts/main/gradle/publish.gradle' -sourceCompatibility = JavaVersion.VERSION_16 -targetCompatibility = JavaVersion.VERSION_16 +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 archivesBaseName = project.archives_base_name version = "${project.minecraft_version}-${project.mod_version}" @@ -22,6 +21,7 @@ if (file("extra.properties").exists()) { repositories { mavenCentral() maven { url 'https://masa.dy.fi/maven' } + maven { url 'https://maven.terraformersmc.com/releases/' } maven { url 'https://jitpack.io' } } @@ -30,8 +30,8 @@ dependencies { mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" - modImplementation "fi.dy.masa.malilib:malilib-fabric-1.19.0:${project.malilib_version}" - modCompileOnly "io.github.prospector:modmenu:1.16.8" + modImplementation "fi.dy.masa.malilib:malilib-fabric-1.19.3:${project.malilib_version}" + modCompileOnly "com.terraformersmc:modmenu:5.0.1" implementation "com.github.DarkKronicle.Konstruct:addons:${project.konstruct_version}" implementation "com.github.DarkKronicle.Konstruct:core:${project.konstruct_version}" @@ -89,19 +89,6 @@ assemble { dependsOn 'downloadExtra' } -spotless { - ratchetFrom 'origin/main' - format 'misc', { - // define the files to apply `misc` to - target '*.gradle', '*.md', '.gitignore' - - // define the steps to apply to those files - trimTrailingWhitespace() - indentWithTabs() // or spaces. Takes an integer argument if you don't like 4 - endWithNewline() - } -} - // configure the maven publication publishing { publications { diff --git a/gradle.properties b/gradle.properties index 098f410..2777ef3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,15 @@ org.gradle.jvmargs=-Xmx1G -minecraft_version=1.19.2 -yarn_mappings=1.19.1+build.1 -loader_version=0.14.8 -fabric_api_version=0.58.5+1.19.1 +minecraft_version=1.19.3 +yarn_mappings=1.19.3+build.2 +loader_version=0.14.11 +fabric_api_version=0.68.1+1.19.3 -mod_version=1.5.8 +mod_version=1.5.9 maven_group=io.github.darkkronicle archives_base_name=AdvancedChatCore -malilib_version=0.13.0 +malilib_version=0.14.0 konstruct_version=2.0.3-build1 mxparser_version=4.4.2 owo_version=2.0.0 diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/InitHandler.java b/src/main/java/io/github/darkkronicle/advancedchatcore/InitHandler.java index cc47dc5..5b52e72 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/InitHandler.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/InitHandler.java @@ -26,14 +26,13 @@ import io.github.darkkronicle.advancedchatcore.util.StringInsert; import io.github.darkkronicle.advancedchatcore.util.StringMatch; import io.github.darkkronicle.advancedchatcore.util.TextUtil; -import java.util.*; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.BufferRenderer; import net.minecraft.text.Text; +import java.util.*; + @Environment(EnvType.CLIENT) public class InitHandler implements IInitializationHandler { @@ -125,10 +124,10 @@ public void registerModHandlers() { client.currentScreen.removed(); } client.currentScreen = new AdvancedChatScreen(true); - BufferRenderer.unbindAll(); client.mouse.unlockCursor(); client.currentScreen.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); client.skipGameRender = false;; + client.updateWindowTitle(); return true; }); InputHandler.getInstance().add("core_general", ConfigStorage.Hotkeys.TOGGLE_PERMANENT.config, (action, key) -> { diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedChatScreen.java b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedChatScreen.java index ca31e1d..33321fc 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedChatScreen.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedChatScreen.java @@ -7,8 +7,6 @@ */ package io.github.darkkronicle.advancedchatcore.chat; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.brigadier.tree.CommandNode; import fi.dy.masa.malilib.gui.GuiBase; import fi.dy.masa.malilib.gui.button.ButtonBase; import fi.dy.masa.malilib.util.KeyCodes; @@ -18,35 +16,22 @@ import io.github.darkkronicle.advancedchatcore.gui.IconButton; import io.github.darkkronicle.advancedchatcore.interfaces.AdvancedChatScreenSection; import io.github.darkkronicle.advancedchatcore.util.Color; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.function.Function; - import io.github.darkkronicle.advancedchatcore.util.RowList; import lombok.Getter; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.screen.ChatPreviewBackground; -import net.minecraft.client.network.ChatPreviewer; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.client.option.ChatPreviewMode; import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.option.ServerList; -import net.minecraft.client.toast.SystemToast; import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.command.CommandSource; -import net.minecraft.command.argument.DecoratableArgumentType; import net.minecraft.text.MutableText; -import net.minecraft.text.OrderedText; import net.minecraft.text.Style; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; -import net.minecraft.util.Util; import net.minecraft.util.math.MathHelper; -import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; public class AdvancedChatScreen extends GuiBase { @@ -72,18 +57,6 @@ public class AdvancedChatScreen extends GuiBase { @Getter private final RowList leftSideButtons = new RowList<>(); - // TODO chat preview somewhere else - private static final Text CHAT_PREVIEW_INPUT_TEXT = Text.translatable("chat.previewInput", Text.translatable("key.keyboard.enter")); - - - @Getter - private ChatPreviewer chatPreviewer; - - @Getter - private boolean missingPreview; - - private final ChatPreviewBackground chatPreviewBackground = new ChatPreviewBackground(); - @Override protected void closeGui(boolean showParent) { if (ConfigStorage.ChatScreen.PERSISTENT_TEXT.config.getBooleanValue()) { @@ -139,10 +112,8 @@ public boolean charTyped(char charIn, int modifiers) { public void initGui() { super.initGui(); - this.chatPreviewer = new ChatPreviewer(this.client); this.rightSideButtons.clear(); this.leftSideButtons.clear(); - this.client.keyboard.setRepeatEvents(true); resetCurrentMessage(); this.chatField = new AdvancedTextField( @@ -212,17 +183,7 @@ protected MutableText getNarrationMessage() { if (startHistory >= 0) { setChatFromHistory(-startHistory - 1); } - ServerInfo serverInfo = this.client.getCurrentServerEntry(); - if (serverInfo != null && this.client.options.getChatPreview().getValue() == ChatPreviewMode.LIVE) { - ServerInfo.ChatPreview chatPreview = serverInfo.getChatPreview(); - if (chatPreview != null && serverInfo.shouldPreviewChat() && chatPreview.showToast()) { - ServerList.updateServerListEntry(serverInfo); - } - } - if (client.options.getChatPreview().getValue() == ChatPreviewMode.CONFIRM) { - this.missingPreview = this.originalChatText.startsWith("/") && !this.client.player.hasSignedArgument(this.originalChatText.substring(1)); - } } public void resize(MinecraftClient client, int width, int height) { @@ -236,7 +197,6 @@ public void resize(MinecraftClient client, int width, int height) { @Override public void removed() { - this.client.keyboard.setRepeatEvents(false); for (AdvancedChatScreenSection section : sections) { section.removed(); } @@ -244,44 +204,6 @@ public void removed() { public void tick() { this.chatField.tick(); - this.chatPreviewer.tryRequestPending(); - } - - private void updatePreviewer(String string) { - String text = string.trim(); - if (this.shouldPreviewChat()) { - this.tryRequestPreview(text); - } else { - this.chatPreviewer.disablePreview(); - } - } - - private void tryRequestPreview(String string) { - if (string.startsWith("/")) { - this.tryRequestCommandPreview(string); - } else { - this.tryRequestChatPreview(string); - } - } - - private void tryRequestChatPreview(String string) { - this.chatPreviewer.tryRequest(string); - } - - private void tryRequestCommandPreview(String chatText) { - // TODO fix this - this.chatPreviewer.disablePreview(); - } - - private boolean shouldPreviewChat() { - if (this.client.player == null) { - return false; - } else if (this.client.options.getChatPreview().getValue() == ChatPreviewMode.OFF) { - return false; - } else { - ServerInfo serverInfo = this.client.getCurrentServerEntry(); - return serverInfo != null && serverInfo.shouldPreviewChat(); - } } private void onChatFieldUpdate(String chatText) { @@ -289,12 +211,6 @@ private void onChatFieldUpdate(String chatText) { for (AdvancedChatScreenSection section : sections) { section.onChatFieldUpdate(chatText, string); } - if (client.options.getChatPreview().getValue() == ChatPreviewMode.LIVE) { - this.updatePreviewer(string); - } else if (client.options.getChatPreview().getValue() == ChatPreviewMode.CONFIRM && !this.chatPreviewer.equalsLastPreviewed(string)) { - this.missingPreview = string.startsWith("/") && !this.client.player.hasSignedArgument(string.substring(1)); - this.chatPreviewer.tryRequest(""); - } } @Override @@ -325,14 +241,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (keyCode == KeyCodes.KEY_ENTER || keyCode == KeyCodes.KEY_KP_ENTER) { String string = this.chatField.getText().trim(); // Strip message and send - if (this.client.options.getChatPreview().getValue() == ChatPreviewMode.CONFIRM && !this.missingPreview) { - if (!this.chatPreviewer.equalsLastPreviewed(string)) { - this.updatePreviewer(string); - return false; - } - } - Text text = getPreviewText(); - MessageSender.getInstance().sendMessage(string, text); + MessageSender.getInstance().sendMessage(string); this.chatField.setText(""); last = ""; // Exit @@ -484,100 +393,11 @@ public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partia if (style != null && style.getHoverEvent() != null) { this.renderTextHoverEffect(matrixStack, style, mouseX, mouseY); } - ChatPreviewBackground.RenderData renderData = this.chatPreviewBackground.computeRenderData(Util.getMeasuringTimeMs(), this.getPreviewScreenText()); - if (renderData.preview() != null) { - this.renderChatPreview(matrixStack, renderData.preview(), renderData.alpha(), client.getProfileKeys().getSigner() != null); - } - } - - @Nullable - protected Text getPreviewScreenText() { - String string = this.chatField.getText(); - if (string.isBlank()) { - return null; - } else { - Text text = this.getPreviewText(); - return client.options.getChatPreview().getValue() == ChatPreviewMode.CONFIRM && !this.missingPreview - ? (Text) Objects.requireNonNullElse( - text, this.chatPreviewer.equalsLastPreviewed(string) && !string.startsWith("/") ? Text.literal(string) : CHAT_PREVIEW_INPUT_TEXT - ) - : text; - } - } - - public void renderChatPreview(MatrixStack matrices, Text previewText, float alpha, boolean signable) { - int opacity = (int)(255.0 * (this.client.options.getChatOpacity().getValue() * 0.9F + 0.1F) * (double)alpha); - int j = (int)( - (double)(this.chatPreviewer.cannotConsumePreview() ? 127 : 255) * this.client.options.getTextBackgroundOpacity().getValue() * (double)alpha - ); - int width = this.getPreviewWidth(); - List list = this.wrapPreviewText(previewText); - int height = this.getPreviewHeight(list); - int topY = this.getPreviewTop(height); - RenderSystem.enableBlend(); - matrices.push(); - matrices.translate(this.getPreviewLeft(), topY, 0.0); - fill(matrices, 0, 0, width, height, j << 24); - if (opacity > 0) { - matrices.translate(2.0, 2.0, 0.0); - - for (int n = 0; n < list.size(); ++n) { - OrderedText orderedText = list.get(n); - int o = n * 9; - this.textRenderer.drawWithShadow(matrices, orderedText, 0.0F, (float)o, opacity << 24 | 16777215); - } - } - - matrices.pop(); - RenderSystem.disableBlend(); - if (signable && this.chatPreviewer.getPreviewText() != null) { - int n = this.chatPreviewer.cannotConsumePreview() ? 15118153 : 7844841; - int p = (int)(255.0F * alpha); - matrices.push(); - fill(matrices, 0, topY, 2, this.getPreviewBottom(), p << 24 | n); - matrices.pop(); - } - - } - - @Nullable - private Text getPreviewText() { - return Util.map(this.chatPreviewer.getPreviewText(), ChatPreviewer.Response::previewText); - } - - private List wrapPreviewText(Text preview) { - return this.textRenderer.wrapLines(preview, this.getPreviewWidth()); - } - - private int getPreviewWidth() { - return this.client.currentScreen.width - 4; - } - - private int getPreviewHeight(List lines) { - return Math.max(lines.size(), 1) * 9 + 4; - } - - private int getPreviewBottom() { - return this.client.currentScreen.height - 15; - } - - private int getPreviewTop(int previewHeight) { - return this.getPreviewBottom() - previewHeight; - } - - private int getPreviewLeft() { - return 2; - } - - private int getPreviewRight() { - return this.client.currentScreen.width - 2; } @Override - protected void drawScreenBackground(int mouseX, int mouseY) {} + protected void drawScreenBackground(int mouseX, int mouseY) { - public boolean isPauseScreen() { - return false; } private void setText(String text) { diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedTextField.java b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedTextField.java index 534fee9..f5ac25f 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedTextField.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/AdvancedTextField.java @@ -15,13 +15,10 @@ import io.github.darkkronicle.advancedchatcore.util.StyleFormatter; import io.github.darkkronicle.advancedchatcore.util.TextBuilder; import io.github.darkkronicle.advancedchatcore.util.TextUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiFunction; - import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; @@ -31,6 +28,10 @@ import net.minecraft.util.math.MathHelper; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + public class AdvancedTextField extends TextFieldWidget { private final static int MAX_HISTORY = 50; @@ -144,8 +145,8 @@ public void setSuggestion(@Nullable String suggestion) { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - int renderY = y - (renderLines.size() - 1) * (textRenderer.fontHeight + 2); - if (mouseY < renderY - 2 || mouseY > y + height + 2 || mouseX < x - 2 || mouseX > x + width + 4) { + int renderY = getY() - (renderLines.size() - 1) * (textRenderer.fontHeight + 2); + if (mouseY < renderY - 2 || mouseY > getY() + height + 2 || mouseX < getX() - 2 || mouseX > getX() + width + 4) { return false; } return super.mouseClicked(mouseX, mouseY, button); @@ -157,7 +158,7 @@ public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float del int cursor = getCursor(); int cursorRow = renderLines.size() - 1; boolean renderCursor = this.isFocused() && focusedTicks / 6 % 2 == 0; - int renderY = y - (renderLines.size() - 1) * (textRenderer.fontHeight + 2); + int renderY = getY() - (renderLines.size() - 1) * (textRenderer.fontHeight + 2); int endX = 0; int charCount = 0; int cursorX = -1; @@ -173,7 +174,9 @@ public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float del selStart = this.selectionEnd; selEnd = this.selectionStart; } - fill(matrices, x - 2, renderY - 2, x + width + 4, y + height + 4, ConfigStorage.ChatScreen.COLOR.config.get().color()); + int x = getX(); + int y = getY() ; + fill(matrices, getX() - 2, renderY - 2, getX() + width + 4, getY() + height + 4, ConfigStorage.ChatScreen.COLOR.config.get().color()); for (int line = 0; line < renderLines.size(); line++) { Text text = renderLines.get(line); if (cursor >= charCount && cursor < text.getString().length() + charCount) { @@ -225,6 +228,8 @@ public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float del } private void drawSelectionHighlight(int x1, int y1, int x2, int y2) { + int x = getX(); + int y = getY(); int i; if (x1 < x2) { i = x1; @@ -236,15 +241,15 @@ private void drawSelectionHighlight(int x1, int y1, int x2, int y2) { y1 = y2; y2 = i; } - if (x2 > this.x + this.width) { - x2 = this.x + this.width; + if (x2 > x + this.width) { + x2 = x + this.width; } - if (x1 > this.x + this.width) { - x1 = this.x + this.width; + if (x1 > x + this.width) { + x1 = x + this.width; } Tessellator tessellator = Tessellator.getInstance(); BufferBuilder bufferBuilder = tessellator.getBuffer(); - RenderSystem.setShader(GameRenderer::getPositionShader); + RenderSystem.setShader(GameRenderer::getPositionProgram); RenderSystem.setShaderColor(0.0f, 0.0f, 1.0f, 1.0f); RenderSystem.disableTexture(); RenderSystem.enableColorLogicOp(); @@ -356,4 +361,9 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } return true; } + + @Override + public void appendClickableNarrations(NarrationMessageBuilder builder) { + // Crashes here because Text is null + } } diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/MessageSender.java b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/MessageSender.java index 63b1e51..468493e 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/chat/MessageSender.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/chat/MessageSender.java @@ -9,12 +9,12 @@ import io.github.darkkronicle.advancedchatcore.AdvancedChatCore; import io.github.darkkronicle.advancedchatcore.interfaces.IStringFilter; +import net.minecraft.client.MinecraftClient; +import org.apache.logging.log4j.Level; + import java.util.ArrayList; import java.util.List; import java.util.Optional; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; -import org.apache.logging.log4j.Level; public class MessageSender { @@ -38,10 +38,6 @@ public void addFilter(IStringFilter filter, int index) { } public void sendMessage(String string) { - sendMessage(string, null); - } - - public void sendMessage(String string, Text text) { String unfiltered = string; for (IStringFilter filter : filters) { Optional filtered = filter.filter(string); @@ -61,9 +57,9 @@ public void sendMessage(String string, Text text) { if (client.player != null) { if (string.startsWith("/")) { - this.client.player.sendCommand(string.substring(1), text); + this.client.getNetworkHandler().sendChatCommand(string.substring(1)); } else { - this.client.player.sendChatMessage(string, text); + this.client.getNetworkHandler().sendChatMessage(string); } } } diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/finder/PatternFinder.java b/src/main/java/io/github/darkkronicle/advancedchatcore/finder/PatternFinder.java index b274608..8f52bba 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/finder/PatternFinder.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/finder/PatternFinder.java @@ -9,6 +9,8 @@ import io.github.darkkronicle.advancedchatcore.interfaces.IFinder; import io.github.darkkronicle.advancedchatcore.util.StringMatch; +import org.jetbrains.annotations.Nullable; + import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -16,19 +18,26 @@ public abstract class PatternFinder implements IFinder { + @Nullable public abstract Pattern getPattern(String toMatch); @Override public boolean isMatch(String input, String toMatch) { Pattern pattern = getPattern(toMatch); + if (pattern == null) { + return false; + } return pattern.matcher(input).find(); } @Override public List getMatches(String input, String toMatch) { + List matches = new ArrayList<>(); Pattern pattern = getPattern(toMatch); + if (pattern == null) { + return matches; + } Matcher matcher = pattern.matcher(input); - List matches = new ArrayList<>(); while (matcher.find()) { matches.add(new StringMatch(matcher.group(), matcher.start(), matcher.end())); } diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/finder/RegexFinder.java b/src/main/java/io/github/darkkronicle/advancedchatcore/finder/RegexFinder.java index 2259053..16e8fee 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/finder/RegexFinder.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/finder/RegexFinder.java @@ -7,6 +7,7 @@ */ package io.github.darkkronicle.advancedchatcore.finder; +import io.github.darkkronicle.advancedchatcore.AdvancedChatCore; import io.github.darkkronicle.advancedchatcore.util.*; import net.minecraft.text.ClickEvent; import net.minecraft.text.MutableText; @@ -18,12 +19,18 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; public class RegexFinder extends PatternFinder { @Override public Pattern getPattern(String toMatch) { - return Pattern.compile(toMatch); + try { + return Pattern.compile(toMatch); + } catch (PatternSyntaxException e) { + AdvancedChatCore.LOGGER.error("The regex " + toMatch + " is invalid!"); + return null; + } } @Override @@ -37,6 +44,9 @@ public List getMatches(Text input, String toMatch) { String string = input.getString(); Pattern pattern = getPattern(toMatch); + if (pattern == null) { + return new ArrayList<>(); + } Matcher matcher = pattern.matcher(string); List groups = optionalGroups.get().stream().map((match) -> match.match.substring(3, match.end - match.start - 1)).filter((match) -> match.startsWith("adv")).toList(); diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/mixin/MixinChatHud.java b/src/main/java/io/github/darkkronicle/advancedchatcore/mixin/MixinChatHud.java index e74d9a3..52ad941 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/mixin/MixinChatHud.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/mixin/MixinChatHud.java @@ -10,8 +10,6 @@ import io.github.darkkronicle.advancedchatcore.chat.AdvancedChatScreen; import io.github.darkkronicle.advancedchatcore.chat.MessageDispatcher; import io.github.darkkronicle.advancedchatcore.config.ConfigStorage; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.ChatHud; import net.minecraft.client.gui.hud.MessageIndicator; @@ -26,7 +24,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Environment(EnvType.CLIENT) @Mixin(value = ChatHud.class, priority = 1050) public class MixinChatHud { diff --git a/src/main/java/io/github/darkkronicle/advancedchatcore/util/SearchResult.java b/src/main/java/io/github/darkkronicle/advancedchatcore/util/SearchResult.java index 7865c18..124d654 100644 --- a/src/main/java/io/github/darkkronicle/advancedchatcore/util/SearchResult.java +++ b/src/main/java/io/github/darkkronicle/advancedchatcore/util/SearchResult.java @@ -9,15 +9,17 @@ import io.github.darkkronicle.advancedchatcore.finder.RegexFinder; import io.github.darkkronicle.advancedchatcore.interfaces.IFinder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.regex.Matcher; import lombok.Getter; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.text.Text; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** An object that holds information about a search. */ @Environment(EnvType.CLIENT) public class SearchResult { @@ -69,9 +71,12 @@ public StringMatch getGroup(StringMatch match, int num) { return match; } try { - // TODO abstract in some way to make it not cast a ton RegexFinder regex = (RegexFinder) finder; - Matcher matcher = regex.getPattern(input).matcher(match.match); + Pattern p = regex.getPattern(input); + if (p == null) { + return null; + } + Matcher matcher = p.matcher(match.match); String group = matcher.group(num); int start = matcher.start(num); int end = matcher.start(num); @@ -92,21 +97,27 @@ public StringMatch getGroup(StringMatch match, int num) { */ public String getGroupReplacements(String string, int matchIndex) { if (matchIndex >= 0) { - if (finder instanceof RegexFinder) { + if (finder instanceof RegexFinder regex) { try { - return ((RegexFinder) finder) - .getPattern(search) - .matcher(matches.get(matchIndex).match) - .replaceAll(string); + Pattern p = regex.getPattern(search); + if (p != null) { + return + p + .matcher(matches.get(matchIndex).match) + .replaceAll(string); + } } catch (Exception e) { // Didn't work } } return SearchUtils.replaceGroups(Collections.singletonList(matches.get(0)), string); } - if (finder instanceof RegexFinder) { + if (finder instanceof RegexFinder regex) { try { - ((RegexFinder) finder).getPattern(search).matcher(input).replaceAll(string); + Pattern p = regex.getPattern(search); + if (p != null) { + return p.matcher(input).replaceAll(string); + } } catch (Exception e) { // Did not work }