From 5b38c7e8ee4429070777ad3a923c693430e430ac Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:25:20 +0300 Subject: [PATCH 1/5] Add math teacher helper --- .../events/greatspook/MathTeacherHelper.java | 49 +++++++++++++++++++ .../assets/skyblocker/lang/en_us.json | 2 + 2 files changed, 51 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java diff --git a/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java new file mode 100644 index 0000000000..dad444ec50 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java @@ -0,0 +1,49 @@ +package de.hysky.skyblocker.skyblock.events.greatspook; + +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.utils.Calculator; +import de.hysky.skyblocker.utils.Constants; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.minecraft.screen.ScreenTexts; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.HoverEvent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + *
A helper class for the Math Teachers that can spawn after killing Primal Fears in the Great Spook event.
+ *It only shows the result and allows for easily copying rather than sending the result to chat to not breach any hypixel rules.
+ */ +public final class MathTeacherHelper { + private static final Pattern MATH_TEACHER_PATTERN = Pattern.compile("^QUICK MATHS! Solve: (.*)"); + + @Init + public static void init() { + ClientReceiveMessageEvents.MODIFY_GAME.register(MathTeacherHelper::onMessage); + } + + /** + * Appends the result of the math expression to the message and a copy to clipboard text for, well, copying the result to the clipboard. + */ + public static Text onMessage(Text message, boolean overlay) { + if (overlay) return message; + Matcher matcher = MATH_TEACHER_PATTERN.matcher(message.getString()); + if (!matcher.matches()) return message; + String expression = matcher.group(1).replace("x", "*"); // Hypixel uses x for multiplication while our calculator uses * + String result = "%.0f".formatted(Calculator.calculate(expression)); + return ((MutableText) message).append(" = ") + .append(Text.literal(result) + .formatted(Formatting.AQUA)) + .append(ScreenTexts.SPACE) + .append(Text.translatable("text.skyblocker.clickToCopy") + .formatted(Formatting.GREEN) + .styled(style -> + style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, result)) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Constants.PREFIX.get().append(Text.translatable("text.skyblocker.clickToCopy.@Tooltip")))) + )); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index eea3fd24b0..a7c19836da 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -28,6 +28,8 @@ "text.skyblocker.translate": "Translate", "text.skyblocker.modrinth": "Modrinth", "text.skyblocker.discord": "Discord", + "text.skyblocker.clickToCopy": "[Click To Copy]", + "text.skyblocker.clickToCopy.@Tooltip": "Click to copy to clipboard.", "skyblocker.skyblockerScreen": "Skyblocker Main Screen", From 9a9b3f8a68a3ba01ac4f9ac23981c959ff395aa5 Mon Sep 17 00:00:00 2001 From: Rime <81419447+Emirlol@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:13:42 +0300 Subject: [PATCH 2/5] Change from regex to sibling checking and try catch everything --- .../events/greatspook/MathTeacherHelper.java | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java index dad444ec50..b25267fccc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java @@ -7,20 +7,17 @@ import net.minecraft.screen.ScreenTexts; import net.minecraft.text.ClickEvent; import net.minecraft.text.HoverEvent; -import net.minecraft.text.MutableText; +import net.minecraft.text.PlainTextContent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.List; /** *A helper class for the Math Teachers that can spawn after killing Primal Fears in the Great Spook event.
*It only shows the result and allows for easily copying rather than sending the result to chat to not breach any hypixel rules.
*/ public final class MathTeacherHelper { - private static final Pattern MATH_TEACHER_PATTERN = Pattern.compile("^QUICK MATHS! Solve: (.*)"); - @Init public static void init() { ClientReceiveMessageEvents.MODIFY_GAME.register(MathTeacherHelper::onMessage); @@ -31,19 +28,27 @@ public static void init() { */ public static Text onMessage(Text message, boolean overlay) { if (overlay) return message; - Matcher matcher = MATH_TEACHER_PATTERN.matcher(message.getString()); - if (!matcher.matches()) return message; - String expression = matcher.group(1).replace("x", "*"); // Hypixel uses x for multiplication while our calculator uses * - String result = "%.0f".formatted(Calculator.calculate(expression)); - return ((MutableText) message).append(" = ") - .append(Text.literal(result) - .formatted(Formatting.AQUA)) - .append(ScreenTexts.SPACE) - .append(Text.translatable("text.skyblocker.clickToCopy") - .formatted(Formatting.GREEN) - .styled(style -> - style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, result)) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Constants.PREFIX.get().append(Text.translatable("text.skyblocker.clickToCopy.@Tooltip")))) - )); + ListA helper class for the Math Teachers that can spawn after killing Primal Fears in the Great Spook event.
- *It only shows the result and allows for easily copying rather than sending the result to chat to not breach any hypixel rules.
*/ public final class MathTeacherHelper { @Init @@ -24,7 +23,7 @@ public static void init() { } /** - * Appends the result of the math expression to the message and a copy to clipboard text for, well, copying the result to the clipboard. + * Appends the result of the math expression to the message and a send in chat text that, well, sends the result in chat. */ public static Text onMessage(Text message, boolean overlay) { if (overlay) return message; @@ -41,11 +40,11 @@ public static Text onMessage(Text message, boolean overlay) { .append(Text.literal(result) .formatted(Formatting.AQUA)) .append(ScreenTexts.SPACE) - .append(Text.translatable("text.skyblocker.clickToSuggest") + .append(Text.translatable("text.skyblocker.clickToSend") .formatted(Formatting.GREEN) .styled(style -> - style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, result)) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Constants.PREFIX.get().append(Text.translatable("text.skyblocker.clickToSuggest.@Tooltip")))) + style.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ac " + result)) + .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Constants.PREFIX.get().append(Text.translatable("text.skyblocker.clickToSend.@Tooltip")))) )); } catch (Exception e) { return message; diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index ebf5f9a438..168c030e28 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -28,8 +28,8 @@ "text.skyblocker.translate": "Translate", "text.skyblocker.modrinth": "Modrinth", "text.skyblocker.discord": "Discord", - "text.skyblocker.clickToSuggest": "[Click To Suggest In Chat]", - "text.skyblocker.clickToSuggest.@Tooltip": "Click to suggest this in chat.", + "text.skyblocker.clickToSend": "[Click To Send In Chat]", + "text.skyblocker.clickToSend.@Tooltip": "Click to send this in chat.", "skyblocker.skyblockerScreen": "Skyblocker Main Screen", From 4d5905e63f62349ad9abd5d2fa03efd525d56489 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:40:09 -0400 Subject: [PATCH 5/5] Log errors --- .../skyblock/events/greatspook/MathTeacherHelper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java index c78334c4cc..526cb3832f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/events/greatspook/MathTeacherHelper.java @@ -10,6 +10,8 @@ import net.minecraft.text.PlainTextContent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; @@ -17,6 +19,8 @@ *A helper class for the Math Teachers that can spawn after killing Primal Fears in the Great Spook event.
*/ public final class MathTeacherHelper { + private static final Logger LOGGER = LoggerFactory.getLogger(MathTeacherHelper.class); + @Init public static void init() { ClientReceiveMessageEvents.MODIFY_GAME.register(MathTeacherHelper::onMessage); @@ -47,6 +51,7 @@ public static Text onMessage(Text message, boolean overlay) { .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Constants.PREFIX.get().append(Text.translatable("text.skyblocker.clickToSend.@Tooltip")))) )); } catch (Exception e) { + LOGGER.error("[Skyblocker Math Teacher Helper] Failed to calculate math expression: {}", expression, e); return message; } }