How hannibal002/skyhanni works
Purpose and Entry Points
SkyHanni is a client-side Fabric mod for Hypixel SkyBlock. Minecraft loads the mod through version-specific Fabric metadata, then the mod bootstrap coordinates initialization and feature registration. Primary entry points:
• src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
• src/main/java/at/hannibal2/skyhanni/SkyHanniModLoader.kt
• versions/26.1/src/main/resources/fabric.mod.json
Runtime Integration Boundary
The mod runs inside the Minecraft client and uses mixins/class tweaking to observe or alter game rendering, GUI, network packets, input, entities, sounds, and screens. Mixins are the low-level boundary; higher layers should prefer emitted events and compatibility abstractions rather than direct Minecraft internals.
• src/main/resources/mixins.skyhanni.json
• src/main/java/at/hannibal2/skyhanni/mixins/init/SkyHanniMixinPlugin.java
• src/main/java/at/hannibal2/skyhanni/utils/compat/MinecraftCompat.kt
Event and State Pipeline
Minecraft/Fabric callbacks and mixin hooks produce typed SkyHanni events. API/data managers consume chat, scoreboard, inventory, entity, world, packet, and render signals to maintain interpreted SkyBlock state; features subscribe to that state or to domain events.
• Event bus/core: src/main/java/at/hannibal2/skyhanni/api/event/SkyHanniEvents.kt, src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt
• Minecraft adapters: src/main/java/at/hannibal2/skyhanni/api/minecraftevents/ClientEvents.kt, src/main/java/at/hannibal2/skyhanni/events/minecraft/SkyHanniTickEvents.kt
• State extraction: src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt, src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
Feature Layer
The bulk of the product is independently configurable event-driven features, organized by SkyBlock domain (garden, mining, dungeon, fishing, rift, inventory, chat, etc.). Features transform state into overlays, highlights, notifications, command behavior, or inventory/chat modifications. Representative domain roots:
• src/main/java/at/hannibal2/skyhanni/features/garden/GardenApi.kt
• src/main/java/at/hannibal2/skyhanni/features/mining/HotxFeatures.kt
• src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonApi.kt
Configuration and Persistent Client Data
SkyHanniConfig is the feature-toggle/settings graph, backed by config loading, migration, GUI editing, and storage scopes for player/profile/resettable data. Commands expose configuration and operational entry points, including /sh and /skyhanni.
• src/main/java/at/hannibal2/skyhanni/config/SkyHanniConfig.kt
• src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt
• src/main/java/at/hannibal2/skyhanni/config/commands/CommandsRegistry.kt
Repository-Driven and Remote Data
A repository manager separates remotely maintained content/configuration from compiled code, with disk and memory filesystem implementations and reload events. JSON schemas model repository content, including patterns, locations, items, events, and graph settings. Other integrations include Hypixel Bazaar data, NotEnoughUpdates data, Modrinth releases, and Discord IPC.
• src/main/java/at/hannibal2/skyhanni/data/repo/SkyHanniRepoManager.kt
• src/main/java/at/hannibal2/skyhanni/data/repo/GitRepo.kt
• src/main/java/at/hannibal2/skyhanni/api/enoughupdates/EnoughUpdatesRepoManager.kt
Rendering, Navigation, and Build Architecture
Rendering utilities provide custom HUD/world drawing, shaders, renderables, and item-atlas rendering used by features. Navigation models islands as graphs and uses Dijkstra paths rendered in-world. The Gradle/Kotlin build includes a KSP annotation-processor module that generates module/primary-function/version wiring.
• src/main/java/at/hannibal2/skyhanni/utils/render/SkyHanniRenderPipeline.kt
• src/main/java/at/hannibal2/skyhanni/data/model/graph/DijkstraTree.kt
• annotation-processors/src/main/kotlin/at/hannibal2/skyhanni/skyhannimodule/ModuleProcessor.kt
Main entry points: GardenApi.kt Domain Features · SkyHanniEvents.kt SkyHanni Event Bus · SkyHanniModLoader.kt Feature Loader · mixins.skyhanni.json Mixin Hooks
Components 22
Minecraft Integration
- Minecraft Client · Fabric mod host and game internals.
- Fabric Metadata
versions/26.1/src/main/resources/fabric.mod.json - Mod Bootstrap
src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt - Feature Loader
src/main/java/at/hannibal2/skyhanni/SkyHanniModLoader.kt - Mixin Hooks · Observes and alters low-level client behavior.
src/main/resources/mixins.skyhanni.json - Mixin Plugin
src/main/java/at/hannibal2/skyhanni/mixins/init/SkyHanniMixinPlugin.java - Minecraft Compatibility
src/main/java/at/hannibal2/skyhanni/utils/compat/MinecraftCompat.kt
Core Pipeline
- Client Event Adapters
src/main/java/at/hannibal2/skyhanni/api/minecraftevents/ClientEvents.kt - Tick Events
src/main/java/at/hannibal2/skyhanni/events/minecraft/SkyHanniTickEvents.kt - SkyHanni Event Bus · Decouples game hooks, state managers, and features.
src/main/java/at/hannibal2/skyhanni/api/event/SkyHanniEvents.kt - Event Handlers
src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt - SkyBlock State Extraction · Interprets game signals into SkyBlock state.
src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt - Hypixel State
src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt
Product Systems
- Domain Features · Configurable garden, mining, dungeon, and other SkyBlock features.
src/main/java/at/hannibal2/skyhanni/features/garden/GardenApi.kt - Configuration
src/main/java/at/hannibal2/skyhanni/config/SkyHanniConfig.kt - Config Storage & Migration
src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt - Commands · Provides /sh and /skyhanni entry points.
src/main/java/at/hannibal2/skyhanni/config/commands/CommandsRegistry.kt - Remote Repository Data · Reloadable remote content separated from compiled code.
src/main/java/at/hannibal2/skyhanni/data/repo/SkyHanniRepoManager.kt - External Data Integration
src/main/java/at/hannibal2/skyhanni/api/enoughupdates/EnoughUpdatesRepoManager.kt - Render Pipeline
src/main/java/at/hannibal2/skyhanni/utils/render/SkyHanniRenderPipeline.kt - Navigation Paths · Computes Dijkstra routes rendered in-world.
src/main/java/at/hannibal2/skyhanni/data/model/graph/DijkstraTree.kt
Build Tooling
- Module Processor · Generates module and version wiring.
annotation-processors/src/main/kotlin/at/hannibal2/skyhanni/skyhannimodule/ModuleProcessor.kt
Connections 24
- Minecraft Client → Fabric Metadata: loads
- Fabric Metadata → Mod Bootstrap: declares entrypoint
- Mod Bootstrap → Feature Loader: initializes
- Module Processor → Feature Loader: generates wiring for
- Minecraft Client → Mixin Hooks: is hooked by
- Mixin Plugin → Mixin Hooks: configures
- Mixin Hooks → Client Event Adapters: emits client signals
- Minecraft Client → Tick Events: drives
- Minecraft Compatibility → Client Event Adapters: abstracts client access
- Client Event Adapters → SkyHanni Event Bus: publishes
- Tick Events → SkyHanni Event Bus: publishes
- Event Handlers → SkyHanni Event Bus: subscribes through
- SkyHanni Event Bus → SkyBlock State Extraction: feeds signals
- SkyBlock State Extraction → Hypixel State: derives
- SkyHanni Event Bus → Domain Features: dispatches events
- Hypixel State → Domain Features: provides interpreted state
- Feature Loader → Domain Features: registers
- Configuration → Domain Features: controls
- Config Storage & Migration → Configuration: loads and migrates
- Commands → Configuration: edits
- Domain Features → Render Pipeline: draws via
- Remote Repository Data → Domain Features: supplies content
- External Data Integration → Remote Repository Data: integrates data
- Navigation Paths → Render Pipeline: renders routes through