From 73968e490b4a6886b05f45a95bfcd2328affdac4 Mon Sep 17 00:00:00 2001 From: msg-programs Date: Fri, 19 May 2023 17:05:00 +0200 Subject: Rework just about everything to gracefully handle unexpected inputs --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/mixin/PlayerListHudMixin.java | 25 ++---- .../skyblock/tabhud/screens/EmptyScreen.java | 7 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 65 +++++++-------- .../screens/genericInfo/GardenInfoScreen.java | 14 ++-- .../screens/genericInfo/GenericInfoScreen.java | 14 ++-- .../tabhud/screens/main/CrimsonIsleScreen.java | 14 ++-- .../tabhud/screens/main/DungeonHubScreen.java | 8 +- .../tabhud/screens/main/DungeonScreen.java | 16 ++-- .../tabhud/screens/main/FarmingServerScreen.java | 10 +-- .../skyblock/tabhud/screens/main/GardenScreen.java | 8 +- .../tabhud/screens/main/GenericServerScreen.java | 7 +- .../tabhud/screens/main/GuestServerScreen.java | 8 +- .../tabhud/screens/main/HomeServerScreen.java | 10 +-- .../tabhud/screens/main/HubServerScreen.java | 10 +-- .../tabhud/screens/main/MineServerScreen.java | 14 ++-- .../tabhud/screens/main/ParkServerScreen.java | 7 +- .../screens/playerList/DungeonPlayerScreen.java | 16 ++-- .../screens/playerList/GuestPlayerScreen.java | 10 +-- .../screens/playerList/HomePlayerScreen.java | 10 +-- .../screens/playerList/PlayerListScreen.java | 6 +- .../skyblock/tabhud/util/PlayerListMgr.java | 92 ++++++++++++++++++++++ .../skyblock/tabhud/util/PlayerLocator.java | 29 +++---- .../skyblocker/skyblock/tabhud/util/StrMan.java | 68 ---------------- .../skyblock/tabhud/widget/CommsWidget.java | 28 ++++--- .../skyblock/tabhud/widget/ComposterWidget.java | 26 ++---- .../skyblock/tabhud/widget/CookieWidget.java | 20 +++-- .../skyblock/tabhud/widget/DungeonDeathWidget.java | 38 ++++----- .../tabhud/widget/DungeonDownedWidget.java | 26 +++--- .../tabhud/widget/DungeonPlayerWidget.java | 47 +++++------ .../tabhud/widget/DungeonPuzzleWidget.java | 20 +++-- .../tabhud/widget/DungeonSecretWidget.java | 16 +--- .../tabhud/widget/DungeonServerWidget.java | 45 +++++------ .../skyblock/tabhud/widget/EffectWidget.java | 23 +++++- .../skyblock/tabhud/widget/ElectionWidget.java | 69 +++++++++------- .../skyblock/tabhud/widget/EmptyWidget.java | 5 +- .../skyblock/tabhud/widget/EssenceWidget.java | 22 +++--- .../skyblock/tabhud/widget/EventWidget.java | 12 +-- .../skyblock/tabhud/widget/FireSaleWidget.java | 45 ++++++----- .../skyblock/tabhud/widget/ForgeWidget.java | 47 +++++++---- .../skyblock/tabhud/widget/GardenServerWidget.java | 44 +++++------ .../skyblock/tabhud/widget/GardenSkillsWidget.java | 47 +++++++---- .../skyblock/tabhud/widget/GuestServerWidget.java | 23 ++---- .../skyblock/tabhud/widget/IslandGuestsWidget.java | 19 ++--- .../skyblock/tabhud/widget/IslandOwnersWidget.java | 16 ++-- .../skyblock/tabhud/widget/IslandSelfWidget.java | 15 ++-- .../skyblock/tabhud/widget/IslandServerWidget.java | 29 ++----- .../tabhud/widget/JacobsContestWidget.java | 20 ++--- .../skyblock/tabhud/widget/MinionWidget.java | 24 +++--- .../skyblock/tabhud/widget/ParkServerWidget.java | 24 ++---- .../skyblock/tabhud/widget/PlayerListWidget.java | 16 +++- .../skyblock/tabhud/widget/PowderWidget.java | 14 +--- .../skyblock/tabhud/widget/ProfileWidget.java | 24 ++---- .../skyblock/tabhud/widget/QuestWidget.java | 12 +-- .../skyblock/tabhud/widget/ReputationWidget.java | 42 ++++++---- .../skyblock/tabhud/widget/ServerWidget.java | 20 +---- .../skyblock/tabhud/widget/SkillsWidget.java | 40 +++++----- .../skyblock/tabhud/widget/TrapperWidget.java | 11 +-- .../skyblock/tabhud/widget/UpgradeWidget.java | 13 ++- .../skyblock/tabhud/widget/VolcanoWidget.java | 18 +++-- .../skyblocker/skyblock/tabhud/widget/Widget.java | 38 +++++++++ .../widget/component/IcoFatTextComponent.java | 26 ++++-- .../tabhud/widget/component/IcoTextComponent.java | 19 ++++- .../widget/component/PlainTextComponent.java | 11 ++- .../tabhud/widget/component/ProgressComponent.java | 26 ++++-- 65 files changed, 780 insertions(+), 770 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java (limited to 'src/main/java') 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 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 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 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 - // 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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("(?.*): (?.*)%?"); - public CommsWidget(List 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 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(?.*)\\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*: \\((?\\d+)\\).*"); - public DungeonDeathWidget(List 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 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*\\] (?.*) \\((?\\S*) ?(?[LXVI]*)\\)"); private static final HashMap ICOS = new HashMap<>(); private static final ArrayList 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 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/sr