Configuration - ItzSkyReed/BACAP-Addon-Helper GitHub Wiki

This page provides a reference for the project configuration file (config.yml). The configuration engine manages validation routines, localization workflows, checklists, and release packaging across multiple datapacks.


1. Global Settings

Top-level paths define root directories used during execution.

registry_path: "./registries"
release_path: "./releases"
Key Type Description
registry_base_path string Path to extracted Minecraft registry JSON files (generated via registry-dumper). Used to validate entity types, items, blocks etc.
release_path string Output directory where built release archives (.zip) are saved.

1.1. Documentation Generator Settings (document_generator)

Configures paths for automated advancement documentation export and human-readable requirement tracking.

document_generator:
  requirements_directory: "./requirements"
  output_directory: "./docs"
Key Type Description
requirements_directory string Path to the directory where actual advancement requirement YAML files and stubs are stored.
output_directory string Output directory where final generated documentation JSON files are written.

2. Templates

Templates allow defining reusable presets for validation rules, language generation, and checklists. Datapacks inherit these configurations using template: <name>, with support for deep property merging (explicit local values override template defaults).

2.1. Validation (templates.validation.<name>)

Controls advancement integrity checks, code style conventions, and dependency resolution.

templates:
  validation:
    default:
      enabled: true
      title_case_formatting:
        enabled: true
        severity: info
        use_default_minor_words: true
        minor_words: [ "a", "an", "the", "and", "but", "or", "for", "of", "in", "to", "with", "vs" ]
        allowed_titles:
          - "Say NO to Campfires"
      whitespace_trimming:
        enabled: true
        severity: error
      plain_text_usage:
        enabled: true
        severity: error
        include_default_strings: true
        allowed_strings:
          - "/trigger bacaped_mob_universe"
      reward_paths:
        enabled: true
        severity: error
      parent_references:
        enabled: true
        severity: error

Properties

  • enabled (boolean, defaults to true): Master toggle for all validators inheriting from this template.
  • title_case_formatting: Ensures advancement titles follow standard English Title Case conventions.
    • enabled (boolean, defaults to true): Enables title case linting.
    • severity (info | warning | error, defaults to info): Log severity level when violations are caught.
    • use_default_minor_words (boolean, defaults to true): Loads built-in lowercase conjunctions/prepositions.

      Default words are: "a", "an", "the", "and", "but", "or", "nor", "for", "yet", "so", "vs", "as", "at", "by", "in", "of", "off", "on", "per", "to", "via", "with", "from", "into" and roman numerals from I to XII

    • minor_words (Optional list<string>): Custom words that remain lowercase unless placed at the beginning or end of a title.
    • allowed_titles (Optional list<string>): Exact titles exempted from Title Case rules (e.g., acronyms, intentional stylization).
  • whitespace_trimming:
    • enabled (boolean, defaults to true): Flags accidental leading or trailing whitespace in titles and descriptions.
    • severity (info | warning | error, defaults to info): Logging level (recommended: error).
  • plain_text_usage:
    • enabled (boolean, defaults to true): Disallows raw strings in text components to enforce translation keys (translate). Ignores lines that do not contain letters.
    • severity (info | warning | error, defaults to warning): Logging level.
    • include_default_strings (boolean, defaults to true): Automatically allows built-in intended plain text strings.

      Default strings are: /trigger bac_timers, /trigger bac_progress, /trigger bac_dragon, /trigger bac_statistics

    • allowed_strings (Optional list<string>): Exact strings exempted from Plain Text Usage rules (e.g., /trigger bacaped_mob_universe).
  • reward_paths:
    • enabled (boolean, defaults to true): Verifies that referenced .mcfunction reward files exist in the file tree and follow standard naming schemes.
    • severity (info | warning | error, defaults to error): Logging level.
  • parent_references:
    • enabled (boolean, defaults to true): Resolves parent advancement IDs across all loaded packs and checks for circular dependencies and parent existance.
    • severity (info | warning | error, defaults to error): Logging level.

If any error-level issues are found, the release is blocked until they are resolved.


2.2. Language Pack (templates.language_pack.<name>)

Configures automatic extraction and synchronization of translation files.

templates:
  language_pack:
    default:
      use_default_ignored_keys: true
      exclude_vanilla_keys: true
      remove_unused_keys: true
      ignored_keys:
        - "DonationAlerts"
        - "Patreon"
        - "Enhanced Discoveries"
        - "Enhanced Discoveries Hardcore"
      base_translation_header: |-
        Enhanced Discoveries Language File
        Language: Your Language
        Author: Names
