This was made almost entirely with claude fable 5, if you dont want to use a ai generated tool, refrain from further use
Java Edition → Bedrock Edition resource pack converter with a web UI. Upload a Java .zip pack in your browser and get back:
<pack>.mcpack— a Bedrock resource packgeyser_mappings.json— Geyser Custom Item API v2 mappingsconversion_report.json— per-asset status: converted / approximated / skipped, with reasons
Everything runs client-side (Web Worker) — files never leave your PC. Static-hostable.
| Feature | Status |
|---|---|
| Vanilla texture retextures (blocks/items/entity/armor/environment) | ✅ rename table + parity-name passthrough |
Legacy custom items (custom_model_data overrides, 1.14+) |
✅ v2 legacy mappings |
Modern item definitions (assets/<ns>/items/*.json, 1.21.4+) |
✅ v2 definition mappings incl. condition/range_dispatch/select predicates |
| 2D sprites (generated/handheld, multi-layer) | ✅ composited icons + item_texture.json |
| 3D models | ✅ geometry + texture atlas + attachable + display-transform animations |
Custom armor (modern equipment/ assets + legacy layer textures) |
✅ armor attachables on vanilla armor geometry, equippable components |
| Elytra wings layers | ✅ elytra attachable |
Animated textures (.png.mcmeta flipbooks) |
✅ blocks via flipbook_textures.json; item icons cropped to first frame (Bedrock limit) |
Custom sounds (sounds.json + ogg) |
✅ sound_definitions.json |
| Languages | ✅ texts/*.lang |
| Bitmap fonts (PUA glyphs) | ✅ font/glyph_XX.png sheets |
| Paintings | ✅ stitched kz.png atlas |
Core shaders, custom GUI, TTF fonts, builtin/entity items |
❌ reported as skipped (no Bedrock equivalent) |
pnpm install
pnpm dev # web UI on http://localhost:5173
pnpm test # core conversion tests
pnpm build # production build (apps/web/dist — deployable to any static host)Server setup: drop the .mcpack into Geyser's packs/ folder and geyser_mappings.json into custom_mappings/, then restart.
The same engine is available as a small HTTP server for automation:
pnpm --filter @geyser-converter/api start # PORT=3000 by default# multipart: pack + optional plugin config zip
curl -X POST "http://localhost:3000/convert?packName=mypack" \
-F "[email protected]" \
-F "[email protected]" \
-o mypack_bedrock.zip
# or raw body
curl -X POST "http://localhost:3000/convert?packName=mypack" \
--data-binary @MyJavaPack.zip -H "Content-Type: application/zip" \
-o mypack_bedrock.zipResponse is a zip containing <packName>.mcpack, geyser_mappings.json, geyser_blocks.json, and report.json. Query params: packName, attachableMaterial, modernBaseItem, maxAnimationFrames. Env: PORT, MAX_UPLOAD_BYTES. Note: the hosted GitHub Pages site is browser-only — the API must be run on your own machine/server.
packages/core— conversion engine (environment-agnostic TypeScript; usable from Node or browser)src/java— Java pack parsing (models, item definitions, mcmeta)src/resolve— model parent-chain resolution and variant flatteningsrc/bedrock— Bedrock emitters (geometry, attachables, animations, armor, manifest)src/convert— pipeline stagessrc/data— Java→Bedrock vanilla texture rename tables
apps/web— Vite + React UI, conversion in a Web Worker
This converter stands on the shoulders of the projects and documentation below. Thank you to all of them:
- java2bedrock.sh by Kas-tle — the Java→Bedrock element/cube coordinate math, attachable bone structure (
geysercmdchain), and per-slot display-transform constants follow the conventions this project established and proved in the wild. - GeyserMC — the whole reason this converter can exist: the Custom Items API v2 and Custom Blocks mapping formats this tool emits, plus their wiki documentation.
- GeyserMC Rainbow — inspiration for the overall approach and the target output format (Bedrock pack + Geyser mappings).
- GeyserMC PackConverter and ConvertJavaTextureToBedrock — prior art for the vanilla Java→Bedrock texture path mappings.
- wiki.bedrock.dev — Bedrock render controllers (texture arrays powering the flipbook animation technique), attachables, glyph/emoji sheet documentation.
- Oraxen, Nexo, ItemsAdder — config formats parsed for base-item and display-name hints.
- Libraries: fflate, fast-png, UPNG.js, js-yaml, jsonc-parser, @noble/hashes, React, Vite, comlink.
GPL-3.0. Free software: use, study, share, improve — derivatives stay free.
- Modern item-model assets don't declare their host item in the pack (servers apply them via the
minecraft:item_modelcomponent). Those map under a configurable fallback base item (defaultminecraft:paper) — see Advanced options. - 3D icon fallback: a model texture is used as inventory icon. Provide a
sprites.jsonat pack root ({"<model id>": "<texture id>"}) to override. - Coordinate/animation math follows java2bedrock.sh conventions; mappings follow the Geyser custom items v2 format.