aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java39
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java76
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;
+ }
+}