aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
diff options
context:
space:
mode:
authorExternalTime <84183548+ExternalTime@users.noreply.github.com>2021-10-13 23:59:57 +0200
committerExternalTime <84183548+ExternalTime@users.noreply.github.com>2021-10-14 12:57:51 +0200
commit96f39459c9087884e943574aa26e64ba904f538a (patch)
tree8210bd753637425874352ed92e616481e6902f75 /src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
parent92a7fdb2da62e9b9f73ed336956383aa095c7b8c (diff)
downloadSkyblocker-96f39459c9087884e943574aa26e64ba904f538a.tar.gz
Skyblocker-96f39459c9087884e943574aa26e64ba904f538a.tar.bz2
Skyblocker-96f39459c9087884e943574aa26e64ba904f538a.zip
Changed reparty to invite multiple people per command
Made it wait between commands in a separate thread
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java71
1 files changed, 46 insertions, 25 deletions
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 c12662d2..69278023 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
@@ -5,16 +5,14 @@ import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Reparty extends ChatListener {
private static final MinecraftClient client = MinecraftClient.getInstance();
- private static final Logger logger = LogManager.getLogger(Reparty.class.getName());
public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●");
+ private static final int SLEEP_TIME = 600;
private String[] players;
private int playersSoFar;
@@ -24,14 +22,14 @@ public class Reparty extends ChatListener {
super("^(?:You are not currently in a party\\.|Party (?:Membe|Moderato)rs(?: \\(([0-9]+)\\)|:( .*)))$");
repartying = false;
ClientCommandManager.DISPATCHER.register(
- ClientCommandManager.literal("rp").executes(context -> {
- if(!Utils.isSkyblock)
+ ClientCommandManager.literal("rp").executes(context -> {
+ if (!Utils.isSkyblock || repartying)
+ return 0;
+ assert client.player != null;
+ repartying = true;
+ client.player.sendChatMessage("/p list");
return 0;
- assert client.player != null;
- repartying = true;
- client.player.sendChatMessage("/p list");
- return 0;
- })
+ })
);
}
@@ -42,35 +40,58 @@ public class Reparty extends ChatListener {
@Override
public boolean onMessage(String[] groups) {
- if(groups[1] != null) {
+ if (groups[1] != null) {
playersSoFar = 0;
players = new String[Integer.parseInt(groups[1]) - 1];
- }
- else if(groups[2] != null) {
+ } else if (groups[2] != null) {
Matcher m = PLAYER.matcher(groups[2]);
- while(m.find()) {
+ while (m.find()) {
players[playersSoFar++] = m.group(1);
}
- }
- else
+ } else {
repartying = false;
- if(playersSoFar == players.length)
- client.execute(this::reparty);
+ return false;
+ }
+ if (playersSoFar == players.length)
+ new Thread(this::reparty).start();
return false;
}
private void reparty() {
ClientPlayerEntity playerEntity = client.player;
assert playerEntity != null;
- playerEntity.sendChatMessage("/p disband");
- for(String player : players) {
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- logger.info("[Skyblocker] sleep while repartying interupted!");
+ StringBuilder sb = new StringBuilder("/p disband");
+ for (int i = 0; i < players.length; i++) {
+ if (i % 5 == 0) {
+ sleep();
+ playerEntity.sendChatMessage(sb.toString());
+ sb.setLength(0);
+ sb.append("/p invite");
}
- playerEntity.sendChatMessage("/p invite " + player);
+ sb.append(' ');
+ sb.append(players[i]);
+ }
+ if (players.length % 5 != 0) {
+ sleep();
+ playerEntity.sendChatMessage(sb.toString());
}
repartying = false;
}
+
+ private void sleep() {
+ long sleepStart = System.currentTimeMillis();
+ boolean interrupted = false;
+ long sleepLeft = SLEEP_TIME;
+ do {
+ if (interrupted) {
+ sleepLeft = sleepStart + SLEEP_TIME - System.currentTimeMillis();
+ interrupted = false;
+ }
+ try {
+ Thread.sleep(sleepLeft);
+ } catch (InterruptedException e) {
+ interrupted = true;
+ }
+ } while (interrupted);
+ }
}