Skip to content

v1.3.0

Latest

Choose a tag to compare

@GhostTypes GhostTypes released this 06 Aug 22:49
· 5 commits to main since this release

Completes the access transformer work tracked in #12. Version 1.2.5 was bumped in the repository but never tagged or published; its changes ship here.

This release also adds a CHANGELOG.md covering the full history back to 1.0.0.

New Features

  • Inherited-member detection for access transformers (#17). An AT only transforms the class it names, so a directive aimed at a member declared on a parent is silently inert — the build passes, the game loads, the member stays inaccessible. validate_access_transformer now resolves the full ancestor closure (transitive superName + interfaces, ancestors outside the JAR skipped) and reports the declaring class along with a paste-ready corrected directive. Constructors are excluded, since they are never inherited.

  • Inherited-member detection for access wideners (#17). Fabric AWs have identical semantics: AccessWidenerClassVisitor resolves EntryTriple(className, name, descriptor) through a plain HashMap.getOrDefault with no hierarchy walk, so an AW naming a subclass for an inherited member widens nothing. Both validators share the same walk, so they can't drift on a rule they both have.

  • Cross-file AT conflict detection (#17) via a new optional extraFiles parameter on validate_access_transformer. Every AT a mod ships is applied together at build time, so a conflict spanning two files fails the Forge build exactly like one inside a single file. Duplicates and conflicts name both files and both lines; findings are restricted to those involving the file under validation, and unresolvable paths come back as extraFilesNotFound rather than being silently dropped.

  • Comma-separated and repeated array flags in the CLI. Both --extraFiles a.cfg,b.cfg and --extraFiles a.cfg --extraFiles b.cfg now work; JSON still parses. Non-array flags keep last-wins semantics.

Fixes

  • Record members no longer reported as missing (#16). Access transformers and access wideners now validate against the remapped JAR's bytecode rather than decompiled .java. Decompiled source omits compiler-generated record members (canonical constructors, component accessors), which made the validators flag them as absent. Bytecode carries every member with its true access flags and erased descriptors.

  • Record canonical-constructor widening is informational, not an error. Widening the constructor is only required if you instantiate the record; reading its components is fine without it. The note is suppressed entirely when a sibling AT passed via extraFiles widens the constructor.

  • Access widener class names stay in slash notation. The parser normalized to dots, so suggestions came out as a.b.C — which Fabric's reader rejects outright ("Class-names must be specified as a/b/C, not a.b.C"), meaning a pasted suggestion would break the build.

  • AT/AW validation works on patched Forge/NeoForge version keys. The patched flow does no remapping, so a compiled input JAR is now registered as that key's remapped JAR, letting every bytecode consumer resolve a patched key exactly like a vanilla one. Patched sources JARs (NFRT / ForgeGradle -sources.jar) contain no bytecode and can't be validated; the tool now says so instead of telling you to decompile again.

  • Hardened the bytecode index cache against concurrent access.

Improvements

  • Compact, verdict-first output for validate_access_transformer.
  • The inheritance check runs before the descriptor-mismatch branch, so a class declaring tick(I)V when the AT asks for tick()V is reported as an inheritance problem rather than a bad descriptor.

Internal

  • CI builds the committed bytecode-dumper JAR and re-runs tests when it changes, so the bytecode-gated suites actually execute instead of skipping.
  • Lint enforced in CI; LF line endings enforced via .gitattributes.

Install / Upgrade

npm install -g @mcdxai/minecraft-dev-mcp@1.3.0

Full Changelog: v1.2.4...v1.3.0