diff options
Diffstat (limited to 'src/main')
65 files changed, 780 insertions, 770 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index f804d90e..fa80bcc2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.Scheduler; import me.xmrvizzy.skyblocker.utils.Utils; @@ -23,6 +24,7 @@ public class SkyblockerMod { scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(BackpackPreview::tick, 50); scheduler.scheduleCyclic(DwarvenHud::update, 40); + scheduler.scheduleCyclic(PlayerListMgr::updateList, 20); } public static SkyblockerMod getInstance() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index a2ab848a..53494940 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -1,7 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -import java.util.List; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -17,7 +15,6 @@ import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; @@ -46,29 +43,17 @@ public class PlayerListHudMixin { return; } - List<PlayerListEntry> list = nwH.getListedPlayerListEntries().stream() - .sorted(PlayerListHudAccessor.getOrdering()).toList(); - - // list hasn't loaded completely, abort until widgets handle errors correctly - if (list.size() < 40) { - return; - } - int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); - try { - - Screen screen = Screen.getCorrect(w, h, list, footer); - if (screen != null) { - screen.render(ms); - info.cancel(); - } + long then = System.nanoTime(); + Screen screen = Screen.getCorrect(w, h, footer); + screen.render(ms); + info.cancel(); } catch (Exception e) { e.printStackTrace(); - client.player.sendMessage(Text.of("The tab HUD has encountered unexpected text, see log! :(")); } } -} +}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java index efc64a70..5c302eb3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java @@ -1,17 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class EmptyScreen extends Screen { - public EmptyScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public EmptyScreen(int w, int h, Text footer) { super(w, h); - EmptyWidget ew = new EmptyWidget(ple); + EmptyWidget ew = new EmptyWidget(); this.center(ew); this.addWidget(ew); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index cc16da8b..ae71d7bd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; import java.util.ArrayList; -import java.util.List; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; @@ -24,7 +23,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScree import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -39,57 +37,48 @@ public class Screen { this.h = (int) (h / scale); } - public static Screen getCorrect(int w, int h, List<PlayerListEntry> ple, Text footer) { + public static Screen getCorrect(int w, int h, Text footer) { if (TabHud.genericTgl.isPressed()) { - return Screen.correctGenericScrn(w, h, ple, footer); - // } else if (TabHud.mapTgl.isPressed()) { - // return Screen.correctMapScrn(w, h, ple, footer); + return Screen.correctGenericScrn(w, h, footer); } else if (TabHud.playerTgl.isPressed()) { - return Screen.correctPlayerScrn(w, h, ple, footer); + return Screen.correctPlayerScrn(w, h, footer); } else { - return Screen.correctMainScrn(w, h, ple, footer); + return Screen.correctMainScrn(w, h, footer); } } - // private static Screen correctMapScrn(int w, int h, List<PlayerListEntry> - // list, Text footer) { - // // return switch (getScreenType(list)) { - // // case CRYSTAL_HOLLOWS -> null; - // // case DUNGEON -> null; - // // default -> new EmptyScreen(w, h, list, footer); - // // }; - // return new EmptyScreen(w, h, list, footer); - // } - - private static Screen correctGenericScrn(int w, int h, List<PlayerListEntry> list, Text footer) { + private static Screen correctGenericScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case GARDEN -> new GardenInfoScreen(w, h, list, footer); // ok - default -> new GenericInfoScreen(w, h, list, footer); // ok + case GARDEN -> new GardenInfoScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericInfoScreen(w, h, footer); // ok }; } - private static Screen correctPlayerScrn(int w, int h, List<PlayerListEntry> list, Text footer) { + private static Screen correctPlayerScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomePlayerScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonPlayerScreen(w, h, list, footer); - default -> new PlayerListScreen(w, h, list, footer); // ok + case GUEST_ISLAND -> new GuestPlayerScreen(w, h, footer); // ok + case HOME_ISLAND, GARDEN -> new HomePlayerScreen(w, h, footer); // ok for 1 player + case DUNGEON -> new DungeonPlayerScreen(w, h, footer); + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new PlayerListScreen(w, h, footer); // ok }; } - private static Screen correctMainScrn(int w, int h, List<PlayerListEntry> list, Text footer) { + private static Screen correctMainScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { - case PARK -> new ParkServerScreen(w, h, list, footer); // ok - case HUB -> new HubServerScreen(w, h, list, footer); // ok - case HOME_ISLAND -> new HomeServerScreen(w, h, list, footer); // ok - case GUEST_ISLAND -> new GuestServerScreen(w, h, list, footer); // ok - case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, list, footer); - case FARMING_ISLAND -> new FarmingServerScreen(w, h, list, footer); // ok - case DUNGEON_HUB -> new DungeonHubScreen(w, h, list, footer); // ok - case DUNGEON -> new DungeonScreen(w, h, list, footer); // ok - case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, list, footer); // ??? - case GARDEN -> new GardenScreen(w, h, list, footer); - default -> new GenericServerScreen(w, h, list, footer); // ok + case PARK -> new ParkServerScreen(w, h, footer); // ok + case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming, TODO active fs, no fs + case HOME_ISLAND -> new HomeServerScreen(w, h, footer); // ok + case GUEST_ISLAND -> new GuestServerScreen(w, h, footer); // ok + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO 4 comms, active forge + case FARMING_ISLAND -> new FarmingServerScreen(w, h, footer); + case DUNGEON_HUB -> new DungeonHubScreen(w, h, footer); // ok + case DUNGEON -> new DungeonScreen(w, h, footer); // ok + case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer); + case GARDEN -> new GardenScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericServerScreen(w, h, footer); // ok }; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java index f24fb82a..0bb12c8e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; @@ -10,24 +10,24 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GardenInfoScreen extends Screen { - public GardenInfoScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public GardenInfoScreen(int w, int h, Text footer) { super(w, h); String f = footer.getString(); - GardenSkillsWidget gsw = new GardenSkillsWidget(ple); - EventWidget evw = new EventWidget(ple, true); + GardenSkillsWidget gsw = new GardenSkillsWidget(); + EventWidget evw = new EventWidget(true); UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(ple); + ProfileWidget pw = new ProfileWidget(); EffectWidget efw = new EffectWidget(f); - JacobsContestWidget jcw = new JacobsContestWidget(ple); + JacobsContestWidget jcw = new JacobsContestWidget(); CookieWidget cw = new CookieWidget(f); // layout code incoming diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java index 764397ae..a3e75ab6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; @@ -11,24 +11,24 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.SkillsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GenericInfoScreen extends Screen { - public GenericInfoScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public GenericInfoScreen(int w, int h, Text footer) { super(w, h); String f = footer.getString(); - SkillsWidget sw = new SkillsWidget(ple); - EventWidget evw = new EventWidget(ple, false); + SkillsWidget sw = new SkillsWidget(); + EventWidget evw = new EventWidget(false); UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(ple); + ProfileWidget pw = new ProfileWidget(); EffectWidget efw = new EffectWidget(f); - ElectionWidget elw = new ElectionWidget(ple); + ElectionWidget elw = new ElectionWidget(); CookieWidget cw = new CookieWidget(f); this.stackWidgetsH(sw, evw, uw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java index 046abcbb..6e6f563b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java @@ -1,24 +1,24 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.QuestWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ReputationWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.VolcanoWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class CrimsonIsleScreen extends Screen { - public CrimsonIsleScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public CrimsonIsleScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); - ReputationWidget rw = new ReputationWidget(ple); - QuestWidget qw = new QuestWidget(ple); - VolcanoWidget vw = new VolcanoWidget(ple); + ServerWidget sw = new ServerWidget(); + ReputationWidget rw = new ReputationWidget(); + QuestWidget qw = new QuestWidget(); + VolcanoWidget vw = new VolcanoWidget(); this.stackWidgetsH(sw, rw); this.stackWidgetsH(qw, vw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java index 4f721dfc..5db461af 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java @@ -1,21 +1,19 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class DungeonHubScreen extends Screen{ - public DungeonHubScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public DungeonHubScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - EssenceWidget ew = new EssenceWidget(list); + ServerWidget sw = new ServerWidget(); + EssenceWidget ew = new EssenceWidget(); this.centerW(sw); this.centerW(ew); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java index 35383f1b..98ce476e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget; @@ -9,18 +9,18 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class DungeonScreen extends Screen { - public DungeonScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public DungeonScreen(int w, int h, Text footer) { super(w, h); - DungeonDownedWidget ddow = new DungeonDownedWidget(ple); - DungeonDeathWidget ddew = new DungeonDeathWidget(ple); - DungeonSecretWidget dscw = new DungeonSecretWidget(ple); - DungeonServerWidget dsrw = new DungeonServerWidget(ple); - DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple); + DungeonDownedWidget ddow = new DungeonDownedWidget(); + DungeonDeathWidget ddew = new DungeonDeathWidget(); + DungeonSecretWidget dscw = new DungeonSecretWidget(); + DungeonServerWidget dsrw = new DungeonServerWidget(); + DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(); this.offCenterL(ddow); this.offCenterL(ddew); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java index 206af26c..02c81f23 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class FarmingServerScreen extends Screen{ - public FarmingServerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public FarmingServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - TrapperWidget tw = new TrapperWidget(list); + ServerWidget sw = new ServerWidget(); + TrapperWidget tw = new TrapperWidget(); this.centerW(sw); this.centerW(tw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java index 3debf905..ae5b642f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java @@ -1,20 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class GardenScreen extends Screen{ - public GardenScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public GardenScreen(int w, int h, Text footer) { super(w, h); - GardenServerWidget gsw = new GardenServerWidget(ple); - ComposterWidget cw = new ComposterWidget(ple); + GardenServerWidget gsw = new GardenServerWidget(); + ComposterWidget cw = new ComposterWidget(); this.stackWidgetsH(gsw, cw); this.centerW(gsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java index 8afdcac5..a89563db 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java @@ -1,19 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class GenericServerScreen extends Screen { - public GenericServerScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public GenericServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); + ServerWidget sw = new ServerWidget(); this.center(sw); this.addWidget(sw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java index b6388be9..57d7a199 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java @@ -1,19 +1,19 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GuestServerScreen extends Screen{ - public GuestServerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public GuestServerScreen(int w, int h, Text footer) { super(w, h); - GuestServerWidget gsw = new GuestServerWidget(list); + GuestServerWidget gsw = new GuestServerWidget(); this.center(gsw); this.addWidget(gsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java index 9ce8ee0e..e61ba4b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandServerWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.MinionWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HomeServerScreen extends Screen { - public HomeServerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public HomeServerScreen(int w, int h, Text footer) { super(w, h); - IslandServerWidget isw = new IslandServerWidget(list); - MinionWidget mw = new MinionWidget(list); + IslandServerWidget isw = new IslandServerWidget(); + MinionWidget mw = new MinionWidget(); this.centerH(isw); this.centerH(mw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java index 3ba8fc47..e2857f7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.FireSaleWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HubServerScreen extends Screen { - public HubServerScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public HubServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(ple); - FireSaleWidget fsw = new FireSaleWidget(ple); + ServerWidget sw = new ServerWidget(); + FireSaleWidget fsw = new FireSaleWidget(); this.centerW(sw); this.centerW(fsw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java index f0dd6e0a..22eb0ffa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; @@ -8,18 +8,18 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ForgeWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PowderWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class MineServerScreen extends Screen{ - public MineServerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public MineServerScreen(int w, int h, Text footer) { super(w, h); - ServerWidget sw = new ServerWidget(list); - PowderWidget pw = new PowderWidget(list); - CommsWidget cw = new CommsWidget(list); - ForgeWidget fw = new ForgeWidget(list); + ServerWidget sw = new ServerWidget(); + PowderWidget pw = new PowderWidget(); + CommsWidget cw = new CommsWidget(); + ForgeWidget fw = new ForgeWidget(); this.stackWidgetsH(sw, pw, cw); this.centerH(fw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java index c1d09f6c..aa65d946 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java @@ -1,19 +1,16 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class ParkServerScreen extends Screen{ - public ParkServerScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public ParkServerScreen(int w, int h, Text footer) { super(w, h); - ParkServerWidget sw = new ParkServerWidget(ple); + ParkServerWidget sw = new ParkServerWidget(); this.center(sw); this.addWidget(sw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java index aba19c56..64d0db99 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java @@ -1,23 +1,23 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class DungeonPlayerScreen extends Screen { - public DungeonPlayerScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public DungeonPlayerScreen(int w, int h, Text footer) { super(w, h); - DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1); - DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2); - DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3); - DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4); - DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5); + DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(1); + DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(2); + DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(3); + DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(4); + DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(5); this.offCenterL(dpw1); this.offCenterL(dpw2); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java index f8210443..5a9733cc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandOwnersWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class GuestPlayerScreen extends Screen{ - public GuestPlayerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public GuestPlayerScreen(int w, int h, Text footer) { super(w, h); - IslandGuestsWidget igw = new IslandGuestsWidget(list); - IslandOwnersWidget iow = new IslandOwnersWidget(list); + IslandGuestsWidget igw = new IslandGuestsWidget(); + IslandOwnersWidget iow = new IslandOwnersWidget(); this.centerH(iow); this.centerH(igw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java index d89f6d6a..2a159ecc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java @@ -1,21 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; + import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandGuestsWidget; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.IslandSelfWidget; -import net.minecraft.client.network.PlayerListEntry; + import net.minecraft.text.Text; public class HomePlayerScreen extends Screen { - public HomePlayerScreen(int w, int h, List<PlayerListEntry> list, Text footer) { + public HomePlayerScreen(int w, int h, Text footer) { super(w, h); - IslandSelfWidget isw = new IslandSelfWidget(list); - IslandGuestsWidget igw = new IslandGuestsWidget(list); + IslandSelfWidget isw = new IslandSelfWidget(); + IslandGuestsWidget igw = new IslandGuestsWidget(); this.centerH(isw); this.centerH(igw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java index eca2e4aa..5db01512 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java @@ -1,19 +1,17 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.Text; public class PlayerListScreen extends Screen { - public PlayerListScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + public PlayerListScreen(int w, int h, Text footer) { super(w, h); - PlayerListWidget plw = new PlayerListWidget(ple); + PlayerListWidget plw = new PlayerListWidget(); this.center(plw); this.addWidget(plw); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java new file mode 100644 index 00000000..6243415d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -0,0 +1,92 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.util; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class PlayerListMgr { + + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); + + private static List<PlayerListEntry> playerList; + + public static void updateList() { + + if (!Utils.isOnSkyblock) { + return; + } + + ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); + + // check is needed, else crash on server leave + if (cpnwh != null) { + + playerList = cpnwh.getPlayerList() + .stream() + .sorted(PlayerListHudAccessor.getOrdering()) + .toList(); + } + } + + // apply pattern to entry at index of player list. + // return null if there's nothing to match against in the entry, + // or if the pattern doesn't fully match. + public static Matcher regexAt(int idx, Pattern p) { + + String str = PlayerListMgr.strAt(idx); + + if (str == null) { + return null; + } + + Matcher m = p.matcher(str); + if (!m.matches()) { + LOGGER.debug("no match: \"{}\" against \"{}\"", str, p); + return null; + } else { + return m; + } + } + + // return string (i.e. displayName) at index of player list. + // return null if string is null, empty or whitespace only. + public static String strAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + String str = txt.getString().trim(); + if (str.length() == 0) { + return null; + } + return str; + } + + public static PlayerListEntry getRaw(int i) { + return playerList.get(i); + } + + public static int getSize() { + return playerList.size(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index cffac5c4..eb8210d9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -1,11 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.util; -import java.util.List; - -import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.PlayerListEntry; public class PlayerLocator { @@ -26,8 +21,7 @@ public class PlayerLocator { SPIDER_DEN, JERRY, GARDEN, - UNKNOWN, - NONE + UNKNOWN } public static Location getPlayerLocation() { @@ -36,19 +30,22 @@ public class PlayerLocator { return Location.UNKNOWN; } - List<PlayerListEntry> ple = MinecraftClient.getInstance().getNetworkHandler().getPlayerList().stream() - .sorted(PlayerListHudAccessor.getOrdering()).toList(); + if (Utils.isInDungeons) { + return Location.DUNGEON; + } - String cat2Name = StrMan.strAt(ple, 40); + String areaDesciptor = PlayerListMgr.strAt(41); - if (cat2Name.contains("Dungeon Stats")) { - return Location.DUNGEON; + if (areaDesciptor == null || areaDesciptor.length() < 6) { + return Location.UNKNOWN; } - String areaDesciptor = StrMan.strAt(ple, 41).substring(6); - switch (areaDesciptor) { + switch (areaDesciptor.substring(6)) { case "Private Island": - if (ple.get(44).getDisplayName().getString().endsWith("Guest")) { + String islandType = PlayerListMgr.strAt(44); + if (islandType == null) { + return Location.UNKNOWN; + } else if (islandType.endsWith("Guest")) { return Location.GUEST_ISLAND; } else { return Location.HOME_ISLAND; @@ -80,7 +77,7 @@ public class PlayerLocator { case "Garden": return Location.GARDEN; default: - return Location.NONE; + return Location.UNKNOWN; } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java deleted file mode 100644 index 4a30cf0f..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java +++ /dev/null @@ -1,68 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.util; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -public class StrMan { - - private static final Logger LOGGER = LoggerFactory.getLogger(StrMan.class.getName()); - private static final Text ERROR_TXT = Text.literal("[ERROR]").formatted(Formatting.RED, Formatting.BOLD); - - public static Text stdEntry(List<PlayerListEntry> ple, int idx, String entryName, Formatting contentFmt) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return ERROR_TXT; - } - String src = txt.getString(); - src = src.substring(src.indexOf(':') + 1); - return StrMan.stdEntry(src, entryName, contentFmt); - } - - public static Text stdEntry(String entryContent, String entryName, Formatting contentFmt) { - return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); - } - - public static Text plainEntry(List<PlayerListEntry> ple, int idx) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return ERROR_TXT; - } - return Text.of(txt.getString().trim()); - } - - public static Matcher regexAt(List<PlayerListEntry> ple, int idx, Pattern p) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - String str = txt.getString(); - if (str.length() == 0) { - return null; - } - - Matcher m = p.matcher(str); - if (!m.matches()) { - LOGGER.error("ERROR: Regex {} failed for input \"{}\"", p.pattern(), str); - return null; - } else { - return m; - } - } - - public static String strAt(List<PlayerListEntry> ple, int idx) { - Text txt = ple.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - return txt.getString(); - } - -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java index e45865e4..de90cf30 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java @@ -6,11 +6,11 @@ import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -27,23 +27,31 @@ public class CommsWidget extends Widget { // match a comm // group 1: comm name // group 2: comm progress (without "%" for comms that show a percentage) - private static final Pattern COMM_PATTERN = Pattern.compile(" (.*): (.*)%?"); + private static final Pattern COMM_PATTERN = Pattern.compile("(?<name>.*): (?<progress>.*)%?"); - public CommsWidget(List<PlayerListEntry> list) { + public CommsWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); for (int i = 50; i <= 53; i++) { - Matcher m = StrMan.regexAt(list, i, COMM_PATTERN); + Matcher m = PlayerListMgr.regexAt(i, COMM_PATTERN); + // end of comms found? if (m == null) { + if (i == 50) { + this.addComponent(new IcoTextComponent()); + } break; } - String g2 = m.group(2); + ProgressComponent pc; - if (g2.equals("DONE")) { - pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), Text.of(g2), 100f, pcntToCol(100)); + + String name = m.group("name"); + String progress = m.group("progress"); + + if (progress.equals("DONE")) { + pc = new ProgressComponent(Ico.BOOK, Text.of(name), Text.of(progress), 100f, pcntToCol(100)); } else { - float pcnt = Float.parseFloat(g2.substring(0, g2.length() - 1)); - pc = new ProgressComponent(Ico.BOOK, Text.of(m.group(1)), pcnt, pcntToCol(pcnt)); + float pcnt = Float.parseFloat(progress.substring(0, progress.length() - 1)); + pc = new ProgressComponent(Ico.BOOK, Text.of(name), pcnt, pcntToCol(pcnt)); } this.addComponent(pc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java index 2537b90a..5922fcbc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,25 +14,13 @@ public class ComposterWidget extends Widget { private static final MutableText TITLE = Text.literal("Composter").formatted(Formatting.GREEN, Formatting.BOLD); - - public ComposterWidget(List<PlayerListEntry> list) { + public ComposterWidget() { super(TITLE, Formatting.GREEN.getColorValue()); - Text matter = StrMan.stdEntry(list, 48, "Organic Matter:", Formatting.YELLOW); - IcoTextComponent mat = new IcoTextComponent(Ico.SAPLING, matter); - this.addComponent(mat); - - Text fuel = StrMan.stdEntry(list, 49, "Fuel:", Formatting.BLUE); - IcoTextComponent f = new IcoTextComponent(Ico.FURNACE, fuel); - this.addComponent(f); - - Text timeLeft = StrMan.stdEntry(list, 50, "Time Left:", Formatting.RED); - IcoTextComponent time = new IcoTextComponent(Ico.CLOCK, timeLeft); - this.addComponent(time); - - Text compost = StrMan.stdEntry(list, 51, "Stored Compost:", Formatting.DARK_GREEN); - IcoTextComponent comp = new IcoTextComponent(Ico.COMPOSTER, compost); - this.addComponent(comp); + this.addSimpleIcoText(Ico.SAPLING, "Organic Matter:", Formatting.YELLOW, 48); + this.addSimpleIcoText(Ico.FURNACE, "Fuel:", Formatting.BLUE, 49); + this.addSimpleIcoText(Ico.CLOCK, "Time Left:", Formatting.RED, 50); + this.addSimpleIcoText(Ico.COMPOSTER, "Stored Compost:", Formatting.DARK_GREEN, 51); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java index 8974efa7..42298fcd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; - import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -15,15 +17,23 @@ public class CookieWidget extends Widget { private static final MutableText TITLE = Text.literal("Cookie Info").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); + private static final Pattern COOKIE_PATTERN = Pattern.compile(".*\\nCookie Buff\\n(?<buff>.*)\\n"); + public CookieWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - String interesting = footertext.split("Cookie Buff")[1]; - String[] lines = interesting.split("\n"); - if (lines[1].startsWith("Not")) { + Matcher m = COOKIE_PATTERN.matcher(footertext); + if (!m.find() || m.group("buff") == null) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } + + String buff = m.group("buff"); + if (buff.startsWith("Not")) { this.addComponent(new IcoTextComponent(Ico.COOKIE, Text.of("Not active"))); } else { - Text cookie = Text.literal("Time Left: ").append(lines[1]); + Text cookie = Text.literal("Time Left: ").append(buff); this.addComponent(new IcoTextComponent(Ico.COOKIE, cookie)); } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java index 928d9f76..3e5d8d6a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,28 +21,24 @@ public class DungeonDeathWidget extends Widget { // match the deaths entry // group 1: amount of deaths - private static final Pattern DEATH_PATTERN = Pattern.compile("\\S*: \\((\\d+)\\).*"); + private static final Pattern DEATH_PATTERN = Pattern.compile("\\S*: \\((?<deathnum>\\d+)\\).*"); - public DungeonDeathWidget(List<PlayerListEntry> list) { + public DungeonDeathWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Matcher m = StrMan.regexAt(list, 25, DEATH_PATTERN); - Formatting f = (m.group(1).equals("0")) ? Formatting.GREEN : Formatting.RED; - Text d = Text.literal("Deaths: ").append(Text.literal(m.group(1)).formatted(f)); - IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); - this.addComponent(deaths); - - Text dealt = StrMan.stdEntry(list, 26, "Damage Dealt:", Formatting.RED); - IcoTextComponent de = new IcoTextComponent(Ico.SWORD, dealt); - this.addComponent(de); - - Text heal = StrMan.stdEntry(list, 27, "Healing Done:", Formatting.RED); - IcoTextComponent he = new IcoTextComponent(Ico.POTION, heal); - this.addComponent(he); - - Text mile = StrMan.stdEntry(list, 28, "Milestone:", Formatting.YELLOW); - IcoTextComponent mi = new IcoTextComponent(Ico.NTAG, mile); - this.addComponent(mi); + Matcher m = PlayerListMgr.regexAt( 25, DEATH_PATTERN); + if (m == null) { + this.addComponent(new IcoTextComponent()); + } else { + Formatting f = (m.group("deathnum").equals("0")) ? Formatting.GREEN : Formatting.RED; + Text d = Text.literal("Deaths: ").append(Text.literal(m.group("deathnum")).formatted(f)); + IcoTextComponent deaths = new IcoTextComponent(Ico.SKULL, d); + this.addComponent(deaths); + } + + this.addSimpleIcoText(Ico.SWORD, "Damage Dealt:", Formatting.RED, 26); + this.addSimpleIcoText(Ico.POTION, "Healing Done:", Formatting.RED, 27); + this.addSimpleIcoText(Ico.NTAG, "Milestone:", Formatting.YELLOW, 28); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java index 36245a4e..35926d7d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java @@ -1,12 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -19,23 +16,20 @@ public class DungeonDownedWidget extends Widget { private static final MutableText TITLE = Text.literal("Downed").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); - public DungeonDownedWidget(List<PlayerListEntry> list) { + public DungeonDownedWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); Formatting format = Formatting.RED; - if (StrMan.strAt(list, 21).endsWith("NONE")) { + String down = PlayerListMgr.strAt(21); + if (down != null && down.endsWith("NONE")) { format = Formatting.GRAY; } - Text downed = StrMan.stdEntry(list, 21, "Downed:", format); - IcoTextComponent down = new IcoTextComponent(Ico.SKULL, downed); - this.addComponent(down); - - Text time = StrMan.stdEntry(list, 22, "Time:", Formatting.GRAY); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + int idx = down.indexOf(": "); + Text downed = (down == null || idx== -1) ? null : Widget.simpleEntryText(down.substring(idx + 2), "Downed:", format); + IcoTextComponent d = new IcoTextComponent(Ico.SKULL, downed); + this.addComponent(d); - Text revive = StrMan.stdEntry(list, 23, "Revive:", Formatting.GRAY); - IcoTextComponent rev = new IcoTextComponent(Ico.POTION, revive); - this.addComponent(rev); + this.addSimpleIcoText(Ico.CLOCK, "Time:", Formatting.GRAY, 22); + this.addSimpleIcoText(Ico.POTION, "Revive:", Formatting.GRAY, 23); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java index 7195e455..8f28a2c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java @@ -2,14 +2,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -28,7 +26,8 @@ public class DungeonPlayerWidget extends Widget { // group 3: level (or nothing, if pre dungeon start) // as a side effect, this regex keeps the iron man icon in the name // not sure if that should be - private static final Pattern PLAYER_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\((\\S*) ?([LXVI]*)\\)"); + private static final Pattern PLAYER_PATTERN = Pattern + .compile("\\[\\d*\\] (?<name>.*) \\((?<class>\\S*) ?(?<level>[LXVI]*)\\)"); private static final HashMap<String, ItemStack> ICOS = new HashMap<>(); private static final ArrayList<String> MSGS = new ArrayList<>(); @@ -42,45 +41,49 @@ public class DungeonPlayerWidget extends Widget { MSGS.add("PRESS A TO JOIN"); MSGS.add("Invite a friend!"); MSGS.add("But nobody came."); + MSGS.add("More is better!"); } // title needs to be changeable here - public DungeonPlayerWidget(List<PlayerListEntry> list, int player) { + public DungeonPlayerWidget(int player) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); int start = 1 + (player - 1) * 4; - if (list.get(start).getDisplayName().getString().length() < 2) { - this.addComponent( - new IcoTextComponent(Ico.SIGN, Text.literal(MSGS.get((int)(Math.random()*MSGS.size()))).formatted(Formatting.GRAY))); + if (PlayerListMgr.strAt(start) == null) { + int idx = player - 2; + IcoTextComponent noplayer = new IcoTextComponent(Ico.SIGN, + Text.literal(MSGS.get(idx)).formatted(Formatting.GRAY)); + this.addComponent(noplayer); + this.pack(); + return; + } + Matcher m = PlayerListMgr.regexAt(start, PLAYER_PATTERN); + if (m == null) { + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); } else { - Matcher m = StrMan.regexAt(list, start, PLAYER_PATTERN); - Text name = Text.literal("Name: ").append(Text.literal(m.group(1)).formatted(Formatting.YELLOW)); + Text name = Text.literal("Name: ").append(Text.literal(m.group("name")).formatted(Formatting.YELLOW)); this.addComponent(new IcoTextComponent(Ico.PLAYER, name)); - String cl = m.group(2); + String cl = m.group("class"); Formatting clf = Formatting.GRAY; ItemStack cli = Ico.BARRIER; if (!cl.equals("EMPTY")) { cli = ICOS.get(cl); clf = Formatting.LIGHT_PURPLE; - cl += " " + m.group(3); + cl += " " + m.group("level"); } - Text class_ = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); - IcoTextComponent itclass = new IcoTextComponent(cli, class_); + Text clazz = Text.literal("Class: ").append(Text.literal(cl).formatted(clf)); + IcoTextComponent itclass = new IcoTextComponent(cli, clazz); this.addComponent(itclass); + } - Text ult = StrMan.stdEntry(list, start + 1, "Ult Cooldown:", Formatting.GOLD); - IcoTextComponent ul = new IcoTextComponent(Ico.CLOCK, ult); - this.addComponent(ul); - - Text revive = StrMan.stdEntry(list, start + 2, "Revives:", Formatting.DARK_PURPLE); - IcoTextComponent re = new IcoTextComponent(Ico.POTION, revive); - this.addComponent(re); + this.addSimpleIcoText(Ico.CLOCK, "Ult Cooldown:", Formatting.GOLD, start + 1); + this.addSimpleIcoText(Ico.POTION, "Revives:", Formatting.DARK_PURPLE, start + 2); - } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java index 86d1f938..b689228d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -25,20 +23,22 @@ public class DungeonPuzzleWidget extends Widget { // group 2: status // " ?.*" to diescard the solver's name if present // the teleport maze has a trailing whitespace that messes with the regex - private static final Pattern PUZZLE_PATTERN = Pattern.compile(" (.*): \\[(.*)\\] ?.*"); + private static final Pattern PUZZLE_PATTERN = Pattern.compile("(?<name>.*): \\[(?<status>.*)\\] ?.*"); - public DungeonPuzzleWidget(List<PlayerListEntry> list) { + public DungeonPuzzleWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); int pos = 48; while (pos < 60) { - Matcher m = StrMan.regexAt(list, pos, PUZZLE_PATTERN); + Matcher m = PlayerListMgr.regexAt(pos, PUZZLE_PATTERN); if (m == null) { break; } - Text t = Text.literal(m.group(1) + ": ").append(Text.literal("[").formatted(Formatting.GRAY)) - .append(m.group(2)).append(Text.literal("]").formatted(Formatting.GRAY)); + Text t = Text.literal(m.group("name") + ": ") + .append(Text.literal("[").formatted(Formatting.GRAY)) + .append(m.group("status")) + .append(Text.literal("]").formatted(Formatting.GRAY)); IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, t); this.addComponent(itc); pos++; @@ -46,6 +46,10 @@ public class DungeonPuzzleWidget extends Widget { // not sure which one is which // still need to find out codepoint for the puzzle failed char } + if (pos == 48) { + this.addComponent( + new IcoTextComponent(Ico.BARRIER, Text.literal("No puzzles!").formatted(Formatting.GRAY))); + } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java index e0c83a35..2c760dad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java @@ -1,12 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,16 +13,11 @@ public class DungeonSecretWidget extends Widget { private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE, Formatting.BOLD); - public DungeonSecretWidget(List<PlayerListEntry> list) { + public DungeonSecretWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Text secrets = StrMan.stdEntry(list, 31, "Secrets:", Formatting.YELLOW); - IcoTextComponent sec = new IcoTextComponent(Ico.CHEST, secrets); - this.addComponent(sec); - - Text crypts = StrMan.stdEntry(list, 32, "Crypts:", Formatting.YELLOW); - IcoTextComponent cry = new IcoTextComponent(Ico.SKULL, crypts); - this.addComponent(cry); + this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31); + this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java index 89d3b1ca..8801df68 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java @@ -1,15 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -24,31 +21,25 @@ public class DungeonServerWidget extends Widget { // match the secrets text // group 1: % of secrets found (without "%") - private static final Pattern SECRET_PATTERN = Pattern.compile(" Secrets Found: (.*)%"); + private static final Pattern SECRET_PATTERN = Pattern.compile("Secrets Found: (?<secnum>.*)%"); - public DungeonServerWidget(List<PlayerListEntry> list) { + public DungeonServerWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - Text name = StrMan.stdEntry(list, 41, "Name:", Formatting.AQUA); - IcoTextComponent na = new IcoTextComponent(Ico.NTAG, name); - this.addComponent(na); - - Text open = StrMan.stdEntry(list, 42, "Rooms Visited:", Formatting.DARK_PURPLE); - IcoTextComponent op = new IcoTextComponent(Ico.SIGN, open); - this.addComponent(op); - - Text compl = StrMan.stdEntry(list, 43, "Rooms Completed:", Formatting.LIGHT_PURPLE); - IcoTextComponent co = new IcoTextComponent(Ico.SIGN, compl); - this.addComponent(co); - - Matcher m = StrMan.regexAt(list, 44, SECRET_PATTERN); - Text secrets = Text.of("Secrets found:"); - ProgressComponent scp = new ProgressComponent(Ico.CHEST, secrets, Float.parseFloat(m.group(1)), - Formatting.DARK_PURPLE.getColorValue()); - this.addComponent(scp); - - Text time = StrMan.stdEntry(list, 45, "Time:", Formatting.GOLD); - IcoTextComponent ti = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(ti); + + this.addSimpleIcoText(Ico.NTAG, "Name:", Formatting.AQUA, 41); + this.addSimpleIcoText(Ico.SIGN, "Rooms Visited:", Formatting.DARK_PURPLE, 42); + this.addSimpleIcoText(Ico.SIGN, "Rooms Completed:", Formatting.LIGHT_PURPLE, 43); + + Matcher m = PlayerListMgr.regexAt(44, SECRET_PATTERN); + if (m == null) { + this.addComponent(new ProgressComponent()); + } else { + ProgressComponent scp = new ProgressComponent(Ico.CHEST, Text.of("Secrets found:"), Float.parseFloat(m.group("secnum")), + Formatting.DARK_PURPLE.getColorValue()); + this.addComponent(scp); + } + + this.addSimpleIcoText(Ico.CLOCK, "Time:", Formatting.GOLD, 45); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java index d44d1ea7..b24f7535 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java @@ -20,8 +20,19 @@ public class EffectWidget extends Widget { public EffectWidget(String footertext) { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); - String interesting = footertext.split("Active Effects")[1]; - String[] lines = interesting.split("\n"); + if (footertext == null ||!footertext.contains("Active Effects")) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + + } + + String[] lines = footertext.split("Active Effects")[1].split("\n"); + if (lines.length < 2) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } if (lines[1].startsWith("No")) { Text txt = Text.literal("No effects active").formatted(Formatting.GRAY); @@ -34,7 +45,13 @@ public class EffectWidget extends Widget { this.addComponent(iftc); } else { String number = lines[1].substring("You have ".length()); - number = number.substring(0, number.indexOf(' ')); + int idx = number.indexOf(' '); + if (idx == -1 ||lines.length < 4) { + this.addComponent(new IcoFatTextComponent()); + this.pack(); + return; + } + number = number.substring(0, idx); Text active = Text.literal("Active Effects: ").append(Text.literal(number).formatted(Formatting.YELLOW)); IcoFatTextComponent iftc = new IcoFatTextComponent(Ico.POTION, active, diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index 1c845467..1a26026e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -1,16 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -31,7 +29,7 @@ public class ElectionWidget extends Widget { // pattern matching a candidate while people are voting // group 1: name // group 2: % of votes - private static final Pattern VOTE_PATTERN = Pattern.compile(" (\\S*): \\|+ \\((\\d*)%\\)"); + private static final Pattern VOTE_PATTERN = Pattern.compile("(?<mayor>\\S*): \\|+ \\((?<pcnt>\\d*)%\\)"); static { MAYOR_DATA.put("Aatrox", Ico.DIASWORD); @@ -49,44 +47,55 @@ public class ElectionWidget extends Widget { private static final Formatting[] COLS = { Formatting.GOLD, Formatting.RED, Formatting.LIGHT_PURPLE }; - public ElectionWidget(List<PlayerListEntry> list) { + public ElectionWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - if (StrMan.strAt(list, 76).contains("Over!")) { + String status = PlayerListMgr.strAt(76); + if (status == null) { + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } + + if (status.contains("Over!")) { // election is over IcoTextComponent over = new IcoTextComponent(Ico.BARRIER, EL_OVER); this.addComponent(over); - String winnername = StrMan.strAt(list, 77).split(": ")[1]; - Text winnertext = Text.literal("Winner: ") - .append(Text.literal(winnername).formatted(Formatting.GREEN)); - IcoTextComponent winner = new IcoTextComponent(MAYOR_DATA.get(winnername), winnertext); - this.addComponent(winner); - - Text participants = StrMan.stdEntry(list, 78, "Participants:", Formatting.AQUA); - IcoTextComponent part = new IcoTextComponent(Ico.PLAYER, participants); - this.addComponent(part); + String win = PlayerListMgr.strAt(77); + if (win == null || !win.contains(": ")) { + this.addComponent(new IcoTextComponent()); + } else { + String winnername = win.split(": ")[1]; + Text winnertext = Widget.simpleEntryText(winnername, "Winner: ", Formatting.GREEN); + IcoTextComponent winner = new IcoTextComponent(MAYOR_DATA.get(winnername), winnertext); + this.addComponent(winner); + } - Text year = StrMan.stdEntry(list, 79, "Year:", Formatting.LIGHT_PURPLE); - IcoTextComponent y = new IcoTextComponent(Ico.SIGN, year); - this.addComponent(y); + this.addSimpleIcoText(Ico.PLAYER, "Participants:", Formatting.AQUA, 78); + this.addSimpleIcoText(Ico.SIGN, "Year:", Formatting.LIGHT_PURPLE, 79); } else { // election is going on - Text time = StrMan.stdEntry(list, 76, "End in:", Formatting.GOLD); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + this.addSimpleIcoText(Ico.CLOCK, "End in:", Formatting.GOLD, 76); for (int i = 77; i <= 79; i++) { - Matcher m = StrMan.regexAt(list, i, VOTE_PATTERN); - String g1 = m.group(1); - String g2 = m.group(2); - float pcnt = Float.parseFloat(g2); - Text candidate = Text.literal(g1).formatted(COLS[i - 77]); - ProgressComponent pc = new ProgressComponent(MAYOR_DATA.get(g1), candidate, pcnt, - COLS[i - 77].getColorValue()); - this.addComponent(pc); - + Matcher m = PlayerListMgr.regexAt(i, VOTE_PATTERN); + if (m == null) { + this.addComponent(new ProgressComponent()); + } else { + + String mayorname = m.group("mayor"); + String pcntstr = m.group("pcnt"); + float pcnt = Float.parseFloat(pcntstr); + Text candidate = Text.literal(mayorname).formatted(COLS[i - 77]); + ProgressComponent pc = new ProgressComponent(MAYOR_DATA.get(mayorname), candidate, pcnt, + COLS[i - 77].getColorValue()); + this.addComponent(pc); + } } } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java index 584a593e..52d6cfbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java @@ -1,10 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -15,7 +12,7 @@ public class EmptyWidget extends Widget { private static final MutableText TITLE = Text.literal("Empty").formatted(Formatting.RED, Formatting.BOLD); - public EmptyWidget(List<PlayerListEntry> list) { + public EmptyWidget() { super(TITLE, Formatting.RED.getColorValue()); Text info = Text.of("No info for this area!"); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java index 7063ce3f..fc0780e1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java @@ -1,13 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -21,16 +17,16 @@ public class EssenceWidget extends Widget { private static final MutableText TITLE = Text.literal("Essences").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public EssenceWidget(List<PlayerListEntry> list) { + public EssenceWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - wither = StrMan.stdEntry(list, 46, "Wither:", Formatting.DARK_PURPLE); - spider = StrMan.stdEntry(list, 47, "Spider:", Formatting.DARK_PURPLE); - undead = StrMan.stdEntry(list, 48, "Undead:", Formatting.DARK_PURPLE); - dragon = StrMan.stdEntry(list, 49, "Dragon:", Formatting.DARK_PURPLE); - gold = StrMan.stdEntry(list, 50, "Gold:", Formatting.DARK_PURPLE); - diamond = StrMan.stdEntry(list, 51, "Diamond:", Formatting.DARK_PURPLE); - ice = StrMan.stdEntry(list, 52, "Ice:", Formatting.DARK_PURPLE); - crimson = StrMan.stdEntry(list, 53, "Crimson:", Formatting.DARK_PURPLE); + wither = Widget.simpleEntryText(46, "Wither:", Formatting.DARK_PURPLE); + spider = Widget.simpleEntryText(47, "Spider:", Formatting.DARK_PURPLE); + undead = Widget.simpleEntryText(48, "Undead:", Formatting.DARK_PURPLE); + dragon = Widget.simpleEntryText(49, "Dragon:", Formatting.DARK_PURPLE); + gold = Widget.simpleEntryText(50, "Gold:", Formatting.DARK_PURPLE); + diamond = Widget.simpleEntryText(51, "Diamond:", Formatting.DARK_PURPLE); + ice = Widget.simpleEntryText(52, "Ice:", Formatting.DARK_PURPLE); + crimson = Widget.simpleEntryText(53, "Crimson:", Formatting.DARK_PURPLE); TableComponent tc = new TableComponent(2, 4, Formatting.DARK_AQUA.getColorValue()); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index eb741566..f9483bde 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -16,19 +12,17 @@ import net.minecraft.util.Formatting; public class EventWidget extends Widget { private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); - public EventWidget(List<PlayerListEntry> list, boolean isInGarden) { + public EventWidget(boolean isInGarden) { super(TITLE, Formatting.YELLOW.getColorValue()); // hypixel devs carefully inserting the most random edge cases #317: // the event info is placed a bit differently when in the garden. int offset = (isInGarden) ? -1 : 0; - Text eventName = StrMan.stdEntry(list, 73 + offset, "Name:", Formatting.YELLOW); - IcoTextComponent event = new IcoTextComponent(Ico.NTAG, eventName); - this.addComponent(event); + this.addSimpleIcoText(Ico.NTAG, "Name:", Formatting.YELLOW, 73 + offset); // this could look better - Text time = StrMan.plainEntry(list, 74 + offset); + Text time = Widget.plainEntryText(74 + offset); IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); this.addComponent(t); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java index 9b7b2678..ddf51f32 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java @@ -1,16 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; @@ -26,38 +23,40 @@ public class FireSaleWidget extends Widget { // matches a fire sale item // group 1: item name - // group 2: # items bought + // group 2: # items available // group 3: # items available in total (1 digit + "k") - private static final Pattern FIRE_PATTERN = Pattern.compile(" (.*): (\\d*)/([0-9.]*)k"); + private static final Pattern FIRE_PATTERN = Pattern.compile("(?<item>.*): (?<avail>\\d*)/(?<total>[0-9.]*)k"); - public FireSaleWidget(List<PlayerListEntry> list) { + public FireSaleWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - boolean found = false; - if (StrMan.strAt(list, 46).contains("Starts In")) { - IcoTextComponent start = new IcoTextComponent(Ico.CLOCK, - StrMan.stdEntry(list, 46, "Starts in", Formatting.DARK_AQUA)); - this.addComponent(start); + String event = PlayerListMgr.strAt(46); + + if (event == null) { + this.addComponent(new PlainTextComponent(Text.literal("No Fire Sale!").formatted(Formatting.GRAY))); + this.pack(); + return; + } + + if (event.contains("Starts In")) { + this.addSimpleIcoText(Ico.CLOCK, "Starts in:", Formatting.DARK_AQUA, 46); this.pack(); return; } for (int i = 46;; i++) { - Matcher m = StrMan.regexAt(list, i, FIRE_PATTERN); - if (m == null || !m.matches()) { + Matcher m = PlayerListMgr.regexAt( i, FIRE_PATTERN); + if (m == null) { break; } - found = true; - float amt = Float.parseFloat(m.group(3)) * 1000; - Text a = Text.literal(m.group(1)); - Text b = Text.literal(String.format("%s/%.0f", m.group(2), amt)); - float pcnt = (Float.parseFloat(m.group(2)) / (amt)) * 100f; - ProgressComponent pc = new ProgressComponent(Ico.GOLD, a, b, pcnt, pcntToCol(pcnt)); + String avail = m.group("avail"); + Text itemTxt = Text.literal(m.group("item")); + float total = Float.parseFloat(m.group("total")) * 1000; + Text prgressTxt = Text.literal(String.format("%s/%.0f", avail, total)); + float pcnt = (Float.parseFloat(avail) / (total)) * 100f; + ProgressComponent pc = new ProgressComponent(Ico.GOLD, itemTxt, prgressTxt, pcnt, pcntToCol(pcnt)); this.addComponent(pc); } - if (!found) { - this.addComponent(new PlainTextComponent(Text.literal("No Fire Sale!").formatted(Formatting.GRAY))); - } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java index 40e2f56d..4de4a0b4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java @@ -1,14 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -21,27 +18,39 @@ public class ForgeWidget extends Widget { private static final MutableText TITLE = Text.literal("Forge Status").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ForgeWidget(List<PlayerListEntry> list) { + public ForgeWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - int forgestart = 54; + int forgestart = 54; // why is it forges and not fabrics >:( - if (!StrMan.strAt(list, 53).startsWith("Forge")) { - forgestart += 2; + String pos = PlayerListMgr.strAt(53); + if (pos == null) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; } + if (!pos.startsWith("Forges")) { + forgestart += 2; + } - for (int i = forgestart, slot = 0; i < forgestart + 5 && i < 60; i++,slot ++) { - String fstr = StrMan.strAt(list, i).substring(4); + for (int i = forgestart, slot = 1; i < forgestart + 5 && i < 60; i++, slot++) { + String fstr = PlayerListMgr.strAt(i); + if (fstr == null || fstr.length() < 3) { + if (i == forgestart) { + this.addComponent(new IcoTextComponent()); + } + break; + } Component c; Text l1, l2; - switch (fstr) { + switch (fstr.substring(3)) { case "LOCKED": l1 = Text.literal("Locked").formatted(Formatting.RED); l2 = switch (slot) { - case 3 -> Text.literal("Req. HotM 3").formatted(Formatting.GRAY); - case 4 -> Text.literal("Req. HotM 4").formatted(Formatting.GRAY); - case 5 -> Text.literal("Req. PotM 2").formatted(Formatting.GRAY); + case 3 -> Text.literal("Needs HotM 3").formatted(Formatting.GRAY); + case 4 -> Text.literal("Needs HotM 4").formatted(Formatting.GRAY); + case 5 -> Text.literal("Needs PotM 2").formatted(Formatting.GRAY); default -> Text.literal("This message should not appear").formatted(Formatting.RED, Formatting.BOLD); }; @@ -53,9 +62,13 @@ public class ForgeWidget extends Widget { break; default: String[] parts = fstr.split(": "); - l1 = Text.of(parts[0]); - l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); - c = new IcoFatTextComponent(Ico.FIRE, l1, l2); + if (parts.length != 2) { + c = new IcoFatTextComponent(); + } else { + l1 = Text.of(parts[0]); + l2 = Text.literal(parts[1]).formatted(Formatting.YELLOW); + c = new IcoFatTextComponent(Ico.FIRE, l1, l2); + } break; } this.addComponent(c); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java index 864dee8e..b0fc160f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -22,39 +20,33 @@ public class GardenServerWidget extends Widget { // match the next visitor in the garden // group 1: visitor name - private static final Pattern VISITOR_PATTERN = Pattern.compile(" Next Visitor: (.*)$"); + private static final Pattern VISITOR_PATTERN = Pattern.compile("Next Visitor: (?<vis>.*)"); - public GardenServerWidget(List<PlayerListEntry> list) { + public GardenServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.COPPER, "Copper:", Formatting.GOLD, 44); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); - - Text copper = StrMan.stdEntry(list, 44, "Copper:", Formatting.GOLD); - IcoTextComponent co = new IcoTextComponent(Ico.COPPER, copper); - this.addComponent(co); + Matcher m = PlayerListMgr.regexAt(45, VISITOR_PATTERN); + if (m == null ) { + this.addComponent(new IcoTextComponent()); + this.pack(); + return; + } - Matcher v = StrMan.regexAt(list, 45, VISITOR_PATTERN); - String vString = v.group(1); + String vis = m.group("vis"); Formatting col; - if (vString.equals("Not Unlocked!")) { + if (vis.equals("Not Unlocked!")) { col = Formatting.RED; } else { col = Formatting.GREEN; } - MutableText visitor = Text.literal("Next Visitor: ") - .append(Text.literal(vString).formatted(col)); - IcoTextComponent vis = new IcoTextComponent(Ico.PLAYER, visitor); - this.addComponent(vis); + Text visitor = Widget.simpleEntryText(vis, "Next Visitor: ", col); + IcoTextComponent v = new IcoTextComponent(Ico.PLAYER, visitor); + this.addComponent(v); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java index 26c90df7..26e29ce2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java @@ -1,16 +1,14 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -25,24 +23,33 @@ public class GardenSkillsWidget extends Widget { // match the skill entry // group 1: skill name and level // group 2: progress to next level (without "%") - private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + private static final Pattern SKILL_PATTERN = Pattern + .compile("\\S*: (?<skill>[A-Za-z]* [0-9]*): (?<progress>\\S*)%"); // same, but with leading space - private static final Pattern MS_PATTERN = Pattern.compile(" \\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + private static final Pattern MS_PATTERN = Pattern.compile("\\S*: (?<skill>[A-Za-z]* [0-9]*): (?<progress>\\S*)%"); - public GardenSkillsWidget(List<PlayerListEntry> list) { + public GardenSkillsWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); + ProgressComponent pc; + Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN); + if (m == null) { + pc = new ProgressComponent(); + } else { - float pcnt = Float.parseFloat(m.group(2)); - String skill = m.group(1); + String strpcnt = m.group("progress"); + String skill = m.group("skill"); + + float pcnt = Float.parseFloat(strpcnt); + pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, + Formatting.GOLD.getColorValue()); + } - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); this.addComponent(pc); - Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + Text speed = Widget.simpleEntryText(67, "SPD", Formatting.WHITE); IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); - Text farmfort = StrMan.stdEntry(list, 68, "FFO", Formatting.GOLD); + Text farmfort = Widget.simpleEntryText(68, "FFO", Formatting.GOLD); IcoTextComponent ffo = new IcoTextComponent(Ico.HOE, farmfort); TableComponent tc = new TableComponent(2, 1, Formatting.YELLOW.getColorValue()); @@ -50,11 +57,19 @@ public class GardenSkillsWidget extends Widget { tc.addToCell(1, 0, ffo); this.addComponent(tc); - m = StrMan.regexAt(list, 69, MS_PATTERN); - pcnt = Float.parseFloat(m.group(2)); - skill = m.group(1); + ProgressComponent pc2; + m = PlayerListMgr.regexAt(69, MS_PATTERN); + if (m == null) { + pc2 = new ProgressComponent(); + } else { + String strpcnt = m.group("progress"); + String skill = m.group("skill"); + + float pcnt = Float.parseFloat(strpcnt); + pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, + Formatting.GREEN.getColorValue()); - ProgressComponent pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, Formatting.GREEN.getColorValue()); + } this.addComponent(pc2); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java index 67b61667..cb208e92 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,23 +14,14 @@ public class GuestServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public GuestServerWidget(List<PlayerListEntry> list) { + public GuestServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.SIGN, "Owner:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.SIGN, "Status:", Formatting.BLUE, 44); - Text owner = StrMan.stdEntry(list, 43, "Owner:", Formatting.GREEN); - IcoTextComponent own = new IcoTextComponent(Ico.SIGN, owner); - this.addComponent(own); - - Text status = StrMan.stdEntry(list, 44, "Status:", Formatting.BLUE); - IcoTextComponent stat = new IcoTextComponent(Ico.SIGN, status); - this.addComponent(stat); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java index fa27eaa0..e0f5f1a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,19 +21,22 @@ public class IslandGuestsWidget extends Widget { // group 1: player name private static final Pattern GUEST_PATTERN = Pattern.compile("\\[\\d*\\] (.*) \\[.\\]"); - public IslandGuestsWidget(List<PlayerListEntry> list) { + public IslandGuestsWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 21; i < 40; i++) { - String str = list.get(i).getDisplayName().getString(); - if (str.length() == 0) { + String str = PlayerListMgr.strAt(i); + if (str == null) { if (i == 21) { this.addComponent(new PlainTextComponent(Text.literal("No Visitors!").formatted(Formatting.GRAY))); } break; } - Matcher m = StrMan.regexAt(list, i, GUEST_PATTERN); - PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); - this.addComponent(ptc); + Matcher m = PlayerListMgr.regexAt( i, GUEST_PATTERN); + if (m == null) { + this.addComponent(new PlainTextComponent(Text.of("???"))); + } else { + this.addComponent(new PlainTextComponent(Text.of(m.group(1)))); + } } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java index 083f72b7..1c640ed1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,19 +21,19 @@ public class IslandOwnersWidget extends Widget { // group 1: player name (cut off by hypixel for some reason) // group 2: last seem // TODO: test with owner online - private static final Pattern OWNER_PATTERN = Pattern.compile("(.*) \\((.*)\\)"); + private static final Pattern OWNER_PATTERN = Pattern.compile("(?<name>.*) \\((?<lastseen>.*)\\)"); - public IslandOwnersWidget(List<PlayerListEntry> list) { + public IslandOwnersWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); for (int i = 1; i < 20; i++) { - if (list.get(i).getDisplayName().getString().length() == 0) { + Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN); + if (m == null) { break; } - Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); - Text entry = Text.literal(m.group(1)) + Text entry = Text.literal(m.group("name")) .append( - Text.literal(" (" + m.group(2) + ")") + Text.literal(" (" + m.group("lastseen") + ")") .formatted(Formatting.GRAY)); PlainTextComponent ptc = new PlainTextComponent(entry); this.addComponent(ptc); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java index aa1d951b..4324dad9 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -20,17 +18,16 @@ public class IslandSelfWidget extends Widget { Formatting.BOLD); // matches an owner - // group 1: player name - private static final Pattern OWNER_PATTERN = Pattern.compile("\\[\\d*\\] (.*)"); + // group 1: player name, optionally offline time + private static final Pattern OWNER_PATTERN = Pattern.compile("^\\[\\d*\\] (.*)$|^(.*)$"); - public IslandSelfWidget(List<PlayerListEntry> list) { + public IslandSelfWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue()); for (int i = 1; i < 20; i++) { - String str = list.get(i).getDisplayName().getString(); - if (str.length() == 0) { + Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN); + if (m == null) { break; } - Matcher m = StrMan.regexAt(list, i, OWNER_PATTERN); PlainTextComponent ptc = new PlainTextComponent(Text.of(m.group(1))); this.addComponent(ptc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java index 1bbe0ed7..2b02c514 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,28 +14,15 @@ public class IslandServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Island Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public IslandServerWidget(List<PlayerListEntry> list) { + public IslandServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Crystals:", Formatting.DARK_PURPLE, 43); + this.addSimpleIcoText(Ico.CHEST, "Stash:", Formatting.GREEN, 44); + this.addSimpleIcoText(Ico.COMMAND, "Minions:", Formatting.BLUE, 45); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text crystals = StrMan.stdEntry(list, 43, "Crystals:", Formatting.DARK_PURPLE); - IcoTextComponent crys = new IcoTextComponent(Ico.EMERALD, crystals); - this.addComponent(crys); - - Text stash = StrMan.stdEntry(list, 44, "Stash:", Formatting.GREEN); - IcoTextComponent st = new IcoTextComponent(Ico.CHEST, stash); - this.addComponent(st); - - Text minions = StrMan.stdEntry(list, 45, "Minions:", Formatting.BLUE); - IcoTextComponent min = new IcoTextComponent(Ico.COMMAND, minions); - this.addComponent(min); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java index 03defb4c..8d49efaa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java @@ -1,13 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -37,18 +35,22 @@ public class JacobsContestWidget extends Widget { FARM_DATA.put("Mushroom", new ItemStack(Items.RED_MUSHROOM)); } - public JacobsContestWidget(List<PlayerListEntry> list) { + public JacobsContestWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Text time = StrMan.stdEntry(list, 76, "Starts in:", Formatting.GOLD); - IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); - this.addComponent(t); + this.addSimpleIcoText(Ico.CLOCK, "Starts in:", Formatting.GOLD, 76); TableComponent tc = new TableComponent(1, 3, Formatting.YELLOW .getColorValue()); for (int i = 77; i < 80; i++) { - String item = StrMan.strAt(list, i).trim(); - tc.addToCell(0, i - 77, new IcoTextComponent(FARM_DATA.get(item), Text.of(item))); + String item = PlayerListMgr.strAt(i); + IcoTextComponent itc; + if (item == null) { + itc = new IcoTextComponent(); + } else { + itc = new IcoTextComponent(FARM_DATA.get(item), Text.of(item)); + } + tc.addToCell(0, i - 77, itc); } this.addComponent(tc); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java index 2ba94b48..22082202 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java @@ -1,15 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -90,18 +88,18 @@ public class MinionWidget extends Widget { // group 1: name // group 2: level // group 3: status - public static final Pattern MINION_PATTERN = Pattern.compile(" (.*) ([XVI]*) \\[(.*)\\]"); + public static final Pattern MINION_PATTERN = Pattern.compile("(?<name>.*) (?<level>[XVI]*) \\[(?<status>.*)\\]"); - public MinionWidget(List<PlayerListEntry> list) { + public MinionWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); for (int i = 48; i < 59; i++) { - Matcher m = StrMan.regexAt(list, i, MINION_PATTERN); + Matcher m = PlayerListMgr.regexAt(i, MINION_PATTERN); if (m != null) { - String min = m.group(1); - String lvl = m.group(2); - String stat = m.group(3); + String min = m.group("name"); + String lvl = m.group("level"); + String stat = m.group("status"); MutableText mt = Text.literal(min + " " + lvl).append(Text.literal(": ")); @@ -111,7 +109,7 @@ public class MinionWidget extends Widget { } else if (stat.equals("SLOW")) { format = Formatting.YELLOW; } - // makes "BLOCKED" also red. in reality, it's some kind of crimson + // makes "BLOCKED" also red. in reality, it's some kind of crimson mt.append(Text.literal(stat).formatted(format)); IcoTextComponent itc = new IcoTextComponent(MIN_ICOS.get(min), mt); @@ -125,9 +123,9 @@ public class MinionWidget extends Widget { // if more minions are placed than the tab menu can display, // a "And X more..." text is shown // look for that and add it to the widget - if (list.get(59).getDisplayName() != null) { - String other = list.get(59).getDisplayName().getString(); - this.addComponent(new PlainTextComponent(Text.of(other.trim()))); + String more = PlayerListMgr.strAt(59); + if (more != null) { + this.addComponent(new PlainTextComponent(Text.of(more))); } this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java index a94b5948..4148ed77 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,24 +14,14 @@ public class ParkServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ParkServerWidget(List<PlayerListEntry> list) { + public ParkServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); + this.addSimpleIcoText(Ico.WATER, "Rain:", Formatting.BLUE, 44); - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); - - Text rain = StrMan.stdEntry(list, 44, "Rain:", Formatting.BLUE); - IcoTextComponent ra = new IcoTextComponent(Ico.WATER, rain); - this.addComponent(ra); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java index 1678ca56..2cd710eb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -3,8 +3,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.List; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlayerComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; @@ -23,12 +24,19 @@ public class PlayerListWidget extends Widget { private ArrayList<PlayerListEntry> list = new ArrayList<>(); - public PlayerListWidget(List<PlayerListEntry> l) { + public PlayerListWidget() { super(TITLE, Formatting.GREEN.getColorValue()); // hard cap to 4x20 entries. // 5x20 is too wide (and not possible in theory. in reality however...) - int listlen = Math.min(l.size(), 160); + int listlen = Math.min(PlayerListMgr.getSize(), 160); + + // list isn't fully loaded, so our hack won't work... + if (listlen < 80) { + this.addComponent(new PlainTextComponent(Text.literal("List loading...").formatted(Formatting.GRAY))); + this.pack(); + return; + } // unintuitive int ceil division stolen from // https://stackoverflow.com/questions/7139382/java-rounding-up-to-an-int-using-math-ceil#21830188 @@ -38,7 +46,7 @@ public class PlayerListWidget extends Widget { Formatting.GREEN.getColorValue()); for (int i = 80; i < listlen; i++) { - list.add(l.get(i)); + list.add(PlayerListMgr.getRaw(i)); } Collections.sort(list, new Comparator<PlayerListEntry>() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java index cca09d77..459e3de2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -19,16 +15,12 @@ public class PowderWidget extends Widget { private static final MutableText TITLE = Text.literal("Powders").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public PowderWidget(List<PlayerListEntry> list) { + public PowderWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text amtMith = StrMan.stdEntry(list, 46, "Mithril:", Formatting.AQUA); - IcoTextComponent mith = new IcoTextComponent(Ico.MITHRIL, amtMith); - this.addComponent(mith); + this.addSimpleIcoText(Ico.MITHRIL, "Mithril:", Formatting.AQUA, 46); + this.addSimpleIcoText(Ico.EMERALD, "Gemstone:", Formatting.DARK_PURPLE, 47); - Text amtGem = StrMan.stdEntry(list, 47, "Gemstone:", Formatting.DARK_PURPLE); - IcoTextComponent gem = new IcoTextComponent(Ico.EMERALD, amtGem); - this.addComponent(gem); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java index 3d94fc59..ed375c6e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -17,24 +13,14 @@ public class ProfileWidget extends Widget { private static final MutableText TITLE = Text.literal("Profile").formatted(Formatting.YELLOW, Formatting.BOLD); - public ProfileWidget(List<PlayerListEntry> list) { + public ProfileWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Text profileType = StrMan.stdEntry(list, 61, "Profile:", Formatting.GREEN); - IcoTextComponent profile = new IcoTextComponent(Ico.SIGN, profileType); - this.addComponent(profile); + this.addSimpleIcoText(Ico.SIGN, "Profile:", Formatting.GREEN, 61); + this.addSimpleIcoText(Ico.BONE, "Pet Sitter:", Formatting.AQUA, 62); + this.addSimpleIcoText(Ico.EMERALD, "Balance:", Formatting.GOLD, 63); + this.addSimpleIcoText(Ico.CLOCK, "Interest in:", Formatting.GOLD, 64); - Text petInfo = StrMan.stdEntry(list, 62, "Pet Sitter:", Formatting.AQUA); - IcoTextComponent pet = new IcoTextComponent(Ico.BONE, petInfo); - this.addComponent(pet); - - Text bankAmt = StrMan.stdEntry(list, 63, "Balance:", Formatting.GOLD); - IcoTextComponent bank = new IcoTextComponent(Ico.EMERALD, bankAmt); - this.addComponent(bank); - - Text interest = StrMan.stdEntry(list, 64, "Interest in:", Formatting.GOLD); - IcoTextComponent inter = new IcoTextComponent(Ico.CLOCK, interest); - this.addComponent(inter); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index 5fdb1a5b..5c89964e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -18,12 +14,12 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); - public QuestWidget(List<PlayerListEntry> list) { + public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - for (int i = 51; i<56; i++) { - String q = StrMan.strAt(list, i).trim(); - IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, Text.literal(q)); + for (int i = 51; i < 56; i++) { + Text q = Widget.plainEntryText(i); + IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index 75bd4e92..c0379623 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -22,33 +20,45 @@ public class ReputationWidget extends Widget { // matches your faction alignment progress // group 1: percentage to next alignment level - private static final Pattern PROGRESS_PATTERN = Pattern.compile(" \\|+ \\(([0-9.]*)%\\)"); + private static final Pattern PROGRESS_PATTERN = Pattern.compile("\\|+ \\((?<prog>[0-9.]*)%\\)"); // matches alignment level names // group 1: left level name // group 2: right level name - private static final Pattern STATE_PATTERN = Pattern.compile("(\\S*) *(\\S*)"); + private static final Pattern STATE_PATTERN = Pattern.compile("(?<from>\\S*) *(?<to>\\S*)"); - public ReputationWidget(List<PlayerListEntry> list) { + public ReputationWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - String fname = StrMan.strAt(list, 45).split(" ")[0]; - String rep = StrMan.strAt(list, 46).trim(); - Matcher prog = StrMan.regexAt(list, 47, PROGRESS_PATTERN); - Matcher state = StrMan.regexAt(list, 48, STATE_PATTERN); + String fracstr = PlayerListMgr.strAt(45); + int spaceidx; IcoTextComponent faction; - if (fname.equals("Mage")) { - faction = new IcoTextComponent(Ico.POTION, Text.literal(fname).formatted(Formatting.DARK_AQUA)); + if (fracstr == null || (spaceidx = fracstr.indexOf(' ')) == -1) { + faction = new IcoTextComponent(); } else { - faction = new IcoTextComponent(Ico.SWORD, Text.literal(fname).formatted(Formatting.RED)); + String fname = fracstr.substring(0, spaceidx); + if (fname.equals("Mage")) { + faction = new IcoTextComponent(Ico.POTION, Text.literal(fname).formatted(Formatting.DARK_AQUA)); + } else { + faction = new IcoTextComponent(Ico.SWORD, Text.literal(fname).formatted(Formatting.RED)); + } } this.addComponent(faction); - float pcnt = Float.parseFloat(prog.group(1)); + Text rep = Widget.plainEntryText(46); + Matcher prog = PlayerListMgr.regexAt(47, PROGRESS_PATTERN); + Matcher state = PlayerListMgr.regexAt(48, STATE_PATTERN); - ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(state.group(1) + " -> " + state.group(2)), Text.of(rep), pcnt, Formatting.AQUA.getColorValue()); - this.addComponent(pc); + if (prog == null || state == null) { + this.addComponent(new ProgressComponent()); + } else { + float pcnt = Float.parseFloat(prog.group("prog")); + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, + Text.of(state.group("from") + " -> " + state.group("to")), rep, pcnt, + Formatting.AQUA.getColorValue()); + this.addComponent(pc); + } this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java index 4084d4dd..2d8d1c63 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java @@ -1,12 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -20,20 +16,12 @@ public class ServerWidget extends Widget { private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public ServerWidget(List<PlayerListEntry> list) { + public ServerWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text areaName = StrMan.stdEntry(list, 41, "Area:", Formatting.DARK_AQUA); - IcoTextComponent area = new IcoTextComponent(Ico.MAP, areaName); - this.addComponent(area); - - Text serverName = StrMan.stdEntry(list, 42, "Server ID:", Formatting.GRAY); - IcoTextComponent server = new IcoTextComponent(Ico.NTAG, serverName); - this.addComponent(server); - - Text amtGems = StrMan.stdEntry(list, 43, "Gems:", Formatting.GREEN); - IcoTextComponent gems = new IcoTextComponent(Ico.EMERALD, amtGems); - this.addComponent(gems); + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.DARK_AQUA, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java index be412421..b426d9e6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java @@ -1,18 +1,16 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -30,33 +28,39 @@ public class SkillsWidget extends Widget { // group 2: progress to next level (without "%") private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): ([0-9.MAX]*)%?"); - public SkillsWidget(List<PlayerListEntry> list) { + public SkillsWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); - String skill = m.group(1); - String pcntStr = m.group(2); - + Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN); Component progress; - if (!pcntStr.equals("MAX")) { - float pcnt = Float.parseFloat(pcntStr); - progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), - Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + if (m == null) { + progress = new ProgressComponent(); } else { - progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), Text.literal(pcntStr).formatted(Formatting.RED)); + + String skill = m.group(1); + String pcntStr = m.group(2); + + if (!pcntStr.equals("MAX")) { + float pcnt = Float.parseFloat(pcntStr); + progress = new ProgressComponent(Ico.LANTERN, Text.of(skill), + Text.of(pcntStr), pcnt, Formatting.GOLD.getColorValue()); + } else { + progress = new IcoFatTextComponent(Ico.LANTERN, Text.of(skill), + Text.literal(pcntStr).formatted(Formatting.RED)); + } } this.addComponent(progress); - Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + Text speed = Widget.simpleEntryText(67, "SPD", Formatting.WHITE); IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); - Text strength = StrMan.stdEntry(list, 68, "STR", Formatting.RED); + Text strength = Widget.simpleEntryText(68, "STR", Formatting.RED); IcoTextComponent str = new IcoTextComponent(Ico.SWORD, strength); - Text critDmg = StrMan.stdEntry(list, 69, "CCH", Formatting.BLUE); + Text critDmg = Widget.simpleEntryText(69, "CCH", Formatting.BLUE); IcoTextComponent cdg = new IcoTextComponent(Ico.SWORD, critDmg); - Text critCh = StrMan.stdEntry(list, 70, "CDG", Formatting.BLUE); + Text critCh = Widget.simpleEntryText(70, "CDG", Formatting.BLUE); IcoTextComponent cch = new IcoTextComponent(Ico.SWORD, critCh); - Text aSpeed = StrMan.stdEntry(list, 71, "ASP", Formatting.YELLOW); + Text aSpeed = Widget.simpleEntryText(71, "ASP", Formatting.YELLOW); IcoTextComponent asp = new IcoTextComponent(Ico.HOE, aSpeed); TableComponent tc = new TableComponent(2, 3, Formatting.YELLOW.getColorValue()); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java index 4252888e..d47849c3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java @@ -1,12 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; -import java.util.List; - import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -17,12 +12,10 @@ public class TrapperWidget extends Widget { private static final MutableText TITLE = Text.literal("Trapper").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - public TrapperWidget(List<PlayerListEntry> list) { + public TrapperWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - Text amtPelts = StrMan.stdEntry(list, 46, "Pelts:", Formatting.AQUA); - IcoTextComponent pelts = new IcoTextComponent(Ico.LEATHER, amtPelts); - this.addComponent(pelts); + this.addSimpleIcoText(Ico.LEATHER, "Pelts:", Formatting.AQUA, 46); this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java index 0e0fe6b7..178c9c3c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java @@ -19,16 +19,21 @@ public class UpgradeWidget extends Widget { public UpgradeWidget(String footertext) { super(TITLE, Formatting.GOLD.getColorValue()); - String[] interesting = footertext.split("Upgrades"); - if (interesting.length < 2) { - this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + + if (footertext == null || !footertext.contains("Upgrades")) { + this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY))); this.pack(); return; } + + String[] interesting = footertext.split("Upgrades"); + this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades..."))); + this.pack(); + String[] lines = interesting[1].split("\n"); IcoTextComponent u1 = new IcoTextComponent(Ico.SIGN, Text.of(lines[1])); this.addComponent(u1); - if (lines.length == 5) { + if (lines.length == 5) { // ??? no idea how this works, but it does. don't touch until understood... IcoTextComponent u2 = new IcoTextComponent(Ico.SIGN, Text.of(lines[2])); this.addComponent(u2); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java index cca4ca1b..ec6a35fb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java @@ -1,11 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import java.util.HashMap; -import java.util.List; -import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; -import net.minecraft.client.network.PlayerListEntry; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.MutableText; @@ -41,13 +39,17 @@ public class VolcanoWidget extends Widget { new Pair<ItemStack, Formatting>(new ItemStack(Items.SKELETON_SKULL), Formatting.DARK_RED)); } - public VolcanoWidget(List<PlayerListEntry> list) { + public VolcanoWidget() { super(TITLE, Formatting.AQUA.getColorValue()); - String s = StrMan.strAt(list, 58).trim(); - Pair<ItemStack, Formatting> p = BOOM_TYPE.get(s); - IcoTextComponent itc = new IcoTextComponent(p.getLeft(), Text.literal(s).formatted(p.getRight())); - this.addComponent(itc); + String s = PlayerListMgr.strAt(58); + if (s == null) { + this.addComponent(new IcoTextComponent()); + } else { + Pair<ItemStack, Formatting> p = BOOM_TYPE.get(s); + this.addComponent(new IcoTextComponent(p.getLeft(), Text.literal(s).formatted(p.getRight()))); + } + this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 01f47933..23ec15d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -5,13 +5,17 @@ import java.util.ArrayList; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; 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.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; public abstract class Widget { @@ -38,6 +42,11 @@ public abstract class Widget { components.add(c); } + public final void addSimpleIcoText(ItemStack ico, String string, Formatting fmt, int idx) { + Text txt = Widget.simpleEntryText(idx, string, fmt); + this.addComponent(new IcoTextComponent(ico, txt)); + } + public final void pack() { for (Component c : components) { h += c.getHeight() + Component.PAD_L; @@ -130,4 +139,33 @@ public abstract class Widget { private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); } + + public static Text simpleEntryText(int idx, String entryName, Formatting contentFmt) { + + String src = PlayerListMgr.strAt(idx); + + if (src == null) { + return null; + } + + int cidx = src.indexOf(':'); + if (cidx == -1) { + return null; + } + + src = src.substring(src.indexOf(':') + 1); + return Widget.simpleEntryText(src, entryName, contentFmt); + } + + public static Text simpleEntryText(String entryContent, String entryName, Formatting contentFmt) { + return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt)); + } + + public static Text plainEntryText(int idx) { + String str = PlayerListMgr.strAt(idx); + if (str == null) { + return null; + } + return Text.of(str); + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index 6a780159..55d9b889 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon and two lines of text @@ -11,22 +13,32 @@ public class IcoFatTextComponent extends Component { private static final int ICO_OFFS = 1; private ItemStack ico; - private Text l1, l2; + private Text line1, line2; public IcoFatTextComponent(ItemStack ico, Text l1, Text l2) { - this.ico = ico; - this.l1 = l1; - this.l2 = l2; + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.line1 = l1; + this.line2 = l2; - this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(l1), txtRend.getWidth(l2)); + if (l1 == null || l2 == null) { + this.ico = Ico.BARRIER; + this.line1 = Text.literal("No data").formatted(Formatting.GRAY); + this.line2 = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = ICO_DIM + PAD_L + Math.max(txtRend.getWidth(this.line1), txtRend.getWidth(this.line2)); this.height = txtRend.fontHeight + PAD_S + txtRend.fontHeight; } + public IcoFatTextComponent() { + this(null, null, null); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, l1, x + ICO_DIM + PAD_L, y, 0xffffffff); - txtRend.draw(ms, l2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); + txtRend.draw(ms, line1, x + ICO_DIM + PAD_L, y, 0xffffffff); + txtRend.draw(ms, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index b54affbc..a14d0531 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -1,8 +1,10 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon and a line of text @@ -11,14 +13,23 @@ public class IcoTextComponent extends Component { private ItemStack ico; private Text text; - public IcoTextComponent(ItemStack ico, Text text) { - this.ico = ico; - this.text = text; + public IcoTextComponent(ItemStack ico, Text txt) { + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.text = txt; - this.width = ICO_DIM + PAD_L + txtRend.getWidth(text); + if (txt == null) { + this.ico = Ico.BARRIER; + this.text = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = ICO_DIM + PAD_L + txtRend.getWidth(this.text); this.height = ICO_DIM; } + public IcoTextComponent() { + this(null, null); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index a2ffced9..70a72715 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -2,6 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of a line of text @@ -9,10 +10,14 @@ public class PlainTextComponent extends Component { private Text text; - public PlainTextComponent(Text text) { - this.text = text; + public PlainTextComponent(Text txt) { + this.text = txt; - this.width = PAD_S + txtRend.getWidth(text); // looks off without padding + if (txt == null) { + this.text = Text.literal("No data").formatted(Formatting.GRAY); + } + + this.width = PAD_S + txtRend.getWidth(this.text); // looks off without padding this.height = txtRend.fontHeight; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index 753c9b21..f6618a98 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -1,9 +1,11 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; // widget component that consists of an icon, some text and a progress bar // progress bar either shows percentage or custom text @@ -22,15 +24,23 @@ public class ProgressComponent extends Component { private int color; private int barW; - public ProgressComponent(ItemStack ico, Text desc, Text bar, float pcnt, int color) { - this.ico = ico; - this.desc = desc; - this.bar = bar; - this.color = 0xff000000 | color; + public ProgressComponent(ItemStack ico, Text d, Text b, float pcnt, int color) { + this.ico = (ico == null) ? Ico.BARRIER : ico; + this.desc = d; + this.bar = b; + this.color = color; this.pcnt = pcnt; + if (d == null || b == null) { + this.ico = Ico.BARRIER; + this.desc = Text.literal("No data").formatted(Formatting.GRAY); + this.bar = Text.literal("---").formatted(Formatting.GRAY); + this.pcnt = 100f; + this.color = 0xff000000 | Formatting.DARK_GRAY.getColorValue(); + } + this.barW = BAR_WIDTH; - this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(desc)); + this.width = ICO_DIM + PAD_L + Math.max(this.barW, txtRend.getWidth(this.desc)); this.height = txtRend.fontHeight + PAD_S + 2 + txtRend.fontHeight + 2; } @@ -38,6 +48,10 @@ public class ProgressComponent extends Component { this(ico, text, Text.of(pcnt + "%"), pcnt, color); } + public ProgressComponent() { + this(null, null, null, 100, 0); + } + @Override public void render(MatrixStack ms, int x, int y) { itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); |