aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-12-22 04:50:34 -0500
committerGitHub <noreply@github.com>2024-12-22 04:50:34 -0500
commitce458037a13a6c1a42e772e275ac155efe577c17 (patch)
tree793a1290405f3fdccc7672d2e15474685b80f96d /src
parentdfc815bd84ba0dc91d6d13fcd0bf28c28ba13064 (diff)
downloadSkyblocker-ce458037a13a6c1a42e772e275ac155efe577c17.tar.gz
Skyblocker-ce458037a13a6c1a42e772e275ac155efe577c17.tar.bz2
Skyblocker-ce458037a13a6c1a42e772e275ac155efe577c17.zip
Chat Confirmation Prompt Helper (#1063)
* Chat Confirmation Prompt Helper * Fix NPE * Fix it not working when chat is opened prior to the msg being sent
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ConfirmationPromptHelper.java71
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json4
4 files changed, 86 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java
index 60c88f0e..a941bc04 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java
@@ -22,6 +22,14 @@ public class ChatCategory {
newValue -> config.chat.skyblockXpMessages = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.chat.confirmationPromptHelper"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.confirmationPromptHelper.@Tooltip")))
+ .binding(defaults.chat.confirmationPromptHelper,
+ () -> config.chat.confirmationPromptHelper,
+ newValue -> config.chat.confirmationPromptHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
//Uncategorized Options
.group(OptionGroup.createBuilder()
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java
index b0bab6e7..43c41b3e 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java
@@ -8,6 +8,9 @@ public class ChatConfig {
public boolean skyblockXpMessages = true;
@SerialEntry
+ public boolean confirmationPromptHelper = false;
+
+ @SerialEntry
public ChatFilterResult hideAbility = ChatFilterResult.PASS;
@SerialEntry
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ConfirmationPromptHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ConfirmationPromptHelper.java
new file mode 100644
index 00000000..3bb0dd8a
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ConfirmationPromptHelper.java
@@ -0,0 +1,71 @@
+package de.hysky.skyblocker.skyblock.chat;
+
+import java.util.Optional;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.Constants;
+import de.hysky.skyblocker.utils.Utils;
+import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
+import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.ChatScreen;
+import net.minecraft.text.ClickEvent;
+import net.minecraft.text.Style;
+import net.minecraft.text.Text;
+
+public class ConfirmationPromptHelper {
+ private static String command;
+ private static long commandFoundAt;
+
+ @Init
+ public static void init() {
+ ClientReceiveMessageEvents.GAME.register(ConfirmationPromptHelper::onMessage);
+ ScreenEvents.AFTER_INIT.register((_client, screen, _scaledWidth, _scaledHeight) -> {
+ //Don't check for the command being present in case the user opens the chat before the prompt is sent
+ if (Utils.isOnSkyblock() && screen instanceof ChatScreen && SkyblockerConfigManager.get().chat.confirmationPromptHelper) {
+ ScreenMouseEvents.beforeMouseClick(screen).register((_screen1, _mouseX, _mouseY, _button) -> {
+ if (hasCommand()) {
+ MessageScheduler.INSTANCE.sendMessageAfterCooldown(command);
+ command = null;
+ commandFoundAt = 0;
+ }
+ });
+ }
+ });
+ ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> {
+ command = null;
+ commandFoundAt = 0;
+ });
+ }
+
+ private static boolean hasCommand() {
+ return command != null && commandFoundAt + 60_000 > System.currentTimeMillis();
+ }
+
+ private static void onMessage(Text message, boolean overlay) {
+ if (Utils.isOnSkyblock() && !overlay && SkyblockerConfigManager.get().chat.confirmationPromptHelper && message.getString().contains("[YES]")) {
+ Optional<String> confirmationCommand = message.visit((style, asString) -> {
+ ClickEvent event = style.getClickEvent();
+
+ //Check to see if its a yes and has the proper command
+ if (asString.equals("§a§l[YES]") && event != null && event.getAction() == ClickEvent.Action.RUN_COMMAND && event.getValue().startsWith("/chatprompt")) {
+ return Optional.of(event.getValue());
+ }
+
+ return Optional.empty();
+ }, Style.EMPTY);
+
+ if (confirmationCommand.isPresent()) {
+ command = confirmationCommand.get();
+ commandFoundAt = System.currentTimeMillis();
+
+ //Send feedback msg
+ MinecraftClient.getInstance().player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.chat.confirmationPromptNotification")), false);
+ }
+ }
+ }
+}
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 9efb4c68..5657c250 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -472,6 +472,8 @@
"skyblocker.config.chat.waypoints.display": "[Click to Display Waypoint]",
"skyblocker.config.chat.waypoints.displayed": "Displayed temporary waypoint at x: %d, y: %d, z: %d | %s",
+ "skyblocker.config.chat.confirmationPromptHelper": "Chat Confirmation Prompt Helper",
+ "skyblocker.config.chat.confirmationPromptHelper.@Tooltip": "Upon receiving a yes or no prompt in chat, you can click anywhere on the screen within 60 seconds to accept the prompt.\n\nAn example of this is Trevor the Trapper's tasks.",
"skyblocker.config.chat.filter": "Filter",
"skyblocker.config.chat.filter.chatFilterResult.ACTION_BAR": "Move to action bar",
@@ -1160,5 +1162,7 @@
"skyblocker.profileviewer.inventory.inactive.description.backpack": "The selected backpack",
"skyblocker.profileviewer.inventory.inactive.description.general": "does not contain this slot",
+ "skyblocker.chat.confirmationPromptNotification": "Click anywhere on screen within 60 seconds to accept the prompt.",
+
"emi.category.skyblocker.skyblock": "Skyblock"
}