diff options
| author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-12-22 04:50:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-22 04:50:34 -0500 |
| commit | ce458037a13a6c1a42e772e275ac155efe577c17 (patch) | |
| tree | 793a1290405f3fdccc7672d2e15474685b80f96d /src/main/java/de | |
| parent | dfc815bd84ba0dc91d6d13fcd0bf28c28ba13064 (diff) | |
| download | Skyblocker-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/main/java/de')
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); + } + } + } +} |
