Skip to content
BlockFrontBlockFront DocsOfficial Documentation for BlockFront

Pack format

my_campaign/
├── pack.mcmeta Minecraft's resource pack file
├── pack.json The campaign manifest
├── pack.png Icon in Minecraft's pack list
├── assets/
│ └── my_campaign/
│ ├── lang/en_us.json Translations
│ └── textures/campaign/ Card art
├── server_assets/
│ ├── games/ Game assets, one per mission
│ ├── maps/ Map assets
│ └── templates/ Effect templates
└── missions/
└── my_mission/
├── mission.lua The script that runs first
├── spatial.json Triggers, markers, actors and more
├── sequences/ Recorded actor performances
└── world/ The Minecraft world

Scripts can be split into several Lua files in the mission folder. See include.

A normal resource pack file. Minecraft 1.21.1 uses format 34.

{
"pack": {
"pack_format": 34,
"description": "My Campaign"
}
}
{
"id": "my_campaign",
"name": "My Campaign",
"author": "Your Name",
"description": "What the campaign is about.",
"version": "1.0.0",
"apiVersion": 1,
"modrinthProject": "",
"missions": [
{
"id": "my_mission",
"name": "My Mission",
"description": "What happens in this mission."
}
]
}
Field Required Description
id Yes Unique id, safe to use as a namespace. Used for saves and addressing missions.
name Yes Display name.
nameKey No Translation key for the name.
author No Author line.
description No Shown on the campaign’s card.
descriptionKey No Translation key for the description.
version No Pack version, shown to players. Defaults to 1.0.
minModVersion No The oldest BlockFront version that can load the pack.
apiVersion No The Lua API version your scripts target. Defaults to 1.
modrinthProject No Modrinth project id or slug, once published.
icon No Resource location of the card art.
missions No The missions, in play order.
Field Required Description
id Yes The folder name under missions/.
name Yes Display name.
nameKey No Translation key for the name.
description No Short text for the mission card.
descriptionKey No Translation key for the description.
alwaysUnlocked No Playable without finishing earlier missions. Defaults to false.
game No The game asset hosting the mission. Defaults to camp_<id>.
icon No Resource location of the mission’s card art.

By default the game looks for these two files:

  • assets/<pack id>/textures/campaign/campaign.png for the campaign
  • assets/<pack id>/textures/campaign/<mission id>.png for each mission

Put your text in assets/<pack id>/lang/en_us.json and refer to it with nameKey, descriptionKey and tr() in scripts. Plain text is the fallback, so translation is optional.

Each mission needs a game asset in server_assets/games/, named camp_<mission id>.json unless the mission sets game. It ties the mission to its map:

{
"gameName": "camp_my_mission",
"mapName": "MyMap",
"inRotation": false,
"gameModeData": {
"gameType": "camp",
"mission": "my_mission",
"environment": "night"
}
}

A real asset also holds the lobby position and team spawns. Copying one from Pathfinder is the quickest way to get these right. The Assets section covers every field.

server_assets/ is shared by every mission in the pack, so missions can use the same maps and templates.

A pack can be a folder or a zip, and the difference matters:

  • A folder is for editing. Commands are enabled in its worlds, and the /mission tools can save to it.
  • A zip is for release. It’s read-only.

Keep your pack as a folder while you work, and zip it to publish, with pack.json at the root of the zip.