diff options
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java | 4 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java) | 22 | ||||
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java | 40 | ||||
-rw-r--r-- | src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java | 35 |
4 files changed, 50 insertions, 51 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java index da0f7ef9..f502a356 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -4,8 +4,7 @@ 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.AcceptReparty; -import me.xmrvizzy.skyblocker.skyblock.dungeon.reparty.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; @@ -42,7 +41,6 @@ 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/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 1bff342f..8becd757 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.skyblock.dungeon.reparty; +package me.xmrvizzy.skyblocker.skyblock.dungeon; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.chat.ChatFilterResult; @@ -20,15 +20,17 @@ public class Reparty extends ChatPatternListener { 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; + private String partyLeader; public Reparty() { super("^(?:You are not currently in a party\\." + "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" + - "|([\\[A-z+\\]]* )?(?<name>[A-z0-9_]*) has disbanded the party!)$"); + "|([\\[A-z+\\]]* )?(?<disband>[A-z0-9_]*) has disbanded .*" + + "|.*\n([\\[A-z+\\]]* )?(?<invite>[A-z0-9_]*) has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!\n.*)$"); this.repartying = false; ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("rp").executes(context -> { @@ -54,15 +56,19 @@ public class Reparty extends ChatPatternListener { 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); + } else if (matcher.group("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) { + partyLeader = matcher.group("disband"); + skyblocker.scheduler.schedule(() -> partyLeader = null, 21); + return false; + } else if (matcher.group("invite") != null && matcher.group("invite").equals(partyLeader)) { + String command = "/party accept " + partyLeader; + sendCommand(command, 0); return false; } else { this.repartying = false; return false; } - if (this.playersSoFar == this.players.length && repartying) { + if (this.playersSoFar == this.players.length) { reparty(); } return false; @@ -85,4 +91,4 @@ public class Reparty extends ChatPatternListener { private void sendCommand(String command, int delay) { skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY); } -} +}
\ No newline at end of file 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 deleted file mode 100644 index 21513fc6..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/reparty/AcceptReparty.java +++ /dev/null @@ -1,40 +0,0 @@ -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+\\]]* )?(?<name>[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/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java new file mode 100644 index 00000000..0fd0363b --- /dev/null +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java @@ -0,0 +1,35 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.regex.Matcher; + +public class AcceptRepartyTest extends ChatPatternListenerTest<Reparty> { + + public AcceptRepartyTest() { super(new Reparty()); } + + protected void assertGroup(String message, String group, String expect) { + Matcher matcher = matcher(message); + assertTrue(matcher.matches()); + assertEquals(expect, matcher.group(group)); + } + + @Test + void testDisband() { + assertGroup("[VIP+] KoloiYolo has disbanded the party!", + /* group: */ "disband", + /* expect: */ "KoloiYolo"); + } + + @Test + void testInvite() { + assertGroup("-----------------------------------------------------" + + "\nStefan has invited you to join their party!" + + "\nYou have 60 seconds to accept. Click here to join!" + + "\n-----------------------------------------------------", + /* group: */ "invite", + /* expect: */ "Stefan"); + } +}
\ No newline at end of file |