aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2023-07-01 13:21:33 -0400
committerGitHub <noreply@github.com>2023-07-01 13:21:33 -0400
commitc71c140c0a2830905870685bb7b8e83dee9276f2 (patch)
tree57e26495952358bc012e7a45cb6a75d15fdb0e2d /src
parentc3dd9419010ba36647ee330ffb4e6873359d494a (diff)
parent6196600f51f59be3e1f2671ab3fd6d1dd103fd75 (diff)
downloadSkyblocker-c71c140c0a2830905870685bb7b8e83dee9276f2.tar.gz
Skyblocker-c71c140c0a2830905870685bb7b8e83dee9276f2.tar.bz2
Skyblocker-c71c140c0a2830905870685bb7b8e83dee9276f2.zip
Merge pull request #176 from koloiyolo/autorejoin2
Add Reparty Auto Rejoin
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java34
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json1
-rw-r--r--src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/AcceptRepartyTest.java35
4 files changed, 62 insertions, 9 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 4b1398e0..3a8a4a1f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -136,6 +136,7 @@ public class SkyblockerConfig implements ConfigData {
public static class General {
public boolean enableUpdateNotification = true;
+ public boolean acceptReparty = true;
public boolean backpackPreviewWithoutShift = false;
public boolean hideEmptyTooltips = true;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
index 29c37b94..8ae7ce7b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
@@ -3,6 +3,7 @@ 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;
@@ -15,16 +16,21 @@ 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;
+ private String partyLeader;
public Reparty() {
- super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*)))$");
+ super("^(?:You are not currently in a party\\." +
+ "|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*))" +
+ "|([\\[A-z+\\]]* )?(?<disband>.*) has disbanded .*" +
+ "|.*\n([\\[A-z+\\]]* )?(?<invite>.*) 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 -> {
if (!Utils.isOnSkyblock() || this.repartying || client.player == null) return 0;
@@ -36,24 +42,34 @@ public class Reparty extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return this.repartying ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
public boolean onMatch(Text message, Matcher matcher) {
- if (matcher.group(1) != null) {
+ 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) {
+ } 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("disband") != null && !matcher.group("disband").equals(client.getSession().getUsername())) {
+ partyLeader = matcher.group("disband");
+ SkyblockerMod.getInstance().scheduler.schedule(() -> partyLeader = null, 61);
+ 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) reparty();
+ if (this.playersSoFar == this.players.length) {
+ reparty();
+ }
return false;
}
@@ -68,10 +84,10 @@ public class Reparty extends ChatPatternListener {
String command = "/p invite " + this.players[i];
sendCommand(command, i + 2);
}
- skyblocker.scheduler.schedule(() -> this.repartying = false, this.players.length + 2);
+ SkyblockerMod.getInstance().scheduler.schedule(() -> this.repartying = false, this.players.length + 2);
}
private void sendCommand(String command, int delay) {
- skyblocker.messageScheduler.queueMessage(command, delay * BASE_DELAY);
+ SkyblockerMod.getInstance().messageScheduler.queueMessage(command, delay * BASE_DELAY);
}
-}
+} \ No newline at end of file
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 647092a9..df610333 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -24,6 +24,7 @@
"text.autoconfig.skyblocker.option.general.experiments.enableChronomatronSolver": "Enable Chronomatron Solver",
"text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver": "Enable Superpairs Solver",
"text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver": "Enable Ultrasequencer Solver",
+ "text.autoconfig.skyblocker.option.general.acceptReparty": "Auto accept Reparty",
"text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper",
"text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper",
"text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper",
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..2465f7a2
--- /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("-----------------------------------------------------" +
+ "\n[MVP+] 1wolvesgaming has invited you to join their party!" +
+ "\nYou have 60 seconds to accept. Click here to join!" +
+ "\n-----------------------------------------------------",
+ /* group: */ "invite",
+ /* expect: */ "1wolvesgaming");
+ }
+} \ No newline at end of file