aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java65
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java92
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java68
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java28
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java45
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java69
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java45
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java44
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java15
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java42
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java13
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java18
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java26
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);