# Manage Bedrock packs

> Import, turn on, turn off and delete behavior and resource packs on a Bedrock Dedicated Server.

Source: https://www.coritan.com/docs/managed-containers/software/bedrock-packs/

In the dashboard:

- /dashboard/servers/…/software: https://www.coritan.com/dashboard/servers

A Bedrock add-on is made of one or more *packs*. A *behavior pack* changes how the world plays, and a *resource pack* changes how it looks and sounds. A Bedrock Dedicated Server keeps behavior packs in `behavior_packs` and resource packs in `resource_packs`, but the world loads only the packs on its own list. The **Packs** panel on a server's **Software** tab imports packs, turns them on and off in the world, and deletes them.

Every change on the panel applies the next time the server starts.

## Before you begin

- The panel is there for a Bedrock Dedicated Server only. To let Bedrock players join a Java server instead, see [Let Bedrock players join a Java server](/docs/managed-containers/software/bedrock-crossplay/).
- Take a [snapshot](/docs/managed-containers/snapshots/) before you add packs to a world you care about. Some packs change the world in ways you cannot undo by turning them off.
- On a server someone shared with you, the Install software permission lets you import packs, turn them on and off, and choose whether resource packs are required. Deleting a pack needs `software.delete`, which the dashboard's permission list does not offer, so the owner can grant it only [through the API](/docs/managed-containers/users/#with-the-api).

To open the panel:

