Skip to content

Repository files navigation

addon-parser

Headless Java scanner for Meteor Client addons

JavaVersion

Extract module metadata, settings, and configuration from addon JARs without launching Minecraft.

Quick Start

StepCommand
PrerequisitesJava 25 JDK (Gradle wrapper is included)
Clonegit clone <repo-url> && cd addon-parser
Generate stubs./gradlew generateStubs -PparserProfile=26x
Run tests./gradlew test -PautoGenerateStubs -PparserProfile=26x --no-daemon
Scan addons./gradlew run -PparserProfile=26x --args="--input fixtures/addons/jars/26x --output output/26x --profile 26x"

Fixture JARs for both profiles are checked in under fixtures/addons/jars/, so the test and scan commands work out of the box.

CLI

ArgumentDescription
--inputPath to an addon JAR or a directory of JARs
--outputOutput directory for per-JAR JSON files (default: output)
--summaryPath for the aggregate summary JSON (default: <output>/summary.json)
--modeLEGACY (in-process) or ISOLATED (forked worker JVM)
--profile26x or legacy; falls back to addonparser.profile or -PparserProfile
./gradlew run -PparserProfile=26x --args="--input fixtures/addons/jars/26x --output output/26x --summary output/26x/summary.json --profile 26x"
./gradlew run -PparserProfile=legacy --args="--input fixtures/addons/jars/legacy --output output/legacy --summary output/legacy/summary.json --profile legacy --mode ISOLATED"

Features

FeatureDescription
Headless scanningNo Minecraft, no GUI, no game tick loop — just the JVM
Fabric mod parsingReads fabric.mod.json and locates MeteorAddon entrypoints
Runtime emulationStubs for Meteor Client systems: Modules, Settings, HUD, Commands
Two scan modesIn-process for speed, or a forked worker JVM for isolation
Profile supportSeparate compatibility shim sets for 26x Mojmap and legacy Yarn addons
Mapping normalizationResolves obfuscated and intermediary names to readable ones where possible
Sandboxed writesAddon runtime writes are confined to tmp/addon-parser-runtime and cleaned up by default

Profiles

ProfileFixturesCountNotes
26xfixtures/addons/jars/26x9 jarsMojmap-oriented Meteor 0.6.x / Minecraft 26.x; default profile
legacyfixtures/addons/jars/legacy24 jars1.21.x Yarn / intermediary addons

Output

FileContents
{jarName}.jsonjarName / jarPath, success, errors / warnings, addons[], modules[]
summary.jsonAggregate stats across every scanned JAR

Each ModuleDump includes:

FieldDescription
nameDisplay name
categoryMeteor category (Combat, Render, Misc, ...)
descriptionModule description
aliasesAlternative command names
classNameFully qualified class name
settingsSettingDump[] with name, type, and default value
settingGroupsNested setting group structure

Configuration

PropertyDescriptionDefault
addonparser.profileRuntime mapping profile (26x or legacy)26x
addonparser.fixtureJarsDirOverride the test fixture directoryfixtures/addons/jars/<profile>
addonparser.runtimeTmpDirTemp directory for sandboxed runtime artifactstmp/addon-parser-runtime
addonparser.keepTmpKeep temp artifacts after scan for debuggingfalse
addonparser.meteorFolderOverride the emulated Meteor foldermanaged per scan
addonparser.yarnAutoDownloadAllow the legacy resolver to download missing Yarn mappingstrue
addonparser.yarnMappingsVersionsSpecific Yarn mapping versions to useauto-detected
addonparser.mappingsDirCached mappings directorymappings
addonparser.yarnMappingsJarExplicit list of Yarn mapping JARsunset

Development

Built with Java 25 and Gradle (Groovy DSL); bytecode analysis via ASM, JSON via Jackson/Gson.

TaskCommand
Build./gradlew build -PautoGenerateStubs -PparserProfile=<profile> --no-daemon
Test./gradlew test -PautoGenerateStubs -PparserProfile=<profile> --no-daemon
Generate stubs./gradlew generateStubs -PparserProfile=<profile>
Format./gradlew spotlessApply --no-daemon

About

Headless parser for Meteor Client addons

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages