diff options
Diffstat (limited to 'src/main')
3 files changed, 71 insertions, 69 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java index 5548484e..4db5f3e6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java @@ -4,13 +4,6 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; import me.xmrvizzy.skyblocker.utils.Utils; import me.xmrvizzy.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.scoreboard.ScoreboardDisplaySlot; -import net.minecraft.scoreboard.ScoreboardObjective; -import net.minecraft.scoreboard.ScoreboardPlayerScore; -import net.minecraft.scoreboard.Team; import net.minecraft.text.Text; import net.minecraft.text.TextColor; import net.minecraft.util.DyeColor; @@ -23,7 +16,7 @@ import java.util.List; public class EffigyWaypoints { private static final Logger LOGGER = LoggerFactory.getLogger(EffigyWaypoints.class); - private static final List<BlockPos> effigies = List.of( + private static final List<BlockPos> EFFIGIES = List.of( new BlockPos(150, 79, 95), //Effigy 1 new BlockPos(193, 93, 119), //Effigy 2 new BlockPos(235, 110, 147), //Effigy 3 @@ -31,29 +24,27 @@ public class EffigyWaypoints { new BlockPos(262, 99, 94), //Effigy 5 new BlockPos(240, 129, 118) //Effigy 6 ); - private static final List<BlockPos> unBrokenEffigies = new ArrayList<>(); + private static final List<BlockPos> UNBROKEN_EFFIGIES = new ArrayList<>(); protected static void updateEffigies() { if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return; - unBrokenEffigies.clear(); + UNBROKEN_EFFIGIES.clear(); + try { - ClientPlayerEntity player = MinecraftClient.getInstance().player; - if (player == null) return; - Scoreboard scoreboard = player.getScoreboard(); - ScoreboardObjective objective = scoreboard.getObjectiveForSlot(ScoreboardDisplaySlot.FROM_ID.apply(1)); - for (ScoreboardPlayerScore score : scoreboard.getAllPlayerScores(objective)) { - Team team = scoreboard.getPlayerTeam(score.getPlayerName()); - if (team != null) { - String line = team.getPrefix().getString() + team.getSuffix().getString(); - if (line.contains("Effigies")) { - List<Text> newList = new ArrayList<>(team.getPrefix().getSiblings()); - newList.addAll(team.getSuffix().getSiblings()); - for (int i = 1; i < newList.size(); i++) { - if (newList.get(i).getStyle().getColor() == TextColor.parse("gray")) { - unBrokenEffigies.add(effigies.get(i - 1)); - } - } + for (int i = 0; i < Utils.STRING_SCOREBOARD.size(); i++) { + String line = Utils.STRING_SCOREBOARD.get(i); + + if (line.contains("Effigies")) { + List<Text> effigiesText = new ArrayList<>(); + List<Text> prefixAndSuffix = Utils.TEXT_SCOREBOARD.get(i).getSiblings(); + + //Add contents of prefix and suffix to list + effigiesText.addAll(prefixAndSuffix.get(0).getSiblings()); + effigiesText.addAll(prefixAndSuffix.get(1).getSiblings()); + + for (int i2 = 1; i2 < effigiesText.size(); i2++) { + if (effigiesText.get(i2).getStyle().getColor() == TextColor.parse("gray")) UNBROKEN_EFFIGIES.add(EFFIGIES.get(i2 - 1)); } } } @@ -64,7 +55,7 @@ public class EffigyWaypoints { protected static void render(WorldRenderContext context) { if (SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getLocation().contains("Stillgore Château")) { - for (BlockPos effigy : unBrokenEffigies) { + for (BlockPos effigy : UNBROKEN_EFFIGIES) { float[] colorComponents = DyeColor.RED.getColorComponents(); if (SkyblockerConfigManager.get().slayer.vampireSlayer.compactEffigyWaypoints) { RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, effigy.down(6), colorComponents, 0.5F); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java index 216dc7e9..cb75f20f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/SlayerUtils.java @@ -1,14 +1,8 @@ package me.xmrvizzy.skyblocker.utils; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.ArmorStandEntity; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.scoreboard.ScoreboardDisplaySlot; -import net.minecraft.scoreboard.ScoreboardObjective; -import net.minecraft.scoreboard.ScoreboardPlayerScore; -import net.minecraft.scoreboard.Team; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,22 +40,15 @@ public class SlayerUtils { public static boolean isInSlayer() { try { - ClientPlayerEntity client = MinecraftClient.getInstance().player; - if (client == null) return false; - Scoreboard scoreboard = MinecraftClient.getInstance().player.getScoreboard(); - ScoreboardObjective objective = scoreboard.getObjectiveForSlot(ScoreboardDisplaySlot.FROM_ID.apply(1)); - for (ScoreboardPlayerScore score : scoreboard.getAllPlayerScores(objective)) { - Team team = scoreboard.getPlayerTeam(score.getPlayerName()); - if (team != null) { - String line = team.getPrefix().getString() + team.getSuffix().getString(); - if (line.contains("Slay the boss!")) { - return true; - } - } + for (int i = 0; i < Utils.STRING_SCOREBOARD.size(); i++) { + String line = Utils.STRING_SCOREBOARD.get(i); + + if (line.contains("Slay the boss!")) return true; } } catch (NullPointerException e) { LOGGER.error("[Skyblocker] Error while checking if player is in slayer", e); } + return false; } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 20edfca2..cee2f2ad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.xmrvizzy.skyblocker.events.SkyblockEvents; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; @@ -25,7 +27,6 @@ import net.minecraft.util.Formatting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -52,6 +53,12 @@ public class Utils { private static long clientWorldJoinTime = 0; private static boolean sentLocRaw = false; private static boolean canSendLocRaw = false; + + /** + * @implNote The parent text will always be empty, the actual text content is inside the text's siblings. + */ + public static final ObjectArrayList<Text> TEXT_SCOREBOARD = new ObjectArrayList<>(); + public static final ObjectArrayList<String> STRING_SCOREBOARD = new ObjectArrayList<>(); public static boolean isOnHypixel() { return isOnHypixel; @@ -119,7 +126,8 @@ public class Utils { */ public static void update() { MinecraftClient client = MinecraftClient.getInstance(); - updateFromScoreboard(client); + updateScoreboard(client); + updatePlayerPresenceFromScoreboard(client); updateFromPlayerList(client); updateLocRaw(); } @@ -127,11 +135,11 @@ public class Utils { /** * Updates {@link #isOnSkyblock}, {@link #isInDungeons}, and {@link #isInjected} from the scoreboard. */ - public static void updateFromScoreboard(MinecraftClient client) { - List<String> sidebar; + public static void updatePlayerPresenceFromScoreboard(MinecraftClient client) { + List<String> sidebar = STRING_SCOREBOARD; FabricLoader fabricLoader = FabricLoader.getInstance(); - if ((client.world == null || client.isInSingleplayer() || (sidebar = getSidebar()) == null)) { + if ((client.world == null || client.isInSingleplayer() || sidebar == null || sidebar.isEmpty())) { if (fabricLoader.isDevelopmentEnvironment()) { sidebar = Collections.emptyList(); } else { @@ -158,12 +166,12 @@ public class Utils { SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } } else { - leaveSkyblock(); + onLeaveSkyblock(); } isInDungeons = fabricLoader.isDevelopmentEnvironment() || isOnSkyblock && string.contains("The Catacombs"); } else if (isOnHypixel) { isOnHypixel = false; - leaveSkyblock(); + onLeaveSkyblock(); } } @@ -174,7 +182,7 @@ public class Utils { return serverAddress.equalsIgnoreCase(ALTERNATE_HYPIXEL_ADDRESS) || serverAddress.contains("hypixel.net") || serverAddress.contains("hypixel.io") || serverBrand.contains("Hypixel BungeeCord"); } - private static void leaveSkyblock() { + private static void onLeaveSkyblock() { if (isOnSkyblock) { isOnSkyblock = false; isInDungeons = false; @@ -184,7 +192,7 @@ public class Utils { public static String getLocation() { String location = null; - List<String> sidebarLines = getSidebar(); + List<String> sidebarLines = STRING_SCOREBOARD; try { if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { @@ -204,7 +212,7 @@ public class Utils { String purseString = null; double purse = 0; - List<String> sidebarLines = getSidebar(); + List<String> sidebarLines = STRING_SCOREBOARD; try { if (sidebarLines != null) { @@ -225,7 +233,7 @@ public class Utils { public static int getBits() { int bits = 0; String bitsString = null; - List<String> sidebarLines = getSidebar(); + List<String> sidebarLines = STRING_SCOREBOARD; try { if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { @@ -241,31 +249,47 @@ public class Utils { return bits; } - public static List<String> getSidebar() { + private static void updateScoreboard(MinecraftClient client) { try { - ClientPlayerEntity client = MinecraftClient.getInstance().player; - if (client == null) return Collections.emptyList(); - Scoreboard scoreboard = MinecraftClient.getInstance().player.getScoreboard(); + TEXT_SCOREBOARD.clear(); + STRING_SCOREBOARD.clear(); + + ClientPlayerEntity player = client.player; + if (player == null) return; + + Scoreboard scoreboard = player.getScoreboard(); ScoreboardObjective objective = scoreboard.getObjectiveForSlot(ScoreboardDisplaySlot.FROM_ID.apply(1)); - List<String> lines = new ArrayList<>(); + ObjectArrayList<Text> textLines = new ObjectArrayList<>(); + ObjectArrayList<String> stringLines = new ObjectArrayList<>(); + for (ScoreboardPlayerScore score : scoreboard.getAllPlayerScores(objective)) { Team team = scoreboard.getPlayerTeam(score.getPlayerName()); + if (team != null) { - String line = team.getPrefix().getString() + team.getSuffix().getString(); - if (!line.trim().isEmpty()) { - String formatted = Formatting.strip(line); - lines.add(formatted); + Text textLine = Text.empty().append(team.getPrefix().copy()).append(team.getSuffix().copy()); + String strLine = team.getPrefix().getString() + team.getSuffix().getString(); + + if (!strLine.trim().isEmpty()) { + String formatted = Formatting.strip(strLine); + + textLines.add(textLine); + stringLines.add(formatted); } } } if (objective != null) { - lines.add(objective.getDisplayName().getString()); - Collections.reverse(lines); + stringLines.add(objective.getDisplayName().getString()); + textLines.add(Text.empty().append(objective.getDisplayName().copy())); + + Collections.reverse(stringLines); + Collections.reverse(textLines); } - return lines; + + TEXT_SCOREBOARD.addAll(textLines); + STRING_SCOREBOARD.addAll(stringLines); } catch (NullPointerException e) { - return null; + //Do nothing } } |