*Starting from 2025/11/3 (YYYY/MM/DD), we have split the 1.21.10 branch to 1.21.10/main and 1.21.10/feature.*
*If you cloned the repo before, you might want to delete the locally stored 1.21.10 branch before pulling any updates!*
---
# Changes in 2.5.1
## Bug Fix
- Empty input for `entity/equipment` would cause unhandled exceptions
---
# Changes in 2.5.0
## New Features
- **It's now possible for players to save their disguise and apply their locally stored disguises**
- This requires players to use 0.16.0-beta.5 or higher version of the client mod!
- Added permission `feathermorph.custom_text` for `entity/custom_name`, `mannequin/description`, and `mannequin/hide_description` property, and it's available for players by default
- Added permission for using disguise properties: `feathermorph.disguise_properties.use`
- Added permission for setting a custom skin profile for items in `entity/equipment` property, restricted to ops by default: `feathermorph.disguise_properties.custom_skin_on_items`
- Added support for Mannequin disguise
- Mannequin disguise is not collectable using the Magic Bottle by default
- Mannequin disguises have the Fake Equip skill, like Armor Stand and Player disguise
- `mannequin/skin` property is restricted to ops by default. You can set `feathermorph.custom_skin` permission for players so they can use this property.
- Added support for Copper Golem disguise
- Copper Golem disguise is collectable using the Magic Bottle by default
- Added Weather State property for Copper Golem disguise
- Initial compatibility(?) for Ping Wheel
- Using the official Ping Wheel plugin **will work**, but pinging while disguising doesn't mask the pinger
- ...So I made a custom plugin to temporarily solve the problem, which can be found at https://github.com/MATRIX-feather/pingwheel-plugin-forked
- Initial support for players with permission `feathermorph.mirror.mannequin` to mirror their sneaking actions to mannequins that have the same name and description as their disguise
- For BY_NAME executor, mannequins within a range are selected, while setting the affect distance to -1 would disable the range limit
- For BY_SIGHT and BY_RANGE, the targeting mannequin within 5 blocks of sight will be selected
## Bug Fixes
- Several bugs with Player Disguises when `feathermorph.disguise_use_real_uuid` permission is given
- Players got removed from their TAB view when undisguising
- Disguise not presenting when teleported from far away, or switching gamemode from spectator
- `slime_magma/size` property has a wrong random range
- Nobody is calling `BaseLivingEntityProperties#setupPropertiesFromEntity` in the override methods
- This makes disguises that have extra properties not copy the target entity's custom name.
## Other
- **We are planning to remove the BY_RANGE mirror executor in the future, as it's causing chaos when we have players with bad networking**
- Some exceptions thrown will now be forwarded to DisguiseState and will undisguise the player
- Tweaked how Server Renderer rebuilds entity metadata packets sent from the server
- Removed disguise NBT blacklist configuration
- As they are not being used anymore
- `entity/custom_name` and `mannequin/description` now accept JSON text component starting with `{`
- Moved some disguise validation to early disguise preparation
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }