diff options
Diffstat (limited to 'src/main/java/me')
62 files changed, 766 insertions, 312 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 461817ce..b6f11790 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -17,7 +17,7 @@ import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.ScreenMaster; +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.title.TitleContainer; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index b3d78fa8..0acf5b31 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -6,11 +6,13 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import dev.architectury.event.events.common.TickEvent.Player; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.ScreenBuilder; -import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.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; @@ -51,8 +53,10 @@ public class PlayerListHudMixin { w = (int) (w / scale); h = (int) (h / scale); + PlayerListMgr.updateFooter(footer); + try { - ScreenMaster.render(context, w,h,footer); + ScreenMaster.render(context, w,h); // Screen screen = Screen.getCorrect(w, h, footer); // screen.render(context); info.cancel(); 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 122f6c6c..8f8afb3a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,30 +1,29 @@ 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 me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.HudCommsWidget; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.util.math.MatrixStack; 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", @@ -40,6 +39,7 @@ public class DwarvenHud { "Chest Looter" ).map(s -> Pattern.compile("^.*(" + s + "): (\\d+\\.?\\d*%|DONE)")) .collect(Collectors.toList()); + public static void init() { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") @@ -88,17 +88,17 @@ 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); + HudCommsWidget.INSTANCE.updateData(commissions, false); + HudCommsWidget.INSTANCE.setX(hudX); + HudCommsWidget.INSTANCE.setY(hudY); + HudCommsWidget.INSTANCE.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); + HudCommsWidget.INSTANCE.updateData(commissions, true); + HudCommsWidget.INSTANCE.setX(hudX); + HudCommsWidget.INSTANCE.setY(hudY); + HudCommsWidget.INSTANCE.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } public static void update() { 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..1197ca2d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java @@ -0,0 +1,166 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder; + +import java.io.BufferedReader; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +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.EmptyWidget; +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 ArrayList<PipelineStage> layoutPipeline = new ArrayList<>(); + + // all widget instances this builder knows + private ArrayList<Widget> instances = new ArrayList<>(); + // maps alias -> widget instance + private HashMap<String, Widget> objectMap = new HashMap<>(); + + /** + * Create a ScreenBuilder from a json. + */ + public ScreenBuilder(String jsonfile) throws IOException { + + Identifier ident = new Identifier(SkyblockerMod.NAMESPACE, "tabhud/" + jsonfile + ".json"); + BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident); + JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); + reader.close(); + + 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) { + layoutPipeline.add(createStage(l.getAsJsonObject())); + } + + } + + /** + * 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 + switch (name) { + case "EventWidget": + return new EventWidget(widget.get("inGarden").getAsBoolean()); + case "Widget": + // clown case sanity check. don't instantiate the superclass >:| + return new EmptyWidget(); + } + + // 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 + + // find all packages that might contain widget classes + Package[] packs = Package.getPackages(); + + List<String> packnames = Arrays.stream(packs) + .map(pack -> pack.getName()) + .filter(s -> s.startsWith("me.xmrvizzy.skyblocker.skyblock.tabhud.widget")) + .toList(); + + // 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) { + return new EmptyWidget(); + } + + // return instance of that class. + try { + Constructor<?> ctor = clazz.getConstructor(); + return (Widget) ctor.newInstance(); + } catch (NoSuchMethodException | InstantiationException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException | SecurityException ex) { + return new EmptyWidget(); + } + } + + /** + * Create a PipelineStage from a json object. + */ + public PipelineStage createStage(JsonObject descr) { + + String op = descr.get("op").getAsString(); + + switch (op) { + case "place": + return new PlaceStage(this, descr); + case "stack": + return new StackStage(this, descr); + case "align": + return new AlignStage(this, descr); + case "collideAgainst": + return new CollideStage(this, descr); + } + return null; + } + + /** + * Lookup Widget instance from alias name + */ + public Widget getInstance(String name) { + return this.objectMap.get(name); + } + + /** + * Run the pipeline to build a Screen + */ + public void run(DrawContext context, int screenW, int screenH) { + // TODO for future: + // no need to update and run pipeline if PlayerListMgr wasn't updated. + + 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/screens/ScreenMaster.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java index 02b595d1..97969503 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ScreenMaster.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder; import java.io.BufferedReader; import java.io.IOException; @@ -15,7 +15,6 @@ import com.google.gson.JsonParser; import me.xmrvizzy.skyblocker.SkyblockerMod; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; import net.minecraft.util.Identifier; public class ScreenMaster { @@ -23,21 +22,24 @@ public class ScreenMaster { private static final Identifier ASSIGNMENT_JSON = new Identifier(SkyblockerMod.NAMESPACE, "tabhud/assignment.json"); private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker"); - private static HashMap<String, ScreenBuilder> screenAMap = new HashMap<>(); + private static HashMap<String, ScreenBuilder> standardMap = new HashMap<>(); + // private static HashMap<String, ScreenBuilder> screenAMap = new HashMap<>(); // private static HashMap<String, ScreenBuilder> screenBMap = new HashMap<>(); - // private static HashMap<String, ScreenBuilder> screenCMap = new HashMap<>(); static { init(); } + /** + * Load the assignment json and construct the screen mapping + */ public static void init() { try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ASSIGNMENT_JSON)) { JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); - JsonObject screenA = json.getAsJsonObject("screenA"); - for (Entry<String, JsonElement> entry : screenA.entrySet()) { - screenAMap.put(entry.getKey(), new ScreenBuilder(entry.getValue().getAsString())); + JsonObject standard = json.getAsJsonObject("standard"); + for (Entry<String, JsonElement> entry : standard.entrySet()) { + standardMap.put(entry.getKey(), new ScreenBuilder(entry.getValue().getAsString())); } } catch (IOException ioex) { @@ -46,13 +48,17 @@ public class ScreenMaster { } } - public static void render(DrawContext context, int w, int h, Text footer) { - screenAMap.get("default").run(context, w, h, footer); + /** + * Top level render method. + * Calls the appropriate ScreenBuilder with the screen's dimensions + */ + public static void render(DrawContext context, int w, int h) { + standardMap.get("default").run(context, w, h); } } /* - * + * * stackWidgetsH stackWidgetsW --> stack (direction?) horiz/vert (align?) center/top/bottom/left/right 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..87638c33 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java @@ -0,0 +1,53 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline; + +import java.util.ArrayList; + +import com.google.gson.JsonObject; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; + +public class AlignStage extends PipelineStage { + + private String reference; + + public AlignStage(ScreenBuilder builder, JsonObject descr) { + this.reference = descr.get("reference").getAsString(); + this.primary = new ArrayList<Widget>(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 "horizontalCenter": + wid.setX((screenW - wid.getWidth()) / 2); + break; + case "verticalCenter": + wid.setY((screenH - wid.getHeight()) / 2); + break; + case "leftOfCenter": + wHalf = screenW / 2; + wid.setX(wHalf - 3 - wid.getWidth()); + break; + case "rightOfCenter": + wHalf = screenW / 2; + wid.setX(wHalf + 3); + break; + case "topOfCenter": + hHalf = screenH / 2; + wid.setY(hHalf - 3 - wid.getHeight()); + break; + case "botOfCenter": + hHalf = screenH / 2; + wid.setY(hHalf + 3); + break; + } + } + } + +} 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..8275e842 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java @@ -0,0 +1,84 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline; + +import java.util.ArrayList; + +import com.google.gson.JsonObject; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; + +public class CollideStage extends PipelineStage { + + private String direction; + + public CollideStage(ScreenBuilder builder, JsonObject descr) { + this.direction = descr.get("direction").getAsString(); + this.primary = new ArrayList<Widget>(descr.getAsJsonArray("widgets") + .asList() + .stream() + .map(x -> builder.getInstance(x.getAsString())) + .toList()); + this.secondary = new ArrayList<Widget>(descr.getAsJsonArray("colliders") + .asList() + .stream() + .map(x -> builder.getInstance(x.getAsString())) + .toList()); + } + + public void run(int screenW, int screenH) { + if (this.direction.equals("left")) { + primary.forEach(w -> collideAgainstL(screenW, w)); + } else if (this.direction.equals("right")) { + primary.forEach(w -> collideAgainstR(screenW, w)); + } + } + + public void collideAgainstL(int screenW, Widget w) { + int yMin = w.getY(); + int yMax = w.getY() + w.getHeight(); + + int xCor = screenW / 2; + + // assume others to be sorted top-bottom. + for (Widget other : secondary) { + if (other.getY() + other.getHeight() + 5 < yMin) { + // too high, next one + continue; + } + + if (other.getY() - 5 > yMax) { + // too low, next + continue; + } + + int xPos = other.getX() - 5 - 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 = screenW / 2; + + // assume others to be sorted top-bottom. + for (Widget other : secondary) { + if (other.getY() + other.getHeight() + 5 < yMin) { + // too high, next one + continue; + } + + if (other.getY() - 5 > yMax) { + // too low, next + continue; + } + + 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/PipelineStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java index d33078d8..e560058c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PipelineStage.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java @@ -1,4 +1,4 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline; import java.util.ArrayList; 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..3ed89fda --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java @@ -0,0 +1,31 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline; + +import java.util.ArrayList; + +import com.google.gson.JsonObject; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; + +public class PlaceStage extends PipelineStage { + + private String where; + + public PlaceStage(ScreenBuilder builder, JsonObject descr) { + this.where = descr.get("where").getAsString(); + this.primary = new ArrayList<Widget>(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); + if (where.equals("center")) { + wid.setY((screenH - wid.getHeight()) / 2); + wid.setX((screenW - wid.getWidth()) / 2); + } + } +}
\ 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..d144c67b --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java @@ -0,0 +1,74 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline; + +import java.util.ArrayList; + +import com.google.gson.JsonObject; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; + +public class StackStage extends PipelineStage { + + private String direction; + private String align; + + public StackStage(ScreenBuilder builder, JsonObject descr) { + this.direction = descr.get("direction").getAsString(); + this.align = descr.get("align").getAsString(); + this.primary = new ArrayList<Widget>(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); + break; + case "vertical": + stackWidgetsVert(screenH); + break; + } + } + + public void stackWidgetsVert( int screenH) { + int compHeight = -5; + for (Widget wid : primary) { + compHeight += wid.getHeight() + 5; + } + + int y = switch (this.align) { + + case "top" -> y = 5; + case "bot" -> y = (screenH-compHeight) - 5; + default -> y = (screenH-compHeight)/2; + }; + + for (Widget wid : primary) { + wid.setY(y); + y += wid.getHeight() + 5; + } + } + + public void stackWidgetsHoriz(int screenW) { + // TODO not centered + int compWidth = -5; + for (Widget wid : primary) { + compWidth += wid.getWidth() + 5; + } + + int x = switch (this.align) { + + case "left" -> x = 5; + case "right" -> x = (screenW-compWidth) - 5; + default -> x = (screenW-compWidth)/2; + }; + + for (Widget wid : primary) { + wid.setX(x); + x += wid.getWidth() + 5; + } + } +}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlaceStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlaceStage.java deleted file mode 100644 index aba952a0..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlaceStage.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.util.ArrayList; - -import com.google.gson.JsonObject; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; - -public class PlaceStage extends PipelineStage { - - private String where; - - public PlaceStage(ScreenBuilder builder, JsonObject descr) { - this.where = descr.get("where").getAsString(); - this.primary = new ArrayList<Widget>(descr.getAsJsonArray("apply_to") - .asList() - .stream() - .map(x -> builder.getInstance(x.getAsString())) - .toList()); - } - - public void run(int screenW, int screenH) { - for (Widget wid : primary) { - if (where.equals("center")) { - wid.setY((screenH - wid.getHeight()) / 2); - wid.setX((screenW - wid.getWidth()) / 2); - } - } - } -}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ScreenBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ScreenBuilder.java deleted file mode 100644 index c9c4ad18..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ScreenBuilder.java +++ /dev/null @@ -1,94 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; - -import java.io.BufferedReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget; -import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -public class ScreenBuilder { - - private ArrayList<PipelineStage> layoutPipeline = new ArrayList<>(); - - private ArrayList<Widget> instances = new ArrayList<>(); - private HashMap<String, Widget> objectMap = new HashMap<>(); - - - public ScreenBuilder(String jsonfile) throws IOException { - - Identifier ident = new Identifier(SkyblockerMod.NAMESPACE, "tabhud/" + jsonfile + ".json"); - BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident); - JsonObject json = JsonParser.parseReader(reader).getAsJsonObject(); - reader.close(); - - 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(); - - JsonElement args = widget.get("args"); - JsonObject argsObj = (args == null) ? null : args.getAsJsonObject(); - - Widget wid = instanceFrom(name, argsObj); - objectMap.put(alias, wid); - instances.add(wid); - } - - for (JsonElement l : layout) { - layoutPipeline.add(createStage(l.getAsJsonObject())); - } - - } - - public Widget instanceFrom(String name, JsonObject args) { - return switch (name) { - case "EmptyWidget" -> new EmptyWidget(); - default -> new EmptyWidget(); - }; - } - - public PipelineStage createStage(JsonObject descr) { - - String op = descr.get("op").getAsString(); - - switch (op) { - case "place": - return new PlaceStage(this, descr); - } - return null; - } - - public Widget getInstance(String name) { - return this.objectMap.get(name); - } - - public void run(DrawContext context, int screenW, int screenH, Text footer) { - - 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/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java index 0bb12c8e..587c2274 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java @@ -20,32 +20,32 @@ public class GardenInfoScreen extends Screen { String f = footer.getString(); - GardenSkillsWidget gsw = new GardenSkillsWidget(); - EventWidget evw = new EventWidget(true); - UpgradeWidget uw = new UpgradeWidget(f); + // GardenSkillsWidget gsw = new GardenSkillsWidget(); + // EventWidget evw = new EventWidget(true); + // // UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(); - EffectWidget efw = new EffectWidget(f); + // ProfileWidget pw = new ProfileWidget(); + // EffectWidget efw = new EffectWidget(f); - JacobsContestWidget jcw = new JacobsContestWidget(); - CookieWidget cw = new CookieWidget(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); + // // 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.centerW(gsw); + // this.centerW(evw); + // this.centerW(uw); - this.collideAgainstL(pw, gsw, evw, uw); - this.collideAgainstL(efw, gsw, evw, 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.collideAgainstR(jcw, gsw, evw, uw); + // this.collideAgainstR(cw, gsw, evw, uw); - this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw); + // 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 index 046a9313..15c3b0e5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java @@ -16,33 +16,33 @@ public class GenericInfoScreen extends Screen { public GenericInfoScreen(int w, int h, Text footer) { super(w, h); - String f = footer.getString(); + // String f = footer.getString(); - SkillsWidget sw = new SkillsWidget(); - EventWidget evw = new EventWidget(false); - UpgradeWidget uw = new UpgradeWidget(f); + // SkillsWidget sw = new SkillsWidget(); + // EventWidget evw = new EventWidget(false); + // UpgradeWidget uw = new UpgradeWidget(f); - ProfileWidget pw = new ProfileWidget(); - EffectWidget efw = new EffectWidget(f); + // ProfileWidget pw = new ProfileWidget(); + // EffectWidget efw = new EffectWidget(f); - ElectionWidget elw = new ElectionWidget(); - CookieWidget cw = new CookieWidget(f); + // ElectionWidget elw = new ElectionWidget(); + // CookieWidget cw = new CookieWidget(f); - this.stackWidgetsH(sw, evw, uw); - this.stackWidgetsH(pw, efw); - this.stackWidgetsH(elw, cw); + // this.stackWidgetsH(sw, evw, uw); + // this.stackWidgetsH(pw, efw); + // this.stackWidgetsH(elw, cw); - this.centerW(sw); - this.centerW(evw); - this.centerW(uw); + // this.centerW(sw); + // this.centerW(evw); + // this.centerW(uw); - this.collideAgainstL(pw, sw, evw, uw); - this.collideAgainstL(efw, sw, evw, 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.collideAgainstR(elw, sw, evw, uw); + // this.collideAgainstR(cw, sw, evw, uw); - this.addWidgets(sw, evw, uw, pw, efw, elw, cw); + // 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 index 9821b5a3..cf6ee77a 100644 --- 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 @@ -13,26 +13,26 @@ public class GenericRiftInfoScreen extends Screen { public GenericRiftInfoScreen(int w, int h, Text footer) { super(w, h); - String f = footer.getString(); + // String f = footer.getString(); - RiftProfileWidget profile = new RiftProfileWidget(); - RiftStatsWidget stats = new RiftStatsWidget(); - ShenWidget shen = new ShenWidget(); + // RiftProfileWidget profile = new RiftProfileWidget(); + // RiftStatsWidget stats = new RiftStatsWidget(); + // ShenWidget shen = new ShenWidget(); - CookieWidget cookie = new CookieWidget(f); - AdvertisementWidget advertisement = new AdvertisementWidget(); + // // CookieWidget cookie = new CookieWidget(f); + // AdvertisementWidget advertisement = new AdvertisementWidget(); - this.stackWidgetsH(stats, advertisement); - this.stackWidgetsH(profile, shen, cookie); + // this.stackWidgetsH(stats, advertisement); + // // this.stackWidgetsH(profile, shen, cookie); - this.offCenterL(stats); - this.offCenterL(advertisement); + // this.offCenterL(stats); + // this.offCenterL(advertisement); - this.offCenterR(profile); - this.offCenterR(shen); - this.offCenterR(cookie); + // this.offCenterR(profile); + // this.offCenterR(shen); + // // this.offCenterR(cookie); - this.addWidgets(profile, stats, shen, cookie, advertisement); + // // this.addWidgets(profile, stats, shen, cookie, advertisement); } } 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 ee4319dc..7895b77b 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 @@ -27,6 +27,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() { @@ -42,6 +43,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 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..1cfa0cb2 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 @@ -31,7 +31,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 +58,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..5b880514 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; @@ -18,10 +19,15 @@ public class DungeonBuffWidget extends Widget { public DungeonBuffWidget(String footertext) { 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 78e1aeae..6cdf946a 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..e565bd8f 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 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/EmptyWidget.java index 61da439a..0e85003f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java @@ -17,12 +17,10 @@ public class EmptyWidget extends Widget { } @Override - public void update() { - super.update(); + public void updateContent() { Text info = Text.of("No info for this area!"); PlainTextComponent inf = new PlainTextComponent(info); 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..b3563f1b 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 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..96b85fef 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; } @@ -73,7 +76,6 @@ public class ForgeWidget extends Widget { } 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/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/HudCommsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/HudCommsWidget.java new file mode 100644 index 00000000..4ba4b0aa --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/HudCommsWidget.java @@ -0,0 +1,75 @@ +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; +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 HudCommsWidget INSTANCE = 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/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..a978654f 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,6 +26,11 @@ 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) { @@ -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..04327365 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 @@ -26,6 +26,10 @@ public class PlayerListWidget extends Widget { public PlayerListWidget() { super(TITLE, Formatting.GREEN.getColorValue()); + } + + @Override + public void updateContent() { // 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..d0e01590 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 @@ -42,6 +42,10 @@ public class VolcanoWidget extends Widget { 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 15b2adf2..3e037256 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 @@ -48,10 +48,14 @@ public abstract class Widget { this.components.add(c); } - public void update() { + 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 @@ -68,7 +72,7 @@ public abstract class Widget { * <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) { 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..ea67a309 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 @@ -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(); } } |