> For the complete documentation index, see [llms.txt](https://docs.myarc.icu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.myarc.icu/en/menu-examples/integration-menu.md).

# Plugin integration menu

ArcMenu can directly invoke commands, placeholders, custom items, and application interfaces provided by other plugins on your server. In this guide, we will build a "Player services" menu (`services.yml`) that wraps a common `/spawn` command into a menu button, and then look at how to expand it with deeper plugin integrations.

## Basic example: `services.yml`

Create `plugins/ArcMenu/menus/services.yml` with the following content:

```yaml
schema-version: 1
id: services
canvas:
  width: 320
  height: 180
  pixels-per-block: 42.7
  distance: 3
frontend:
  service-background:
    type: rectangle
    width: 180
    height: 100
    color: '#182031'
  service-title:
    type: text
    content: '&fPlayer services'
    size: 5
    offset: {y: 32, z: 1}
  player-label:
    type: text
    content: '&7%player_name%'
    size: 3
    offset: {y: 15, z: 1}
  spawn-button:
    type: rectangle
    width: 100
    height: 20
    color: '#365E91'
    offset: {y: -8, z: 1}
  spawn-label:
    type: text
    content: '&fReturn to spawn'
    size: 3
    offset: {y: -8, z: 2}
  close-label:
    type: text
    content: '&7Close'
    size: 3
    offset: {y: -34, z: 1}
backend:
  spawn-area:
    x: 0
    y: -8
    width: 100
    height: 20
    actions:
      right: 'player: spawn'
  close-area:
    x: 0
    y: -34
    width: 60
    height: 16
    actions:
      right: close
```

Save the file, run `/arcmenu reload`, and open the menu with `/arcmenu open services`. When a player right-clicks "Return to spawn", `player: spawn` runs the server's `/spawn` command under that player's own identity and permissions (do not include a leading slash `/`). When the command teleports the player to another location, ArcMenu automatically closes the menu and releases the camera.

## Ways to expand plugin integration

Starting from this layout, you can bring economy plugins, shops, quests, and custom item packs together into a single interface:

### 1. Player commands and console commands

* **`player: <command>`** (or `command: <command>`): Runs the command as the player who clicked the button. Use this for commands players already have permission to run themselves, such as opening land claims, guilds, quests, or warp menus.
* **`console: <command>`**: Runs the command from the server console with full privileges. This is suited for granting rewards, updating permissions, or running administrative commands restricted to the backend. You can freely include placeholders in the command string:

```yaml
actions:
  right:
    - 'console: minecraft:give %player_name% minecraft:diamond 1'
    - 'tell: &aYou received a diamond.'
```

### 2. Economy conditions and PlaceholderAPI

With PlaceholderAPI, Vault, or PlayerPoints installed, you can display live balances like `%vault_eco_balance%` and `%playerpoints_points%` inside frontend `text` elements, and check balances or permissions directly in backend regions or conditional actions to handle purchases:

```yaml
backend:
  vip-kit-area:
    x: 0
    y: -8
    width: 100
    height: 20
    condition: 'perm myserver.vip && money >= 100'
    actions:
      right:
        - 'take-money: 100'
        - 'console: kit give %player_name% vip'
        - 'tell: &aSpent 100 coins to claim the VIP kit!'
    deny:
      - 'tell: &cYou need VIP status and at least 100 coins.'
```

### 3. Player heads and custom model items

When adding `type: item` elements to the frontend, `material` accepts dynamic player heads as well as custom item models from CraftEngine, Nexo, and ItemsAdder alongside vanilla material names:

```yaml
frontend:
  avatar-icon:
    type: item
    material: '<head:%player_name%>'
    offset: {x: -60, y: 20, z: 2}
    scale: {x: 12, y: 12, z: 1}
  custom-gem:
    type: item
    material: 'craftengine:my_pack:gem' # Also supports nexo:gem or ia:my_pack:gem
    offset: {x: 60, y: 20, z: 2}
    scale: {x: 12, y: 12, z: 1}
```

### 4. Opening hosted applications from add-on plugins

If you have add-on plugins installed that integrate with the [Developer application API](/en/feature-configuration/application-api.md), you can use `open-app: <namespace>:<app-id> [optional-arguments]` in a button's actions to transition smoothly into that plugin's dedicated interactive interface while keeping the menu's current screen position:

```yaml
actions:
  right:
    - 'open-app: myplugin:shop featured'
```


---

# 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://docs.myarc.icu/en/menu-examples/integration-menu.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.
