diff options
Diffstat (limited to 'src/main/java')
3 files changed, 110 insertions, 9 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java index 9965c7c7..97ca1f68 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.chat; import me.xmrvizzy.skyblocker.chat.filters.*; +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; @@ -9,7 +10,8 @@ import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler; import java.util.regex.Matcher; public class ChatParser { - private final ChatListener[] listeners = new ChatListener[]{ + private final static ChatListener[] listeners = new ChatListener[]{ + new Reparty(), new ThreeWeirdos(), new AoteFilter(), new ImplosionFilter(), diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 996c48b6..89f26140 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -7,6 +7,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; import net.minecraft.util.Identifier; import java.util.regex.Matcher; @@ -15,7 +16,7 @@ import java.util.regex.Pattern; public class FancyStatusBars extends DrawableHelper { private static final MinecraftClient client = MinecraftClient.getInstance(); private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE,"textures/gui/bars.png"); - private static final Pattern ACTION_BAR_STATUS = Pattern.compile("^§[6c]([0-9]+)/([0-9])+❤ +§(?:a([0-9]+)§a❈ Defense|b-[0-9]+ Mana \\(§6[a-zA-Z ]+§b\\)) +§(?:b([0-9]+)/([0-9]+)✎ Mana|[0-9,]+/[0-9,]+k? Drill Fuel)$"); + private static final Pattern ACTION_BAR_STATUS = Pattern.compile("^§[6c]([0-9]+)/([0-9]+)❤ {3,}(?:§a([0-9]+)§a❈ Defense|(\\S+(?: \\S+)*)) {3,}(?:§b([0-9]+)/([0-9]+)✎ Mana|(\\S+(?: \\S+)*))(?: {3,}(\\S+(?: \\S+)*))?$"); private final Resource health; private final Resource mana; private int defense; @@ -30,17 +31,35 @@ public class FancyStatusBars extends DrawableHelper { if(!SkyblockerConfig.get().general.bars.enableBars) return false; Matcher matcher = ACTION_BAR_STATUS.matcher(actionBar); - if(!matcher.matches()) { + if(!matcher.matches()) return false; - } health.set(matcher.group(1), matcher.group(2)); if(matcher.group(3) != null) defense = Integer.parseInt(matcher.group(3)); - if(matcher.group(4) != null) - mana.set(matcher.group(4), matcher.group(5)); + if(matcher.group(5) != null) + mana.set(matcher.group(5), matcher.group(6)); + + StringBuilder sb = new StringBuilder(); + appendIfNotNull(sb, matcher.group(4)); + appendIfNotNull(sb, matcher.group(7)); + appendIfNotNull(sb, matcher.group(8)); + + if(!sb.isEmpty()) { + assert client.player != null; + client.player.sendMessage(Text.of(sb.toString()), true); + } + return true; } + private void appendIfNotNull(StringBuilder sb, String str) { + if(str == null) + return; + if(!sb.isEmpty()) + sb.append(" "); + sb.append(str); + } + public boolean render(MatrixStack matrices, int scaledWidth, int scaledHeight) { if(!SkyblockerConfig.get().general.bars.enableBars) return false; @@ -48,9 +67,9 @@ public class FancyStatusBars extends DrawableHelper { int top = scaledHeight - 35; int hpFillWidth = (int) (health.getFillLevel() * 33.0F); - if (hpFillWidth > 33) hpFillWidth = 33; + int hpOverflowWidth = (int) (health.getOverflow() * 33.0F); int manaFillWidth = (int) (mana.getFillLevel() * 33.0F); - if (manaFillWidth > 33) manaFillWidth = 33; + assert client.player != null; int xp = (int) (client.player.experienceProgress * 33.0F); // Icons @@ -69,6 +88,7 @@ public class FancyStatusBars extends DrawableHelper { // Progress Bars this.drawTexture(matrices, left + 10, top + 1, 0, 16, hpFillWidth, 7); + this.drawTexture(matrices, left + 10, top + 1, 0, 44, hpOverflowWidth, 7); this.drawTexture(matrices, left + 55, top + 1, 0, 23, manaFillWidth, 7); this.drawTexture(matrices, left + 102, top + 1, 0, 30, 33, 7); this.drawTexture(matrices, left + 149, top + 1, 0, 37, xp, 7); @@ -109,7 +129,10 @@ public class FancyStatusBars extends DrawableHelper { return value; } public double getFillLevel() { - return ((double)value)/((double)max); + return Math.min(((double)value)/((double)max), 1); + } + public double getOverflow() { + return Math.max(((double)value)/((double)max) - 1, 0); } } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java new file mode 100644 index 00000000..c12662d2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -0,0 +1,76 @@ +package me.xmrvizzy.skyblocker.skyblock.dungeon; + +import me.xmrvizzy.skyblocker.chat.ChatListener; +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 String[] players; + private int playersSoFar; + private boolean repartying; + + public Reparty() { + 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) + return 0; + assert client.player != null; + repartying = true; + client.player.sendChatMessage("/p list"); + return 0; + }) + ); + } + + @Override + public boolean isEnabled() { + return repartying; + } + + @Override + public boolean onMessage(String[] groups) { + if(groups[1] != null) { + playersSoFar = 0; + players = new String[Integer.parseInt(groups[1]) - 1]; + } + else if(groups[2] != null) { + Matcher m = PLAYER.matcher(groups[2]); + while(m.find()) { + players[playersSoFar++] = m.group(1); + } + } + else + repartying = false; + if(playersSoFar == players.length) + client.execute(this::reparty); + 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!"); + } + playerEntity.sendChatMessage("/p invite " + player); + } + repartying = false; + } +} |