From 2c4ce78591757958960bdb029a082170f62dcc4d Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:39:41 +0200 Subject: RegisterWidget annotation! refactor some init stuff to have less duplicate code --- .../de/hysky/skyblocker/annotations/RegisterWidget.java | 15 +++++++++++++++ .../de/hysky/skyblocker/skyblock/end/EndHudWidget.java | 8 +++++--- .../skyblocker/skyblock/garden/FarmingHudWidget.java | 2 ++ .../skyblock/tabhud/screenbuilder/ScreenMaster.java | 14 +++++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/annotations/RegisterWidget.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/annotations/RegisterWidget.java b/src/main/java/de/hysky/skyblocker/annotations/RegisterWidget.java new file mode 100644 index 00000000..219b0c9b --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/annotations/RegisterWidget.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.annotations; + +import java.lang.annotation.*; + +@Documented +@Retention(RetentionPolicy.CLASS) +@Target(ElementType.TYPE) +public @interface RegisterWidget { + /** + * The priority of the widget. + * The higher the number, the later the widget will be instantiated. + * Use this to ensure that your widget is instantiated after widget method if it depends on it. + */ + int priority() default 0; +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index 8e0a4c30..ee1b95c1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.end; import com.mojang.authlib.properties.PropertyMap; +import de.hysky.skyblocker.annotations.RegisterWidget; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; @@ -18,10 +19,11 @@ import java.text.NumberFormat; import java.util.Locale; import java.util.Optional; +@RegisterWidget public class EndHudWidget extends ComponentBasedWidget { private static final MutableText TITLE = Text.literal("The End").formatted(Formatting.LIGHT_PURPLE, Formatting.BOLD); - public static final EndHudWidget INSTANCE = new EndHudWidget(TITLE, Formatting.DARK_PURPLE.getColorValue()); + public static final EndHudWidget INSTANCE = new EndHudWidget(); private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); private static final ItemStack ENDERMAN_HEAD = new ItemStack(Items.PLAYER_HEAD); private static final ItemStack POPPY = new ItemStack(Items.POPPY); @@ -34,8 +36,8 @@ public class EndHudWidget extends ComponentBasedWidget { POPPY.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true); } - public EndHudWidget(MutableText title, Integer colorValue) { - super(title, colorValue, "hud_end"); + public EndHudWidget() { + super(TITLE, Formatting.DARK_PURPLE.getColorValue(), "hud_end"); this.update(); } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index 383e2061..f686b0ae 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.skyblock.garden; +import de.hysky.skyblocker.annotations.RegisterWidget; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; @@ -20,6 +21,7 @@ import net.minecraft.util.math.MathHelper; import java.util.Map; +@RegisterWidget public class FarmingHudWidget extends ComponentBasedWidget { private static final MutableText TITLE = Text.literal("Farming").formatted(Formatting.YELLOW, Formatting.BOLD); public static final Map FARMING_TOOLS = Map.ofEntries( diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java index 06207554..bffa5418 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java @@ -151,10 +151,13 @@ public class ScreenMaster { } - @Init + // we probably want this to run pretty early? + @Init(priority = -1) public static void init() { SkyblockEvents.LOCATION_CHANGE.register(location -> ScreenBuilder.positionsNeedsUpdating = true); + instantiateWidgets(); + ClientLifecycleEvents.CLIENT_STARTED.register(client -> { try { ClassPath.from(TabHudWidget.class.getClassLoader()).getTopLevelClasses("de.hysky.skyblocker.skyblock.tabhud.widget").iterator().forEachRemaining(classInfo -> { @@ -187,6 +190,15 @@ public class ScreenMaster { ClientLifecycleEvents.CLIENT_STOPPING.register(client -> saveConfig()); } + + private static void instantiateWidgets() {} + + @SuppressWarnings("unused") + public static void addWidgetInstance(HudWidget widget) { + HudWidget put = widgetInstances.put(widget.getInternalID(), widget); + if (put != null) LOGGER.warn("[Skyblocker] Duplicate hud widget found: {}", widget); + } + /** * @implNote !! The 3 first ones shouldn't be moved, ordinal is used in some places */ -- cgit