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
v1.0.1 - Hardening Release
Security
- HTTP API fails closed when
token_required=truebut token generation fails (previously authenticated requests were silently accepted) - Token comparison now uses
MessageDigest.isEqualfor constant-time matching limitquery parameter on/api/v1/searchclamped to[1, 500](was unbounded)PathSanitizer.assertWithinRootadded; all dump output paths (including--output) validated to stay inside the server directory- Path segments equal to
.or..replaced rather than permitted throughPathSanitizer.sanitize
Correctness
DatasetDumper.isMainThreadOnly()SPI added.RecipeDumper,LootTableDumper,AdvancementDumper,VillagerTradeDumper,TagDumper,BiomeDumper,WorldgenDumper,DataDrivenRegistryDumper, andCreativeTabDumperopt in.DumpRunnernow partitions and hops these onto the server main thread viaserver.submit(), preventing concurrent access to non-thread-safe registries and managersGameDataIndexinvalidated onOnDatapackSyncEvent,TagsUpdatedEvent, andServerStartedEvent(was only invalidated on server stop). Analysis and search results are now accurate after/reloadItemCategorizermemoizes per-Itemand clears on reload — eliminates ~50k redundantItemStackallocations per dumpAtomicFileWriternowFileChannel.force(false)before atomic move. Crash no longer yields zero-length filesAuditEngineno longer hard-codesinstanceof LegacyContentAuditorfor post-processing; any auditor can overridepostProcess(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 findingsModConfigEvent.Loading/Reloadinglistener on the mod bus invalidates cached state when the TOML changes
Features
- New
mod_versionsauditor: flags mods with missing or placeholder version metadata /pm audit run --dry-runskips writing the report (useful for rapid iteration)chat_typesdataset (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 endpointLagSessionManager.shutdown()called before re-init on integrated-server re-entry to avoid orphaned state- HTTP server executor shut down in
PackMasterHttpServer.stop() /pm runs listcaps output at the 30 most recent with a footer for older runsSearchEnginededuplicates 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 ofMOD_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 latestfor quick comparison of the last two runs- Per-dataset change summaries (added/removed/changed counts)
- Structured diff reports written to JSON
/pm runs listto 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 alland/pm dump <dataset>with--dry-run,--filter,--id,--outputoptions/pm diff latestand/pm diff <runA> <runB>with--datasetand--namespacefilters/pm analyzesubcommands for recipes, orphans, mod stats, conflicts, tags/pm searchwith glob and regex support/pm exportfor CSV, TSV, summary, and script generation/pm runs list,/pm list datasets,/pm describe <dataset>/pm lagsubsystem for server performance diagnostics- Tab-completion for dataset IDs, run IDs, item IDs, and mod IDs

