> For the complete documentation index, see [llms.txt](https://wyne.gitbook.io/wyne-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wyne.gitbook.io/wyne-docs/lootpool/abstractmenus-integration.md).

# AbstractMenus integration

Show a random roll from a pool on any menu item, or list a pool's entries in a generated menu with the LOOTPOOL catalog.

When [AbstractMenus](https://abstractmenus.github.io/docs/en/) is installed, LootPool registers two things with it: the `lootPool` item property and the `LOOTPOOL` catalog. Without AbstractMenus it logs `AbstractMenus not found, catalog and property are not registered` and carries on.

## The `lootPool` item property

Turns a menu item into a fresh roll from a pool (material, meta and amount) each time the item is drawn:

```hocon
items: [
  {
    slot: 13
    material: CHEST
    lootPool: "daily_reward"
  }
]
```

The declared `material` is only a fallback. It shows as-is if the pool doesn't exist.

The item is for display only. It isn't handed out, and running `/lootpool give daily_reward …` from a click action makes a new roll that won't match what was shown.

{% hint style="info" %}
Both the property and the catalog read the pool's flat entry list, so a [complex pool](/wyne-docs/lootpool/complex-loot-pools.md) shows its entries with **no roll counts, conditions or modifiers applied** — a sword that only ever drops enchanted appears unenchanted. That's the same preview contract `/lootpool info` and `getLootList()` have; see [what a preview can't show](/wyne-docs/lootpool/complex-loot-pools.md#what-a-preview-cant-show).
{% endhint %}

## The `LOOTPOOL` catalog

A [generated menu](https://abstractmenus.github.io/docs/en/advanced/generation/) with the `LOOTPOOL` catalog gets one element per entry of the pool. That makes it a ready-made "possible drops" screen:

```hocon
title: "Dungeon loot"
size: 6
catalog {
  type: LOOTPOOL
  lootPool: "dungeon_loot"
}
matrix {
  cells: [
    "xxxxxxxxx",
    "xxxxxxxxx",
    "xxxxxxxxx",
    "xxxxxxxxx",
    "xxxxxxxxx",
    "_________"
  ]
  templates {
    "x" {
      material: "%ctg_material%"
      name: "%ctg_name-legacy%"
      lore: [
        "&7Weight: &e%ctg_weight%",
        "&7Amount: &e%ctg_minAmount%-%ctg_maxAmount%"
      ]
    }
  }
}
```

Entries appear in the pool's own order. A multi or composite pool shows every entry of every pool it's built from, and a complex pool every entry of every roll, with pool references resolved four levels deep. A vanilla pool shows a fresh sample roll each time the menu opens.

### Catalog placeholders

Inside a template, each placeholder is written `%ctg_<name>%`:

| Placeholder    | Value                                                                                        |
| -------------- | -------------------------------------------------------------------------------------------- |
| `material`     | The item's material, e.g. `DIAMOND_SWORD`                                                    |
| `name`         | The item's display name, or its translated vanilla name, in the plugin's `serializer` format |
| `lore_<n>`     | Line `n` of the item's lore, counting from 1; empty if there is no such line                 |
| `weight`       | The entry's weight                                                                           |
| `minAmount`    | The entry's minimum amount                                                                   |
| `maxAmount`    | The entry's maximum amount                                                                   |
| `randomAmount` | A random amount between the two, re-rolled each time it's shown                              |
| `serialized`   | The whole item as a Base64-encoded Bukkit object stream                                      |

`name` and `lore` come in other formats too. Add a suffix to the name: `name-legacy` for `&` color codes, `name-parsed` for `§` codes, `name-mm` for MiniMessage, `name-plain` for plain text, `name-gson` for JSON. Lore takes the same suffixes before the line number: `lore-legacy_2`. AbstractMenus reads `&` codes, so `-legacy` is usually the one you want.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://wyne.gitbook.io/wyne-docs/lootpool/abstractmenus-integration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
