An IntelliJ IDE plugin that provides development assistance for the SkyHanni Minecraft Skyblock mod. It adds inspections, intentions, inlay hints, line markers, and code completion tailored to SkyHanni's event system and configuration framework.
The plugin understands SkyHanni's event system and validates event handler declarations across the project.
Inspections
- Missing
@HandleEvent- Flags functions that accept aSkyHanniEventparameter (or match a@PrimaryFunctionname) without the@HandleEventannotation. A quick fix adds it. - Non-private
@HandleEvent- Flags@HandleEventfunctions that are not explicitlyprivate. A quick fix adds theprivatemodifier. - Missing
@PrimaryFunction- Flags concreteSkyHanniEventsubclasses with no@PrimaryFunctionannotation. Without it, handlers must use the verboseeventType = ...argument on every@HandleEvent. A quick fix suggests a derived name when one is available and not already taken. - Duplicate
@PrimaryFunctionname - Flags event classes that share a@PrimaryFunctionname with another event. The name-to-event mapping is 1:1, so duplicates break handler dispatch. - Mismatched
@PrimaryFunctionname - Flags@HandleEventfunctions with an expliciteventTypewhose function name does not match the@PrimaryFunctiondeclared on that event class.
Navigation and hints
- Line markers - Gutter icons on
@HandleEventfunctions link to the corresponding event class declaration. - Inlay hints - For handlers that use the
@PrimaryFunctionconvention, the resolved event type is shown inline beside the function name. - Code completion - Suggests valid handler function names based on
@PrimaryFunctiondeclarations found across the project.
The plugin resolves SkyHanni's @ConfigOption properties to their full dotted config paths (e.g. inventory.items.slot) by walking the
config class hierarchy.
Inspections
- Copy config path - Highlights every
@ConfigOptionproperty and offers a quick fix that copies its full config path to the clipboard.
Intentions
- Convert to
Property<T>- Converts a@ConfigOption var Tfield toval Property<T>, wrapping the initializer inProperty.of(...)and adding the required import. - Create config migration - Inserts an
event.move(...)call into the class'sonConfigFixhandler. Creates the@SkyHanniModule companion objectand handler function if they do not already exist, and incrementsCONFIG_VERSIONautomatically. - Navigate to config property - From a dotted path string inside
event.move("..."), jumps directly to the property declaration in the config class hierarchy.
Inlay hints and navigation
- Config path inlay hints - Displays the resolved config path inline beside each
@ConfigOptionproperty. - Config path references - Dotted path strings in migration calls are treated as references, enabling Ctrl+Click navigation to the target property.
- Missing
@SkyHanniModule- Flagsobjectdeclarations that contain@HandleEventfunctions or repo patterns without a@SkyHanniModuleannotation. Also flagsclassdeclarations that incorrectly carry the annotation, which is only valid onobjects. A quick fix adds or removes the annotation as appropriate.
- Regex101 line markers - Gutter icons on regex pattern declarations open the pattern directly in regex101.com for testing.
- Inspection suppression - Suppresses false-positive IntelliJ warnings in SkyHanni-specific contexts:
- Spell check:
RepoPatternkeys (first argument togroup,exclusiveGroup,list, andpattern) - Spell check: Command names and aliases inside
registerBrigadier/registerComplex - Spell check:
group/groupOrNullname arguments - Spell check: Strings containing Minecraft color codes (
§) - Spell check: Regex test lines (lines marked with
REGEX-TEST:) - Redundant escape: Regex strings in
RepoPattern.pattern()calls (the\/escape is sometimes necessary by the regex test logic)
- Spell check:
- Mixin usage detection - Marks
@Mixinclasses, their injector methods, the parameters of those methods and their@Shadowmembers as used. Shadowed fields also count as assigned, because the value comes from the class the mixin is applied to. Mixins are only referenced from the mixin configuration, which SkyHanni generates at compile time, so IntelliJ would otherwise report all of them as unused.
Using the IDE built-in plugin system:
Settings > Plugins > Marketplace > Search for "SkyHanni Development" > Install
(does now work, not yet uploaded)
Manually:
Download the latest release and install it via Settings > Plugins > ⚙ > Install plugin from disk...
Plugin based on the IntelliJ Platform Plugin Template.