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

Java Bedrock
Java
Bedrock

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:

Nexo ItemsAdder Oraxen DeluxeMenus Geyser Velocity BungeeCord

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+
    Use the SMCConverter jar built for that line.
  • 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:

  1. Prepare your resource pack Make sure your Java pack is finished and working correctly for Java players first.
  2. Run the converter SMCConverter processes your pack and generates the converted output.
  3. Collect your output files When it finishes, you’ll get a converted Bedrock resource pack along with the mapping files Geyser needs.
  4. Install into Geyser
    • Place the generated mapping files into your Geyser custom_mappings folder.
    • Place the generated Bedrock resource pack into your Geyser packs folder.
  5. Restart your server Bedrock players will now see your custom content.
Tip: Make sure custom content is enabled in your Geyser configuration, or the converted items won’t appear.

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 automatically
  • false — 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 to plugins/Geyser-Spigot on this Paper server (default)
  • true — upload only to the proxy Geyser folder in proxy_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 size
  • 64x — balanced quality
  • 128x — default / recommended
  • 256x — high quality
  • 512x — 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 ItemsAdder config.yml.
  • Nexo — Automatically updates Nexo’s settings.yml.
  • Oraxen — Automatically updates Oraxen’s settings.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 — use plugins/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_mode in settings.yml (or optional mode: 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/sword
  • path/under/textures — e.g. item/sword or weapons/crazysword
  • basename — 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.ymlanimation_skip_mode.

  • first_frame — keep the first frame of the strip
  • invisible — 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
Tip: Prefer 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

Only the resource pack upon joining. Once the converted pack is installed on your server through Geyser, Bedrock players see your custom content automatically when they join.
No. SMCConverter only creates the Bedrock version. Your original Java pack and Java players are completely unaffected.
Nexo, ItemsAdder, Oraxen, and DeluxeMenus.
Yes. SMCConverter produces content for Geyser, which is what lets Bedrock players join your Java server in the first place.
Usually one of these:
  • The mapping files aren’t in Geyser’s custom_mappings folder.
  • The resource pack isn’t in Geyser’s packs folder.
  • Custom content isn’t enabled in your Geyser configuration.
  • The server wasn’t fully restarted after installing.
Set 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.
Yes. Any time you change your custom content, re-run SMCConverter and reinstall the output so your Bedrock version stays up to date.
It works best with the standard structure your plugin creates. Unusual layouts may cause some items to be skipped.
Bedrock and Java aren’t identical, so a few things (certain animations, dyed colors, very complex shapes) can look a little different. SMCConverter always aims for the closest match Bedrock allows.

Support

Join the Discord for support and development builds.