diff options
author | ExternalTime <84183548+ExternalTime@users.noreply.github.com> | 2021-10-13 23:59:57 +0200 |
---|---|---|
committer | ExternalTime <84183548+ExternalTime@users.noreply.github.com> | 2021-10-14 12:57:51 +0200 |
commit | 96f39459c9087884e943574aa26e64ba904f538a (patch) | |
tree | 8210bd753637425874352ed92e616481e6902f75 /src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java | |
parent | 92a7fdb2da62e9b9f73ed336956383aa095c7b8c (diff) | |
download | Skyblocker-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.java | 71 |
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); + } } |