All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Better Player Model

Better Player Model

by Zhoporez • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

title

Better Player Model

Better Player Model is a powerful Fabric mod designed for animated custom player models, featuring high-performance rendering, local browsing, and seamless multiplayer synchronization.

Key Features

  • Universal Model Support: Load any .ysm or Blockbench .json models with ease.
  • Bedrock-Grade Animations: Full MoLang support for fluid, complex, and scripted animations.
  • In-Game Browser: Manage your models, categories, and textures directly from the menu.
  • Seamless Sync: Works as a client-side mod, but offers full multiplayer synchronization when installed on the server.

Multiplayer

  • Client-only: You can still see your own models and browse your library on any server.
  • Full Sync: When the server also runs the mod or plugin, every player will see your custom animations and models!

Compatibility & Setup

  • Format: Supports .json (Blockbench) and .ysm (Encrypted).
  • Location: Place your models in config/better_player_model/custom.
  • Performance: Fully compatible with Sodium, Iris, and other optimization mods.

Dependencies

Where to find models?

Looking for high-quality player models? You can browse and download hundreds of community-made models from the Yes-steve-model community repository: Download Models Here

For Server Admins

You can find our official Paper/Purpur plugin to sync models without server-side mods right under the Versions tab!

Demonstration

Demonstration Demonstration Demonstration

Contacts

Visit our Official Discord Server for the mod. Get sneak peeks of upcoming updates, suggest new features, report bugs, and chat with the developer and the community.

Credits

This project is built upon the incredible work of the following teams and individuals:

  • OpenYSM & YSMParser (Model parsing pipeline)
  • Fox-model-loader by Micaftic (Base architecture)
  • Yes Steve Model by Elfmcys (Original concepts)

Network Troubleshooting Guide: Model Sync Timeouts and Disconnections

If players with slower or unstable internet connections (such as Wi-Fi, mobile data, or satellite links like Starlink) are consistently disconnected while joining your server or during model synchronization, this guide explains how to fix the issue.


