From ff720f790b87b7caf26f722534a2dc42d12377e4 Mon Sep 17 00:00:00 2001 From: Jakub Kolodziej Date: Mon, 12 Jun 2023 14:02:00 +0200 Subject: Alternative Solution --- .../skyblocker/chat/ChatMessageListener.java | 4 +- .../skyblocker/skyblock/dungeon/Reparty.java | 91 ---------------------- .../skyblock/dungeon/reparty/AcceptReparty.java | 40 ++++++++++ .../skyblock/dungeon/reparty/Reparty.java | 88 +++++++++++++++++++++ 4 files changed, 131 insertions(+), 92 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index f502a356..da0f7ef9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -4,7 +4,8 @@ import me.xmrvizzy.skyblocker.chat.filters.*; import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; import me.xmrvizzy.skyblocker.skyblock.barn.HungryHiker; import me.xmrvizzy.skyblocker.skyblock.barn.TreasureHunter; -import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.AcceptReparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -41,6 +42,7 @@ public interface ChatMessageListener { new Fetchur(), new Puzzler(), new Reparty(), + new AcceptReparty(), new ThreeWeirdos(), new Trivia(), new TreasureHunter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java deleted file mode 100644 index 3a121eb2..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ /dev/null @@ -1,91 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.chat.ChatPatternListener; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.text.Text; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class Reparty extends ChatPatternListener { - private static final MinecraftClient client = MinecraftClient.getInstance(); - private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); - public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); - private static final int BASE_DELAY = 10; - - private String[] players; - private int playersSoFar; - private boolean repartying; - - public Reparty() { - super("^(?:You are not currently in a party\\." + - "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); - - this.repartying = false; - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { - if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; - this.repartying = true; - SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); - return 0; - }))); - } - - @Override - public ChatFilterResult state() { - return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; - } - - @Override - public boolean onMatch(Text message, Matcher matcher) { - if (matcher.group(1) != null && repartying) { - this.playersSoFar = 0; - this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; - } else if (matcher.group(2) != null && repartying) { - Matcher m = PLAYER.matcher(matcher.group(2)); - while (m.find()) { - this.players[playersSoFar++] = m.group(1); - } - } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { - join(matcher.group("name")); - return false; - } else { - this.repartying = false; - return false; - } - if (this.playersSoFar == this.players.length && repartying) { - reparty(); - } - return false; - } - - private void reparty() { - ClientPlayerEntity playerEntity = client.player; - if (playerEntity == null) { - this.repartying = false; - return; - } - sendCommand("/p disband", 1); - for (int i = 0; i < this.players.length; ++i) { - String command = "/p invite " + this.players[i]; - sendCommand(command, i + 2); - } - skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); - } - - private void join(String player) { - String command = "/party accept " + player; - skyblocker.messageScheduler.queueMessage(command, 15); - } - - private void sendCommand(String command, int delay) { - skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java new file mode 100644 index 00000000..3a243a57 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; + +import static me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty.partyLeader; + +public class AcceptReparty extends ChatPatternListener { + + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + + public AcceptReparty() { + super("-----------------------------------------------------" + + "\n([\\[A-z+\\]]* )?(?[A-z0-9_]*) has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!" + + "\n-----------------------------------------------------"); + } + + @Override + protected ChatFilterResult state() { + return (partyLeader != null) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + protected boolean onMatch(Text message, Matcher matcher) { + try { + if (matcher.group("name").equals(partyLeader)) { + skyblocker.messageScheduler.sendMessageAfterCooldown("/party accept " + partyLeader); + } + } catch (NullPointerException e) { + //in case if block executes after setting "partyLeader" variable to null + } + partyLeader = null; + return false; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java new file mode 100644 index 00000000..1bff342f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java @@ -0,0 +1,88 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Reparty extends ChatPatternListener { + private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); + public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); + private static final int BASE_DELAY = 10; + + public static String partyLeader; + private String[] players; + private int playersSoFar; + private boolean repartying; + + public Reparty() { + super("^(?:You are not currently in a party\\." + + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + + "|([\\[A-z+\\]]* )?(?[A-z0-9_]*) has disbanded the party!)$"); + + this.repartying = false; + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { + if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0; + this.repartying = true; + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/p list"); + return 0; + }))); + } + + @Override + public ChatFilterResult state() { + return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + } + + @Override + public boolean onMatch(Text message, Matcher matcher) { + if (matcher.group(1) != null && repartying) { + this.playersSoFar = 0; + this.players = new String[Integer.parseInt(matcher.group(1)) - 1]; + } else if (matcher.group(2) != null && repartying) { + Matcher m = PLAYER.matcher(matcher.group(2)); + while (m.find()) { + this.players[playersSoFar++] = m.group(1); + } + } else if (matcher.group("name") != null && !matcher.group("name").equals(client.getSession().getUsername())) { + partyLeader = matcher.group("name"); + skyblocker.scheduler.schedule(() -> partyLeader = null, 20); + return false; + } else { + this.repartying = false; + return false; + } + if (this.playersSoFar == this.players.length && repartying) { + reparty(); + } + return false; + } + + private void reparty() { + ClientPlayerEntity playerEntity = client.player; + if (playerEntity == null) { + this.repartying = false; + return; + } + sendCommand("/p disband", 1); + for (int i = 0; i < this.players.length; ++i) { + String command = "/p invite " + this.players[i]; + sendCommand(command, i + 2); + } + skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2); + } + + private void sendCommand(String command, int delay) { + skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); + } +} -- cgit