Converts ItemsAdder YAML configuration into a Bedrock-compatible .mcpack artifact with a compatibility report. Runs as a GitHub Action inside any repository workflow.
The pipeline parses ItemsAdder YAML files, builds an intermediate representation, performs geometry and texture transforms, and packages everything into a Bedrock resource pack and behavior pack. Each asset receives a compatibility classification so you know exactly what needs manual attention.
Create a new GitHub repository (or use an existing one) that will hold your ItemsAdder YAML configuration. The structure can look like this:
my-server-pack/
├── input/
│ ├── items.yml
│ ├── blocks.yml
│ └── sounds.yml ← all .yml files in input/ are processed
└── .github/
└── workflows/
└── convert.yml ← you create this file (see step 2)
Your YAML files follow the standard ItemsAdder format:
namespace: my_pack
items:
ruby_sword:
display_name: "Ruby Sword"
material: diamond_sword
custom_model_data: 1001
model:
path: assets/my_pack/models/ruby_sword.json
texture: assets/my_pack/textures/ruby_sword.png
blocks:
glowing_stone:
display_name: "Glowing Stone"
material: stone
model:
path: assets/my_pack/models/glowing_stone.json
texture: assets/my_pack/textures/glowing_stone.pngCreate .github/workflows/convert.yml in your repository:
name: Convert to Bedrock
on:
push:
branches: [main]
paths:
- 'input/**' # only run when your YAML files change
workflow_dispatch: # also allows manual runs from the Actions tab
jobs:
convert:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: haugg/itemsadder-to-bedrock-action@v1
with:
input-path: ./input # folder with your ItemsAdder .yml files
output-dir: ./out # where .mcpack and report are written
output-name: my-pack # base name for the generated files
report-format: markdown # or json
fail-on: manual_required # fail the job if anything needs manual work
- uses: actions/upload-artifact@v4
with:
name: bedrock-pack
path: ./out # download the .mcpack from the Actions rungit add .github/workflows/convert.yml input/
git commit -m "add conversion workflow"
git pushGitHub will automatically run the conversion on every push to main that touches the input/ folder. You can also trigger it manually from Actions → Convert to Bedrock → Run workflow.
After the workflow completes:
- Open your repository on GitHub.
- Click Actions → select the latest Convert to Bedrock run.
- Scroll to Artifacts at the bottom and download bedrock-pack.
- The
.zipcontainsmy-pack.mcpackandmy-pack.report.md.
Import my-pack.mcpack directly into Minecraft Bedrock via the file manager or the game's import dialog.
Every run produces a compatibility report alongside the .mcpack. Open my-pack.report.md to see which assets converted cleanly and which need manual follow-up:
# Compatibility Report
Generated at: 2026-08-09T12:00:00.000Z
## Assets
- **item** ruby_sword — FULL: No limitations detected
- **block** glowing_stone — MANUAL_REQUIRED: Custom geometry requires manual Bedrock model authoring
The converter accepts any number of .yml files in the input path. All files are merged into a single namespace. Asset IDs must be unique across all files.
namespace: my_pack # required, used in pack UUIDs and manifest names
items:
<item_id>:
display_name: "..." # optional display name
material: <java_id> # Java Edition material, e.g. diamond_sword
custom_model_data: 1 # optional, the Java CMD value
model:
path: assets/... # path to the .json model file (relative to this yml)
texture: assets/... # path to the .png texture (relative to this yml)
rotation: [0, 0, 0] # optional X/Y/Z rotation in degrees
parts: # optional list of geometry cubes
- name: blade
origin: [0, 0, 0]
size: [2, 16, 2]
blocks:
<block_id>:
display_name: "..."
material: <java_id>
model:
path: assets/...
texture: assets/...
rotation: [0, 45, 0]
parts:
- name: core
origin: [2, 2, 2]
size: [12, 12, 12]| Input | Required | Default | Description |
|---|---|---|---|
input-path |
Yes | ./input |
Path to a YAML file or directory to convert. |
output-dir |
No | ./output |
Directory for generated output files. |
output-name |
No | output |
Base filename for the .mcpack and report. |
report-format |
No | markdown |
Report format: markdown or json. |
fail-on |
No | manual_required |
Fail threshold: none, partial, manual_required, or impossible. |
| Output | Description |
|---|---|
mcpack-path |
Absolute path to the generated .mcpack archive. |
report-path |
Absolute path to the generated compatibility report. |
full-count |
Number of assets classified as FULL. |
partial-count |
Number of assets classified as PARTIAL. |
manual-required-count |
Number of assets classified as MANUAL_REQUIRED. |
impossible-count |
Number of assets classified as IMPOSSIBLE. |
You can use the outputs in later steps:
- uses: haugg/itemsadder-to-bedrock-action@v1
id: convert
with:
input-path: ./input
output-dir: ./out
output-name: my-pack
- run: echo "mcpack is at ${{ steps.convert.outputs.mcpack-path }}"| Value | When the job fails |
|---|---|
none |
Never fails based on compatibility. |
partial |
Fails if any asset is PARTIAL or worse. |
manual_required |
Fails if any asset is MANUAL_REQUIRED or worse. |
impossible |
Fails only if any asset is IMPOSSIBLE. |
Exit codes: 1 internal error · 2 validation failure · 3 fail-on threshold exceeded.
| Status | Meaning |
|---|---|
FULL |
Automatically converted with no loss. |
PARTIAL |
Converted but may lose fidelity. |
MANUAL_REQUIRED |
Structural conversion done; manual Bedrock authoring needed. |
IMPOSSIBLE |
No valid Bedrock equivalent exists. |
git clone https://github.com/haugg/itemsadder-to-bedrock-action.git
cd itemsadder-to-bedrock-action
npm ci
npm testRun the CLI directly against your own files:
npm run build
node dist/src/cli/index.js \
--input path/to/your/input \
--output-dir dist/out \
--output-name my-pack \
--report-format markdown \
--fail-on nonedocker compose run --rm converter- No complete Java-to-Bedrock geometry conversion for arbitrary Blockbench models.
- No full UV remapping for Bedrock texture atlases.
- No full Bedrock behavior pack component mapping for complex items and blocks.
- No translation of plugin-specific interaction logic such as custom click handlers.
MIT