aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de')
-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
3 files changed, 82 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);
+ }
+ }
+ }
+}