- Using Minecraft version to recognize unobfuscated Minecraft
- Downgraded non-void WrapWithCondition to warning if there is a pop instruction afterwards
- Fixed local templates freezing
- Avoided a crash for unknown MC versions
- Don't suggest that locals can use names with argsOnly = true
- Fixed
transitive-*being reported as an error in class tweakers. - Fixed all local classes being reported as being inside a mixin.
- Fixed write-unsafe context errors when using the project creator.
- Fixed freeze in project creator
- Fixed ModifyExpressionValue sometimes being detected as disallowed if MixinExtras expressions are used
@Attargets inside@Sliceare no longer checked for invalid instructions according to the injector type.
- Translations inside
deprecated.jsonare now properly handled.- Usages of removed or renamed translations will be reported as a warning.
- Translations will now properly be redirected to the correct entry in the translation file if they have been renamed.
- New error if a local class is used in a mixin.
- Access wideners have been renamed to class tweakers, which are a new beta Fabric feature, backwards compatible with access wideners. Both the new class tweaker format and the legacy access widener format are supported.
- Added warnings related to
@At.opcode:- A warning if it is used on any injection point other than
FIELD(it would be ignored). - A warning if it is not used on
FIELD. - A warning if an unsupported opcode is used.
- A warning if it is used on any injection point other than
- Added an inspection for when an injector targets an unsupported instruction. This includes:
@Redirectand@WrapOperationtargeting any instruction except those that can be targeted according to their docs.@ModifyArgand@ModifyArgstargeting any instruction except method invocations.@ModifyConstanttargeting any instruction that doesn't push a constant.@ModifyExpressionValuetargeting instructions that don't return a value (e.g. void method invocations).@ModifyReceivertargeting any instruction except non-static method invocations and field references.@ModifyReturnValuetargeting any instruction exceptxRETURN.@WrapWithConditiontargeting any instruction except void method invocations and field assignments.
- Added an inspection for when
@Shareis used on a parameter that isn't from theLocalReffamily. - Added an inspection for when two
@Shareannotations pointing to the same variable have a different type. - Added support for target code which has named variables in the LVT. This is enabled by default on all code except in
the packages
net.minecraftandcom.mojang.blaze3d. It can be enabled for these packages too by enabling themcdev.unobfuscated.minecraftregistry value in the registry menu (access via ctrl+shift+A in the IDE and search for "Registry"). Plugins can add further unobfuscated packages by registering to thecom.demonwav.minecraft-dev.missingLVTCheckerextension point.@Localand@ModifyVariablewill generate warnings if the target class has named variables in the LVT, but are being targeted withordinal,index, or in implicit mode.- This is currently disabled for parameter locals (those that can have
argsOnly = true, due to a Mixin issue). - There is a quick fix to convert the annotation to use
name.
- This is currently disabled for parameter locals (those that can have
- MixinExtras expressions will now auto-complete to use named
@Localtargets where possible. - The
@Injectlocal capture migration quick fix now also uses named@Localtargets where possible.
- Simplified translation identification code and made interpolation inlining less aggressive. When folding translations, MinecraftDev will no longer attempt to inline the values of variables in the substitution.
- Removed the check for injecting before a
super()call. This was never a correct thing to check for. - Switched from using entry points to implicit usage providers in mixins. This allows MixinExtras sugar parameters to be reported as unused by IntelliJ if they are unused, while maintaining an implicit usage on the whole method to avoid an unused warning there.
- Changed
@Localand@ModifyVariablecan beargsOnly = trueinspection to also work if the local is specified by name.
- Error reporting now works again and uses Sentry. If you have had problems reporting errors to MinecraftDev, it may be worth trying again after this update.
- Fixed auto-completion for
NEWandFIELDtargets so they now read from the bytecode rather than the source code, improving accuracy. - Injection point specifiers and ordinals no longer prevent completion of
@Attargets. @Localno longer always reports as able to beargsOnly = trueif there are other annotations on the method, which was particularly noticeable when using@Expression.- Fixed
@ModifyConstant's expected method signature for class types. It now correctly expects two arguments, anObjectinstance and aClass<?>type, and may return aClass<?>or aboolean. - MinecraftDev no longer uses the internal
loom.mods[...].modSourceSetsproperty when importing a Fabric project. - Double nested anonymous class resolving now works, so mixins targeting
Foo$1$1should now work correctly. - Fixed navigation to constructors from mixins, which was broken in the previous release.
- Class tweaker (access widener) files no longer treat unrecognized namespaces as a syntax error.
- A warning will be generated if the namespace is not in the current mapping file (pulled from Loom). If the current
mapping file does not exist, only
officialwill be recognized as a valid namespace.
- A warning will be generated if the namespace is not in the current mapping file (pulled from Loom). If the current
mapping file does not exist, only
- Fixed the "copy AT entry" action for unobfuscated environments.
- Fixed an
ArrayIndexOutOfBoundsExceptioninLocalVariables.guessAllLocalVariablesUncached. - Override
getLanguageinNbttCodeStyleSettingsProvider, preventing an IDE error. - Weaken the assertions in
TranslationFiles, showing a balloon to the user instead. This prevents an IDE error from occurring.
- Debug flow diagrams for MixinExtras expressions.
- An inspection to replace
INVOKE_ASSIGNwith MixinExtras expressions where possible.- Expressions are preferred because
INVOKE_ASSIGNdoesn't fail if there's no assignment.
- Expressions are preferred because
- Performance improvements for shadow completions.
- Smarter warnings for discouraged shifting
- Shifting is now always discouraged on injectors that can't inject on any instruction in the method (such as
@Redirect). - When MixinExtras expressions are being used, the discourage shifting logic now takes into account the type of expression.
- Shifting is now always discouraged on injectors that can't inject on any instruction in the method (such as
- Mixin navigation to lambdas has been improved. MinecraftDev will now properly detect that a synthetic method will be
generated for method references in the following additional cases:
- All array method references.
- Method references to a superclass method (
super::foo). - Constructor method references for a non-static inner class.
- Previously, all constructor method references were incorrectly assumed to generate a synthetic method.
- Varargs parameter expansions.
- Access to private methods in an outer or inner class before Java 9.
- Access to protected methods in the superclass of an outer class, if the superclass is in a different package.
- Cases where the functional interface method being implemented has a parameter which is an intersection type (a type parameter extending multiple things).
- Fixed "generate accessor/invoker" action not doing anything.
- Fixed Mixin version detection in legacy/non-standard Minecraft environments. The Mixin version is now taken from the
MixinBootstrapclass, rather than attempting to decipher it from the library artifact. - Fixed
@Coerceon return type wanting subtypes not supertypes. - Fixed the "add definition" quick-fix for MixinExtras expressions creating a "dummy" definition since 2025.1
- Fixed incorrect unused warnings on MixinExtras expression definitions
- Fixed "find usages" on MixinExtras expression definitions
- Fixed IDE error that sometimes occurs when navigating to mixin target
- Fixed mixin navigation to field assignments.
- Support injection point specifiers everywhere
- Support for the 2025.2 EAP
- Demote a couple of mixin inspections from error to warning
- Allow handler methods to be static even when not required, except for
@Injecton stock mixin - Allow
CallbackInfoReturnable.cancel()in MixinCancellableInspection - Check bases for
CIR.cancel() - Allow
.awas alternative access widener file extension - Remove shadow completions explicit proximity
- #2148 Allow assignment to
@Finalfields in class initializer blocks - #2468 entrypoint checks on non-ending parts of entrypoint references, and handle escapes in entrypoint reference strings
- #2470 Various Mixin fixes
@Shadowsuggestions being incorrectly prioritizedNoSuchElementExceptionin MixinAnnotationTargetInspectionIllegalStateExceptionwhen typing a colon in Java code
- Added datagen to Fabric project templates
- #2391 Project creator template repo and maven repo authorization
- this makes it possible to use private GitHub or GitLab repos, or any URL that requires an HTTP
Authorizationor custom header to access - it also supports authenticating to Maven repos to list versions when using a
maven_artifact_versionproperty in your template through basic authentication
- this makes it possible to use private GitHub or GitLab repos, or any URL that requires an HTTP
- #2394
Write-unsafe contexterrors when using the project creator - #2406
IllegalStateException: Constraint inSmartMode cannot be satisfiedwhen opening a project - #2382 No Parchment version was selectable when using a version of Minecraft that Parchment doesn't support explicitly
- In this case, the creator will now select the latest version available for the latest Minecraft version supported by Parchment
- #2408 External translation annotations are not attached
- This happens because IntelliJ IDEA disables external annotations by default in 2024.3, which we rely on for this feature, an opt-out setting has been added to force-enable external annotations in Minecraft projects.
- Cases where references to client sources in fabric.mod.json were not resolved
plugin.yml,paper-plugin.ymlandbungee.ymlmain class reference and validity inspectionmods.tomlandneoforge.mods.tomldocumentation for lookup elements- Support for split strings within inspections and method target references in Mixins (#2358)
- Mouse ungrab on breakpoint hit while running a Gradle task
- JSON5 support to mixin config jsons (#2375)
- Value types in mods.toml key completion
- Mixin injection signature fix preview
- Loom 1.8 support
- K2 mode compatibility
- #2385 ModDevGradle Vanilla-Mode support
- More reliable ClassFqn creator property suggestions and validation
- Lang spellchecking now works in dumb mode
- #2362 CME in fabric.mod.json
- Ignored annotations registrations
- NeoGradle and NeoModDev Minecraft version import
- #2360
Class initialization must not depend on serviceserror - #2376 Error when generating event listeners in read only file
- #2308 Mixin Inject signature fix adds last parameter as first local
- #1813 Single character Accessor targets aren't inferred correctly
- #1886 Sync error in ForgeGradle composite builds
- Access widener completion in fabric.mod.json
- Event listener generation for Kotlin
JUMPinjection point support (without source navigation)- Inspection highlighting that
JUMPusages are discouraged - Inspection highlighting discouraged instruction shifts
- Inspections for when @Inject local capture is unused and for when they can be replaced with @Local
- #2306 Use mixin icon for mixin classes
- Documentation while completing keys in mods.toml
- mods.toml support for neoforge.mods.toml
- Automatically insert an
=after completing a mods.toml key
- #2330 Reformat created files without keeping line breaks. Fixes the Velocity main class annotation's bad formatting.
- #2331 Support fabric.mod.json in test resources
- MixinExtras occasional cache desync (#2335)
- #2163
@ModifyVariablemethod signature checking withSTORE - #2282 Mixin support confusion with
$and.separators in class names - Recent NeoModDev version import errors
- Recommended Artifact ID value was not sanitized properly
- NeoForge versions in the Architectury were not being matched correctly for the first version of a major Minecraft release
This release contains two major features:
The new project creator is very similar to the previous one but has a few advantages:
- The templates are now stored on a separate repository and updated the first time you open the creator. This allows us to release template updates independently of plugin releases.
- You can create your own custom templates in their own repositories, which can be:
- flat directories
- local ZIP archives
- remote ZIP archives (like the built-in templates)
- Kotlin templates were added to all platforms except Forge and Architectury (couldn't get the Forge one to work, will look into it later)
- Fabric now has a split sources option
- Some niche options like the plugins dependencies fields were removed as their use was quite limited
- Remembered field values won't be ported over to the new creator, so make sure to configure your Group ID under Build System Properties!
- The old creator will be kept for a few months to give us the time to fix the new creator, please report any issues on the issue tracker
- Initial support for NeoForge's ModDevGradle
- Option to force json translation and configurable default i18n call (#2292)
- Minecraft version detection for Loom-based projects
- Other JVM languages support for translation references, inspections and code folding
- Repo-based project creator templates (#2304)
- Support for MixinExtras expressions (#2274)