diff options
author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2023-08-31 20:03:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-31 20:03:07 -0400 |
commit | 68eb2556c4809860a73b7bb62cc5f2c84d58c3ae (patch) | |
tree | 106fe3e923f05933990242eec85d13be685c8b7a /src/main/java | |
parent | 94cca060491122c9f7dfa8f4684ac6f52be510a1 (diff) | |
parent | 53ab59cb82a05e887b12645383fb740f7dd3eba5 (diff) | |
download | Skyblocker-68eb2556c4809860a73b7bb62cc5f2c84d58c3ae.tar.gz Skyblocker-68eb2556c4809860a73b7bb62cc5f2c84d58c3ae.tar.bz2 Skyblocker-68eb2556c4809860a73b7bb62cc5f2c84d58c3ae.zip |
Merge pull request #230 from msg-programs/json-tabhud
Fully configureable Fancy Tab HUD
Diffstat (limited to 'src/main/java')
87 files changed, 1328 insertions, 1136 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 3d1427a2..c9705a3b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -22,6 +22,7 @@ import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.shortcut.Shortcuts; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; import me.xmrvizzy.skyblocker.utils.culling.OcclusionCulling; @@ -90,6 +91,7 @@ public class SkyblockerMod implements ClientModInitializer { DungeonMap.init(); TheRift.init(); TitleContainer.init(); + ScreenMaster.init(); OcclusionCulling.init(); TeleportOverlay.init(); CustomItemNames.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index 819ddb4b..ec7b6ddd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -2,7 +2,8 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -37,9 +38,16 @@ public class PlayerListHudMixin { } int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); + float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f; + w = (int) (w / scale); + h = (int) (h / scale); + + PlayerListMgr.updateFooter(footer); + try { - Screen screen = Screen.getCorrect(w, h, footer); - screen.render(context); + ScreenMaster.render(context, w,h); + // Screen screen = Screen.getCorrect(w, h, footer); + // screen.render(context); info.cancel(); } catch (Exception e) { TabHud.LOGGER.error("[Skyblocker] Encountered unknown exception while drawing default hud", e); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index a52f288c..6ac8fa6c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,7 +1,15 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import it.unimi.dsi.fastutil.ints.IntIntPair; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; import me.xmrvizzy.skyblocker.utils.Scheduler; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -11,34 +19,24 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; - public class DwarvenHud { - public static final MinecraftClient client = MinecraftClient.getInstance(); public static List<Commission> commissionList = new ArrayList<>(); - public static final List<Pattern> COMMISSIONS = Stream.of( - "(?:Titanium|Mithril|Hard Stone) Miner", - "(?:Ice Walker|Goblin|Goblin Raid|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", - "Goblin Raid", - "(?:Powder Ghast|Star Sentry) Puncher", - "(?<!Lucky )Raffle", - "Lucky Raffle", - "2x Mithril Powder Collector", - "(?:Ruby|Amber|Sapphire|Jade|Amethyst|Topaz) Gemstone Collector", - "(?:Amber|Sapphire|Jade|Amethyst|Topaz) Crystal Hunter", - "Chest Looter" - ).map(s -> Pattern.compile("^.*(" + s + "): (\\d+\\.?\\d*%|DONE)")) + "(?:Titanium|Mithril|Hard Stone) Miner", + "(?:Ice Walker|Goblin|Goblin Raid|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", + "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", + "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", + "Goblin Raid", + "(?:Powder Ghast|Star Sentry) Puncher", + "(?<!Lucky )Raffle", + "Lucky Raffle", + "2x Mithril Powder Collector", + "(?:Ruby|Amber|Sapphire|Jade|Amethyst|Topaz) Gemstone Collector", + "(?:Amber|Sapphire|Jade|Amethyst|Topaz) Crystal Hunter", + "Chest Looter").map(s -> Pattern.compile("^.*(" + s + "): (\\d+\\.?\\d*%|DONE)")) .collect(Collectors.toList()); public static void init() { @@ -54,15 +52,34 @@ public class DwarvenHud { || commissionList.isEmpty()) { return; } - render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); + render(HudCommsWidget.INSTANCE, context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, + SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); }); } - public static void render(DrawContext context, int hudX, int hudY, List<Commission> commissions) { + public static IntIntPair getDimForConfig(List<Commission> commissions) { + switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { + case SIMPLE: + HudCommsWidget.INSTANCE_CFG.updateData(commissions, false); + return IntIntPair.of( + HudCommsWidget.INSTANCE_CFG.getWidth(), + HudCommsWidget.INSTANCE_CFG.getHeight()); + case FANCY : + HudCommsWidget.INSTANCE_CFG.updateData(commissions, true); + return IntIntPair.of( + HudCommsWidget.INSTANCE_CFG.getWidth(), + HudCommsWidget.INSTANCE_CFG.getHeight()); + case CLASSIC: + default: + return IntIntPair.of(200, 20 * commissions.size()); + } + } + + public static void render(HudCommsWidget hcw, DrawContext context, int hudX, int hudY, List<Commission> commissions) { switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { - case SIMPLE -> renderSimple(context, hudX, hudY, commissions); - case FANCY -> renderFancy(context, hudX, hudY, commissions); + case SIMPLE -> renderSimple(hcw, context, hudX, hudY, commissions); + case FANCY -> renderFancy(hcw, context, hudX, hudY, commissions); case CLASSIC -> renderClassic(context, hudX, hudY, commissions); } } @@ -85,23 +102,28 @@ public class DwarvenHud { } } - public static void renderSimple(DrawContext context, int hudX, int hudY, List<Commission> commissions) { - CommsWidget cw = new CommsWidget(commissions, false); - cw.setX(hudX); - cw.setY(hudY); - cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + public static void renderSimple(HudCommsWidget hcw, DrawContext context, int hudX, int hudY, List<Commission> commissions) { + hcw.updateData(commissions, false); + hcw.update(); + hcw.setX(hudX); + hcw.setY(hudY); + hcw.render(context, + SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } - public static void renderFancy(DrawContext context, int hudX, int hudY, List<Commission> commissions) { - CommsWidget cw = new CommsWidget(commissions, true); - cw.setX(hudX); - cw.setY(hudY); - cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + public static void renderFancy(HudCommsWidget hcw, DrawContext context, int hudX, int hudY, List<Commission> commissions) { + hcw.updateData(commissions, true); + hcw.update(); + hcw.setX(hudX); + hcw.setY(hudY); + hcw.render(context, + SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } public static void update() { commissionList = new ArrayList<>(); - if (client.player == null || !SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled) return; + if (client.player == null || !SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled) + return; client.getNetworkHandler().getPlayerList().forEach(playerListEntry -> { if (playerListEntry.getDisplayName() != null) { @@ -116,7 +138,7 @@ public class DwarvenHud { }); } - // steamroller tactics to get visibility from outside classes (CommsWidget) + // steamroller tactics to get visibility from outside classes (HudCommsWidget) public record Commission(String commission, String progression) { } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 10e62d88..d3c0fa76 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -1,17 +1,22 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; +import java.awt.Color; +import java.util.List; + +import it.unimi.dsi.fastutil.ints.IntIntPair; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; -import java.awt.*; -import java.util.List; - public class DwarvenHudConfigScreen extends Screen { + private static final List<Commission> CFG_COMMS = List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%")); + private int hudX = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x; private int hudY = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y; @@ -23,15 +28,16 @@ public class DwarvenHudConfigScreen extends Screen { public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); - DwarvenHud.render(context, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); + DwarvenHud.render(HudCommsWidget.INSTANCE_CFG, context, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); } @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { + IntIntPair dims = DwarvenHud.getDimForConfig(CFG_COMMS); if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + 200, hudY + 40) && button == 0) { - hudX = (int) Math.max(Math.min(mouseX - 100, this.width - 200), 0); - hudY = (int) Math.max(Math.min(mouseY - 20, this.height - 40), 0); + hudX = (int) Math.max(Math.min(mouseX - dims.leftInt()/2, this.width - dims.leftInt()), 0); + hudY = (int) Math.max(Math.min(mouseY - dims.rightInt()/2, this.height - dims.rightInt()), 0); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } @@ -39,8 +45,9 @@ public class DwarvenHudConfigScreen extends Screen { @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button == 1) { - hudX = this.width / 2 - 100; - hudY = this.height / 2 - 20; + IntIntPair dims = DwarvenHud.getDimForConfig(CFG_COMMS); + hudX = this.width / 2 - dims.leftInt(); + hudY = this.height / 2 - dims.rightInt(); } return super.mouseClicked(mouseX, mouseY, button); } 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(); } } |