promotional bannermobile promotional banner

Pack Master

Pack Master is a powerful developer tool that extracts and organizes every piece of modpack data into structured JSON, then lets you search, analyze, compare and audit it with precision.

File Details

Pack Master 1.0.1 (Forge 1.20.1)

  • R
  • Apr 17, 2026
  • 368.08 KB
  • 28
  • 1.20.1
  • Forge

File Name

packmaster-1.0.1.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:pack-master-1516334:7938429")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

v1.0.1 - Hardening Release

Security

  • HTTP API fails closed when token_required=true but token generation fails (previously authenticated requests were silently accepted)
  • Token comparison now uses MessageDigest.isEqual for constant-time matching
  • limit query parameter on /api/v1/search clamped to [1, 500] (was unbounded)
  • PathSanitizer.assertWithinRoot added; all dump output paths (including --output) validated to stay inside the server directory
  • Path segments equal to . or .. replaced rather than permitted through PathSanitizer.sanitize

Correctness

  • DatasetDumper.isMainThreadOnly() SPI added. RecipeDumper, LootTableDumper, AdvancementDumper, VillagerTradeDumper, TagDumper, BiomeDumper, WorldgenDumper, DataDrivenRegistryDumper, and CreativeTabDumper opt in. DumpRunner now partitions and hops these onto the server main thread via server.submit(), preventing concurrent access to non-thread-safe registries and managers
  • GameDataIndex invalidated on OnDatapackSyncEvent, TagsUpdatedEvent, and ServerStartedEvent (was only invalidated on server stop). Analysis and search results are now accurate after /reload
  • ItemCategorizer memoizes per-Item and clears on reload — eliminates ~50k redundant ItemStack allocations per dump
  • AtomicFileWriter now FileChannel.force(false) before atomic move. Crash no longer yields zero-length files
  • AuditEngine no longer hard-codes instanceof LegacyContentAuditor for post-processing; any auditor can override postProcess(findings, ctx)
  • Auditor.isApplicable(ctx) gate: pack-specific auditors (skill gates, treasure bags, armor sets, item tags, tooltip sync) now report "skipped" on non-applicable packs instead of silently reporting zero findings
  • ModConfigEvent.Loading/Reloading listener on the mod bus invalidates cached state when the TOML changes

Features

  • New mod_versions auditor: flags mods with missing or placeholder version metadata
  • /pm audit run --dry-run skips writing the report (useful for rapid iteration)
  • chat_types dataset (1.20+ data-driven registry)
  • Dump "Output: ..." chat message is now clickable (OPEN_FILE) with hover text; shift-click inserts

Developer-visible

  • PackIdGenerator.getPackMasterVersion() caches the live mod-container version; eliminates hard-coded "1.0.0" strings in the manifest and HTTP status endpoint
  • LagSessionManager.shutdown() called before re-init on integrated-server re-entry to avoid orphaned state
  • HTTP server executor shut down in PackMasterHttpServer.stop()
  • /pm runs list caps output at the 30 most recent with a footer for older runs
  • SearchEngine deduplicates results by (datasetType, id)
  • CSV export quotes/escapes delimiter in column names; Markdown reports escape | in mod-id cells
  • Logger name aligned with MOD_ID ("packmaster") instead of MOD_NAME ("Pack Master")
  • Removed dead config allow_client_commands

v1.0.0 - Initial Release

Data Dumping

  • 26 dataset dumpers covering items, blocks, entities, fluids, tags, recipes, loot tables, enchantments, mob effects, attributes, sounds, biomes, dimensions, advancements, villager trades, spawn eggs, worldgen features, game rules, brewing recipes, creative tabs, data packs, painting variants, damage types, trim patterns, and trim materials
  • Items include display names, stack sizes, durability, rarity, attribute modifiers, tier info, and armor stats with 16-category classification
  • Blocks include hardness, blast resistance, light emission, and all block state properties with 18-category classification
  • Entities include default attributes, loot tables, tracking range, dimensions, and tags
  • Recipes include result items with count/NBT, shaped crafting patterns, cooking parameters, and smithing transform/trim details
  • Loot tables include full pool/entry/condition/function data via Mojang's Gson serializer
  • Advancements include criterion trigger types with serialized conditions, rewards (XP, loot tables, recipe unlocks, functions), display icons, and full requirement structure
  • Biomes include visual effects (fog/water/sky colors, particles, mood sounds, music), mob spawn tables per category, and raw codec data
  • Mob effects include attribute modifier details (attribute, amount, operation)
  • Sounds include inferred categories from path analysis, subtitle keys, and categorized output
  • Data-driven registries (damage types, trim patterns, trim materials) use codec serialization

Organization

  • Output organized by mod namespace (by_mod/), category (categorized/), type (by_type/), and output item (by_output/)
  • Deterministic JSON output with sorted keys for reliable diffing
  • SHA-256 checksums per file for quick change detection
  • Per-run manifest with pack metadata, mod list, and timing
  • Per-dataset indexes with entry counts, category summaries, and namespace summaries
  • Stable pack IDs from modlist hash for grouping runs

Comparison & Diff

  • Compare any two dump runs with field-level diffs
  • /pm diff latest for quick comparison of the last two runs
  • Per-dataset change summaries (added/removed/changed counts)
  • Structured diff reports written to JSON
  • /pm runs list to browse available runs with tab-completion

Analysis & Queries

  • Reverse recipe lookup: find recipes that produce or use a specific item
  • Orphan detection: items with no recipe, entities without spawn eggs
  • Mod statistics: per-mod content contribution (items, blocks, entities, recipes)
  • Duplicate recipe detection: items with multiple recipes producing them
  • Enchantment conflict mapping: all incompatible enchantment pairs
  • Tag membership lookup: all tags an item/block/entity belongs to
  • In-memory index built lazily on first query for fast results

Search

  • Cross-dataset search across all items, blocks, and entities
  • Supports literal, glob (* wildcards), and regex patterns
  • Searches both resource IDs and display names
  • Results shown in chat with overflow written to file

Export

  • CSV/TSV export for spreadsheet analysis
  • Markdown summary reports with mod stats and quick metrics
  • KubeJS and CraftTweaker starter script generation for orphan items and duplicate recipes

HTTP API

  • Optional REST API using JDK built-in HttpServer (no external dependencies)
  • Endpoints: status, datasets, runs, search
  • Localhost-only by default with bearer token authentication
  • Token auto-generated and logged on server start

Infrastructure

  • Parallel dump execution with configurable thread pool
  • Atomic file writes (write to .tmp then rename) for crash safety
  • Auto-dump on world load option
  • Dry-run mode for counting entries without writing files
  • Per-entry error tracking with errors.json per dataset
  • Lag diagnostics subsystem (tick profiling, chunk scanning, spike monitoring)

Commands

  • /pm dump all and /pm dump <dataset> with --dry-run, --filter, --id, --output options
  • /pm diff latest and /pm diff <runA> <runB> with --dataset and --namespace filters
  • /pm analyze subcommands for recipes, orphans, mod stats, conflicts, tags
  • /pm search with glob and regex support
  • /pm export for CSV, TSV, summary, and script generation
  • /pm runs list, /pm list datasets, /pm describe <dataset>
  • /pm lag subsystem for server performance diagnostics
  • Tab-completion for dataset IDs, run IDs, item IDs, and mod IDs