1. In the [dashboard](https://www.coritan.com/dashboard/servers), go to **Container Apps** and open the server, then the **Software** tab.
2. Select **Packs**.

## Read the Packs panel

The line at the top names the world, such as `Bedrock level`. The world is the one `level-name` names in `server.properties`, and its lists of packs are in `worlds/Bedrock level/world_behavior_packs.json` and `world_resource_packs.json`.

The **Behavior packs** and **Resource packs** cards list the packs in each folder and count how many are on. Packs that are on come first, then the ones that are off, each in name order. Each row shows the pack's name and version, its description and its folder. A badge tells you more:

**Off**
: The pack is in the folder, but the world does not load it.

**Runs scripts**
: The pack carries scripts. A pack like this may need the Beta APIs experiment turned on in the world before the world loads.

The cards list only folders with a `manifest.json` at their top level. Select **Refresh** to read the folders again.

## Import a pack

1. Upload the pack file to the server root or to the `uploads` folder in the [Files tab](/docs/managed-containers/files/). It must end in `.mcaddon`, `.mcpack` or `.zip`.
2. On the **Packs** panel, find the file on the **Import a pack** card.
3. Select **Import pack** next to it.

The import runs as a job, which appears in the jobs card at the top of the **Software** tab, and the file shows **Queued** until the job starts. The job unpacks the file and reads each pack's `manifest.json` to decide whether it is a behavior pack or a resource pack. It moves each pack into the right folder and turns it on in the world. When the job finishes, the panel lists the new packs.

The import uses up the file you uploaded, even when it fails, so keep a copy.

A few more rules apply:

- A file can hold up to 25 packs.
- A pack that is already on the server, with the same ID in its manifest, is replaced by the new build in its existing folder.
- Skin packs, world templates and other packs a server does not load are skipped.
- When the world has not been created yet, we create its lists, so the packs load when the server first creates the world.

You can also copy a pack's folder into `behavior_packs` or `resource_packs` yourself. It appears on the panel with **Off**, and you turn it on as the next section describes.

The [Marketplace](/docs/managed-containers/software/plugins-and-mods/) can search for add-ons too: choose `bedrock_addon` or `bedrock_resource_pack` in its kind list. A Marketplace install imports the file in the same way and turns its packs on.

## Turn a pack on or off

1. On the **Packs** panel, find the pack's row.
2. Turn the switch at the end of the row on or off.

We add the pack to the world's list or remove it from the list. The pack's folder stays on the server. A message such as `"More Furniture" turned on. The world loads it on the next start.` confirms the change. Restart the server from the [console](/docs/managed-containers/console/) when you are ready.

## Recover a world a pack broke

When a pack stops the server from starting, turn off every pack at once:

1. On the **Packs** panel, select **Turn off all packs…**.
2. Select **Turn off all packs**.

We empty both of the world's lists, so the world starts on vanilla content the next time the server starts. The pack folders stay. Start the server, then turn the packs back on one at a time, restarting after each, to find the one that breaks the world. Delete that pack, or import a build that works with your server's version.

## Require resource packs

Under the **Resource packs** card, the **Require resource packs** switch sets `texturepack-required` in `server.properties`:

- On: players who decline the resource packs cannot join.
- Off: players who decline join without the resource packs.

Restart the server to apply the change.

## Delete a pack

1. On the **Packs** panel, select the bin icon at the end of the pack's row.
2. Select **Delete pack**.

We remove the pack from the world's list and delete its folder from the server. You cannot undo this. To keep the pack's files, turn it off instead.

## Result

Each change shows a message, such as `"More Furniture" deleted.` or `Resource packs set to required. It takes effect on the next start.` After the next start, the world loads the packs that are on. Updating the Bedrock server software keeps the pack folders and the world's lists.

## Troubleshooting

The pack file is not on the **Import a pack** card
: The card lists files in the server root and in `uploads` only, and only files ending in `.mcaddon`, `.mcpack` or `.zip`. Move the file there in the [Files tab](/docs/managed-containers/files/), then select **Refresh**.

**Could not load the packs**
: We could not read the server's files. Check that the server is installed, then select **Try again**.

The import job fails with `No pack was found in that file: a pack needs a manifest.json at its top level`
: The file holds no pack that we can find. A `.mcpack` must have `manifest.json` at its top level. A `.mcaddon` must hold `.mcpack` files at its top level, or pack folders at its top level or one folder down. Upload a file laid out that way.

The import job fails with `No pack could be installed from that file: …`
: Every pack in the file was skipped, and the message gives the reasons, such as `manifest.json is missing or invalid`, or a pack type that a server does not load.

The import job fails with `That archive holds more than 25 packs`
: Split the add-on into smaller files.

The import job fails with `That file is no longer on the server`
: Someone moved or deleted the file after it was listed. Upload it again and select **Refresh**.

The server does not start after you added a pack
: Follow [Recover a world a pack broke](#recover-a-world-a-pack-broke). Check the [console](/docs/managed-containers/console/) for the pack it names.

A pack that is on has no effect
: Restart the server: the world reads its lists only when it starts. If the pack shows **Runs scripts**, the world may need the Beta APIs experiment turned on.

`Too many requests for this action. Please wait and try again.`
: A server accepts 8 software actions, imports included, from one account in 10 minutes. The response says how many seconds to wait.

## Related

- [Install plugins, mods and modpacks](/docs/managed-containers/software/plugins-and-mods/)
- [Manage files](/docs/managed-containers/files/)
- [Start a server in safe mode](/docs/managed-containers/software/safe-mode/)

## With the API

The paths below are relative to `/api/v1/client/servers/{uuid}/software`. A pack's `{pack_uuid}` is the ID in its manifest, which the list returns as `uuid`.

| Request | What it does |
| --- | --- |
| `GET /bedrock/packs` | Lists the packs, the world and the files you can import. |
| `POST /bedrock/packs/import` | Queues an import of a file on the server. |
| `POST /bedrock/packs/{pack_uuid}/active` | Turns a pack on with `{"active": true}` or off with `{"active": false}`. |
| `POST /bedrock/packs/disable-all` | Turns off every pack in the world. |
| `POST /bedrock/packs/{pack_uuid}/remove` | Deletes a pack. |
| `PUT /bedrock/texturepack-required` | Requires resource packs with `{"required": true}`, or not with `{"required": false}`. |

Import a file you uploaded:

```bash
curl -X POST https://api.coritan.com/api/v1/client/servers/$SERVER/software/bedrock/packs/import \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"path": "/uploads/more-furniture.mcaddon"}'
```

`path` is required. The optional `kind` is `bedrock_addon`, the default, or `bedrock_resource_pack`; the manifests decide where each pack goes either way. The response is the install job, as [Install plugins, mods and modpacks](/docs/managed-containers/software/plugins-and-mods/#install) describes. When the job finishes, its `status` is `succeeded`, or `succeeded_with_warnings` when a pack was skipped, runs scripts or went into a world that did not exist yet. Its `detail` lists the imported `packs` and any `warnings`.

`GET /bedrock/packs` returns:

`level_name` and `world_dir`
: The world, and its folder, such as `/worlds/Bedrock level`.

`behavior` and `resources`
: The packs in each folder. Each has `uuid`, `name`, `description`, `version_string`, `pack_type`, `has_scripts`, `folder`, `path` and `active`. `tracked` is `true` when an import or the Marketplace installed the pack, with its `record_uuid`.

`active_count`
: How many packs are on.

`texturepack_required`
: Whether resource packs are required.

`archives`
: The files you can import, each with `filename`, `path`, `size_bytes` and `modified_at`.

Turning a pack on or off returns the pack with `active` and `restart_required`. `disable-all` returns how many packs it turned off in `disabled`, as `behavior` and `resources` counts. `remove` returns `{"deleted": true}` with the pack's `uuid`, `name`, `path` and `pack_type`. `texturepack-required` returns `texturepack_required` and `restart_required`.

A refused request answers `400` with the reason, such as `path is required`, `active is required`, `required is required`, `Only .mcaddon, .mcpack and .zip files can be imported as packs`, `That pack is not installed on this server` or `Bedrock packs only apply to a Bedrock Dedicated Server`. Deleting while a job that replaces the server's files is running answers `409`. Only imports count towards the limit of 8 software actions in 10 minutes.

On a server shared with you, listing needs `software.read`. Importing, turning packs on or off, `disable-all` and `texturepack-required` need `software.install`, and deleting needs `software.delete`.

## API

- `GET /api/v1/client/servers/{uuid}/software/bedrock/packs`: Behavior and resource packs on disk, which are active in the world, and importable uploads (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-get-api-v1-client-servers-uuid-software-bedrock-packs)
- `POST /api/v1/client/servers/{uuid}/software/bedrock/packs/disable-all`: Empty the world's activation lists so it boots on vanilla content; folders stay (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-post-api-v1-client-servers-uuid-software-bedrock-packs-disable-all)
- `POST /api/v1/client/servers/{uuid}/software/bedrock/packs/import`: Queue an import of an uploaded .mcaddon / .mcpack / .zip already on the server (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-post-api-v1-client-servers-uuid-software-bedrock-packs-import)
- `POST /api/v1/client/servers/{uuid}/software/bedrock/packs/{pack_uuid}/active`: Add a pack to, or drop it from, the world's activation list (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-post-api-v1-client-servers-uuid-software-bedrock-packs-pack-uuid-active)
- `POST /api/v1/client/servers/{uuid}/software/bedrock/packs/{pack_uuid}/remove`: Deactivate a pack, delete its folder, and drop its tracking row (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-post-api-v1-client-servers-uuid-software-bedrock-packs-pack-uuid-remove)
- `PUT /api/v1/client/servers/{uuid}/software/bedrock/texturepack-required`: Texturepack-required: players must accept the resource packs to join (https://www.coritan.com/docs/api/reference/client/container-apps/servers-software/#op-put-api-v1-client-servers-uuid-software-bedrock-texturepack-required)
