---
title: Datapacks (Customizing Content)
hide_meta: true
---

You can add new categories, reorganize existing ones, or add modded entities to the Field Guide using standard Minecraft **Datapacks**.

## Defining Categories

Category files are JSON files located at:
`data/<namespace>/fieldguide/categories/<filename>.json`

The filename becomes the ID of the category (e.g., `wetlands.json` becomes `<namespace>:wetlands`).

Custom icons for you to use in the style of the mod can be found in `assets\fieldguide\textures\gui\icons`. You can also use any item or block texture by providing its resource location (e.g., `minecraft:golden_apple`).

### JSON Structure

| Field | Type | Description |
| --- | --- | --- |
| `sort_index` | Integer | Determines the tab order (lower numbers are first). |
| `icon` | String | (Optional) The Resource Location for the category's tab icon. |
| `target_category` | String | (Optional) If set, entries are appended to this category ID instead of creating a new one. The filename is ignored as a category ID. |
| `replace` | Boolean | (Optional) If true, clears existing entries in this category before adding new ones. |
| `contents` | Array | A list of entry objects. |

### Appending to Existing Categories

To add entries to a category you didn't create (e.g. the built-in `monsters` category), use `target_category` in any category file. The filename can be anything, only `target_category` determines where the entries go.

`data/<namespace>/fieldguide/categories/my_additions.json`

```json
{
  "target_category": "fieldguide:monsters",
  "contents": [
    {
      "type": "entry",
      "id": "minecraft:cow",
      "unlock": {
        "unlocked_by_default": true
      }
    }
  ]
}
```

Entries are appended by default. Set `"replace": true` to clear the category's existing entries first.

### Removing Default Categories

To remove a category provided by the mod (or another datapack), create a file with the **same ID** and add a `"hidden": true` field.
The Field Guide automatically hides empty categories.

**Example:** Removing the default `monsters` category:

`data/fieldguide/fieldguide/categories/monsters.json`

```json
{
  "hidden": true
}

```

### Content Types

1. **Manual Entry:** Adds a specific Entity, Block, or Item.

```json
{
  "type": "entry",
  "id": "minecraft:pig"
}

```

2. **Auto-Populate:** Automatically adds entries based on a preset strategy.

```json
{
  "type": "auto_populate",
  "strategy": "monsters"
}

```

*Available Strategies*:

* `animals`: All animals.
* `monsters`: All monsters.
* `blocks`: All blocks.
* `items`: All items (excluding block items).
* `food`: All edible items.
* `plants`: All vanilla-like plants.
* `trees`: Automatically generates tree composites for all saplings in a mod.
* `mod:<mod_id>`: All entities from a specific mod.
* `mod_plants:<mod_id>`: All plant-like blocks from a specific mod.
* `mod_trees:<mod_id>`: All dynamically generated tree structures from a specific mod.
* `mod_items:<mod_id>`: All items from a specific mod.
* `mod_blocks:<mod_id>`: All blocks from a specific mod.
* `tag:<tag_id>`: All entities, blocks and items with a specific tag.
* `cobblemon`: Automatically populates entries for Cobblemon, if the mod is installed.

3. **Virtual Entry:** Adds an entry that doesn't correspond to a single Entity, Block, or Item.

```json
{
  "type": "virtual_entry",
  "id": "my_mod:my_custom_entry",
  "virtual_type": "tutorial",
  "icon": "fieldguide:textures/gui/scanning.png"
}
```

4. **NBT Entry:** Adds an entry that unlocks when a specific entity is scanned and its NBT matches a predicate. Useful for mods like CEM or Mob Properties Randomness that define custom mob variants via NBT.

```json
{
  "type": "nbt_entry",
  "id": "my_mod:green_zombie",
  "entity_type": "minecraft:zombie",
  "nbt": "{SomeCustomTag: 1b}",
  "display": "minecraft:zombie"
}
```

| Field | Type | Description |
| --- | --- | --- |
| `id` | String | Unique ID for this entry. |
| `entity_type` | String | The base entity type to match against (e.g. `minecraft:zombie`). |
| `nbt` | String | SNBT string. The entity must contain **all** of these tags for the entry to trigger (partial match). |
| `display` | String | (Optional) Entity ID to render in the guide. Defaults to `entity_type`. |

When the player scans a matching entity, this entry is unlocked instead of the base entity's entry. Supports the standard `"unlock"` block.

### Content Grouping

By default entries in the list appear in the order they were defined in `content: []`. However, if you want similar entries to be grouped together, a list of ['search queries'](/field-guide/searching) can be provided in `group_by`.

```json
{
  "replace": false,
  "group_by": [
        "tree",
        "#minecraft:flowers"
  ],
  "contents": [...]
}
```
