Back to Docs

SMCModelEngine

Let Bedrock players see your ModelEngine custom mobs.

If you use ModelEngine to add custom mob models to your server, Bedrock players connecting through Geyser can't see them — they just see the vanilla mob underneath.

SMCModelEngine is a Geyser extension made by SayMC that bridges ModelEngine and Geyser. It reads your .bbmodel blueprints and converts them so Bedrock players see the same custom mobs as Java players.

It runs as a Geyser extension alongside a small set of companion plugins and extensions — no extra tools needed.

Requirements

Setup differs depending on whether Geyser is running on your Paper server directly, or on a Velocity proxy. Follow the column that matches your setup.

Standalone — Geyser-Spigot

Plugins
  • ModelEngine
  • GeyserModelEngine
  • GeyserUtils (Spigot)
  • Geyser-Spigot
  • Floodgate
Geyser Extensions
  • smc_modelengine
  • geyserutils-geyser
  • GeyserDisplayEntity
Geyser Packs
  • GeyserDisplayEntity.mcpack

Proxy — Velocity

Backend Paper Plugins
  • ModelEngine
  • GeyserModelEngine
  • GeyserUtils (Spigot)
  • Floodgate
Proxy Plugins
  • Geyser-Velocity
  • GeyserUtils (Velocity)
  • Floodgate
Proxy Geyser Extensions
  • smc_modelengine
  • geyserutils-geyser
  • GeyserDisplayEntity
Proxy Geyser Packs
  • GeyserDisplayEntity.mcpack
Note: Extensions go in the Geyser extensions folder. Packs go in the Geyser packs folder. These are inside the Geyser plugin data folder — not the server root.

Commands

SMCModelEngine provides a small set of commands to run conversions and get help.

/smc_modelengine help

Shows all available SMCModelEngine commands in chat.

/smc_modelengine convert

Starts the ModelEngine conversion. Reads your blueprints and converts them so Bedrock players can see your custom mob models.

Configuration

SMCModelEngine is configured via its own config file in the Geyser extensions folder. The two key options are enabled and blueprints_path.

enabled

Enables or disables the extension.

  • true — extension is active
  • false — extension is disabled

blueprints_path

Path to your ModelEngine blueprints folder. On a standalone server this can be a relative path. On a proxy setup, this must be an absolute path pointing to the blueprints folder on your backend Paper server, since Geyser runs on the proxy and can't resolve relative paths to the backend.

Standalone (Geyser-Spigot)

{
  "enabled": true,
  "blueprints_path": "plugins/ModelEngine/blueprints"
}

Proxy (Velocity)

{
  "enabled": true,
  "blueprints_path": "/path/to/paper/plugins/ModelEngine/blueprints"
}
Tip: Always use the full absolute path for blueprints_path — even on standalone setups. It avoids any ambiguity about where the extension looks for your blueprints.

SFTP Upload

When the Geyser proxy (Velocity or BungeeCord) runs on a different machine than your Paper server, SMCModelEngine can upload the compiled smc_modelengine.zip pack directly to the remote proxy's Geyser packs folder over SFTP after each conversion — the same way SMCConverter handles its proxy_ip upload.

Leave proxy_ip blank (the default) and SFTP upload is skipped; the pack is only saved locally.

proxy_ip

Hostname or IP of the remote proxy machine. Leave blank to skip SFTP upload (default).

proxy_port

SFTP port on the remote machine. Default 22.

proxy_user / proxy_pass

SFTP login credentials for the remote machine.

proxy_path

Optional. Full path to the remote Geyser-Velocity / Geyser-BungeeCord data folder (e.g. /home/user/velocity/plugins/Geyser-Velocity). Leave blank and SMCModelEngine will auto-search the remote machine for a matching Geyser folder, just like SMCConverter does.

Example — proxy on a different machine

{
  "enabled": true,
  "blueprints_path": "/home/container/paper/plugins/ModelEngine/blueprints",
  "proxy_ip": "your.proxy.host",
  "proxy_port": 22,
  "proxy_user": "youruser",
  "proxy_pass": "yourpassword",
  "proxy_path": ""
}
Tip: After a conversion with SFTP upload, restart the remote proxy so Geyser reloads the pack and Bedrock players see the updated models. A /geyser reload is often not enough — a full proxy restart is recommended.
Note: If the SFTP upload fails (wrong credentials, unreachable host, etc.), the local pack is still saved. Fix the settings and re-run /smc_modelengine convert, or copy the pack manually.

Tips & Best Practices

  • Use a full absolute path. Even on a standalone server, pointing blueprints_path to the full path is safer and avoids issues if the working directory ever changes.
  • Run the conversion after any model changes. If you add or update blueprints in ModelEngine, re-run /smc_modelengine convert to keep the Bedrock output in sync.
  • Fully restart after setup changes. If you add or move extensions or packs, do a full server/proxy restart — a reload is not always enough for Geyser to pick up new extensions.
  • On a proxy, the absolute path must point to the backend Paper server. Geyser runs on the proxy, so a relative path will look in the wrong place. Always use the full path to the backend's plugins/ModelEngine/blueprints folder.
  • Make sure Floodgate is installed. Both the backend and proxy need Floodgate for Bedrock player authentication to work correctly.
  • Use SFTP when your proxy is on a separate machine. Set proxy_ip, proxy_user, and proxy_pass in config.json and the pack is uploaded automatically after each conversion. Leave proxy_path blank to let SMCModelEngine find the Geyser folder on the remote machine.

FAQ

Usually one of these:
  • GeyserDisplayEntity.mcpack isn't in the Geyser packs folder.
  • One or more extensions are missing from the Geyser extensions folder.
  • blueprints_path is pointing to the wrong location.
  • The conversion hasn't been run yet — run /smc_modelengine convert.
  • The server wasn't fully restarted after setup.
No — only when you add or change blueprints in ModelEngine. If your models haven't changed, you don't need to re-run the conversion.
Use the full absolute path to the ModelEngine blueprints folder on your backend Paper server. For example: /home/container/paper/plugins/ModelEngine/blueprints. A relative path won't work on a proxy because the extension runs inside Geyser on the proxy, not on Paper.
Extensions go in the extensions folder inside your Geyser data folder (e.g. plugins/Geyser-Spigot/extensions/ or plugins/Geyser-Velocity/extensions/). Packs go in the packs folder in the same Geyser data folder. On a proxy setup, both go on the proxy — not on the backend Paper server.
No. SMCModelEngine only affects what Bedrock players see through Geyser. Java players continue to use ModelEngine normally and are completely unaffected.
Set proxy_ip, proxy_port, proxy_user, and proxy_pass in config.json. After each /smc_modelengine convert, the compiled smc_modelengine.zip is uploaded over SFTP to the remote Geyser packs folder automatically. Leave proxy_path blank and SMCModelEngine will auto-search the remote machine for the right folder. Restart the remote proxy after the upload so Geyser picks up the new pack.
The local pack (smc_modelengine.zip in the extension data folder) is always saved regardless of SFTP result. Check your proxy_ip, proxy_user, and proxy_pass settings, then re-run /smc_modelengine convert. Alternatively, copy the local pack to the remote Geyser packs folder manually and restart the proxy.

Support

Join the Discord for support and development builds.