aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java17
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java181
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java144
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java83
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java153
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java94
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java115
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java230
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java51
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java48
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java32
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java21
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java28
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java13
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java120
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java13
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java34
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java13
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ErrorWidget.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java)20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java37
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/VolcanoWidget.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java43
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java73
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java7
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java6
83 files changed, 1239 insertions, 1086 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java
index 6d90b269..8f18e367 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java
@@ -10,8 +10,8 @@ import net.minecraft.client.util.InputUtil;
public class TabHud {
- public static KeyBinding playerTgl;
- public static KeyBinding genericTgl;
+ public static KeyBinding toggleB;
+ public static KeyBinding toggleA;
// public static KeyBinding mapTgl;
public static KeyBinding defaultTgl;
@@ -19,21 +19,16 @@ public class TabHud {
public static void init() {
- playerTgl = KeyBindingHelper.registerKeyBinding(
- new KeyBinding("key.skyblocker.playerTgl",
+ toggleB = KeyBindingHelper.registerKeyBinding(
+ new KeyBinding("key.skyblocker.toggleB",
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_B,
"key.categories.skyblocker"));
- genericTgl = KeyBindingHelper.registerKeyBinding(
- new KeyBinding("key.skyblocker.genericTgl",
+ toggleA = KeyBindingHelper.registerKeyBinding(
+ new KeyBinding("key.skyblocker.toggleA",
InputUtil.Type.KEYSYM,
GLFW.GLFW_KEY_N,
"key.categories.skyblocker"));
- // mapTgl = KeyBindingHelper.registerKeyBinding(
- // new KeyBinding("key.tabhud.mapTgl",
- // InputUtil.Type.KEYSYM,
- // GLFW.GLFW_KEY_LEFT_ALT,
- // "key.categories.skyblocker"));
defaultTgl = KeyBindingHelper.registerKeyBinding(
new KeyBinding("key.skyblocker.defaultTgl",
InputUtil.Type.KEYSYM,
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java
new file mode 100644
index 00000000..084a6ffd
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java
@@ -0,0 +1,181 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder;
+
+import java.io.BufferedReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.NoSuchElementException;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.AlignStage;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.CollideStage;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineStage;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PlaceStage;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.StackStage;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ErrorWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.util.Identifier;
+
+public class ScreenBuilder {
+
+ // layout pipeline
+ private final ArrayList<PipelineStage> layoutPipeline = new ArrayList<>();
+
+ // all widget instances this builder knows
+ private final ArrayList<Widget> instances = new ArrayList<>();
+ // maps alias -> widget instance
+ private final HashMap<String, Widget> objectMap = new HashMap<>();
+
+ private final String builderName;
+
+ /**
+ * Create a ScreenBuilder from a json.
+ */
+ public ScreenBuilder(Identifier ident) {
+
+ try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident)) {
+ this.builderName = ident.getPath();
+
+ JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
+
+ JsonArray widgets = json.getAsJsonArray("widgets");
+ JsonArray layout = json.getAsJsonArray("layout");
+
+ for (JsonElement w : widgets) {
+ JsonObject widget = w.getAsJsonObject();
+ String name = widget.get("name").getAsString();
+ String alias = widget.get("alias").getAsString();
+
+ Widget wid = instanceFrom(name, widget);
+ objectMap.put(alias, wid);
+ instances.add(wid);
+ }
+
+ for (JsonElement l : layout) {
+ PipelineStage ps = createStage(l.getAsJsonObject());
+ layoutPipeline.add(ps);
+ }
+ } catch (Exception ex) {
+ // rethrow as unchecked exception so that I don't have to catch anything in the ScreenMaster
+ throw new IllegalStateException("Failed to load file " + ident + ". Reason: " + ex.getMessage());
+ }
+ }
+
+ /**
+ * Try to find a class in the widget package that has the supplied name and
+ * call it's constructor. Manual work is required if the class has arguments.
+ */
+ public Widget instanceFrom(String name, JsonObject widget) {
+
+ // do widgets that require args the normal way
+ JsonElement arg;
+ switch (name) {
+ case "EventWidget" -> {
+ return new EventWidget(widget.get("inGarden").getAsBoolean());
+ }
+ case "DungeonPlayerWidget" -> {
+ return new DungeonPlayerWidget(widget.get("player").getAsInt());
+ }
+ case "ErrorWidget" -> {
+ arg = widget.get("text");
+ if (arg == null) {
+ return new ErrorWidget();
+ } else {
+ return new ErrorWidget(arg.getAsString());
+ }
+ }
+ case "Widget" ->
+ // clown case sanity check. don't instantiate the superclass >:|
+ throw new NoSuchElementException(builderName + "[ERROR]: No such Widget type \"Widget\"!");
+ }
+
+ // reflect something together for the "normal" ones.
+ // TODO don't get package list for every widget; do it once and cache.
+ // fine for now, as this would only shorten the load time anyways
+
+ // list all packages that might contain widget classes
+ // using Package isn't reliable, as some classes might not be loaded yet,
+ // causing the packages not to show.
+ String packbase = "me.xmrvizzy.skyblocker.skyblock.tabhud.widget";
+ String[] packnames = {
+ packbase,
+ packbase + ".rift"
+ };
+
+ // construct the full class name and try to load.
+ Class<?> clazz = null;
+ for (String pn : packnames) {
+ try {
+ clazz = Class.forName(pn + "." + name);
+ } catch (LinkageError | ClassNotFoundException ex) {
+ continue;
+ }
+ }
+
+ // load failed.
+ if (clazz == null) {
+ throw new NoSuchElementException(builderName + "/[ERROR]: No such Widget type \"" + name + "\"!");
+ }
+
+ // return instance of that class.
+ try {
+ Constructor<?> ctor = clazz.getConstructor();
+ return (Widget) ctor.newInstance();
+ } catch (NoSuchMethodException | InstantiationException | IllegalAccessException
+ | IllegalArgumentException | InvocationTargetException | SecurityException ex) {
+ throw new IllegalStateException(builderName + "/" + name + ": Internal error...");
+ }
+ }
+
+ /**
+ * Create a PipelineStage from a json object.
+ */
+ public PipelineStage createStage(JsonObject descr) throws NoSuchElementException {
+
+ String op = descr.get("op").getAsString();
+
+ return switch (op) {
+ case "place" -> new PlaceStage(this, descr);
+ case "stack" -> new StackStage(this, descr);
+ case "align" -> new AlignStage(this, descr);
+ case "collideAgainst" -> new CollideStage(this, descr);
+ default -> throw new NoSuchElementException("No such op " + op + " as requested by " + this.builderName);
+ };
+ }
+
+ /**
+ * Lookup Widget instance from alias name
+ */
+ public Widget getInstance(String name) {
+ if (!this.objectMap.containsKey(name)) {
+ throw new NoSuchElementException("No widget with alias " + name + " in screen " + builderName);
+ }
+ return this.objectMap.get(name);
+ }
+
+ /**
+ * Run the pipeline to build a Screen
+ */
+ public void run(DrawContext context, int screenW, int screenH) {
+
+ for (Widget w : instances) {
+ w.update();
+ }
+ for (PipelineStage ps : layoutPipeline) {
+ ps.run(screenW, screenH);
+ }
+ for (Widget w : instances) {
+ w.render(context);
+ }
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java
new file mode 100644
index 00000000..194ab3d4
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java
@@ -0,0 +1,144 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder;
+
+import java.io.BufferedReader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator;
+import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
+import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
+import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
+import net.fabricmc.loader.api.FabricLoader;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.resource.Resource;
+import net.minecraft.resource.ResourceManager;
+import net.minecraft.resource.ResourceType;
+import net.minecraft.util.Identifier;
+
+public class ScreenMaster {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker");
+
+ private static final int VERSION = 1;
+
+ private static final HashMap<String, ScreenBuilder> standardMap = new HashMap<>();
+ private static final HashMap<String, ScreenBuilder> screenAMap = new HashMap<>();
+ private static final HashMap<String, ScreenBuilder> screenBMap = new HashMap<>();
+
+ /**
+ * Load a screen mapping from an identifier
+ */
+ public static void load(Identifier ident) {
+
+ String path = ident.getPath();
+ String[] parts = path.split("/");
+ String screenType = parts[parts.length - 2];
+ String location = parts[parts.length - 1];
+ location = location.replace(".json", "");
+
+ ScreenBuilder sb = new ScreenBuilder(ident);
+ switch (screenType) {
+ case "standard" -> standardMap.put(location, sb);
+ case "screen_a" -> screenAMap.put(location, sb);
+ case "screen_b" -> screenBMap.put(location, sb);
+ }
+ }
+
+ /**
+ * Top level render method.
+ * Calls the appropriate ScreenBuilder with the screen's dimensions
+ */
+ public static void render(DrawContext context, int w, int h) {
+ String location = PlayerLocator.getPlayerLocation().internal;
+ HashMap<String, ScreenBuilder> lookup;
+ if (TabHud.toggleA.isPressed()) {
+ lookup = screenAMap;
+ } else if (TabHud.toggleB.isPressed()) {
+ lookup = screenBMap;
+ } else {
+ lookup = standardMap;
+ }
+
+ ScreenBuilder sb = lookup.get(location);
+ // seems suboptimal, maybe load the default first into all possible values
+ // and then override?
+ if (sb == null) {
+ sb = lookup.get("default");
+ }
+
+ sb.run(context, w, h);
+
+ }
+
+ public static void init() {
+
+ // WHY MUST IT ALWAYS BE SUCH NESTED GARBAGE MINECRAFT KEEP THAT IN DFU FFS
+
+ FabricLoader.getInstance()
+ .getModContainer("skyblocker")
+ .ifPresent(container -> ResourceManagerHelper.registerBuiltinResourcePack(
+ new Identifier("skyblocker", "top_aligned"),
+ container,
+ ResourcePackActivationType.NORMAL));
+
+ ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(
+ // ...why are we instantiating an interface again?
+ new SimpleSynchronousResourceReloadListener() {
+ @Override
+ public Identifier getFabricId() {
+ return new Identifier("skyblocker", "tabhud");
+ }
+
+ @Override
+ public void reload(ResourceManager manager) {
+
+ standardMap.clear();
+ screenAMap.clear();
+ screenBMap.clear();
+
+ int excnt = 0;
+
+ for (Map.Entry<Identifier, Resource> entry : manager
+ .findResources("tabhud", path -> path.getPath().endsWith("version.json"))
+ .entrySet()) {
+
+ try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager()
+ .openAsReader(entry.getKey())) {
+ JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
+ if (json.get("format_version").getAsInt() != VERSION) {
+ throw new IllegalStateException(String.format("Resource pack isn't compatible! Expected version %d, got %d", VERSION, json.get("format_version").getAsInt()));
+ }
+
+ } catch (Exception ex) {
+ throw new IllegalStateException(
+ "Rejected this resource pack. Reason: " + ex.getMessage());
+ }
+ }
+
+ for (Map.Entry<Identifier, Resource> entry : manager
+ .findResources("tabhud", path -> path.getPath().endsWith(".json") && !path.getPath().endsWith("version.json"))
+ .entrySet()) {
+ try {
+
+ load(entry.getKey());
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage());
+ excnt++;
+ }
+ }
+ if (excnt > 0) {
+ throw new IllegalStateException("This screen definition isn't valid, see above");
+ }
+ }
+ });
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java
new file mode 100644
index 00000000..76789a4c
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java
@@ -0,0 +1,83 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+import com.google.gson.JsonObject;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.ScreenConst;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+
+public class AlignStage extends PipelineStage {
+
+ private enum AlignReference {
+ HORICENT("horizontalCenter"),
+ VERTCENT("verticalCenter"),
+ LEFTCENT("leftOfCenter"),
+ RIGHTCENT("rightOfCenter"),
+ TOPCENT("topOfCenter"),
+ BOTCENT("botOfCenter"),
+ TOP("top"),
+ BOT("bot"),
+ LEFT("left"),
+ RIGHT("right");
+
+ private final String str;
+
+ AlignReference(String d) {
+ this.str = d;
+ }
+
+ public static AlignReference parse(String s) throws NoSuchElementException {
+ for (AlignReference d : AlignReference.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid reference for an align op!");
+ }
+ }
+
+ private final AlignReference reference;
+
+ public AlignStage(ScreenBuilder builder, JsonObject descr) {
+ this.reference = AlignReference.parse(descr.get("reference").getAsString());
+ this.primary = new ArrayList<>(descr.getAsJsonArray("apply_to")
+ .asList()
+ .stream()
+ .map(x -> builder.getInstance(x.getAsString()))
+ .toList());
+ }
+
+ public void run(int screenW, int screenH) {
+ int wHalf, hHalf;
+ for (Widget wid : primary) {
+ switch (this.reference) {
+ case HORICENT -> wid.setX((screenW - wid.getWidth()) / 2);
+ case VERTCENT -> wid.setY((screenH - wid.getHeight()) / 2);
+ case LEFTCENT -> {
+ wHalf = screenW / 2;
+ wid.setX(wHalf - ScreenConst.WIDGET_PAD_HALF - wid.getWidth());
+ }
+ case RIGHTCENT -> {
+ wHalf = screenW / 2;
+ wid.setX(wHalf + ScreenConst.WIDGET_PAD_HALF);
+ }
+ case TOPCENT -> {
+ hHalf = screenH / 2;
+ wid.setY(hHalf - ScreenConst.WIDGET_PAD_HALF - wid.getHeight());
+ }
+ case BOTCENT -> {
+ hHalf = screenH / 2;
+ wid.setY(hHalf + ScreenConst.WIDGET_PAD_HALF);
+ }
+ case TOP -> wid.setY(ScreenConst.getScreenPad());
+ case BOT -> wid.setY(screenH - wid.getHeight() - ScreenConst.getScreenPad());
+ case LEFT -> wid.setX(ScreenConst.getScreenPad());
+ case RIGHT -> wid.setX(screenW - wid.getWidth() - ScreenConst.getScreenPad());
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java
new file mode 100644
index 00000000..b6a5f789
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java
@@ -0,0 +1,153 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+import com.google.gson.JsonObject;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.ScreenConst;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+
+public class CollideStage extends PipelineStage {
+
+ private enum CollideDirection {
+ LEFT("left"),
+ RIGHT("right"),
+ TOP("top"),
+ BOT("bot");
+
+ private final String str;
+
+ CollideDirection(String d) {
+ this.str = d;
+ }
+
+ public static CollideDirection parse(String s) throws NoSuchElementException {
+ for (CollideDirection d : CollideDirection.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid direction for a collide op!");
+ }
+ }
+
+ private final CollideDirection direction;
+
+ public CollideStage(ScreenBuilder builder, JsonObject descr) {
+ this.direction = CollideDirection.parse(descr.get("direction").getAsString());
+ this.primary = new ArrayList<>(descr.getAsJsonArray("widgets")
+ .asList()
+ .stream()
+ .map(x -> builder.getInstance(x.getAsString()))
+ .toList());
+ this.secondary = new ArrayList<>(descr.getAsJsonArray("colliders")
+ .asList()
+ .stream()
+ .map(x -> builder.getInstance(x.getAsString()))
+ .toList());
+ }
+
+ public void run(int screenW, int screenH) {
+ switch (this.direction) {
+ case LEFT -> primary.forEach(w -> collideAgainstL(screenW, w));
+ case RIGHT -> primary.forEach(w -> collideAgainstR(screenW, w));
+ case TOP -> primary.forEach(w -> collideAgainstT(screenH, w));
+ case BOT -> primary.forEach(w -> collideAgainstB(screenH, w));
+ }
+ }
+
+ public void collideAgainstL(int screenW, Widget w) {
+ int yMin = w.getY();
+ int yMax = w.getY() + w.getHeight();
+
+ int xCor = screenW;
+
+ for (Widget other : secondary) {
+ if (other.getY() + other.getHeight() + ScreenConst.WIDGET_PAD < yMin) {
+ // too high, next one
+ continue;
+ }
+
+ if (other.getY() - ScreenConst.WIDGET_PAD > yMax) {
+ // too low, next
+ continue;
+ }
+
+ int xPos = other.getX() - ScreenConst.WIDGET_PAD - w.getWidth();
+ xCor = Math.min(xCor, xPos);
+ }
+ w.setX(xCor);
+ }
+
+ public void collideAgainstR(int screenW, Widget w) {
+ int yMin = w.getY();
+ int yMax = w.getY() + w.getHeight();
+
+ int xCor = 0;
+
+ for (Widget other : secondary) {
+ if (other.getY() + other.getHeight() + ScreenConst.WIDGET_PAD < yMin) {
+ // too high, next one
+ continue;
+ }
+
+ if (other.getY() - ScreenConst.WIDGET_PAD > yMax) {
+ // too low, next
+ continue;
+ }
+
+ int xPos = other.getX() + other.getWidth() + ScreenConst.WIDGET_PAD;
+ xCor = Math.max(xCor, xPos);
+ }
+ w.setX(xCor);
+ }
+
+ public void collideAgainstT(int screenH, Widget w) {
+ int xMin = w.getX();
+ int xMax = w.getX() + w.getWidth();
+
+ int yCor = screenH;
+
+ for (Widget other : secondary) {
+ if (other.getX() + other.getWidth() + ScreenConst.WIDGET_PAD < xMin) {
+ // too far left, next one
+ continue;
+ }
+
+ if (other.getX() - ScreenConst.WIDGET_PAD > xMax) {
+ // too far right, next
+ continue;
+ }
+
+ int yPos = other.getY() - ScreenConst.WIDGET_PAD - w.getHeight();
+ yCor = Math.min(yCor, yPos);
+ }
+ w.setY(yCor);
+ }
+
+ public void collideAgainstB(int screenH, Widget w) {
+ int xMin = w.getX();
+ int xMax = w.getX() + w.getWidth();
+
+ int yCor = 0;
+
+ for (Widget other : secondary) {
+ if (other.getX() + other.getWidth() + ScreenConst.WIDGET_PAD < xMin) {
+ // too far left, next one
+ continue;
+ }
+
+ if (other.getX() - ScreenConst.WIDGET_PAD > xMax) {
+ // too far right, next
+ continue;
+ }
+
+ int yPos = other.getY() + other.getHeight() + ScreenConst.WIDGET_PAD;
+ yCor = Math.max(yCor, yPos);
+ }
+ w.setY(yCor);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java
new file mode 100644
index 00000000..e560058c
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java
@@ -0,0 +1,14 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+
+import java.util.ArrayList;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+
+public abstract class PipelineStage {
+
+ protected ArrayList<Widget> primary = null;
+ protected ArrayList<Widget> secondary = null;
+
+ public abstract void run(int screenW, int screenH);
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java
new file mode 100644
index 00000000..a950f8f2
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java
@@ -0,0 +1,94 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+import com.google.gson.JsonObject;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.ScreenConst;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+
+public class PlaceStage extends PipelineStage {
+
+ private enum PlaceLocation {
+ CENTER("center"),
+ TOPCENT("centerTop"),
+ BOTCENT("centerBot"),
+ LEFTCENT("centerLeft"),
+ RIGHTCENT("centerRight"),
+ TRCORNER("cornerTopRight"),
+ TLCORNER("cornerTopLeft"),
+ BRCORNER("cornerBotRight"),
+ BLCORNER("cornerBotLeft");
+
+ private final String str;
+
+ PlaceLocation(String d) {
+ this.str = d;
+ }
+
+ public static PlaceLocation parse(String s) throws NoSuchElementException {
+ for (PlaceLocation d : PlaceLocation.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid location for a place op!");
+ }
+ }
+
+ private final PlaceLocation where;
+
+ public PlaceStage(ScreenBuilder builder, JsonObject descr) {
+ this.where = PlaceLocation.parse(descr.get("where").getAsString());
+ this.primary = new ArrayList<>(descr.getAsJsonArray("apply_to")
+ .asList()
+ .stream()
+ .map(x -> builder.getInstance(x.getAsString()))
+ .limit(1)
+ .toList());
+ }
+
+ public void run(int screenW, int screenH) {
+ Widget wid = primary.get(0);
+ switch (where) {
+ case CENTER -> {
+ wid.setX((screenW - wid.getWidth()) / 2);
+ wid.setY((screenH - wid.getHeight()) / 2);
+ }
+ case TOPCENT -> {
+ wid.setX((screenW - wid.getWidth()) / 2);
+ wid.setY(ScreenConst.getScreenPad());
+ }
+ case BOTCENT -> {
+ wid.setX((screenW - wid.getWidth()) / 2);
+ wid.setY((screenH - wid.getHeight()) - ScreenConst.getScreenPad());
+ }
+ case LEFTCENT -> {
+ wid.setX(ScreenConst.getScreenPad());
+ wid.setY((screenH - wid.getHeight()) / 2);
+ }
+ case RIGHTCENT -> {
+ wid.setX((screenW - wid.getWidth()) - ScreenConst.getScreenPad());
+ wid.setY((screenH - wid.getHeight()) / 2);
+ }
+ case TLCORNER -> {
+ wid.setX(ScreenConst.getScreenPad());
+ wid.setY(ScreenConst.getScreenPad());
+ }
+ case TRCORNER -> {
+ wid.setX((screenW - wid.getWidth()) - ScreenConst.getScreenPad());
+ wid.setY(ScreenConst.getScreenPad());
+ }
+ case BLCORNER -> {
+ wid.setX(ScreenConst.getScreenPad());
+ wid.setY((screenH - wid.getHeight()) - ScreenConst.getScreenPad());
+ }
+ case BRCORNER -> {
+ wid.setX((screenW - wid.getWidth()) - ScreenConst.getScreenPad());
+ wid.setY((screenH - wid.getHeight()) - ScreenConst.getScreenPad());
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java
new file mode 100644
index 00000000..5eb575c3
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java
@@ -0,0 +1,115 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+import com.google.gson.JsonObject;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.ScreenConst;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+
+public class StackStage extends PipelineStage {
+
+ private enum StackDirection {
+ HORIZONTAL("horizontal"),
+ VERTICAL("vertical");
+
+ private final String str;
+
+ StackDirection(String d) {
+ this.str = d;
+ }
+
+ public static StackDirection parse(String s) throws NoSuchElementException {
+ for (StackDirection d : StackDirection.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid direction for a stack op!");
+ }
+ }
+
+ private enum StackAlign {
+ TOP("top"),
+ BOT("bot"),
+ LEFT("left"),
+ RIGHT("right"),
+ CENTER("center");
+
+ private final String str;
+
+ StackAlign(String d) {
+ this.str = d;
+ }
+
+ public static StackAlign parse(String s) throws NoSuchElementException {
+ for (StackAlign d : StackAlign.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid alignment for a stack op!");
+ }
+ }
+
+ private final StackDirection direction;
+ private final StackAlign align;
+
+ public StackStage(ScreenBuilder builder, JsonObject descr) {
+ this.direction = StackDirection.parse(descr.get("direction").getAsString());
+ this.align = StackAlign.parse(descr.get("align").getAsString());
+ this.primary = new ArrayList<>(descr.getAsJsonArray("apply_to")
+ .asList()
+ .stream()
+ .map(x -> builder.getInstance(x.getAsString()))
+ .toList());
+ }
+
+ public void run(int screenW, int screenH) {
+ switch (this.direction) {
+ case HORIZONTAL -> stackWidgetsHoriz(screenW);
+ case VERTICAL -> stackWidgetsVert(screenH);
+ }
+ }
+
+ public void stackWidgetsVert(int screenH) {
+ int compHeight = -ScreenConst.WIDGET_PAD;
+ for (Widget wid : primary) {
+ compHeight += wid.getHeight() + 5;
+ }
+
+ int y = switch (this.align) {
+
+ case TOP -> ScreenConst.getScreenPad();
+ case BOT -> (screenH - compHeight) - ScreenConst.getScreenPad();
+ default -> (screenH - compHeight) / 2;
+ };
+
+ for (Widget wid : primary) {
+ wid.setY(y);
+ y += wid.getHeight() + ScreenConst.WIDGET_PAD;
+ }
+ }
+
+ public void stackWidgetsHoriz(int screenW) {
+ // TODO not centered (?)
+ int compWidth = -ScreenConst.WIDGET_PAD;
+ for (Widget wid : primary) {
+ compWidth += wid.getWidth() + ScreenConst.WIDGET_PAD;
+ }
+
+ int x = switch (this.align) {
+
+ case LEFT -> ScreenConst.getScreenPad();
+ case RIGHT -> (screenW - compWidth) - ScreenConst.getScreenPad();
+ default -> (screenW - compWidth) / 2;
+ };
+
+ for (Widget wid : primary) {
+ wid.setX(x);
+ x += wid.getWidth() + ScreenConst.WIDGET_PAD;
+ }
+ }
+} \ 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
deleted file mode 100644
index 5c302eb3..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget;
-
-import net.minecraft.text.Text;
-
-public class EmptyScreen extends Screen {
-
- public EmptyScreen(int w, int h, Text footer) {
- super(w, h);
- 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
deleted file mode 100644
index 6d06c637..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
-
-import java.util.ArrayList;
-
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericRiftInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.FarmingServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GardenScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GenericServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GuestServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.RiftScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen;
-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.gui.DrawContext;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.Text;
-
-public class Screen {
-
- private ArrayList<Widget> widgets = new ArrayList<>();
- private int w, h;
-
- public Screen(int w, int h) {
- float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f;
- this.w = (int) (w / scale);
- this.h = (int) (h / scale);
- }
-
- public static Screen getCorrect(int w, int h, Text footer) {
- if (TabHud.genericTgl.isPressed()) {
- return Screen.correctGenericScrn(w, h, footer);
- } else if (TabHud.playerTgl.isPressed()) {
- return Screen.correctPlayerScrn(w, h, footer);
- } else {
- return Screen.correctMainScrn(w, h, footer);
- }
- }
-
- private static Screen correctGenericScrn(int w, int h, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- case GARDEN -> new GardenInfoScreen(w, h, footer); // ok
- case THE_RIFT -> new GenericRiftInfoScreen(w, h, footer);
- case UNKNOWN -> new EmptyScreen(w, h, footer); // ok
- default -> new GenericInfoScreen(w, h, footer); // ok
- };
- }
-
- private static Screen correctPlayerScrn(int w, int h, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- 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, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- case PARK -> new ParkServerScreen(w, h, footer); // ok
- case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming
- 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 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 THE_RIFT -> new RiftScreen(w, h, footer);
- case UNKNOWN -> new EmptyScreen(w, h, footer); // ok
- default -> new GenericServerScreen(w, h, footer); // ok
- };
- }
-
- /**
- * Add a widget to this screen
- */
- public void addWidget(Widget w) {
- widgets.add(w);
- }
-
- /**
- * Add many widgets to this screen
- */
- public void addWidgets(Widget... ws) {
- for (Widget w : ws) {
- widgets.add(w);
- }
- }
-
- public void render(DrawContext context) {
- for (Widget w : widgets) {
- w.render(context);
- }
- }
-
- /**
- * Stack these widgets on top of each other as determined by the lists's order
- */
- public void stackWidgetsH(Widget... list) {
- int compHeight = -5;
- for (Widget wid : list) {
- compHeight += wid.getHeight() + 5;
- }
-
- int y = (h - compHeight) / 2;
- for (Widget wid : list) {
- wid.setY(y);
- y += wid.getHeight() + 5;
- }
- }
-
- /**
- * Arrange these widgets next to each other as determined by the lists's order
- */
- public void stackWidgetsW(Widget... list) {
- // TODO not centered
- int compWidth = -5;
- for (Widget wid : list) {
- compWidth += wid.getWidth() + 5;
- }
-
- int x = (w - compWidth) / 2;
- for (Widget wid : list) {
- wid.setX(x);
- x += wid.getWidth() + 5;
- }
- }
-
- /**
- * Center a widget vertically, keeping X pos
- */
- public void centerH(Widget wid) {
- wid.setY((h - wid.getHeight()) / 2);
- }
-
- /**
- * Center a widget horizontally, keeping Y pos
- */
- public void centerW(Widget wid) {
- wid.setX((w - wid.getWidth()) / 2);
- }
-
- /**
- * Center a widget vertically and horizontally
- */
- public void center(Widget wid) {
- this.centerH(wid);
- this.centerW(wid);
- }
-
- /**
- * Let a widget's left border be on the screen's center, keeping Y pos
- */
- public void offCenterL(Widget wid) {
- int wHalf = this.w / 2;
- wid.setX(wHalf - 3 - wid.getWidth());
- }
-
- /**
- * Let a widget's right border be on the screen's center, keeping Y pos
- */
- public void offCenterR(Widget wid) {
- int wHalf = this.w / 2;
- wid.setX(wHalf + 3);
- }
-
- public void collideAgainstL(Widget w, Widget... others) {
- int yMin = w.getY();
- int yMax = w.getY() + w.getHeight();
-
- int xCor = this.w / 2;
-
- // assume others to be sorted top-bottom.
- for (Widget other : others) {
- if (other.getY() + other.getHeight() + 5 < yMin) {
- // too high, next one
- continue;
- }
-
- if (other.getY() - 5 > yMax) {
- // too low, no more collisions possible
- break;
- }
-
- int xPos = other.getX() - 5 - w.getWidth();
- xCor = Math.min(xCor, xPos);
- }
- w.setX(xCor);
- }
-
- public void collideAgainstR(Widget w, Widget... others) {
- int yMin = w.getY();
- int yMax = w.getY() + w.getHeight();
-
- int xCor = this.w / 2;
-
- // assume others to be sorted top-bottom.
- for (Widget other : others) {
- if (other.getY() + other.getHeight() + 5 < yMin) {
- // too high, next one
- continue;
- }
-
- if (other.getY() - 5 > yMax) {
- // too low, no more collisions possible
- break;
- }
-
- int xPos = other.getX() + other.getWidth() + 5;
- xCor = Math.max(xCor, xPos);
- }
- w.setX(xCor);
- }
-}
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
deleted file mode 100644
index 0bb12c8e..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo;
-
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
-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.text.Text;
-
-public class GardenInfoScreen extends Screen {
-
- public GardenInfoScreen(int w, int h, Text footer) {
- super(w, h);
-
- String f = footer.getString();
-
- GardenSkillsWidget gsw = new GardenSkillsWidget();
- EventWidget evw = new EventWidget(true);
- UpgradeWidget uw = new UpgradeWidget(f);
-
- ProfileWidget pw = new ProfileWidget();
- EffectWidget efw = new EffectWidget(f);
-
- JacobsContestWidget jcw = new JacobsContestWidget();
- CookieWidget cw = new CookieWidget(f);
-
- // layout code incoming
- this.stackWidgetsH(gsw, evw, uw);
- this.stackWidgetsH(pw, efw);
- this.stackWidgetsH(jcw, cw);
-
- this.centerW(gsw);
- this.centerW(evw);
- this.centerW(uw);
-
- this.collideAgainstL(pw, gsw, evw, uw);
- this.collideAgainstL(efw, gsw, evw, uw);
-
- this.collideAgainstR(jcw, gsw, evw, uw);
- this.collideAgainstR(cw, gsw, evw, uw);
-
- this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw);
- }
-
-}
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
deleted file mode 100644
index 046a9313..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ElectionWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
-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.text.Text;
-
-public class GenericInfoScreen extends Screen {
-
- public GenericInfoScreen(int w, int h, Text footer) {
- super(w, h);
-
- String f = footer.getString();
-
- SkillsWidget sw = new SkillsWidget();
- EventWidget evw = new EventWidget(false);
- UpgradeWidget uw = new UpgradeWidget(f);
-
- ProfileWidget pw = new ProfileWidget();
- EffectWidget efw = new EffectWidget(f);
-
- ElectionWidget elw = new ElectionWidget();
- CookieWidget cw = new CookieWidget(f);
-
- this.stackWidgetsH(sw, evw, uw);
- this.stackWidgetsH(pw, efw);
- this.stackWidgetsH(elw, cw);
-
- this.centerW(sw);
- this.centerW(evw);
- this.centerW(uw);
-
- this.collideAgainstL(pw, sw, evw, uw);
- this.collideAgainstL(efw, sw, evw, uw);
-
- this.collideAgainstR(elw, sw, evw, uw);
- this.collideAgainstR(cw, sw, evw, uw);
-
- this.addWidgets(sw, evw, uw, pw, efw, elw, cw);
- }
-
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java
deleted file mode 100644
index 9821b5a3..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProfileWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftStatsWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.ShenWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.AdvertisementWidget;
-import net.minecraft.text.Text;
-
-public class GenericRiftInfoScreen extends Screen {
-
- public GenericRiftInfoScreen(int w, int h, Text footer) {
- super(w, h);
-
- String f = footer.getString();
-
- RiftProfileWidget profile = new RiftProfileWidget();
- RiftStatsWidget stats = new RiftStatsWidget();
- ShenWidget shen = new ShenWidget();
-
- CookieWidget cookie = new CookieWidget(f);
- AdvertisementWidget advertisement = new AdvertisementWidget();
-
- this.stackWidgetsH(stats, advertisement);
- this.stackWidgetsH(profile, shen, cookie);
-
- this.offCenterL(stats);
- this.offCenterL(advertisement);
-
- this.offCenterR(profile);
- this.offCenterR(shen);
- this.offCenterR(cookie);
-
- this.addWidgets(profile, stats, shen, cookie, advertisement);
- }
-
-}
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
deleted file mode 100644
index 6e6f563b..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-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.text.Text;
-
-public class CrimsonIsleScreen extends Screen {
-
- public CrimsonIsleScreen(int w, int h, Text footer) {
- super(w, h);
-
- ServerWidget sw = new ServerWidget();
- ReputationWidget rw = new ReputationWidget();
- QuestWidget qw = new QuestWidget();
- VolcanoWidget vw = new VolcanoWidget();
-
- this.stackWidgetsH(sw, rw);
- this.stackWidgetsH(qw, vw);
- this.offCenterL(sw);
- this.offCenterL(rw);
- this.offCenterR(vw);
- this.offCenterR(qw);
- this.addWidgets(sw, rw, 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
deleted file mode 100644
index 5db461af..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-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.text.Text;
-
-public class DungeonHubScreen extends Screen{
-
- public DungeonHubScreen(int w, int h, Text footer) {
- super(w, h);
-
- ServerWidget sw = new ServerWidget();
- EssenceWidget ew = new EssenceWidget();
-
- this.centerW(sw);
- this.centerW(ew);
- this.stackWidgetsH(sw, ew);
- this.addWidget(ew);
- this.addWidget(sw);
- }
-
-}
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
deleted file mode 100644
index 852ee876..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonBuffWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget;
-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.text.Text;
-
-public class DungeonScreen extends Screen {
-
- public DungeonScreen(int w, int h, Text footer) {
- super(w, h);
-
- String f = footer.getString();
-
- DungeonDownedWidget ddow = new DungeonDownedWidget();
- DungeonDeathWidget ddew = new DungeonDeathWidget();
- DungeonSecretWidget dscw = new DungeonSecretWidget();
- DungeonServerWidget dsrw = new DungeonServerWidget();
- DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget();
- DungeonBuffWidget dbw = new DungeonBuffWidget(f);
-
- this.offCenterL(ddow);
- this.offCenterL(ddew);
- this.offCenterL(dbw);
- this.offCenterR(dsrw);
- this.offCenterR(dpuw);
- this.offCenterR(dscw);
-
- this.stackWidgetsH(ddow, ddew, dbw);
- this.stackWidgetsH(dsrw, dpuw, dscw);
-
- this.addWidgets(ddow, ddew, dscw, dsrw, dpuw, dbw);
-
- }
-
-}
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
deleted file mode 100644
index 02c81f23..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-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.text.Text;
-
-public class FarmingServerScreen extends Screen{
-
- public FarmingServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- ServerWidget sw = new ServerWidget();
- TrapperWidget tw = new TrapperWidget();
-
- this.centerW(sw);
- this.centerW(tw);
- this.stackWidgetsH(sw, tw);
- this.addWidgets(tw, sw);
- }
-
-}
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
deleted file mode 100644
index 8fd69cbb..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CameraPositionWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenVisitorsWidget;
-import net.minecraft.text.Text;
-
-public class GardenScreen extends Screen{
-
- public GardenScreen(int w, int h, Text footer) {
- super(w, h);
-
- GardenServerWidget gsw = new GardenServerWidget();
- ComposterWidget cw = new ComposterWidget();
- GardenVisitorsWidget vw = new GardenVisitorsWidget();
- CameraPositionWidget cpw = new CameraPositionWidget();
-
- this.stackWidgetsH(gsw, vw);
- this.stackWidgetsH(cw, cpw);
- this.offCenterL(gsw);
- this.offCenterL(vw);
- this.offCenterR(cw);
- this.offCenterR(cpw);
- this.addWidgets(gsw, cw, vw, cpw);
- }
-
-}
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
deleted file mode 100644
index a89563db..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget;
-
-import net.minecraft.text.Text;
-
-public class GenericServerScreen extends Screen {
-
- public GenericServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- 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
deleted file mode 100644
index 57d7a199..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GuestServerWidget;
-
-
-import net.minecraft.text.Text;
-
-public class GuestServerScreen extends Screen{
-
- public GuestServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- 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
deleted file mode 100644
index e61ba4b0..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-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.text.Text;
-
-public class HomeServerScreen extends Screen {
-
- public HomeServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- IslandServerWidget isw = new IslandServerWidget();
- MinionWidget mw = new MinionWidget();
-
- this.centerH(isw);
- this.centerH(mw);
- this.stackWidgetsW(isw, mw);
- this.addWidgets(isw, 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
deleted file mode 100644
index e2857f7e..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-
-
-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.text.Text;
-
-public class HubServerScreen extends Screen {
-
- public HubServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- ServerWidget sw = new ServerWidget();
- FireSaleWidget fsw = new FireSaleWidget();
-
- this.centerW(sw);
- this.centerW(fsw);
- this.stackWidgetsH(sw, fsw);
- this.addWidgets(sw, 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
deleted file mode 100644
index 616c3e82..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget;
-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.text.Text;
-
-public class MineServerScreen extends Screen {
-
- public MineServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- ServerWidget sw = new ServerWidget();
- PowderWidget pw = new PowderWidget();
- CommsWidget cw = new CommsWidget();
- ForgeWidget fw = new ForgeWidget();
-
- this.stackWidgetsH(sw, cw);
- this.stackWidgetsH(fw, pw);
- this.offCenterL(sw);
- this.offCenterL(cw);
- this.offCenterR(pw);
- this.offCenterR(fw);
- this.addWidgets(fw, cw, pw, sw);
- }
-
-}
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
deleted file mode 100644
index aa65d946..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ParkServerWidget;
-
-import net.minecraft.text.Text;
-
-public class ParkServerScreen extends Screen{
-
- public ParkServerScreen(int w, int h, Text footer) {
- super(w, h);
-
- ParkServerWidget sw = new ParkServerWidget();
-
- this.center(sw);
- this.addWidget(sw);
- }
-
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java
deleted file mode 100644
index d63bcf62..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProgressWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.GoodToKnowWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftServerInfoWidget;
-
-
-import net.minecraft.text.Text;
-
-public class RiftScreen extends Screen {
-
- public RiftScreen(int w, int h, Text footer) {
- super(w, h);
-
- RiftProgressWidget rftProg = new RiftProgressWidget();
- GoodToKnowWidget gtk = new GoodToKnowWidget();
- RiftServerInfoWidget si = new RiftServerInfoWidget();
-
- this.stackWidgetsH(si, gtk);
- this.stackWidgetsH(rftProg);
- this.offCenterL(si);
- this.offCenterL(gtk);
- this.offCenterR(rftProg);
- this.addWidgets(si, gtk, rftProg);
- }
-
-}
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
deleted file mode 100644
index 2567da13..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget;
-import net.minecraft.text.Text;
-
-public class DungeonPlayerScreen extends Screen {
-
- public DungeonPlayerScreen(int w, int h, Text footer) {
-
- super(w, h);
-
- 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);
- this.offCenterL(dpw3);
- this.offCenterR(dpw4);
- this.offCenterR(dpw5);
- this.stackWidgetsH(dpw1, dpw2, dpw3);
- this.stackWidgetsH(dpw4, dpw5);
- this.addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5);
- }
-
-}
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
deleted file mode 100644
index 5a9733cc..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList;
-
-
-
-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.text.Text;
-
-public class GuestPlayerScreen extends Screen{
-
- public GuestPlayerScreen(int w, int h, Text footer) {
- super(w, h);
-
- IslandGuestsWidget igw = new IslandGuestsWidget();
- IslandOwnersWidget iow = new IslandOwnersWidget();
-
- this.centerH(iow);
- this.centerH(igw);
- this.stackWidgetsW(igw, iow);
- this.addWidgets(iow, 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
deleted file mode 100644
index 2a159ecc..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList;
-
-
-
-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.text.Text;
-
-public class HomePlayerScreen extends Screen {
-
- public HomePlayerScreen(int w, int h, Text footer) {
- super(w, h);
-
- IslandSelfWidget isw = new IslandSelfWidget();
- IslandGuestsWidget igw = new IslandGuestsWidget();
-
- this.centerH(isw);
- this.centerH(igw);
- this.stackWidgetsW(isw, igw);
- this.addWidgets(isw, 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
deleted file mode 100644
index 5db01512..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList;
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.PlayerListWidget;
-
-import net.minecraft.text.Text;
-
-public class PlayerListScreen extends Screen {
-
- public PlayerListScreen(int w, int h, Text footer) {
- super(w, h);
-
- 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
index d0ce6b72..7b35bcce 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
@@ -26,6 +26,7 @@ public class PlayerListMgr {
public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex");
private static List<PlayerListEntry> playerList;
+ private static String footer;
public static void updateList() {
@@ -41,6 +42,14 @@ public class PlayerListMgr {
}
}
+ public static void updateFooter(Text f) {
+ footer = f.getString();
+ }
+
+ public static String getFooter() {
+ return footer;
+ }
+
/**
* Get the display name at some index of the player list and apply a pattern to
* it
@@ -85,7 +94,7 @@ public class PlayerListMgr {
return null;
}
String str = txt.getString().trim();
- if (str.length() == 0) {
+ if (str.isEmpty()) {
return null;
}
return str;
@@ -135,7 +144,7 @@ public class PlayerListMgr {
}
// Avoid returning an empty component - Rift advertisements needed this
- if (newText.getString().length() == 0) {
+ if (newText.getString().isEmpty()) {
return null;
}
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 f7a989bc..11c9d860 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
@@ -7,27 +7,35 @@ import me.xmrvizzy.skyblocker.utils.Utils;
*/
public class PlayerLocator {
- public static enum Location {
- DUNGEON,
- GUEST_ISLAND,
- HOME_ISLAND,
- CRIMSON_ISLE,
- DUNGEON_HUB,
- FARMING_ISLAND,
- PARK,
- DWARVEN_MINES,
- CRYSTAL_HOLLOWS,
- END,
- GOLD_MINE,
- DEEP_CAVERNS,
- HUB,
- SPIDER_DEN,
- JERRY,
- GARDEN,
- INSTANCED,
- THE_RIFT,
- DARK_AUCTION,
- UNKNOWN
+ public enum Location {
+ DUNGEON("dungeon"),
+ GUEST_ISLAND("guest_island"),
+ HOME_ISLAND("home_island"),
+ CRIMSON_ISLE("crimson_isle"),
+ DUNGEON_HUB("dungeon_hub"),
+ FARMING_ISLAND("farming_island"),
+ PARK("park"),
+ DWARVEN_MINES("dwarven_mines"),
+ CRYSTAL_HOLLOWS("crystal_hollows"),
+ END("end"),
+ GOLD_MINE("gold_mine"),
+ DEEP_CAVERNS("deep_caverns"),
+ HUB("hub"),
+ SPIDER_DEN("spider_den"),
+ JERRY("jerry_workshop"),
+ GARDEN("garden"),
+ INSTANCED("kuudra"),
+ THE_RIFT("rift"),
+ DARK_AUCTION("dark_auction"),
+ UNKNOWN("unknown");
+
+ public final String internal;
+
+ Location(String i) {
+ // as used internally by the mod, e.g. in the json
+ this.internal = i;
+ }
+
}
public static Location getPlayerLocation() {
@@ -36,60 +44,44 @@ public class PlayerLocator {
return Location.UNKNOWN;
}
- String areaDesciptor = PlayerListMgr.strAt(41);
+ String areaDescriptor = PlayerListMgr.strAt(41);
- if (areaDesciptor == null || areaDesciptor.length() < 6) {
+ if (areaDescriptor == null || areaDescriptor.length() < 6) {
return Location.UNKNOWN;
}
- if (areaDesciptor.startsWith("Dungeon")) {
+ if (areaDescriptor.startsWith("Dungeon")) {
return Location.DUNGEON;
}
- switch (areaDesciptor.substring(6)) {
- case "Private Island":
+ return switch (areaDescriptor.substring(6)) {
+ case "Private Island" -> {
String islandType = PlayerListMgr.strAt(44);
if (islandType == null) {
- return Location.UNKNOWN;
+ yield Location.UNKNOWN;
} else if (islandType.endsWith("Guest")) {
- return Location.GUEST_ISLAND;
+ yield Location.GUEST_ISLAND;
} else {
- return Location.HOME_ISLAND;
+ yield Location.HOME_ISLAND;
}
- case "Crimson Isle":
- return Location.CRIMSON_ISLE;
- case "Dungeon Hub":
- return Location.DUNGEON_HUB;
- case "The Farming Islands":
- return Location.FARMING_ISLAND;
- case "The Park":
- return Location.PARK;
- case "Dwarven Mines":
- return Location.DWARVEN_MINES;
- case "Crystal Hollows":
- return Location.CRYSTAL_HOLLOWS;
- case "The End":
- return Location.END;
- case "Gold Mine":
- return Location.GOLD_MINE;
- case "Deep Caverns":
- return Location.DEEP_CAVERNS;
- case "Hub":
- return Location.HUB;
- case "Spider's Den":
- return Location.SPIDER_DEN;
- case "Jerry's Workshop":
- return Location.JERRY;
- case "Garden":
- return Location.GARDEN;
- case "Instanced":
- return Location.INSTANCED;
- case "The Rift":
- return Location.THE_RIFT;
- case "Dark Auction":
- return Location.DARK_AUCTION;
- default:
- return Location.UNKNOWN;
- }
+ }
+ case "Crimson Isle" -> Location.CRIMSON_ISLE;
+ case "Dungeon Hub" -> Location.DUNGEON_HUB;
+ case "The Farming Islands" -> Location.FARMING_ISLAND;
+ case "The Park" -> Location.PARK;
+ case "Dwarven Mines" -> Location.DWARVEN_MINES;
+ case "Crystal Hollows" -> Location.CRYSTAL_HOLLOWS;
+ case "The End" -> Location.END;
+ case "Gold Mine" -> Location.GOLD_MINE;
+ case "Deep Caverns" -> Location.DEEP_CAVERNS;
+ case "Hub" -> Location.HUB;
+ case "Spider's Den" -> Location.SPIDER_DEN;
+ case "Jerry's Workshop" -> Location.JERRY;
+ case "Garden" -> Location.GARDEN;
+ case "Instanced" -> Location.INSTANCED;
+ case "The Rift" -> Location.THE_RIFT;
+ case "Dark Auction" -> Location.DARK_AUCTION;
+ default -> Location.UNKNOWN;
+ };
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java
new file mode 100644
index 00000000..42089e9e
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java
@@ -0,0 +1,13 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.util;
+
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+
+public class ScreenConst {
+ public static final int WIDGET_PAD = 5;
+ public static final int WIDGET_PAD_HALF = 3;
+ private static final int SCREEN_PAD_BASE = 20;
+
+ public static int getScreenPad() {
+ return (int) ((1f/((float)SkyblockerConfig.get().general.tabHud.tabHudScale/100f) * SCREEN_PAD_BASE));
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java
index ca108837..7e44bc44 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java
@@ -8,25 +8,30 @@ import net.minecraft.util.Formatting;
import net.minecraft.util.math.MathHelper;
public class CameraPositionWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Camera Pos").formatted(Formatting.DARK_PURPLE, Formatting.BOLD);
- private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
-
- public CameraPositionWidget() {
- super(TITLE, Formatting.DARK_PURPLE.getColorValue());
-
- double yaw = CLIENT.getCameraEntity().getYaw();
- double pitch = CLIENT.getCameraEntity().getPitch();
-
- this.addComponent(new PlainTextComponent(Text.literal("Yaw: " + roundToDecimalPlaces(MathHelper.wrapDegrees(yaw), 3))));
- this.addComponent(new PlainTextComponent(Text.literal("Pitch: " + roundToDecimalPlaces(MathHelper.wrapDegrees(pitch), 3))));
-
- this.pack();
- }
-
- //https://stackoverflow.com/a/33889423
- private static double roundToDecimalPlaces(double value, int decimalPlaces) {
- double shift = Math.pow(10, decimalPlaces);
-
- return Math.round(value * shift) / shift;
- }
+ private static final MutableText TITLE = Text.literal("Camera Pos").formatted(Formatting.DARK_PURPLE,
+ Formatting.BOLD);
+ private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
+
+ public CameraPositionWidget() {
+ super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+ double yaw = CLIENT.getCameraEntity().getYaw();
+ double pitch = CLIENT.getCameraEntity().getPitch();
+
+ this.addComponent(
+ new PlainTextComponent(Text.literal("Yaw: " + roundToDecimalPlaces(MathHelper.wrapDegrees(yaw), 3))));
+ this.addComponent(new PlainTextComponent(
+ Text.literal("Pitch: " + roundToDecimalPlaces(MathHelper.wrapDegrees(pitch), 3))));
+
+ }
+
+ // https://stackoverflow.com/a/33889423
+ private static double roundToDecimalPlaces(double value, int decimalPlaces) {
+ double shift = Math.pow(10, decimalPlaces);
+
+ return Math.round(value * shift) / shift;
+ }
}
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 de90cf30..8bbdb25f 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
@@ -1,15 +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.dwarven.DwarvenHud.Commission;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico;
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.text.MutableText;
import net.minecraft.text.Text;
@@ -31,7 +27,10 @@ public class CommsWidget extends Widget {
public CommsWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
for (int i = 50; i <= 53; i++) {
Matcher m = PlayerListMgr.regexAt(i, COMM_PATTERN);
// end of comms found?
@@ -55,33 +54,6 @@ public class CommsWidget extends Widget {
}
this.addComponent(pc);
}
- this.pack();
- }
-
- // for the dwarven hud
- public CommsWidget(List<Commission> commissions, boolean isFancy) {
- super(TITLE, Formatting.AQUA.getColorValue());
- for (Commission comm : commissions) {
-
- Text c = Text.literal(comm.commission());
-
- float p = 100f;
- if (!comm.progression().contains("DONE")) {
- p = Float.parseFloat(comm.progression().substring(0, comm.progression().length() - 1));
- }
-
- Component comp;
- if (isFancy) {
- comp = new ProgressComponent(Ico.BOOK, c, p, pcntToCol(p));
- } else {
- comp = new PlainTextComponent(
- Text.literal(comm.commission() + ": ")
- .append(Text.literal(comm.progression()).formatted(Formatting.GREEN)));
- }
- this.addComponent(comp);
- }
- this.pack();
-
}
private int pcntToCol(float pcnt) {
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 5922fcbc..1307b407 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
@@ -16,13 +16,15 @@ public class ComposterWidget extends Widget {
public ComposterWidget() {
super(TITLE, Formatting.GREEN.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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 48cb90bd..bf1d086f 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
@@ -4,6 +4,7 @@ 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.PlayerListMgr;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
@@ -19,19 +20,21 @@ public class CookieWidget extends Widget {
private static final Pattern COOKIE_PATTERN = Pattern.compile(".*\\nCookie Buff\\n(?<buff>.*)\\n");
- public CookieWidget(String footertext) {
+ public CookieWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
+ String footertext = PlayerListMgr.getFooter();
if (footertext == null || !footertext.contains("Cookie Buff")) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
Matcher m = COOKIE_PATTERN.matcher(footertext);
if (!m.find() || m.group("buff") == null) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
@@ -42,7 +45,6 @@ public class CookieWidget extends Widget {
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/DungeonBuffWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java
index d56d3522..b7f58763 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonBuffWidget.java
@@ -1,5 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.widget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
@@ -16,12 +17,17 @@ public class DungeonBuffWidget extends Widget {
private static final MutableText TITLE = Text.literal("Dungeon Buffs").formatted(Formatting.DARK_PURPLE,
Formatting.BOLD);
- public DungeonBuffWidget(String footertext) {
+ public DungeonBuffWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+
+ String footertext = PlayerListMgr.getFooter();
if (footertext == null || !footertext.contains("Dungeon Buffs")) {
this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY)));
- this.pack();
return;
}
@@ -30,7 +36,6 @@ public class DungeonBuffWidget extends Widget {
if (!lines[1].startsWith("Blessing")) {
this.addComponent(new PlainTextComponent(Text.literal("No buffs found!").formatted(Formatting.GRAY)));
- this.pack();
return;
}
@@ -48,7 +53,6 @@ public class DungeonBuffWidget extends Widget {
this.addComponent(new PlainTextComponent(Text.literal(line).styled(style -> style.withColor(color))));
}
- this.pack();
}
@SuppressWarnings("DataFlowIssue")
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 05223211..80134b66 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
@@ -24,7 +24,10 @@ public class DungeonDeathWidget extends Widget {
public DungeonDeathWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
Matcher m = PlayerListMgr.regexAt(25, DEATH_PATTERN);
if (m == null) {
this.addComponent(new IcoTextComponent());
@@ -39,7 +42,6 @@ public class DungeonDeathWidget extends Widget {
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 9bb250f7..2ca617ee 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
@@ -17,7 +17,10 @@ public class DungeonDownedWidget extends Widget {
public DungeonDownedWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
String down = PlayerListMgr.strAt(21);
if (down == null) {
this.addComponent(new IcoTextComponent());
@@ -36,7 +39,6 @@ public class DungeonDownedWidget extends Widget {
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 443cca55..2ba0c0cc 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
@@ -45,10 +45,16 @@ public class DungeonPlayerWidget extends Widget {
MSGS.add("More is better!");
}
+ private final int player;
+
// title needs to be changeable here
public DungeonPlayerWidget(int player) {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ this.player = player;
+ }
+ @Override
+ public void updateContent() {
int start = 1 + (player - 1) * 4;
if (PlayerListMgr.strAt(start) == null) {
@@ -56,7 +62,6 @@ public class DungeonPlayerWidget extends Widget {
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);
@@ -94,6 +99,5 @@ public class DungeonPlayerWidget extends Widget {
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 2529e876..ef765fc3 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
@@ -26,7 +26,10 @@ public class DungeonPuzzleWidget extends Widget {
public DungeonPuzzleWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
int pos = 48;
while (pos < 60) {
@@ -49,7 +52,6 @@ public class DungeonPuzzleWidget extends Widget {
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 93eb69de..a985b4b1 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
@@ -14,11 +14,13 @@ public class DungeonSecretWidget extends Widget {
public DungeonSecretWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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 81b8f907..05b88127 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
@@ -24,7 +24,10 @@ public class DungeonServerWidget extends Widget {
public DungeonServerWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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);
@@ -40,8 +43,6 @@ public class DungeonServerWidget extends Widget {
}
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 cd39a25a..718ea2d3 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
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.widget;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoFatTextComponent;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent;
import net.minecraft.text.MutableText;
@@ -16,12 +17,17 @@ public class EffectWidget extends Widget {
private static final MutableText TITLE = Text.literal("Effect Info").formatted(Formatting.DARK_PURPLE,
Formatting.BOLD);
- public EffectWidget(String footertext) {
+ public EffectWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+
+ String footertext = PlayerListMgr.getFooter();
if (footertext == null || !footertext.contains("Active Effects")) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
@@ -29,7 +35,6 @@ public class EffectWidget extends Widget {
String[] lines = footertext.split("Active Effects")[1].split("\n");
if (lines.length < 2) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
@@ -47,7 +52,6 @@ public class EffectWidget extends Widget {
int idx = number.indexOf(' ');
if (idx == -1 || lines.length < 4) {
this.addComponent(new IcoFatTextComponent());
- this.pack();
return;
}
number = number.substring(0, idx);
@@ -58,7 +62,6 @@ public class EffectWidget extends Widget {
Text.literal(lines[3]).formatted(Formatting.AQUA));
this.addComponent(iftc);
}
- this.pack();
}
}
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 ed07982c..0f858fb6 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
@@ -48,14 +48,16 @@ public class ElectionWidget extends Widget {
public ElectionWidget() {
super(TITLE, Formatting.YELLOW.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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;
}
@@ -97,7 +99,6 @@ public class ElectionWidget extends Widget {
}
}
}
- 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/ErrorWidget.java
index 52d6cfbd..7f53fde7 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ErrorWidget.java
@@ -8,17 +8,25 @@ import net.minecraft.util.Formatting;
// empty widget for when nothing can be shown
-public class EmptyWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Empty").formatted(Formatting.RED,
+public class ErrorWidget extends Widget {
+ private static final MutableText TITLE = Text.literal("Error").formatted(Formatting.RED,
Formatting.BOLD);
- public EmptyWidget() {
+ Text error = Text.of("No info available!");
+
+ public ErrorWidget() {
super(TITLE, Formatting.RED.getColorValue());
+ }
+
+ public ErrorWidget(String error) {
+ super(TITLE, Formatting.RED.getColorValue());
+ this.error = Text.of(error);
+ }
- Text info = Text.of("No info for this area!");
- PlainTextComponent inf = new PlainTextComponent(info);
+ @Override
+ public void updateContent() {
+ PlainTextComponent inf = new PlainTextComponent(this.error);
this.addComponent(inf);
- this.pack();
}
}
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 fc0780e1..c503d89f 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
@@ -19,6 +19,10 @@ public class EssenceWidget extends Widget {
public EssenceWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
wither = Widget.simpleEntryText(46, "Wither:", Formatting.DARK_PURPLE);
spider = Widget.simpleEntryText(47, "Spider:", Formatting.DARK_PURPLE);
undead = Widget.simpleEntryText(48, "Undead:", Formatting.DARK_PURPLE);
@@ -39,6 +43,5 @@ public class EssenceWidget extends Widget {
tc.addToCell(1, 2, new IcoTextComponent(Ico.ICE, ice));
tc.addToCell(1, 3, new IcoTextComponent(Ico.REDSTONE, crimson));
this.addComponent(tc);
- this.pack();
}
}
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 1b46e621..7d07ad75 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
@@ -11,9 +11,15 @@ import net.minecraft.util.Formatting;
public class EventWidget extends Widget {
private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD);
+ private final boolean isInGarden;
+
public EventWidget(boolean isInGarden) {
super(TITLE, Formatting.YELLOW.getColorValue());
+ this.isInGarden = isInGarden;
+ }
+ @Override
+ public void updateContent() {
// 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;
@@ -24,7 +30,6 @@ public class EventWidget extends Widget {
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 ddf51f32..ba6a0ec1 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
@@ -29,18 +29,19 @@ public class FireSaleWidget extends Widget {
public FireSaleWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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;
}
@@ -57,7 +58,6 @@ public class FireSaleWidget extends Widget {
ProgressComponent pc = new ProgressComponent(Ico.GOLD, itemTxt, prgressTxt, pcnt, pcntToCol(pcnt));
this.addComponent(pc);
}
- 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 da1ba6c5..ed87d496 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
@@ -20,12 +20,15 @@ public class ForgeWidget extends Widget {
public ForgeWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
int forgestart = 54;
// why is it forges and not looms >:(
String pos = PlayerListMgr.strAt(53);
if (pos == null) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
@@ -45,22 +48,22 @@ public class ForgeWidget extends Widget {
Text l1, l2;
switch (fstr.substring(3)) {
- case "LOCKED":
+ case "LOCKED" -> {
l1 = Text.literal("Locked").formatted(Formatting.RED);
l2 = switch (slot) {
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);
+ Text.literal("This message should not appear").formatted(Formatting.RED, Formatting.BOLD);
};
c = new IcoFatTextComponent(Ico.BARRIER, l1, l2);
- break;
- case "EMPTY":
+ }
+ case "EMPTY" -> {
l1 = Text.literal("Empty").formatted(Formatting.GRAY);
c = new IcoTextComponent(Ico.FURNACE, l1);
- break;
- default:
+ }
+ default -> {
String[] parts = fstr.split(": ");
if (parts.length != 2) {
c = new IcoFatTextComponent();
@@ -69,11 +72,10 @@ public class ForgeWidget extends Widget {
l2 = Text.literal("Done in: ").formatted(Formatting.GRAY).append(Text.literal(parts[1]).formatted(Formatting.WHITE));
c = new IcoFatTextComponent(Ico.FIRE, l1, l2);
}
- break;
+ }
}
this.addComponent(c);
}
- this.pack();
}
}
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 b0fc160f..2fd81873 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
@@ -24,7 +24,10 @@ public class GardenServerWidget extends Widget {
public GardenServerWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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);
@@ -33,7 +36,6 @@ public class GardenServerWidget extends Widget {
Matcher m = PlayerListMgr.regexAt(45, VISITOR_PATTERN);
if (m == null ) {
this.addComponent(new IcoTextComponent());
- this.pack();
return;
}
@@ -47,7 +49,6 @@ public class GardenServerWidget extends Widget {
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 26e29ce2..2b928cba 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
@@ -30,7 +30,10 @@ public class GardenSkillsWidget extends Widget {
public GardenSkillsWidget() {
super(TITLE, Formatting.YELLOW.getColorValue());
+ }
+ @Override
+ public void updateContent() {
ProgressComponent pc;
Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN);
if (m == null) {
@@ -72,7 +75,6 @@ public class GardenSkillsWidget extends Widget {
}
this.addComponent(pc2);
- this.pack();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java
index 6a4d2af3..945fb17c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenVisitorsWidget.java
@@ -7,23 +7,24 @@ import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
public class GardenVisitorsWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Visitors").formatted(Formatting.DARK_GREEN, Formatting.BOLD);
+ private static final MutableText TITLE = Text.literal("Visitors").formatted(Formatting.DARK_GREEN, Formatting.BOLD);
- public GardenVisitorsWidget() {
- super(TITLE, Formatting.DARK_GREEN.getColorValue());
-
- if (PlayerListMgr.textAt(54) == null) {
- this.addComponent(new PlainTextComponent(Text.literal("No visitors!").formatted(Formatting.GRAY)));
- this.pack();
-
- return;
- }
-
- for (int i = 54; i < 59; i++) {
- String text = PlayerListMgr.strAt(i);
- if (text != null) this.addComponent(new PlainTextComponent(Text.literal(text)));
- }
-
- this.pack();
- }
+ public GardenVisitorsWidget() {
+ super(TITLE, Formatting.DARK_GREEN.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+ if (PlayerListMgr.textAt(54) == null) {
+ this.addComponent(new PlainTextComponent(Text.literal("No visitors!").formatted(Formatting.GRAY)));
+ return;
+ }
+
+ for (int i = 54; i < 59; i++) {
+ String text = PlayerListMgr.strAt(i);
+ if (text != null)
+ this.addComponent(new PlainTextComponent(Text.literal(text)));
+ }
+
+ }
}
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 cb208e92..6f1f4811 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
@@ -16,13 +16,15 @@ public class GuestServerWidget extends Widget {
public GuestServerWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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);
- 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 e0f5f1a3..faf231a8 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
@@ -23,6 +23,10 @@ public class IslandGuestsWidget extends Widget {
public IslandGuestsWidget() {
super(TITLE, Formatting.AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
for (int i = 21; i < 40; i++) {
String str = PlayerListMgr.strAt(i);
if (str == null) {
@@ -38,7 +42,6 @@ public class IslandGuestsWidget extends Widget {
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 e81a6d85..2e8e2c40 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
@@ -26,14 +26,19 @@ public class IslandOwnersWidget extends Widget {
public IslandOwnersWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+
for (int i = 1; i < 20; i++) {
Matcher m = PlayerListMgr.regexAt(i, OWNER_PATTERN);
if (m == null) {
break;
}
- String name = null, lastseen = null;
- Formatting format = null;
+ String name, lastseen;
+ Formatting format;
if (m.group("nameA") != null) {
name = m.group("nameA");
lastseen = m.group("lastseen");
@@ -55,7 +60,7 @@ public class IslandOwnersWidget extends Widget {
PlainTextComponent ptc = new PlainTextComponent(entry);
this.addComponent(ptc);
}
- this.pack();
+
}
}
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 4b03da6e..cc7a2f0c 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
@@ -20,20 +20,24 @@ public class IslandSelfWidget extends Widget {
// matches an owner
// group 1: player name, optionally offline time
// ^\[\d*\] (?:\[[A-Za-z]+\] )?([A-Za-z0-9_() ]*)(?: .*)?$|^(.*)$
- private static final Pattern OWNER_PATTERN = Pattern.compile("^\\[\\d*\\] (?:\\[[A-Za-z]+\\] )?([A-Za-z0-9_() ]*)(?: .*)?$|^(.*)$");
+ private static final Pattern OWNER_PATTERN = Pattern
+ .compile("^\\[\\d*\\] (?:\\[[A-Za-z]+\\] )?([A-Za-z0-9_() ]*)(?: .*)?$|^(.*)$");
public IslandSelfWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
for (int i = 1; i < 20; i++) {
- Matcher m = PlayerListMgr.regexAt( i, OWNER_PATTERN);
+ Matcher m = PlayerListMgr.regexAt(i, OWNER_PATTERN);
if (m == null) {
break;
}
-
+
Text entry = (m.group(1) != null) ? Text.of(m.group(1)) : Text.of(m.group(2));
this.addComponent(new PlainTextComponent(entry));
}
- this.pack();
}
}
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 2b02c514..1ed15f5e 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
@@ -16,14 +16,16 @@ public class IslandServerWidget extends Widget {
public IslandServerWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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);
- 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 8d49efaa..888c3697 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
@@ -37,7 +37,10 @@ public class JacobsContestWidget extends Widget {
public JacobsContestWidget() {
super(TITLE, Formatting.YELLOW.getColorValue());
+ }
+ @Override
+ public void updateContent() {
this.addSimpleIcoText(Ico.CLOCK, "Starts in:", Formatting.GOLD, 76);
TableComponent tc = new TableComponent(1, 3, Formatting.YELLOW .getColorValue());
@@ -54,7 +57,6 @@ public class JacobsContestWidget extends Widget {
}
this.addComponent(tc);
- this.pack();
}
}
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 fe52fcdf..039871b2 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
@@ -93,7 +93,10 @@ public class MinionWidget extends Widget {
public MinionWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
for (int i = 48; i < 59; i++) {
Matcher m = PlayerListMgr.regexAt(i, MINION_PATTERN);
if (m != null) {
@@ -128,7 +131,6 @@ public class MinionWidget extends Widget {
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 4148ed77..2c422bd1 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
@@ -16,13 +16,15 @@ public class ParkServerWidget extends Widget {
public ParkServerWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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);
- 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 439fcb56..31370dc6 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
@@ -21,11 +21,15 @@ public class PlayerListWidget extends Widget {
private static final MutableText TITLE = Text.literal("Players").formatted(Formatting.GREEN,
Formatting.BOLD);
- private final ArrayList<PlayerListEntry> list = new ArrayList<>();
-
public PlayerListWidget() {
super(TITLE, Formatting.GREEN.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+ ArrayList<PlayerListEntry> list = new ArrayList<>();
+
// hard cap to 4x20 entries.
// 5x20 is too wide (and not possible in theory. in reality however...)
int listlen = Math.min(PlayerListMgr.getSize(), 160);
@@ -33,7 +37,6 @@ public class PlayerListWidget extends Widget {
// 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;
}
@@ -63,6 +66,5 @@ public class PlayerListWidget extends Widget {
}
this.addComponent(tc);
- this.pack();
}
}
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 459e3de2..7e56d4d9 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
@@ -17,12 +17,13 @@ public class PowderWidget extends Widget {
public PowderWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
this.addSimpleIcoText(Ico.MITHRIL, "Mithril:", Formatting.AQUA, 46);
this.addSimpleIcoText(Ico.EMERALD, "Gemstone:", Formatting.DARK_PURPLE, 47);
- 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 a6d9e82d..8bc94622 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
@@ -14,12 +14,15 @@ public class ProfileWidget extends Widget {
public ProfileWidget() {
super(TITLE, Formatting.YELLOW.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
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);
- 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 43b741ba..02137b1a 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
@@ -18,12 +18,15 @@ public class QuestWidget extends Widget {
public QuestWidget() {
super(TITLE, Formatting.AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
for (int i = 51; i < 56; i++) {
Text q = PlayerListMgr.textAt(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 3685e0ca..32060bd0 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
@@ -29,7 +29,10 @@ public class ReputationWidget extends Widget {
public ReputationWidget() {
super(TITLE, Formatting.AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
String fracstr = PlayerListMgr.strAt(45);
int spaceidx;
@@ -61,8 +64,6 @@ public class ReputationWidget extends Widget {
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 2d8d1c63..62c01b63 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
@@ -18,11 +18,13 @@ public class ServerWidget extends Widget {
public ServerWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
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 88ba8022..cecee76c 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
@@ -30,6 +30,10 @@ public class SkillsWidget extends Widget {
public SkillsWidget() {
super(TITLE, Formatting.YELLOW.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
Matcher m = PlayerListMgr.regexAt(66, SKILL_PATTERN);
Component progress;
if (m == null) {
@@ -69,7 +73,6 @@ public class SkillsWidget extends Widget {
tc.addToCell(1, 0, cdg);
tc.addToCell(1, 1, cch);
this.addComponent(tc);
- this.pack();
}
}
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 d47849c3..68f8dcf2 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
@@ -15,8 +15,11 @@ public class TrapperWidget extends Widget {
public TrapperWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
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 ef7c21d0..4553c7f9 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
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.widget;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico;
+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;
@@ -17,17 +18,21 @@ public class UpgradeWidget extends Widget {
private static final MutableText TITLE = Text.literal("Upgrade Info").formatted(Formatting.GOLD,
Formatting.BOLD);
- public UpgradeWidget(String footertext) {
+ public UpgradeWidget() {
super(TITLE, Formatting.GOLD.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
+ String footertext = PlayerListMgr.getFooter();
+
if (footertext == null) {
this.addComponent(new PlainTextComponent(Text.literal("No data").formatted(Formatting.GRAY)));
- this.pack();
return;
}
if (!footertext.contains("Upgrades")) {
this.addComponent(new PlainTextComponent(Text.of("Currently no upgrades...")));
- this.pack();
return;
}
@@ -41,7 +46,6 @@ public class UpgradeWidget extends Widget {
IcoTextComponent itc = new IcoTextComponent(Ico.SIGN, Text.of(lines[i]));
this.addComponent(itc);
}
- this.pack();
}
}
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 ec6a35fb..90f947ba 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
@@ -22,26 +22,30 @@ public class VolcanoWidget extends Widget {
static {
BOOM_TYPE.put("INACTIVE",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.BARRIER), Formatting.DARK_GRAY));
+ new Pair<>(new ItemStack(Items.BARRIER), Formatting.DARK_GRAY));
BOOM_TYPE.put("CHILL",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.ICE), Formatting.AQUA));
+ new Pair<>(new ItemStack(Items.ICE), Formatting.AQUA));
BOOM_TYPE.put("LOW",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.FLINT_AND_STEEL), Formatting.GRAY));
+ new Pair<>(new ItemStack(Items.FLINT_AND_STEEL), Formatting.GRAY));
BOOM_TYPE.put("DISRUPTIVE",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.CAMPFIRE), Formatting.WHITE));
+ new Pair<>(new ItemStack(Items.CAMPFIRE), Formatting.WHITE));
BOOM_TYPE.put("MEDIUM",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.LAVA_BUCKET), Formatting.YELLOW));
+ new Pair<>(new ItemStack(Items.LAVA_BUCKET), Formatting.YELLOW));
BOOM_TYPE.put("HIGH",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.FIRE_CHARGE), Formatting.GOLD));
+ new Pair<>(new ItemStack(Items.FIRE_CHARGE), Formatting.GOLD));
BOOM_TYPE.put("EXPLOSIVE",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.TNT), Formatting.RED));
+ new Pair<>(new ItemStack(Items.TNT), Formatting.RED));
BOOM_TYPE.put("CATACLYSMIC",
- new Pair<ItemStack, Formatting>(new ItemStack(Items.SKELETON_SKULL), Formatting.DARK_RED));
+ new Pair<>(new ItemStack(Items.SKELETON_SKULL), Formatting.DARK_RED));
}
public VolcanoWidget() {
super(TITLE, Formatting.AQUA.getColorValue());
+ }
+
+ @Override
+ public void updateContent() {
String s = PlayerListMgr.strAt(58);
if (s == null) {
this.addComponent(new IcoTextComponent());
@@ -50,8 +54,6 @@ public class VolcanoWidget extends Widget {
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 33f77933..bca67b70 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
@@ -25,13 +25,13 @@ import net.minecraft.util.Formatting;
*/
public abstract class Widget {
- private ArrayList<Component> components = new ArrayList<>();
+ private final ArrayList<Component> components = new ArrayList<>();
private int w = 0, h = 0;
private int x = 0, y = 0;
- private int color;
- private Text title;
+ private final int color;
+ private final Text title;
- private static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer;
+ private static final TextRenderer txtRend = MinecraftClient.getInstance().textRenderer;
static final int BORDER_SZE_N = txtRend.fontHeight + 4;
static final int BORDER_SZE_S = 4;
@@ -45,12 +45,21 @@ public abstract class Widget {
}
public final void addComponent(Component c) {
- components.add(c);
+ this.components.add(c);
}
+ public final void update() {
+ this.components.clear();
+ this.updateContent();
+ this.pack();
+ }
+
+ public abstract void updateContent();
+
/**
* Shorthand function for simple components.
- * If the entry at idx has the format "<textA>: <textB>", an IcoTextComponent is added as such:
+ * If the entry at idx has the format "<textA>: <textB>", an IcoTextComponent is
+ * added as such:
* [ico] [string] [textB.formatted(fmt)]
*/
public final void addSimpleIcoText(ItemStack ico, String string, Formatting fmt, int idx) {
@@ -60,9 +69,12 @@ public abstract class Widget {
/**
* Calculate the size of this widget.
- * <b>Must be called before returning from the widget constructor and after all components are added!</b>
+ * <b>Must be called before returning from the widget constructor and after all
+ * components are added!</b>
*/
- public final void pack() {
+ private void pack() {
+ h = 0;
+ w = 0;
for (Component c : components) {
h += c.getHeight() + Component.PAD_L;
w = Math.max(w, c.getWidth() + Component.PAD_S);
@@ -111,7 +123,7 @@ public abstract class Widget {
* Draw this widget, possibly with a background
*/
public final void render(DrawContext context, boolean hasBG) {
- MatrixStack ms = context.getMatrices();
+ MatrixStack ms = context.getMatrices();
// not sure if this is the way to go, but it fixes Z-layer issues
// like blocks being rendered behind the BG and the hotbar clipping into things
@@ -124,9 +136,9 @@ public abstract class Widget {
// move above other UI elements
ms.translate(0, 0, 200);
if (hasBG) {
- context.fill(x + 1, y, x + w - 1, y + h, COL_BG_BOX);
- context.fill(x, y + 1, x + 1, y + h - 1, COL_BG_BOX);
- context.fill(x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX);
+ context.fill(x + 1, y, x + w - 1, y + h, COL_BG_BOX);
+ context.fill(x, y + 1, x + 1, y + h - 1, COL_BG_BOX);
+ context.fill(x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX);
}
// move above background (if exists)
ms.translate(0, 0, 100);
@@ -163,9 +175,10 @@ public abstract class Widget {
}
/**
- * If the entry at idx has the format "[textA]: [textB]", the following is returned:
+ * If the entry at idx has the format "[textA]: [textB]", the following is
+ * returned:
* [entryName] [textB.formatted(contentFmt)]
- */
+ */
public static Text simpleEntryText(int idx, String entryName, Formatting contentFmt) {
String src = PlayerListMgr.strAt(idx);
@@ -185,7 +198,7 @@ public abstract class Widget {
/**
* @return [entryName] [entryContent.formatted(contentFmt)]
- */
+ */
public static Text simpleEntryText(String entryContent, String entryName, Formatting contentFmt) {
return Text.literal(entryName).append(Text.literal(entryContent).formatted(contentFmt));
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java
index 850cb3d2..118d3cfe 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java
@@ -3,7 +3,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.render.item.ItemRenderer;
/**
* Abstract base class for a component that may be added to a Widget.
@@ -14,7 +13,7 @@ public abstract class Component {
public static final int PAD_S = 2;
public static final int PAD_L = 4;
- static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer;
+ static final TextRenderer txtRend = MinecraftClient.getInstance().textRenderer;
// these should always be the content dimensions without any padding.
int width, height;
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 a7cc8d12..90e210e9 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
@@ -19,25 +19,25 @@ public class ProgressComponent extends Component {
private static final int ICO_OFFS = 4;
private static final int COL_BG_BAR = 0xf0101010;
- private ItemStack ico;
- private Text desc, bar;
- private float pcnt;
- private int color;
- private int barW;
+ private final ItemStack ico;
+ private final Text desc, bar;
+ private final float pcnt;
+ private final int color;
+ private final int barW;
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 = 0xff000000 | 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();
+ } else {
+ this.ico = (ico == null) ? Ico.BARRIER : ico;
+ this.desc = d;
+ this.bar = b;
+ this.pcnt = pcnt;
+ this.color = 0xff000000 | color;
}
this.barW = BAR_WIDTH;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java
index 30287dc0..850bbb0d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java
@@ -8,9 +8,9 @@ import net.minecraft.client.gui.DrawContext;
*/
public class TableComponent extends Component {
- private Component[][] comps;
- private int color;
- private int cols, rows;
+ private final Component[][] comps;
+ private final int color;
+ private final int cols, rows;
private int cellW, cellH;
public TableComponent(int w, int h, int col) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java
new file mode 100644
index 00000000..88d40891
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java
@@ -0,0 +1,73 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.hud;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent;
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.math.MathHelper;
+
+// this widget shows the status of the king's commissions.
+// (dwarven mines and crystal hollows)
+// USE ONLY WITH THE DWARVEN HUD!
+
+public class HudCommsWidget extends Widget {
+
+ private static final MutableText TITLE = Text.literal("Commissions").formatted(Formatting.DARK_AQUA,
+ Formatting.BOLD);
+
+ private List<Commission> commissions;
+ private boolean isFancy;
+
+ // disgusting hack to get around text renderer issues.
+ // the ctor eventually tries to get the font's height, which doesn't work
+ // when called before the client window is created (roughly).
+ // the rebdering god 2 from the fabricord explained that detail, thanks!
+ public static final HudCommsWidget INSTANCE = new HudCommsWidget();
+ public static final HudCommsWidget INSTANCE_CFG = new HudCommsWidget();
+
+ // another repulsive hack to make this widget-like hud element work with the new widget class
+ // DON'T USE WITH THE WIDGET SYSTEM, ONLY USE FOR DWARVENHUD!
+ public HudCommsWidget() {
+ super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+
+ public void updateData(List<Commission> commissions, boolean isFancy) {
+ this.commissions = commissions;
+ this.isFancy = isFancy;
+ }
+
+ @Override
+ public void updateContent() {
+ for (Commission comm : commissions) {
+
+ Text c = Text.literal(comm.commission());
+
+ float p = 100f;
+ if (!comm.progression().contains("DONE")) {
+ p = Float.parseFloat(comm.progression().substring(0, comm.progression().length() - 1));
+ }
+
+ Component comp;
+ if (isFancy) {
+ comp = new ProgressComponent(Ico.BOOK, c, p, pcntToCol(p));
+ } else {
+ comp = new PlainTextComponent(
+ Text.literal(comm.commission() + ": ")
+ .append(Text.literal(comm.progression()).formatted(Formatting.GREEN)));
+ }
+ this.addComponent(comp);
+ }
+ }
+
+ private int pcntToCol(float pcnt) {
+ return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java
index 287b25b1..88e3a5cd 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java
@@ -14,14 +14,16 @@ public class AdvertisementWidget extends Widget {
public AdvertisementWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
+ }
+ @Override
+ public void updateContent() {
for (int i = 73; i < 80; i++) {
Text text = PlayerListMgr.textAt(i);
if (text != null)
this.addComponent(new PlainTextComponent(text));
}
- this.pack();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java
index 667bc154..e3b462a9 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java
@@ -14,7 +14,10 @@ public class GoodToKnowWidget extends Widget {
public GoodToKnowWidget() {
super(TITLE, Formatting.BLUE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
// After you progress further the tab adds more info so we need to be careful of
// that
// In beginning it only shows montezuma, then timecharms and enigma souls are
@@ -50,6 +53,5 @@ public class GoodToKnowWidget extends Widget {
new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned)));
}
- this.pack();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java
index 5460de49..0b6ff5bf 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java
@@ -12,8 +12,10 @@ public class RiftProfileWidget extends Widget {
public RiftProfileWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
-
+ }
+
+ @Override
+ public void updateContent() {
this.addSimpleIcoText(Ico.SIGN, "Profile:", Formatting.GREEN, 61);
- this.pack();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java
index 9ce12e76..375a41b9 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java
@@ -22,7 +22,10 @@ public class RiftProgressWidget extends Widget {
public RiftProgressWidget() {
super(TITLE, Formatting.BLUE.getColorValue());
+ }
+ @Override
+ public void updateContent() {
// After you progress further the tab adds more info so we need to be careful of
// that
// In beginning it only shows montezuma, then timecharms and enigma souls are
@@ -33,7 +36,7 @@ public class RiftProgressWidget extends Widget {
boolean hasTimecharms = false;
boolean hasEnigmaSouls = false;
- int montezumaPos = 0;
+ int montezumaPos;
// Check each position to see what is or isn't there so we don't try adding
// invalid components
@@ -88,7 +91,6 @@ public class RiftProgressWidget extends Widget {
this.addComponent(pc);
}
- this.pack();
}
private static int pcntToCol(float pcnt) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java
index 2ac2a35d..cab38a86 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java
@@ -16,11 +16,12 @@ public class RiftServerInfoWidget extends Widget {
public RiftServerInfoWidget() {
super(TITLE, Formatting.LIGHT_PURPLE.getColorValue());
-
+ }
+
+ @Override
+ public void updateContent() {
this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.LIGHT_PURPLE, 41);
this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42);
-
- this.pack();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java
index ef5876f2..8fab3dd4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java
@@ -15,7 +15,10 @@ public class RiftStatsWidget extends Widget {
public RiftStatsWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
-
+ }
+
+ @Override
+ public void updateContent() {
Text riftDamage = Widget.simpleEntryText(64, "RDG", Formatting.DARK_PURPLE);
IcoTextComponent rdg = new IcoTextComponent(Ico.DIASWORD, riftDamage);
@@ -35,7 +38,6 @@ public class RiftStatsWidget extends Widget {
tc.addToCell(1, 1, mrg);
this.addComponent(tc);
- this.pack();
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java
index 5dcc08c0..a1345c49 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java
@@ -13,8 +13,10 @@ public class ShenWidget extends Widget {
public ShenWidget() {
super(TITLE, Formatting.DARK_AQUA.getColorValue());
-
+ }
+
+ @Override
+ public void updateContent() {
this.addComponent(new PlainTextComponent(Text.literal(PlayerListMgr.strAt(70))));
- this.pack();
}
}