Why Is This Happening?

  1. Bandwidth Saturation (Bufferbloat): When a player joins, the server transfers missing custom player models. If the server tries to push this data faster than the player's connection can download it, the network buffers on the player's router or operating system overflow.
  2. Delayed Ping/Keep-Alive Packets: Because the connection is saturated, critical game packets (like Minecraft's KeepAlive packets which verify the player is still connected) are queued behind the model files. If the client cannot respond to these packets within 15–30 seconds, the server times them out and kicks them.
  3. Large Model Files: If your server hosts many models, or if some models are particularly large (e.g., several megabytes each), the initial download size might be substantial (tens of megabytes), lengthening the critical sync window.

Solution 1: Configure Bandwidth Limits on the Server (Recommended)

Version 1.0.6 introduces a per-player bandwidth limiter to prevent connection saturation. You can restrict the speed at which model chunks are sent.

  1. Open your server's config directory: config/better_player_model-server.toml.

  2. Locate the [server_scheduler] category and configure the limits:

    [server_scheduler]
        # Global bandwidth limit for model distribution across all active players (in Mbps)
        # Default: 100
        BandwidthLimit = 25
    
        # Bandwidth limit per individual player (in Mbps)
        # This prevents slow connections from getting overwhelmed.
        # Default: 5 (Recommended: 3 to 10)
        PlayerBandwidthLimit = 5

    Setting PlayerBandwidthLimit to 5 Mbps (~625 KB/s) allows models to download steadily without saturating the link, leaving plenty of room for gameplay and Keep-Alive traffic.


Solution 2: Increase Network Connection Timeouts

By default, Minecraft kicks a player if it doesn't receive network responses within 30 seconds. You can increase this read timeout to 120 seconds.

For Dedicated Servers:

Add the following Java system property to your server's startup script or command line:

-Dnet.minecraft.network.readTimeout=120

For Clients (in Prism Launcher or other launch options):

  1. Open your launcher's settings for the Minecraft instance.
  2. Under Java -> Java Arguments, add:
    -Dnet.minecraft.network.readTimeout=120

Solution 3: Use Timeout-Extension Mods

Alternatively, you can install one of the following server-side and client-side mods to handle timeouts automatically:

  • Connectivity
  • Timeouts

Built-in Models & Assets Credits

This mod includes the "Wine Fox" (酒狐) model built-in by default to provide a high-quality out-of-the-box experience.

  • Model Name: Wine Fox (酒狐)
  • License: CC BY-NC-SA 4.0
  • Original Authors:
    • 完美冻结 (Model & Core)
    • 星屑海螺 (Animations)
    • 哥斯拉 / 映素团队 (Modifications)
    • 白帆小喵, 蓝玫瑰, 墨染逝羽, Maks怜悯, 浅陌菌, 祸御神, 羊毛 (Textures, UI, Sound, and specific additions)

Huge thanks to these creators for their incredible work on the model! If you wish to use this model elsewhere, please ensure you respect the original CC BY-NC-SA 4.0 license.

License

Licensed under MIT. All original licenses and copyright notices are preserved. MIT License

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3 26.2 26.1.2 +2
Paper
15h ago 1
26.3
Fabric
15h ago 1
26.2
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
26.3 26.2 26.1.2 +2
Paper
15h ago 1
26.3
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.1.2
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.20.1
Fabric
15h ago 1
26.2 26.1.2 1.21.x +1
Paper
15h ago 1
1.20.1
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
26.1.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.2 26.1.2 1.21.x +1
Paper
15h ago 1
1.20.1
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
26.1.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.1.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.20.1
Fabric
15h ago 1
1.20.1
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
26.2
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
26.2
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.20.1
Fabric
15h ago 1
1.21.11
Fabric
15h ago 1
1.21.1
Fabric
15h ago 1
1.20.1
Fabric
15h ago 1
## Changes

  • Adds /bpm reload (aliases: /paperbpm reload, /betterplayermodel reload) with the bpm.command permission. It reloads configuration and models off the tick thread, then resynchronizes connected players.
  • Fixed bundled parser compatibility with legacy format-32 model caches that have no optional image table.

## Thanks

Special thanks to [@joeyep114514](https://github.com/joeyep114514) for the PaperBPM hot-reload command pull request (#2).

## Changes

  • Fixed compatibility with older model caches: models without an optional background-image table now load instead of failing during lazy parsing.
  • Fixed lazy model loading with incomplete footer metadata and archives whose legacy Chinese ZIP entry names require GBK decoding.
  • Fixed custom fishing-hook rendering crash caused by an invalid render context.
  • Fixed model upload and synchronization IDs: names normalized by the server (for example, femme soule to femme_soule) no longer produce duplicate cards, failed selection, or redundant uploads.
  • Repaired remaining export status and error translations.
  • Repaired mojibake in resources and Java sources, restored UTF-8/CJK text, and translated remaining Chinese code comments.

## Thanks

Special thanks to [@joeyep114514](https://github.com/joeyep114514) for the internationalization pull request (#3).

## Changes

  • Fixed compatibility with older model caches: models without an optional background-image table now load instead of failing during lazy parsing.
  • Fixed lazy model loading with incomplete footer metadata and archives whose legacy Chinese ZIP entry names require GBK decoding.
  • Fixed custom fishing-hook rendering crash caused by an invalid render context.
  • Fixed model upload and synchronization IDs: names normalized by the server (for example, femme soule to femme_soule) no longer produce duplicate cards, failed selection, or redundant uploads.
  • Repaired remaining export status and error translations.
  • Repaired mojibake in resources and Java sources, restored UTF-8/CJK text, and translated remaining Chinese code comments.

## Thanks

Special thanks to [@joeyep114514](https://github.com/joeyep114514) for the internationalization pull request (#3).

## Changes

  • Fixed compatibility with older model caches: models without an optional background-image table now load instead of failing during lazy parsing.
  • Fixed lazy model loading with incomplete footer metadata and archives whose legacy Chinese ZIP entry names require GBK decoding.
  • Fixed custom fishing-hook rendering crash caused by an invalid render context.
  • Fixed model upload and synchronization IDs: names normalized by the server (for example, femme soule to femme_soule) no longer produce duplicate cards, failed selection, or redundant uploads.
  • Repaired remaining export status and error translations.
  • Repaired mojibake in resources and Java sources, restored UTF-8/CJK text, and translated remaining Chinese code comments.

## Thanks

Special thanks to [@joeyep114514](https://github.com/joeyep114514) for the internationalization pull request (#3).

## Changelog (1.0.2)
  • Synced the bundled YSM parser with the mod's 1.1.4a parser update (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26, sub-entity footers with multiple entity names) now load correctly on Paper servers.


Still beta. Please report any issues if found.
## Changelog (1.1.4a)
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.
  • First release for Minecraft 26.3.**

If a model still shows as default after updating, delete your config/better_player_model/cache folder once - older builds could cache wrongly parsed data.
## Changelog (1.1.4a)
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.

If a model still shows as default after updating, delete your config/better_player_model/cache folder once - older builds could cache wrongly parsed data.
## Changelog (1.1.4a) — Legacy
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.
  • This version line is now in Legacy mode:** it receives critical fixes only. Actively maintained builds: 26.3 / 26.2 / 1.21.11 - updating is recommended.

If a model still shows as default after updating, delete your config/better_player_model/cache folder once - older builds could cache wrongly parsed data.
## Changelog (1.1.4a)
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.


If a model still shows as default after updating, delete your config/better_player_model/cache folder once — older builds could cache wrongly parsed data.
## Changelog (1.1.4a) — Legacy
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.
  • This version line is now in Legacy mode:** it receives critical fixes only. Actively maintained builds: 26.3 / 26.2 / 1.21.11 — updating is recommended.

If a model still shows as default after updating, delete your config/better_player_model/cache folder once - older builds could cache wrongly parsed data.
## Changelog (1.1.4a) — Legacy
  • Updated the built-in YSM parser (OpenYSM 0.3.6):** new encrypted .ysm models (format > 26) that the previous parser rejected now load correctly instead of falling back to the default model.
  • This version line is now in Legacy mode:** it receives critical fixes only. Actively maintained builds: 26.3 / 26.2 / 1.21.11 — updating is recommended.

If a model still shows as default after updating, delete your config/better_player_model/cache folder once - older builds could cache wrongly parsed data.
[1.0.1-paper] PaperBPM 1.0.1 by Zhoporez on Oct 15, 2026
Download
## PaperBPM 1.0.1 Beta

  • Potentially fixed an issue where a player joining with an empty model cache could fail to see models already selected by other players after the download completed.
  • Added bounded model-state resynchronization after catalog delivery and after the final model transfer chunk is sent.
  • The existing Better Player Model client protocol remains unchanged.

This is a beta release.
## Better Player Model 1.1.4

  • Fixed (hopefully) model flickering and incorrect depth/layer overlap on complex models, including hair, faces, clothing, and projectiles.
  • Fixed movement animation transitions, including switching from forward sprinting to backward movement.
  • Improved animation smoothness for model previews in menus and the inventory.
## Better Player Model 1.1.4

  • Fixed (hopefully) model flickering and incorrect depth/layer overlap on complex models, including hair, faces, clothing, and projectiles.
  • Fixed movement animation transitions, including switching from forward sprinting to backward movement.
  • Improved animation smoothness for model previews in menus and the inventory.
## Better Player Model 1.1.4

  • Fixed (hopefully) model flickering and incorrect depth/layer overlap on complex models, including hair, faces, clothing, and projectiles.
  • Fixed movement animation transitions, including switching from forward sprinting to backward movement.
  • Improved animation smoothness for model previews in menus and the inventory.
## Better Player Model 1.1.4

  • Fixed (hopefully) model flickering and incorrect depth/layer overlap on complex models, including hair, faces, clothing, and projectiles.
  • Fixed movement animation transitions, including switching from forward sprinting to backward movement.
  • Improved animation smoothness for model previews in menus and the inventory.
## Better Player Model 1.1.4

  • Fixed (hopefully) model flickering and incorrect depth/layer overlap on complex models, including hair, faces, clothing, and projectiles.
  • Fixed movement animation transitions, including switching from forward sprinting to backward movement.
  • Improved animation smoothness for model previews in menus and the inventory.
Beta Paper plugin for Better Player Model.

Enables server-side model synchronization without installing BPM mod on the server (STILL NEEDED ON CLIENT!). Supports model uploads, saved model selections, and synchronization between players.

Compatible with all (hopefully) modern Better Player Model builds.

it's beta tho. Please report any issues if found.
## Changes
  • Set release version to 1.1.3 across all supported Fabric builds.
  • Removed the client chat warning shown when joining servers without the server-side YSM/BPM mod.
  • Added a mod settings toggle for hiding/showing vanilla player name tags on players using custom models.
  • Fixed name-tag rendering hooks for 1.21.11 / 26.x render-state branches to avoid startup mixin failures.

## Changes
  • Set release version to 1.1.3 across all supported Fabric builds.
  • Removed the client chat warning shown when joining servers without the server-side YSM/BPM mod.
  • Added a mod settings toggle for hiding/showing vanilla player name tags on players using custom models.
  • Fixed name-tag rendering hooks for 1.21.11 / 26.x render-state branches to avoid startup mixin failures.

## Changes
  • Set release version to 1.1.3 across all supported Fabric builds.
  • Removed the client chat warning shown when joining servers without the server-side YSM/BPM mod.
  • Added a mod settings toggle for hiding/showing vanilla player name tags on players using custom models.
  • Fixed name-tag rendering hooks for 1.21.11 / 26.x render-state branches to avoid startup mixin failures.

## Changes
  • Set release version to 1.1.3 across all supported Fabric builds.
  • Removed the client chat warning shown when joining servers without the server-side YSM/BPM mod.
  • Added a mod settings toggle for hiding/showing vanilla player name tags on players using custom models.
  • Fixed name-tag rendering hooks for 1.21.11 / 26.x render-state branches to avoid startup mixin failures.

## Changes
  • Set release version to 1.1.3 across all supported Fabric builds.
  • Removed the client chat warning shown when joining servers without the server-side YSM/BPM mod.
  • Added a mod settings toggle for hiding/showing vanilla player name tags on players using custom models.
  • Fixed name-tag rendering hooks for 1.21.11 / 26.x render-state branches to avoid startup mixin failures.

### v1.1.2a - Bug fixes
  • Vanilla Player Default Model Bug:** Fixed a bug where players without the mod (using vanilla clients) would initially render their vanilla skins, but after dying, switching dimensions, or rejoining, would incorrectly render with a blank/default YesSteveModel model. This was caused by the client incorrectly initializing the model state when copying the entity capability on respawn.
### v1.1.2a - Bug fixes
  • Vanilla Player Default Model Bug:** Fixed a bug where players without the mod (using vanilla clients) would initially render their vanilla skins, but after dying, switching dimensions, or rejoining, would incorrectly render with a blank/default YesSteveModel model. This was caused by the client incorrectly initializing the model state when copying the entity capability on respawn.
### v1.1.2a - Bug fixes
  • Vanilla Player Default Model Bug:** Fixed a bug where players without the mod (using vanilla clients) would initially render their vanilla skins, but after dying, switching dimensions, or rejoining, would incorrectly render with a blank/default YesSteveModel model. This was caused by the client incorrectly initializing the model state when copying the entity capability on respawn.
### v1.1.2a - Bug fixes
  • Vanilla Player Default Model Bug:** Fixed a bug where players without the mod (using vanilla clients) would initially render their vanilla skins, but after dying, switching dimensions, or rejoining, would incorrectly render with a blank/default YesSteveModel model. This was caused by the client incorrectly initializing the model state when copying the entity capability on respawn.
### v1.1.2a - Bug fixes
  • Vanilla Player Default Model Bug:** Fixed a bug where players without the mod (using vanilla clients) would initially render their vanilla skins, but after dying, switching dimensions, or rejoining, would incorrectly render with a blank/default YesSteveModel model. This was caused by the client incorrectly initializing the model state when copying the entity capability on respawn.
### Changelog
  • Fixed critical server-side deadlock:** Resolves an issue where a client disconnecting mid-sync would cause a permanent thread loop in ServerModelManager, eventually halting all model downloads for other players.
  • Updated metadata:** Corrected version strings to 1.1.2 across fabric.mod.json, build.gradle, and gradle.properties for all variants.
### Changelog
  • Fixed critical server-side deadlock:** Resolves an issue where a client disconnecting mid-sync would cause a permanent thread loop in ServerModelManager, eventually halting all model downloads for other players.
  • Updated metadata:** Corrected version strings to 1.1.2 across fabric.mod.json, build.gradle, and gradle.properties for all variants.
Better Player Model Icon
Download Better Player Model
Select game version
Select platform