Property Type Default Description
use_default_ignored_keys boolean true Excludes words that are already translated in BACAP Language Pack.
exclude_vanilla_keys boolean true Ignores native Minecraft translation keys (entity.minecraft.*, item.minecraft.*).
remove_unused_keys boolean true Automatically prunes orphaned keys from existing translation files during synchronization.
ignored_keys list<string> [] Explicit keys or literals to exclude from discovery.
base_translation_header string "" Multiline comment prepended to base_translation.json. Use |- in YAML to preserve line breaks without adding a trailing empty newline.

2.3. Checklist (templates.checklist.<name>)

Defines layout, formatting, and detection defaults for in-game interactive entity tracker (for example /trigger bacaped_mob_universe).

templates:
  checklist:
    default:
      distance: 64
      style:
        complete_color: "#00a523"
        incomplete_color: "#c2c2c2"
        separator_color: "#c2c2c2"
        divider_color: "dark_gray"
  • distance (integer): Default entity search radius (in blocks) centered on the executing player.
  • style.complete_color (string, defaults to #00a523): Hex code or named color applied to verified/found targets.
  • style.incomplete_color (string, defaults to #c2c2c2): Color applied to unverified/missing targets.
  • style.separator_color (string, defaults to #c2c2c2): Color applied to punctuation and connectors (commas, spaces).
  • style.divider_color (string, defaults to dark_gray): Color applied to top and bottom horizontal dividers.
image

3. Datapacks (datapacks.<id>)

Each root key under datapacks defines an isolated pack configuration.

3.1. Datapack Types

The behavior of each pack is governed by its type:

  • reference: Read-only base pack (e.g., base BACAP). Used exclusively for resolving parent advancements and cross-pack namespace dependencies. Never modified on disk.
  • addon: Primary functional datapack containing advancements, milestones, functions, etc.
  • compatibility_addon: Dependent sub-pack (e.g., Hardcore variant) linked to a parent addon pack to conditionally override rewards.

3.2. Addon Configuration (bacaped as an example)

datapacks:
  bacaped:
    path: "./datapacks/bacaped_datapack"
    main_namespace: "bacaped"
    reward_namespace: "bacaped_rewards"
    fanpacks_namespace: "bacaped_fanpacks"
    type: "addon"
    release_name: "Enhanced Discoveries"
    checklist_triggers_folder: "triggers_callback"

    advancement_legend_mc_path: "bacaped:bacap/enhanced_legend"
    milestone_mc_paths:
      adventure: "bacaped:bacap/enhanced_adventure_milestone"
      animal: "bacaped:bacap/enhanced_animal_milestone"

    validation:
      template: default

    language_pack:
      template: default
      path: "./resourcepacks/Enhanced_Discoveries_Language_Pack"
    
    document_generator:
      enable: true
      section_name: "default"

    checklists: [...]

Core Properties

  • path (string): Local file path to the datapack root folder.
  • main_namespace (string): Primary data namespace for advancements and core functions.
  • reward_namespace (string): Namespace where reward functions reside.
  • fanpacks_namespace (string): Namespace reserved for third-party addon hooks.
  • type (string): Set to addon.
  • release_name (string, defaults to datapack , in this case it is bacaped): Base filename used when packing release archives.
  • advancement_legend_mc_path (Optional string): The namespaced ID of the pack's "Legend" advancement. Used to automatically update its criteria with all non-hidden advancements.
  • **milestone_mc_paths (Optional map<string, string>): Maps tab names (e.g., adventure, monsters) to their milestone advancement IDs. Is used to automatically collect all non-hidden advancements from each tab and adds them as criteria to the corresponding milestone.
  • checklist_triggers_folder: (Optional string): Folder in which checklists (see 3.3) will be created. Can't be empty if checklists present.
  • Optional document_generator:
    • enable (boolean, defaults to false): Enables documentation generation for this datapack.
    • section_name (string, defaults to default): The key used when reading/writing requirement descriptions for this pack. Use "default" for base addons, and custom identifiers (e.g., "Hardcore") for compatibility sub-packs to document alternative criteria.
  • Optional language_pack:
    • template (optional string): Optional template from templates.
    • path (string): The path to the language pack directory.

3.3. Checklists (datapacks.<id>.checklists[])

Checklists generate /trigger scoreboard callbacks, command storage registries, and *_check.mcfunction files that inspect targets around the player and render interactive chat readouts via tellraw.

checklists:
  - id: "mob_universe"
    template: default
    storage_name: "bacaped_mob_universe_storage"
    trigger_scoreboard: "bacaped_mob_universe"
    distance: 128
    check_subfolder: "mob_universe"
    trigger_filename: "mob_universe_trigger.mcfunction"
    header_translate_key: "Mob list for the current dimension of the Mob Universe Advancement"
    categories:
      - name: "overworld"
        advancement: "bacaped:challenges/mob_universe overworld"
        dimension_requirement: "minecraft:overworld"
        prefix_text: "Overworld: "
        prefix_color: "green"
        entities:
          - "@all_overworld"

Checklist Fields

Field Type Required Description
id string Yes Unique checklist identifier.
template string No Inherits distance and styling from templates.checklist.
storage_name string Yes Namespaced command storage target used for runtime NBT manipulation.
trigger_scoreboard string Yes Scoreboard objective name listened to and reset on execution.
distance integer No Overrides the template search radius.
extra_selector string No Additional selector arguments appended to @e[...] queries (e.g., predicate=bacaped:is_baby). Omit leading commas.
check_subfolder string No Output subfolder under data/<namespace>/function/. If omitted, files are written directly into function/.
trigger_filename string Yes Target entrypoint function generated under function/triggers_callback/.
header_translate_key string Yes Translation key rendered as the chat header.
categories list<object> Yes Category and dimension sub-group definitions.

Example:

image

Category Fields

  • name (string): Unique category identifier.
  • advancement (string): Associated advancement ID with optional criteria that will be granted for completing this category.
  • dimension_requirement (string): Optional dimension identifier (minecraft:overworld, minecraft:the_nether, minecraft:the_end). If specified, this section only executes if the player is in that dimension.
  • prefix_text (string): Label prefix displayed before entity list output.
  • prefix_color (string): Color of the prefix label.
  • entities (list<string>): List of entity IDs. Supports presets prefixed with @.

Built-in Entity Presets

The following presets are available out of the box and can be referenced in your configuration. Keys are case-insensitive.

Preset Aliases Description Total Mobs
Overworld overworld, all_overworld Overworld entity pool 72
Nether nether, all_nether Nether entity pool 12
End end, all_end End entity pool 4
Baby Zoo baby_zoo, all_baby_mobs Breedable animal pool 29
Click to view mob lists for each preset

Overworld (overworld, all_overworld)

allay, armadillo, axolotl, bat, bee, bogged, breeze, camel, camel_husk, cat, cave_spider, chicken, cod, copper_golem, cow, creaking, creeper, dolphin, donkey, drowned, elder_guardian, evoker, fox, frog, glow_squid, goat, guardian, horse, husk, iron_golem, llama, mooshroom, mule, nautilus, ocelot, panda, parched, parrot, phantom, pig, pillager, polar_bear, pufferfish, rabbit, ravager, salmon, sheep, silverfish, skeleton, skeleton_horse, slime, sniffer, snow_golem, spider, squid, stray, sulfur_cube, tadpole, trader_llama, tropical_fish, turtle, vex, villager, vindicator, wandering_trader, warden, witch, wolf, zombie, zombie_horse, zombie_nautilus, zombie_villager

Nether (nether, all_nether)

blaze, ghast, happy_ghast, hoglin, magma_cube, piglin, piglin_brute, strider, wither, wither_skeleton, zoglin, zombified_piglin

End (end, all_end)

ender_dragon, enderman, endermite, shulker

Baby Zoo (baby_zoo, all_baby_mobs)

armadillo, axolotl, bee, camel, cat, chicken, cow, dolphin, donkey, fox, glow_squid, goat, happy_ghast, hoglin, horse, llama, mooshroom, mule, nautilus, ocelot, panda, pig, polar_bear, rabbit, sheep, sniffer, squid, strider, turtle, wolf


3.4. Compatibility Addon Configuration (bacaped_hardcore)

Similar to addon configuration but contains compatibility_addon_settings and parent_datapack_id. By default compatibility addons

datapacks:
  bacaped_hardcore:
    path: "./datapacks/bacaped_hardcore_datapack"
    main_namespace: "bacaped"
    reward_namespace: "bacaped_rewards"
    type: "compatibility_addon"
    parent_datapack_id: "bacaped"
    release_name: "Enhanced Discoveries Hardcore"

    compatibility_addon_settings:
      override_msg: true
      override_exp_rewards: false
      override_item_rewards: false
      override_trophy_rewards: false

    validation:
      template: default

    language_pack:
      template: default
      path: "./resourcepacks/Enhanced_Discoveries_Language_Pack"

Settings Reference

Most compatibility addons do not need to override function settings, as reward loot, experience, and items typically remain unchanged. However, because advancement descriptions are modified, notification messages must be updated accordingly.

  • parent_datapack_id (string): Must match an existing pack key under datapacks (bacaped).
  • Optional compatibility_addon_settings:
    • override_msg (boolean, defaults to true): Replaces advancement announcement messages with addon-specific.
    • override_exp_rewards (boolean, defaults to false): Overwrites experience grant commands in reward function.
    • override_item_rewards (boolean, defaults to false): Overwrites item grant commands in reward function.
    • override_trophy_rewards (boolean, defaults to false): Overwrites trophy grant commands in reward function.

3.5. Custom Scoreboards and Points (datapacks.<id>.custom_scores & datapacks.<id>.custom_points)

Configures custom scoreboards/points "update score" functions. The generator produces static .mcfunction files (execute as @a[advancements={...}] run scoreboard ...) alongside their registration tags in #bacap_fanpacks:tags/function.

datapacks:
  bacaped:
    custom_scores:
      - id: "ed_all_advancements"
        scoreboard: "bacaped_all_advancements"
        file_path: "update_score_all.mcfunction"
        amount: 1
        filter:
          exclude_root: false
          hidden: all

      - id: "ed_advancements_only_hiddens"
        scoreboard: "bacaped_advancements_only_hiddens"
        file_path: "update_score_only_hiddens.mcfunction"
        amount: 1
        filter:
          exclude_root: true
          hidden: only

    custom_points:
      - id: "ed_points"
        scoreboard: "bac_advancements_points"
        source_scoreboard: "bac_points"
        operation: "+="
        file_path: "update_points.mcfunction"
        filter:
          exclude_root: true
          hidden: all

3.5.1. Score Counters (custom_scores[])

Generates commands that increment a scoreboard counter by a static value for each completed advancement:

execute as @a[advancements={<mc_path>=true}] run scoreboard players add @s <scoreboard> <amount>
Field Type Required Default Description
id string Yes — Unique counter identifier within the datapack.
scoreboard string Yes — Target Minecraft scoreboard objective name updated on the player.
file_path string Yes — Relative destination file path inside data/<reward_namespace>/function/. Must end with .mcfunction.
amount integer No 1 Value added to the scoreboard per matching completed advancement.
filter object No {} Criteria defining which advancements are included (see Filter Options).

3.5.2. Point Counters (custom_points[])

Generates scoreboard operation commands assigning points dynamically according to each advancement's tier:

execute as @a[advancements={<mc_path>=true}] run scoreboard players operation @s <scoreboard> <operation> <tier> <source_scoreboard>
Field Type Required Default Description
id string Yes — Unique point definition identifier within the datapack.
scoreboard string Yes — Target player scoreboard objective receiving the calculated points.
source_scoreboard string No "bac_points" Scoreboard storing baseline point values assigned to tier dummy players (task, goal, challenge, etc.).
operation string No "+=" Minecraft scoreboard math operator (+=, =, -=, etc.).
file_path string Yes — Relative destination file path inside data/<reward_namespace>/function/. Must end with .mcfunction.
filter object No {} Criteria defining which advancements are included (see Filter Options).

3.5.3. Filter Options (filter)

Configures which advancements are gathered during generation.

filter:
  datapacks: ["bacaped"]
  exclude_root: true
  hidden: exclude
  tiers:
    - challenge
    - super_challenge
Property Type Default Description
datapacks list<string> [<current_datapack_id>] Datapack IDs whose advancements are evaluated. If omitted, only advancements belonging to the parent datapack are included. Specify ["*"] or ["@all"] to collect advancements across all loaded packs.
exclude_root boolean false When true, tab root advancements (tier: root) are skipped. Set to false to count every advancement.
hidden string exclude Filter rule for hidden advancements:
• exclude: Skips hidden advancements.
• only: Counts exclusively hidden advancements.
• all: Includes both standard and hidden advancements without distinction.
tiers list<string> [] Optional whitelist of allowed tiers (task, goal, challenge, super_challenge, hidden, milestone, advancement_legend). If omitted or empty, all non-excluded tiers are included.

4. Documentation Generation

When document_generator.enable is set to true, the generator outputs structured JSON documentation for each advancement and maintains manual requirement stub files in YAML format.


4.1. Requirements Format (requirements/*.yaml)

Must contain actual descriptions of the required advancements. inside requirements_directory.

Missing advancement keys are automatically appended as stubs:

# Auto-generated stubs (Added: 2026-09-30 22:56)

bacaped:adventure/fake_netherite_armor:
  default:

bacaped:adventure/advancement_info:
  default: |-
    First line ofrequirement.
    Second line of the requirement.
  Hardcore: |-
    Complete without taking any fall damage.

Multiline strings in YAML: Use the |- block scalar indicator to write multi-line text without trailing empty newlines. Newlines are preserved as \n in the compiled JSON. Each advancement ID (mc_path) maps to a dictionary of sections defined by the datapack's section_name property (e.g. default, Hardcore).

4.2. Output Schema (docs/<datapack_id>.json)

The final output is an array of advancement documentation objects:

[
  {
    "title": "Advancement Info",
    "description": "This mod can be useful for completing advancements",
    "alternative_descriptions":
      {
        "Hardcore": "This mod is useless :D"
      }
    "tier": "hidden",
    "tab": "adventure",
    "mc_path": "bacaped:adventure/advancement_info",
    "parent": "minecraft:adventure/root",
    "rewards": {
      "experience": 50,
      "items": [],
      "trophies": [
        {
          "id": "minecraft:cobblestone_stairs",
          "count": 1,
          "title": "Advancement's Stairs",
          "description": "Shows more information about advancement\nrequirements",
          "title_color": "#B0CCD8",
          "enchantments": {
            "minecraft:unbreaking": 3
          },
          "unbreakable": false
        }
      ]
    },
    "requirements": {
      "default": "First line of detailed manual requirement.\nSecond line of the requirement.",
      "Hardcore": "Complete without taking any fall damage."
    }
  }
]

Field Reference

Advancement Entry (AdvancementDocEntry)

Field Type Nullable Description
title string No Translated or raw advancement title.
frame string No Advancement frame.
icon_id string No Item id of the advancement display.
description string No Translated advancement description.
tier string No Tier (task, goal, challenge, super_challenge, hidden, milestone, advancement_legend, root).
tab string No Identifier of the tab category (e.g. adventure, monsters, challenges).
mc_path string No Full namespaced identifier (namespace:tab/id).
parent ParentAdvancementDocEntry Yes Parent advancement object that contains mc_path or detailed info including title, description, etc. null for roots.
rewards RewardsDocEntry Yes Advancement rewards entry, or null if no rewards exist.
requirements map<string, string> Yes Key-value pairs mapping section_name to actual requirements.
alternative_descriptions map<string, string> Yes Key-value pairs mapping section_name to alternative compatibility addons descriptions.
player_head_data PlayerHeadDocEntry Yes Player head information if id = player_head.

Rewards Entry (RewardsDocEntry)

Field Type Nullable Description
experience integer Yes Experience points granted upon completion.
items list<ItemRewardDocEntry> Yes Items granted by the reward function.
trophies list<TrophyDocEntry> Yes Custom trophy items granted by the reward function.

Item Reward (ItemRewardDocEntry)

Field Type Nullable Description
id string No Minecraft item identifier (e.g. minecraft:diamond).
count integer No Stack count.
enchantments map<string, integer> Yes Map of enchantment IDs to levels.
custom_name string Yes Custom display name component.
player_head_data PlayerHeadDocEntry Yes Player head information if id = player_head.

Trophy Reward (TrophyDocEntry)

Field Type Nullable Description
id string No Minecraft item identifier (e.g. minecraft:diamond).
count integer No Stack count.
title string Yes Custom trophy display title.
description string Yes Trophy lore description (lines separated by \n).
title_color string Yes Hex color (#RRGGBB) or named color used for the trophy title.
enchantments map<string, integer> Yes Map of enchantment IDs to levels applied to the trophy.
unbreakable boolean No Whether the item has the unbreakable component flag set.
player_head_data PlayerHeadDocEntry Yes Player head information if id = player_head.

Player Head Data (PlayerHeadDocEntry)

Field Type Nullable Description
id uuid Yes Player UUID
texture_hash string Yes Texture hash to get player skin from [minecraft.textures](http://textures.minecraft.net/texture/).

Parent advancement data (ParentAdvancementDocEntry)

Field Type Nullable Description
title string Yes Translated or raw advancement title.
frame string Yes Advancement frame.
icon_id string Yes Item id of the advancement display.
description string Yes Translated advancement description.
tier string Yes Tier (task, goal, challenge, super_challenge, hidden, milestone, advancement_legend, root).
mc_path string No Full namespaced identifier (namespace:tab/id).
player_head_data PlayerHeadDocEntry Yes Player head information if id = player_head.
⚠️ **GitHub.com Fallback** ⚠️