Page 13 · Distribution

Global Datapacks & Distribution

Install one DAI game globally, layer reusable addon datapacks around it, keep vanilla world-local datapack semantics, and ship companion resource packs without manual save assembly.

The Global Library

Minecraft Instance
├─ mods/
├─ resourcepacks/
├─ datapacks/        ← DAI 3.0 game/addon + update library
└─ saves/

DAI creates and scans <gameDir>/datapacks/. It distinguishes the single game-owning main experience from reusable addon modules and leaves non-DAI packs unmanaged.

One Main Experience + Unlimited Addons

/datapacks/MyGame.zip             MAIN
/datapacks/DamageIndicators.zip   ADDON
/datapacks/ComicEffects.zip       ADDON
        ↓
Launch MyGame
        ↓
Resolve owned save
        ↓
Copy/update main + enabled addons
        ↓
Disable conflicting DAI main packs
        ↓
One combined Minecraft resource reload

DAI does not impose an addon count limit. Addons can provide reusable systems without pretending to be a second game.

Declaring a Pack Role

Main experience
{
  "pack": { ... },
  "dai": { "role": "main" }
}
Addon
{
  "pack": { ... },
  "dai": { "role": "addon" }
}
No forced migration. Role metadata is opt-in. An undeclared legacy DAI pack containing dai_experiences or dai_title_screens is treated as main; other undeclared DAI content is treated as addon. Packs without DAI content are unmanaged.

3.0 Stable Identity + Automatic World Replacement

The global <gameDir>/datapacks/ directory is now an update source for DAI-managed packs already present in a save. DAI groups global and world copies by stable identity, chooses the current global winner, copies it into the world and removes stale versioned filenames.

Recommended datapack metadata
{
  "pack": {
    "description": "AutoCraft MineShaft",
    "min_format": [107, 1],
    "max_format": 107
  },
  "dai": {
    "role": "main",
    "pack_id": "autocraft_mineshaft",
    "version": "0.5.3"
  }
}
dai.pack_idStable logical identity. Keep it unchanged when the ZIP filename/version changes.
dai.versionPreferred version ordering for multiple global copies of the same identity.

DAI also accepts legacy identity aliases such as identity, id, companion_id and project_id; version aliases include pack_version and packVersion. For new datapacks, use pack_id + version.

Backwards compatible fallback: if explicit identity metadata is absent, DAI derives identity from the pack's authored non-vanilla data/ namespaces. If explicit version metadata is absent, a filename segment such as _v0.5.3_ is recognized; modification time and filename are only fallback tie-breakers.
Global: AutoCraft_v0.5.3.zip
World:  AutoCraft_v0.5.2.zip
        ↓ stable identity match
copy current global pack first
        ↓
remove / deselect stale world copy
        ↓
World:  AutoCraft_v0.5.3.zip

Unrelated world datapacks are never managed by this replacement pass. If Windows temporarily locks an old ZIP, DAI keeps the new copy available and deselects the stale one rather than failing the whole startup.

3.0 DAI Data Inside Other Mods

DAI content can also be distributed inside an installed mod JAR. The JAR uses ordinary Minecraft data paths, and DAI scans it early enough for native registry shells, MAIN-experience discovery, title screens and worldgen preparation.

mods/MyDAIGame.jar
└─ data/my_dai_game/
   ├─ dai_experiences/
   ├─ dai_title_screens/
   ├─ dai_items/
   ├─ dai_entities/
   └─ dai_worldgen/
Use this when the mod itself is the distribution container. A mod-owned MAIN is read directly from the JAR; it is not treated like a global ZIP that must be copied into the world's datapacks directory.

Companion Resource Packs

Keep presentation separate. A complete DAI experience commonly ships as two ordinary Minecraft artifacts:

Experience_Datapack.zipLogic, functions, objectives, worldgen, state and authoritative gameplay.
Experience_ResourcePack.zipTextures, models, sounds, sprites, UI art and presentation assets.

DAI 3.0 can automatically select companion resource packs from the normal <gameDir>/resourcepacks/ directory. A pack is recognized when its asset namespace matches a namespace in DAI's global datapack library, or when the resource pack opts in explicitly.

Recommended explicit companion metadata
{
  "pack": {
    "pack_format": 48,
    "description": "My Experience Resource Pack"
  },
  "dai": {
    "auto_enable": true,
    "companion_id": "my_experience"
  }
}
Use a stable companion ID for versioned filenames. If MyExperience_Resource_v1.zip becomes MyExperience_Resource_v2.zip, DAI can replace the old owned file/... selection with the newest matching companion instead of asking the player to open the Resource Packs screen again.

If several files claim the same companion identity, DAI selects the newest modified candidate. It also reconciles Minecraft's saved and live resource-pack selections and leaves unrelated user-selected packs untouched.

Official / Managed Resource Packs

Resource-pack components installed through DAI's Official Packs system use stable managed repository IDs and are registered as required packs. DAI persists those same identities into Minecraft's enabled resource-pack preferences so install/update cycles remain enabled without visiting the vanilla pack screen.

One user-facing promise, two implementations: Official Packs use stable managed IDs; ordinary companion ZIPs use a stable companion identity that DAI maps to the current file/filename.zip.

Official Combo Packs

The website's live /dai/api/packs.json is consumed by DAI's in-game Official Packs browser. A combo entry can present the datapack and resource pack as one install action while keeping them as separate downloadable components.

Do not publish incomplete live entries. DAI needs a public CurseForge file ID or direct download for each component. If a CurseForge project exists but its current file is still under review, stage the metadata outside the live registry.
Website staging
/dai/api/packs.pending.json

Once both public file IDs exist, copy the completed entry into packs.json. This prevents the in-game installer from exposing a button that cannot download anything.

TamaCrafti Example

TamaCrafti demonstrates the complete model: a datapack for persistent virtual-pet rules, care systems, farming, home construction and experience UI lifecycle, plus an HD resource pack for the pet, bedroom and interface presentation.

Creator Workflow

  1. Choose whether the datapack is a main experience, standalone addon, or legacy/auto-detected pack.
  2. Set a stable dai.pack_id and dai.version for version-safe updates.
  3. Build and export a standard Minecraft datapack ZIP, or package the same data/ tree inside a mod JAR.
  4. For standalone ZIP distribution, place it in DAI’s global /datapacks library.
  5. For a MAIN experience, test clean save creation, addon layering and resume.
  6. For a standalone ADDON, test it in a normal world and beside compatible MAIN experiences when practical.
  7. For a companion resource pack, set dai.auto_enable and a stable dai.companion_id in the Creator Pack Setup screen.
  8. Publish the datapack and any companion resource pack.
  9. Only add official installer metadata after public downloadable files exist.

Branding Assets Are Companion Assets

Application/window branding, FML early-loading assets and Minecraft/world-loading textures belong in the MAIN companion resource pack. Keep dai.companion_id stable across filenames so an updated version remains the same logical companion.

First early-theme launch: FancyModLoader renders before normal DAI initialization. When a new MAIN is first discovered, DAI writes its owned FML theme during that run; the branded FML screen appears from the start on the next JVM launch.

Standalone Addons in 3.0

ADDON packs are no longer limited to a MAIN experience stack. A DAI addon in the global datapack library can be layered into an ordinary world while preserving that world's existing datapack selection. MAIN experiences still use the existing one-main-plus-addons launch model when save ownership is required.

{
  "pack": { ... },
  "dai": { "role": "addon" }
}