From 1b44c4102c8dddcbebe7321ee9703bbffaedbd05 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 8 Jun 2025 14:33:14 -0400 Subject: Add Biome & Action Bar debug tools --- src/main/java/de/hysky/skyblocker/debug/Debug.java | 41 ++++++++++++++++++++++ .../mixins/accessors/InGameHudInvoker.java | 8 +++++ 2 files changed, 49 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/debug/Debug.java b/src/main/java/de/hysky/skyblocker/debug/Debug.java index bfee4471..559c09d1 100644 --- a/src/main/java/de/hysky/skyblocker/debug/Debug.java +++ b/src/main/java/de/hysky/skyblocker/debug/Debug.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.debug; +import com.google.gson.JsonElement; import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.serialization.JsonOps; @@ -7,6 +8,7 @@ import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; +import de.hysky.skyblocker.mixins.accessors.InGameHudInvoker; import de.hysky.skyblocker.skyblock.events.EventNotifications; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.ItemUtils; @@ -30,8 +32,12 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtHelper; import net.minecraft.nbt.NbtOps; import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; +import net.minecraft.text.TextCodecs; +import net.minecraft.world.biome.Biome; + import org.lwjgl.glfw.GLFW; import java.util.List; @@ -73,6 +79,8 @@ public class Debug { .then(dumpArmorStandHeadTextures()) .then(toggleWebSocketDebug()) .then(EventNotifications.debugToasts()) + .then(dumpBiome()) + .then(dumpActionBar()) ) )); ClientTickEvents.END_CLIENT_TICK.register(client -> { @@ -146,6 +154,39 @@ public class Debug { }); } + private static LiteralArgumentBuilder dumpBiome() { + return literal("dumpBiome") + .executes(context -> { + FabricClientCommandSource source = context.getSource(); + RegistryEntry biome = source.getWorld().getBiome(source.getPlayer().getBlockPos()); + + if (biome != null && biome.value() != null) { + String biomeData = Biome.CODEC.encodeStart(JsonOps.INSTANCE, biome.value()) + .map(JsonElement::toString) + .setPartial("") + .getPartialOrThrow(); + source.sendFeedback(Constants.PREFIX.get().append(Text.literal(String.format("Biome ID: %s, Data: %s", biome.getIdAsString(), biomeData)))); + } + + return Command.SINGLE_SUCCESS; + }); + } + + private static LiteralArgumentBuilder dumpActionBar() { + return literal("dumpActionBar") + .executes(context -> { + FabricClientCommandSource source = context.getSource(); + Text actionBar = ((InGameHudInvoker) (source.getClient().inGameHud)).getOverlayMessage(); + + if (actionBar != null) { + Text pretty = NbtHelper.toPrettyPrintedText(TextCodecs.CODEC.encodeStart(Utils.getRegistryWrapperLookup().getOps(NbtOps.INSTANCE), actionBar).getOrThrow()); + source.sendFeedback(Constants.PREFIX.get().append("Action Bar: ").append(pretty)); + } + + return Command.SINGLE_SUCCESS; + }); + } + public enum DumpFormat { JSON { @Override diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/InGameHudInvoker.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/InGameHudInvoker.java index d32ca253..80e46293 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/accessors/InGameHudInvoker.java +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/InGameHudInvoker.java @@ -3,11 +3,19 @@ package de.hysky.skyblocker.mixins.accessors; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.scoreboard.ScoreboardObjective; +import net.minecraft.text.Text; + +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(InGameHud.class) public interface InGameHudInvoker { + + @Accessor + @Nullable + Text getOverlayMessage(); @Invoker("renderScoreboardSidebar") void skyblocker$renderSidebar(DrawContext context, ScoreboardObjective objective); -- cgit