SMCConverter
Make your custom Java resource packs work for Bedrock players.
If you run a Minecraft server using Geyser, you already know the problem: all the custom items, tools, armor, furniture, and blocks you set up with plugins like Nexo, ItemsAdder, or Oraxen show up perfectly for Java players — but Bedrock players just see plain vanilla items.
SMCConverter fixes that. It takes your existing Java resource pack and produces everything Geyser needs so Bedrock players see your custom content the way it was meant to look.
It's built for server owners who want a single, painless step between “my pack works on Java” and “my pack works for everyone.”
Conversion Preview
Supported Features
SMCConverter supports a wide range of custom content:
Custom Items
Swords, tools, food, materials, icons, and other 2D items.
3D Models
Fully modeled custom items render in 3D for Bedrock players.
Custom Armor
Including animated armor sets.
Custom Blocks
Placed blocks and their in-hand item icons.
Furniture
Chairs, tables, lamps, beds, and other decorative furniture, including dyed variants.
Staged Items
Bows, crossbows, shields, fishing rods, and tridents that change appearance in use.
Fonts & Glyphs
Custom fonts and text glyphs from your pack.
Custom GUIs
Chest-style custom interfaces are detected and converted automatically, including DeluxeMenus.
Textures
Item and block textures are carried over so everything looks right.
Custom Mobs
Works with GeyserModelEngine so Bedrock players can see custom mob models.
Custom Skills
Custom skill items and related visuals are included in the Bedrock pack.
Works with the most popular custom content plugins:
Built for Geyser — works with Geyser-Spigot on a single server, and with
Geyser-Velocity or Geyser-BungeeCord when the proxy is on the same machine
(enable_proxy + proxy_folder).
Requirements
Before using SMCConverter, make sure you have:
-
The matching Java version for your server:
- Java 21 — Paper/Minecraft 1.21.4 through 1.21.11
- Java 25 — Paper/Minecraft 26.0+
- A Java Edition resource pack created with Nexo, ItemsAdder, or Oraxen.
- Your resource pack in .zip format (or an unzipped pack folder).
- A server running Geyser (so Bedrock players can connect), with custom content enabled in your Geyser configuration.
That’s it — no extra tools or accounts needed.
How to Use
Converting a pack is a simple process:
- Prepare your resource pack Make sure your Java pack is finished and working correctly for Java players first.
- Run the converter SMCConverter processes your pack and generates the converted output.
- Collect your output files When it finishes, you’ll get a converted Bedrock resource pack along with the mapping files Geyser needs.
-
Install into Geyser
- Place the generated mapping files into your Geyser
custom_mappingsfolder. - Place the generated Bedrock resource pack into your Geyser
packsfolder.
- Place the generated mapping files into your Geyser
- Restart your server Bedrock players will now see your custom content.
Commands
SMCConverter provides a simple set of commands to manage conversions.
/smc convert (alias: /smcc)
Starts a new conversion of your Java resource pack. This processes the pack and generates the Bedrock resource pack + mapping files for Geyser.
/smc reload
Reloads the plugin configuration and any cached data without restarting the server.
/smc cancel
Cancels an in-progress conversion. Useful if you started a conversion by mistake or need to stop it early.
settings.yml
settings.yml is the primary configuration file used by SMCConverter.
It controls Geyser uploads (including Velocity/Bungee proxy), icon resolution, namespace shortening, animation-skip mode,
automatic plugin config updates, and your license key.
Options
geyser_auto_upload
Automatically uploads the converted resource pack and mapping files after conversion completes.
true— upload automaticallyfalse— do not upload
enable_proxy
Chooses which Geyser receives the upload. Bedrock players only see packs from the Geyser they actually connect to.
false— upload toplugins/Geyser-Spigoton this Paper server (default)true— upload only to the proxy Geyser folder inproxy_folder(Velocity or Bungee on the same machine). Nothing is written to Geyser-Spigot on Paper.
After a proxy upload, restart the proxy so Geyser reloads packs and custom mappings.
/geyser reload is often not enough for mappings.
proxy_folder
Full path to the proxy Geyser data folder. Used only when enable_proxy is true.
Point this at Geyser-Velocity or Geyser-BungeeCord — the folder that contains
packs and custom_mappings.
- Windows example:
C:\servers\velocity\plugins\Geyser-Velocity - Linux example:
/home/container/plugins/Geyser-Velocity
SMCConverter copies mapping and pack files into this folder. Auto-upload requires the proxy to be on the same machine.
Leave this empty when enable_proxy is false.
icon_quality
Controls the resolution of generated item icons.
32x— fastest conversion and smallest pack size64x— balanced quality128x— default / recommended256x— high quality512x— maximum quality, largest files
shorten_namespaces
When enabled, long Java namespaces in the Bedrock pack are shortened to short, mostly readable ids (about 6 characters). Folder names and all matching JSON references are updated together so the pack stays consistent.
false— leave namespaces unchanged (default)true— shorten namespaces after conversion, before packaging
auto_update_settings
SMCConverter can automatically configure supported plugins so they work correctly
after conversion. Setting any of these to false disables automatic
modification of that plugin’s configuration.
-
ItemAdder— Automatically updates the ItemsAdderconfig.yml. -
Nexo— Automatically updates Nexo’ssettings.yml. -
Oraxen— Automatically updates Oraxen’ssettings.yml.
animation_skip_mode
Controls how textures listed in animation_skip.yml are frozen when
animation is skipped. This does not turn skip on by itself — you still list
namespaces or items in animation_skip.yml.
first_frame— keep the first frame of the animation strip (default)invisible— replace with a fully transparent placeholder
You can also set mode: inside animation_skip.yml to override
this value for that file only.
use_plugin_temp
Where conversion scratch files go (a copy of the input zip and the extract workspace).
The finished pack still lands in plugins/SMCConverter/conversions/.
false— use the system temp directory (default)true— useplugins/SMCConverter/temp/on the server disk
Turn this on if converts fail with No space left on device under
/tmp/smc_* while the server disk still has free space. Common on shared hosting panels.
license_key
Your SMCConverter license key. Paste the key you received here.
Example
#SMCConverter Settings
# Auto Upload to Geyser
geyser_auto_upload: true
# Proxy Geyser
# false = upload to Geyser-Spigot on this Paper server
# true = upload to the Geyser folder below (Velocity / Bungee on this machine)
enable_proxy: false
# Full path to the proxy Geyser folder (File Explorer → plugins → Geyser-Velocity).
# Example Windows: C:\servers\velocity\plugins\Geyser-Velocity
# Example Linux: /home/container/plugins/Geyser-Velocity
proxy_folder:
# Icon Quality — resolution of generated item icons.
# 32x = 32x32 (smallest files)
# 64x = 64x64
# 128x = 128x128 (default)
# 256x = 256x256 (high quality)
# 512x = 512x512 (maximum quality, largest files)
icon_quality: 128x
# Shorten long Java namespaces in the Bedrock pack
shorten_namespaces: true
# Auto Update Settings/Config for
auto_update_settings:
# Toggle for automatic configuration of ItemsAdder config.yml
ItemAdder: true
# Toggle for automatic configuration of Nexo's settings.yml
Nexo: true
# Toggle for automatic configuration of Oraxen's settings.yml
Oraxen: true
# How animation_skip freezes textures for listed namespaces/items:
# first_frame — keep the first frame of the strip (default)
# invisible — replace with a fully transparent texture
animation_skip_mode: invisible
# When true, conversion temp files (input copy + extract workspace) are stored under
# plugins/SMCConverter/temp/ instead of the system temp directory (/tmp).
# Enable this if converts fail with "No space left on device" on /tmp/smc_* while
# the server disk still has free space (common on shared hosting panels).
# Default: false (use system temp)
use_plugin_temp: false
# License key — paste the key you received here.
license_key: ""
animation_skip.yml
Animation skipping lives in its own configuration file:
animation_skip.yml (placed next to settings.yml).
Use this when certain animated textures don’t translate well to Bedrock, or when you prefer static (or invisible) textures for compatibility or performance.
How it works
- SMCConverter normally converts animated Java textures into Bedrock frame animations.
- Textures matched by this file are not turned into Bedrock animations.
- How they look instead is controlled by
animation_skip_modeinsettings.yml(or optionalmode:in this file). - If both lists are empty, all animated textures convert normally.
Options
skip_namespaces
Whole Java pack namespaces. Every animated texture under
assets/<namespace>/ is frozen.
items
Specific textures only (more precise than a whole namespace). Each entry can be:
namespace:path/under/textures— e.g.mypack:item/swordpath/under/textures— e.g.item/swordorweapons/crazyswordbasename— e.g.sword(matches that file name)
Paths are relative to the textures folder (no .png needed).
You can also write forms like textures/item/sword or
assets/mypack/textures/item/sword — they are normalized automatically.
mode
Optional override of settings.yml → animation_skip_mode.
first_frame— keep the first frame of the stripinvisible— fully transparent placeholder
Examples
Skip all animated textures in two namespaces:
skip_namespaces:
- mythicmobs
- itemsadder
items: []
Skip only specific textures (leave other animations in that pack alone):
skip_namespaces: []
items:
- zen_armas:item/abyss_sword
- weapons/crazysword
- animkatana
Skip a whole namespace and force invisible placeholders:
skip_namespaces:
- nexo
items: []
mode: invisible
items when only a few textures break on Bedrock.
Use skip_namespaces when an entire pack’s animations should stay static.
Tips & Best Practices
Get the best results by keeping these in mind:
- Test on Java first. If your pack works correctly for Java players, it will convert far more reliably. Fix any Java-side issues before converting.
- Keep your pack organized. Use the standard folder structure your plugin (Nexo, ItemsAdder, or Oraxen) creates. Custom or unusual layouts can cause items to be missed.
- Use clear, consistent names. Well-named models and textures make for cleaner results.
- Don’t rename generated files. The mapping files and resource pack are designed to work together — renaming them can break the connection.
- Re-run after changes. If you add or update custom content in your Java pack, run the converter again to keep your Bedrock version in sync.
- Give it a complete pack. Converting a partial or broken pack will produce partial results. Always convert the finished pack.
- Restart, don’t reload. After installing the output, fully restart your server so Geyser picks up the new content.
Limitations
To set the right expectations, here are the current limitations:
- Bedrock’s own limits apply. Some effects simply aren’t possible on Bedrock Edition, and no converter can add them. Where Bedrock can’t match Java exactly, SMCConverter gets as close as Bedrock allows.
These limitations come from the differences between Java and Bedrock themselves — SMCConverter is built to give the closest possible result within what Bedrock supports.
FAQ
- The mapping files aren’t in Geyser’s
custom_mappingsfolder. - The resource pack isn’t in Geyser’s
packsfolder. - Custom content isn’t enabled in your Geyser configuration.
- The server wasn’t fully restarted after installing.
enable_proxy: true and proxy_folder to your
plugins/Geyser-Velocity (or Geyser-BungeeCord) folder on the same machine.
SMCConverter then uploads only to that proxy Geyser — not to Geyser-Spigot on Paper.
Restart the proxy after convert so mappings load. Bedrock players must join the proxy Geyser port.
Support
Join the Discord for support and development builds.