aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2025-03-02 23:22:16 -0500
committerGitHub <noreply@github.com>2025-03-03 12:22:16 +0800
commit047149f394359ed957a6b9c050d00c8953ed0198 (patch)
tree6cb279b23a1a1744fa239520fb2d1d770cfcdde7 /src/main/java
parentfa9e6b7663c6f81e08e6e3cc1cf25907522ae82a (diff)
downloadSkyblocker-047149f394359ed957a6b9c050d00c8953ed0198.tar.gz
Skyblocker-047149f394359ed957a6b9c050d00c8953ed0198.tar.bz2
Skyblocker-047149f394359ed957a6b9c050d00c8953ed0198.zip
Fabric updates (#1172)
* Update fabric deps * Migrate client game test to loom * Migrate to new hud api * Fix fancy tab hud * Rename ScreenMaster to WidgetManager * No server game tests * Update deps * Separate fmj for game test * Run production client game test in CI and move template image * Run client game test * Update screenshots dir
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerGameTest.java60
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java73
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dwarven/GlaciteColdOverlay.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewTab.java40
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/preview/PreviewWidget.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/WidgetManager.java (renamed from src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java)88
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PositionRule.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/WidgetPositioner.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListManager.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java8
19 files changed, 153 insertions, 229 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerGameTest.java b/src/main/java/de/hysky/skyblocker/SkyblockerGameTest.java
deleted file mode 100644
index d3da8969..00000000
--- a/src/main/java/de/hysky/skyblocker/SkyblockerGameTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package de.hysky.skyblocker;
-
-import de.hysky.skyblocker.debug.SnapshotDebug;
-import de.hysky.skyblocker.skyblock.fancybars.FancyStatusBars;
-import it.unimi.dsi.fastutil.Pair;
-import net.fabricmc.fabric.api.client.gametest.v1.ClientGameTestContext;
-import net.fabricmc.fabric.api.client.gametest.v1.FabricClientGameTest;
-import net.fabricmc.fabric.api.client.gametest.v1.TestScreenshotComparisonOptions;
-import net.fabricmc.fabric.api.client.gametest.v1.TestSingleplayerContext;
-import net.minecraft.client.gui.screen.world.WorldCreator;
-import net.minecraft.registry.RegistryKeys;
-import net.minecraft.world.gen.WorldPresets;
-
-@SuppressWarnings("UnstableApiUsage")
-public class SkyblockerGameTest implements FabricClientGameTest {
- @Override
- public void runTest(ClientGameTestContext context) {
- try (TestSingleplayerContext singleplayer = context.worldBuilder().adjustSettings(worldCreator -> {
- worldCreator.setWorldType(new WorldCreator.WorldType(worldCreator.getGeneratorOptionsHolder().getCombinedRegistryManager().getOrThrow(RegistryKeys.WORLD_PRESET).getOrThrow(WorldPresets.DEFAULT)));
- worldCreator.setSeed(String.valueOf(SnapshotDebug.AARON_WORLD_SEED));
- }).create()) {
- // Set up the world
- singleplayer.getServer().runCommand("/fill 180 63 -13 184 67 -17 air");
- singleplayer.getServer().runCommand("/setblock 175 66 -4 minecraft:barrier");
- singleplayer.getServer().runCommand("/tp @a 175 67 -4");
-
- context.runOnClient(client -> {
- assert client.player != null;
- client.player.setYaw(180);
- client.player.setPitch(20);
- });
-
- // Save the current fancy status bars config and reset it to default
- var config = context.computeOnClient(client -> {
- var curConfig = FancyStatusBars.statusBars.entrySet().stream().map(e -> Pair.of(e.getKey(), e.getValue().toJson())).toList();
-
- int[] counts = new int[7];
- FancyStatusBars.statusBars.forEach((type, bar) -> {
- bar.anchor = type.getDefaultAnchor();
- bar.gridY = type.getDefaultGridY();
- bar.gridX = counts[type.getDefaultAnchor().ordinal()]++;
- });
- FancyStatusBars.placeBarsInPositioner();
- FancyStatusBars.updatePositions();
- return curConfig;
- });
-
- // Take a screenshot and compare it
- singleplayer.getClientWorld().waitForChunksRender();
- context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("skyblocker_render").saveWithFileName("skyblocker_render"));
-
- // Restore the fancy status bars config
- context.runOnClient(client -> {
- config.forEach(pair -> FancyStatusBars.statusBars.get(pair.key()).loadFromJson(pair.value()));
- FancyStatusBars.placeBarsInPositioner();
- FancyStatusBars.updatePositions();
- });
- }
- }
-}
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
index d076b7fd..14372b8c 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
@@ -8,7 +8,7 @@ import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager;
import de.hysky.skyblocker.skyblock.item.slottext.SlotTextMode;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
-import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
+import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.WidgetManager;
import de.hysky.skyblocker.skyblock.waypoint.WaypointsScreen;
import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.Utils;
@@ -236,7 +236,7 @@ public class UIAndVisualsCategory {
if (Utils.isOnSkyblock()) {
MessageScheduler.INSTANCE.sendMessageAfterCooldown("/widgets", true);
} else {
- MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, ScreenMaster.ScreenLayer.MAIN_TAB, screen));
+ MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.HUB, WidgetManager.ScreenLayer.MAIN_TAB, screen));
}
})
.build())
diff --git a/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java b/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java
index f6ee1ff5..db4db58b 100644
--- a/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java
+++ b/src/main/java/de/hysky/skyblocker/events/HudRenderEvents.java
@@ -7,24 +7,27 @@ import net.minecraft.client.render.RenderTickCounter;
/**
* HUD render events that allow for proper layering between different HUD elements.
- * This should always be preferred over Fabric's {@link net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback}.
- *
- * Perhaps in the future this system could be PR'd to Fabric.
+ *
+ * @deprecated Use {@link net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback}.
*/
+@Deprecated(forRemoval = true)
public class HudRenderEvents {
/**
* Called after the hotbar, status bars, and experience bar have been rendered.
*/
+ @Deprecated(forRemoval = true)
public static final Event<HudRenderStage> AFTER_MAIN_HUD = createEventForStage();
/**
* Called before the {@link net.minecraft.client.gui.hud.ChatHud} is rendered.
*/
+ @Deprecated(forRemoval = true)
public static final Event<HudRenderStage> BEFORE_CHAT = createEventForStage();
/**
* Called after the entire HUD is rendered.
*/
+ @Deprecated(forRemoval = true)
public static final Event<HudRenderStage> LAST = createEventForStage();
private static Event<HudRenderStage> createEventForStage() {
@@ -38,12 +41,13 @@ public class HudRenderEvents {
/**
* @implNote Similar to Fabric's {@link net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback}
*/
+ @Deprecated(forRemoval = true)
@FunctionalInterface
public interface HudRenderStage {
/**
* Called sometime during a specific HUD render stage.
*
- * @param drawContext The {@link DrawContext} instance
+ * @param context The {@link DrawContext} instance
* @param tickCounter The {@link RenderTickCounter} instance
*/
void onRender(DrawContext context, RenderTickCounter tickCounter);
diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
index 21fc5ab7..1b55ed94 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
@@ -5,8 +5,6 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.events.HudRenderEvents;
-import de.hysky.skyblocker.skyblock.dwarven.GlaciteColdOverlay;
import de.hysky.skyblocker.skyblock.fancybars.FancyStatusBars;
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
@@ -14,18 +12,14 @@ import de.hysky.skyblocker.skyblock.item.ItemProtection;
import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
import de.hysky.skyblocker.skyblock.tabhud.TabHud;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
-import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.gui.LayeredDrawer;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.gui.hud.PlayerListHud;
import net.minecraft.client.render.RenderLayer;
-import net.minecraft.client.util.Window;
-import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.scoreboard.Scoreboard;
@@ -38,8 +32,6 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.ModifyArg;
-import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.function.Supplier;
@@ -60,11 +52,7 @@ public abstract class InGameHudMixin {
@Final
private MinecraftClient client;
- @Shadow
- @Final
- private LayeredDrawer layeredDrawer;
-
- @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHotbarItem(Lnet/minecraft/client/gui/DrawContext;IILnet/minecraft/client/render/RenderTickCounter;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;I)V", ordinal = 0))
+ @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHotbarItem(Lnet/minecraft/client/gui/DrawContext;IILnet/minecraft/client/render/RenderTickCounter;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;I)V", ordinal = 0))
public void skyblocker$renderHotbarItemLockOrRarityBg(CallbackInfo ci, @Local(argsOnly = true) DrawContext context, @Local(ordinal = 4, name = "m") int index, @Local(ordinal = 5, name = "n") int x, @Local(ordinal = 6, name = "o") int y, @Local PlayerEntity player) {
if (Utils.isOnSkyblock()) {
// slot lock
@@ -121,12 +109,6 @@ public abstract class InGameHudMixin {
if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) ci.cancel();
}
- // TODO switch to fabric event when available
- @Inject(method = "renderMiscOverlays", at = @At("TAIL"))
- private void skyblocker$afterMiscOverlays(CallbackInfo ci, @Local(argsOnly = true) DrawContext context) {
- GlaciteColdOverlay.render(context);
- }
-
@ModifyExpressionValue(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F"))
private float skyblocker$modifyAttackIndicatorCooldown(float cooldownProgress) {
if (Utils.isOnSkyblock() && client.player != null) {
@@ -146,59 +128,6 @@ public abstract class InGameHudMixin {
}
}
- @ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2))
- private LayeredDrawer.Layer skyblocker$afterMainHud(LayeredDrawer.Layer mainHudLayer) {
- return (context, tickCounter) -> {
- mainHudLayer.render(context, tickCounter);
- HudRenderEvents.AFTER_MAIN_HUD.invoker().onRender(context, tickCounter);
- };
- }
-
- @ModifyArg(method = "<init>", slice = @Slice(from = @At(value = "NEW", target = "Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2)), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 5))
- private LayeredDrawer.Layer skyblocker$beforeChat(LayeredDrawer.Layer beforeChatLayer) {
- return (context, tickCounter) -> {
- HudRenderEvents.BEFORE_CHAT.invoker().onRender(context, tickCounter);
- beforeChatLayer.render(context, tickCounter);
- };
- }
-
- @Inject(method = "<init>", at = @At("TAIL"))
- private void skyblocker$afterDrawersInitialized(CallbackInfo ci) {
- this.layeredDrawer.addLayer(HudRenderEvents.LAST.invoker()::onRender);
- }
-
- // Renders the hud (always on screen) widgets.
- // Inject before the debug hud, this injection point is identical to the after main hud event
- // z = 200
- // TODO: Switch to fabric event when available
- // TODO: The after sleep/before demo timer injection point gives z = 1600,
- // and due to the z offset that comes with item rendering, it still renders above the debug hud
- @Inject(method = "renderMainHud", at = @At("RETURN"))
- private void skyblocker$renderHud(CallbackInfo ci, @Local(argsOnly = true) DrawContext context) {
- skyblocker$renderTabHudInternal(context, true);
- }
-
- // Renders the tab widgets
- // TODO: Switch to fabric event when available
- @Inject(method = "renderPlayerList", at = @At("HEAD"))
- private void skyblocker$renderTabHud(CallbackInfo ci, @Local(argsOnly = true) DrawContext context) {
- skyblocker$renderTabHudInternal(context, false);
- }
-
- private void skyblocker$renderTabHudInternal(DrawContext context, boolean hud) {
- if (!Utils.isOnSkyblock()) return;
- MinecraftClient client = MinecraftClient.getInstance();
-
- if (client.currentScreen instanceof WidgetsConfigurationScreen) return;
- Window window = client.getWindow();
- float scale = SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudScale / 100f;
- MatrixStack matrices = context.getMatrices();
- matrices.push();
- matrices.scale(scale, scale, 1.F);
- ScreenMaster.render(context, (int) (window.getScaledWidth() / scale), (int) (window.getScaledHeight() / scale), hud);
- matrices.pop();
- }
-
@WrapWithCondition(method = "renderPlayerList", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/PlayerListHud;render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V"))
private boolean skyblocker$shouldRenderHud(PlayerListHud playerListHud, DrawContext context, int scaledWindowWidth, Scoreboard scoreboard, ScoreboardObjective objective) {
return !Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.shouldRenderVanilla() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
index 32fd1afe..471dc753 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -1,14 +1,16 @@
package de.hysky.skyblocker.skyblock.dungeon;
+import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.events.HudRenderEvents;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.LightmapTextureManager;
@@ -22,15 +24,17 @@ import net.minecraft.item.FilledMapItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.map.MapState;
+import net.minecraft.util.Identifier;
public class DungeonMap {
+ private static final Identifier DUNGEON_MAP = Identifier.of(SkyblockerMod.NAMESPACE, "dungeon_map");
private static final MapIdComponent DEFAULT_MAP_ID_COMPONENT = new MapIdComponent(1024);
private static final MapRenderState MAP_RENDER_STATE = new MapRenderState();
private static MapIdComponent cachedMapIdComponent = null;
@Init
public static void init() {
- HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> render(context));
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.STATUS_EFFECTS, DUNGEON_MAP, (context, tickCounter) -> render(context)));
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker")
.then(ClientCommandManager.literal("hud")
.then(ClientCommandManager.literal("dungeon")
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java
index 1e0bfb98..85c2afab 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java
@@ -2,21 +2,25 @@ package de.hysky.skyblocker.skyblock.dungeon;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.events.HudRenderEvents;
import de.hysky.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
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 net.minecraft.util.Identifier;
public class DungeonScoreHUD {
+ private static final Identifier DUNGEON_SCORE = Identifier.of("skyblocker", "dungeon_score");
+
private DungeonScoreHUD() {
}
@Init
public static void init() {
- HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> render(context));
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.OVERLAY_MESSAGE, DUNGEON_SCORE, (context, tickCounter) -> render(context)));
}
//This is 4+5 wide, needed to offset the extra width from bold numbers (3×1 wide) in S+ and the "+" (6 wide) so that it doesn't go off the screen if the score is S+ and the hud element is at the right edge of the screen
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java
index f5edb4dd..14706ccd 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java
@@ -2,22 +2,25 @@ package de.hysky.skyblocker.skyblock.dungeon;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.events.HudRenderEvents;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import net.minecraft.util.Identifier;
public class FireFreezeStaffTimer {
+ private static final Identifier FIRE_FREEZE_STAFF_TIMER = Identifier.of("skyblocker", "fire_freeze_staff_timer");
private static long fireFreezeTimer;
@Init
public static void init() {
- HudRenderEvents.BEFORE_CHAT.register(FireFreezeStaffTimer::onDraw);
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.OVERLAY_MESSAGE, FIRE_FREEZE_STAFF_TIMER, FireFreezeStaffTimer::onDraw));
ClientReceiveMessageEvents.GAME.register(FireFreezeStaffTimer::onChatMessage);
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> FireFreezeStaffTimer.reset());
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/GlaciteColdOverlay.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/GlaciteColdOverlay.java
index 9e6516b6..2e3c89a7 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/GlaciteColdOverlay.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/GlaciteColdOverlay.java
@@ -5,7 +5,10 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
@@ -24,6 +27,7 @@ public class GlaciteColdOverlay {
public static void init() {
Scheduler.INSTANCE.scheduleCyclic(GlaciteColdOverlay::update, 20);
ClientReceiveMessageEvents.GAME.register(GlaciteColdOverlay::coldReset);
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.MISC_OVERLAYS, POWDER_SNOW_OUTLINE, (context, tickCounter) -> render(context)));
}
private static void coldReset(Text text, boolean b) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java
index 10b9d776..8b49ee5c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java
@@ -6,7 +6,6 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.events.ChatEvents;
-import de.hysky.skyblocker.events.HudRenderEvents;
import de.hysky.skyblocker.events.ItemPriceUpdateEvent;
import de.hysky.skyblocker.events.SkyblockEvents;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
@@ -16,6 +15,8 @@ import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair;
import it.unimi.dsi.fastutil.objects.*;
import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.ChatHud;
@@ -23,6 +24,7 @@ import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import net.minecraft.util.Identifier;
import org.apache.commons.lang3.math.NumberUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Unmodifiable;
@@ -39,6 +41,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit
public final class PowderMiningTracker extends AbstractProfitTracker {
public static final PowderMiningTracker INSTANCE = new PowderMiningTracker();
private static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Powder Mining Tracker");
+ private static final Identifier POWDER_MINING_TRACKER = Identifier.of(SkyblockerMod.NAMESPACE, "powder_mining_tracker");
private static final Codec<Object2IntMap<String>> REWARDS_CODEC = CodecUtils.object2IntMapCodec(Codec.STRING);
private static final Object2ObjectArrayMap<String, String> NAME2ID_MAP = new Object2ObjectArrayMap<>(50);
@@ -76,7 +79,7 @@ public final class PowderMiningTracker extends AbstractProfitTracker {
@Init
public static void init() {
ChatEvents.RECEIVE_STRING.register(INSTANCE::onChatMessage);
- HudRenderEvents.AFTER_MAIN_HUD.register(PowderMiningTracker::render);
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.STATUS_EFFECTS, POWDER_MINING_TRACKER, PowderMiningTracker::render));
ItemPriceUpdateEvent.ON_PRICE_UPDATE.register(INSTANCE::onPriceUpdate);
INSTANCE.allRewards.init();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
index ab1cfe2d..6b39fb0a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java
@@ -3,7 +3,6 @@ package de.hysky.skyblocker.skyblock.garden;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.events.HudRenderEvents;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Location;
@@ -15,12 +14,15 @@ import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue;
import it.unimi.dsi.fastutil.longs.LongPriorityQueue;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
import net.fabricmc.fabric.api.event.client.player.ClientPlayerBlockBreakEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.util.Formatting;
+import net.minecraft.util.Identifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,6 +39,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit
public class FarmingHud {
private static final Logger LOGGER = LoggerFactory.getLogger(FarmingHud.class);
+ private static final Identifier FARMING_HUD = Identifier.of(SkyblockerMod.NAMESPACE, "farming_hud");
public static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US);
private static final Pattern FARMING_XP = Pattern.compile("\\+(?<xp>\\d+(?:\\.\\d+)?) Farming \\((?<percent>[\\d,]+(?:\\.\\d+)?%|[\\d,]+/[\\d,]+)\\)");
private static final MinecraftClient client = MinecraftClient.getInstance();
@@ -48,7 +51,7 @@ public class FarmingHud {
@Init
public static void init() {
- HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> {
+ HudLayerRegistrationCallback.EVENT.register(d -> d.attachLayerAfter(IdentifiedLayer.STATUS_EFFECTS, FARMING_HUD, (context, tickCounter) -> {
if (shouldRender()) {
if (!counter.isEmpty() && counter.peek().rightLong() + 5000 < System.currentTimeMillis()) {
counter.poll();
@@ -66,7 +69,7 @@ public class FarmingHud {
counterType = CounterType.NONE;
}
}
- });
+ }));
ClientPlayerBlockBreakEvents.AFTER.register((world, player, pos, state) -> {
if (shouldRender()) {
blockBreaks.enqueue(System.currentTimeMillis());
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java
index 8a0e0509..39da9d6e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java
@@ -4,7 +4,7 @@ import com.mojang.logging.LogUtils;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.tabhud.config.entries.WidgetEntry;
import de.hysky.skyblocker.skyblock.tabhud.config.preview.PreviewTab;
-import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
+import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.WidgetManager;
import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListManager;
import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget;
import de.hysky.skyblocker.utils.ItemUtils;
@@ -39,7 +39,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
private @Nullable GenericContainerScreenHandler handler;
private String titleLowercase;
public final boolean noHandler;
- private ScreenMaster.ScreenLayer widgetsLayer = null;
+ private WidgetManager.ScreenLayer widgetsLayer = null;
private Screen parent = null;
private boolean tabPreview = false;
@@ -87,7 +87,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
* @param handler the container handler
* @param titleLowercase the title in lowercase
*/
- private WidgetsConfigurationScreen(@Nullable GenericContainerScreenHandler handler, String titleLowercase, Location targetLocation, @Nullable ScreenMaster.ScreenLayer widgetLayerToGoTo) {
+ private WidgetsConfigurationScreen(@Nullable GenericContainerScreenHandler handler, String titleLowercase, Location targetLocation, @Nullable WidgetManager.ScreenLayer widgetLayerToGoTo) {
super(Text.literal("Widgets Configuration"));
this.handler = handler;
this.titleLowercase = titleLowercase;
@@ -99,7 +99,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
currentLocation = targetLocation;
widgetsLayer = widgetLayerToGoTo;
}
- ScreenMaster.getScreenBuilder(currentLocation).backupPositioning();
+ WidgetManager.getScreenBuilder(currentLocation).backupPositioning();
}
/**
@@ -119,7 +119,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
* @param widgetLayerToGoTo go to this widget's layer
*/
public WidgetsConfigurationScreen(Location targetLocation, String widgetLayerToGoTo, Screen parent) {
- this(null, "", targetLocation, ScreenMaster.getScreenBuilder(targetLocation).getPositionRuleOrDefault(widgetLayerToGoTo).screenLayer());
+ this(null, "", targetLocation, WidgetManager.getScreenBuilder(targetLocation).getPositionRuleOrDefault(widgetLayerToGoTo).screenLayer());
this.parent = parent;
}
@@ -129,7 +129,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
* @param targetLocation open the preview to this location
* @param layerToGo go to this layer
*/
- public WidgetsConfigurationScreen(Location targetLocation, ScreenMaster.ScreenLayer layerToGo, Screen parent) {
+ public WidgetsConfigurationScreen(Location targetLocation, WidgetManager.ScreenLayer layerToGo, Screen parent) {
this(null, "", targetLocation, layerToGo);
this.parent = parent;
}
@@ -177,7 +177,7 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
public void updateCustomWidgets() {
List<WidgetEntry> entries = new ArrayList<>();
- for (HudWidget value : ScreenMaster.widgetInstances.values()) {
+ for (HudWidget value : WidgetManager.widgetInstances.values()) {
if (!value.availableLocations().contains(curren