diff options
| author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2025-03-02 23:22:16 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-03 12:22:16 +0800 |
| commit | 047149f394359ed957a6b9c050d00c8953ed0198 (patch) | |
| tree | 6cb279b23a1a1744fa239520fb2d1d770cfcdde7 /src/main/java | |
| parent | fa9e6b7663c6f81e08e6e3cc1cf25907522ae82a (diff) | |
| download | Skyblocker-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')
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 |
