New Feature
- Added permission
feathermorph.custom_textforentity/custom_name,mannequin/description, andmannequin/hide_descriptionproperty, and it's available for players by default - Mannequin and Copper Golem disguise is now available for Server Renderer
- Would require PacketEvents built from This PR
Other
- Several disguise property changes, players will need to update their mod to 0.16.0-beta.2!
- Merged
mannequin/skin_internalandmannequin/skinproperty.mannequin/skinproperty is now used for skin input and property syncing - Changed how plugin syncs
mannequin/skinto the player entity/custom_nameandmannequin/descriptionnow accept JSON text component starting with{player/skinnow acceptsGameProfilecompound stringmannequin/skinnow accepts a valid string forMorphResolvableProfileStructstarting with{
- Merged
This is a beta release for 1.21.9. Please note that this release may not support displaying Mannequin and Copper Golem disguise using Server Renderer as PacketEvents haven't been updated yet.
New Features
- API version is now 16
- Skin for player disguise and Equipment for any entity disguise are now managed as disguise properties
- Compatibility for clients that don't support disguise properties will end at 2026, or when 1.22 comes out
- 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/skinproperty is restricted to ops, as the plugin will try to fetch and cache skin from the given input. You can setfeathermorph.custom_skinpermission 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
- Currently requires a custom plugin, which can be found at https://github.com/MATRIX-feather/pingwheel-plugin-forked
Bug Fixes
- Several bugs with Player disguises when
feathermorph.disguise_use_real_uuidis set to true- Players got removed from their TAB view when undisguising
- Disguise not presenting when teleported from far away, or switching gamemode from spectator
Other
- Removed disguise NBT blacklist configuration
- As they are not being used anymore
Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.4.3...2.5.0-beta.2
This release may require some manual operations
Disguise Tool and Magic Bottle's recipe is now registered using a datapack. While this can allow you to customize even more, you would need to install a recipe management plugin if you wish to disable one of them specifically.
If you have already disabled recipes using a management plugin, then no operations would be required. (As the datapack is using the same recipe ID as the old behavior)
You might also want to read the 2.4.1 changelog if you are updating from older versions.
New Features
- The collected result for the empty Magic Bottle is now a loot table
- By default, the plugin will process all output items that come from the loot table
- You can set custom data
feathermorph:skip_magic_bottle_setuptotrueto make the plugin skip a specific item - For more details, see the Loot table datapack
- Due to a limitation, not all loot table types are supported. Currently,
emptyandentityare tested to work well
- Added permission
feathermorph.acquire_morphto control whether a specific player can unlock disguises via gameplay - Added permission
feathermorph.disguise_use_real_uuidto control whether a disguise should use the player's real UUID for the virtual entity- This may help to improve compatibility with Simple Voice Chat, etc.
- However, this should be tricked as a hack or workaround
- Players are now able to discard their unlocked disguises using the
/discard-morphcommand
Bug Fixes
- Cat and Wolf disguises don't have collar color property applied if targeting a valid entity
/fm make_disguise_toolcommand not registering- AI Modification failed to inject and caused a log spam for some setup
Other
- AI Modification is now disabled by default for new installations
- We now use NMS to inject goals again, as using the API is causing issues...
Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.4.2...2.4.3
This release may require some manual operations
Disguise Tool and Magic Bottle's recipe is now registered using a datapack. While this can allow you to customize even more, you would need to install a recipe management plugin if you wish to disable one of them specifically.
If you have already disabled recipes using a management plugin, then no operations would be required. (As the datapack is using the same recipe ID as the old behavior)
This version is known to have issues with AI modification on Folia. We recommend disabling this feature on Folia servers ASAP
Bug Fix
- Some mobs don't panic from players where they should
- Cats and Ocelots are missing an attack goal for players' disguise
- Tamed mobs still run the custom attack goal
Other
- Removed debug output ("ToAvoid is xxxxx") spamming in
MorphBasicAvoidPlayerGoal - Ensure that the target entity is on the same thread as the running mob in
MorphBasicAvoidPlayerGoal- Nobody reported relevant issues before, but just in case :D
This release may require some manual operations
Disguise Tool and Magic Bottle's recipe is now registered using a datapack. While this can allow you to customize even more, you would need to install a recipe management plugin if you wish to disable one of them specifically.
If you have already disabled recipes using a management plugin, then no operations would be required. (As the datapack is using the same recipe ID as the old behavior)
We made a lot of changes in this release, while we made our best to eliminate bugs, there may still be some that we haven't found!
New Features
- Disguising with invalid property inputs will now throw error messages to the player and refuse to disguise, instead of using the default values
- Property inputs are now included in
PlayerMorphEarlyEvent - Added support for Cat/Wolf collar color property
- Implemented Guardian disguise skill
- Requires a mod update for players to see their skill target in their sight
- Dolphin and Axolotl disguises will now give players extra air
- Added
#feathermorph:magic_bottle_collectableentity tag- Mobs in this tag will be available for collecting the disguise using the Magic Bottle
- Empty Magic Bottle items with more than 1 amount are also available to collect disguises now
Bug Fixes
- Collected Magic Bottles no longer working
snow_golem/pumpkin,zoglin/is_baby, andzombie/is_babyproperty don't have a TAB-completion list where they shouldburns_under_sunno longer working
Other
- We have changed our licence from MIT to GPLv3
- Open source licence is now included in the Jar file
- Disguise Tool and Magic Bottle's recipe is now registered using a datapack
- Reworked skill/ability configuration read/write
- Reworked skill handling
- If you are experiencing issues with skill/ability configuration loading, please let me know!
- Reworked Mob AI modifying for less dependence on NMS
- Removed Mob AI recovery methods
- Please restart the server once the relevant config is changed
- Icons in the server-side disguise selection GUI now use Snowball + Item Model to present
potion_on_attackability now requires potion ID, instead of their Spigot enum name- Changed translations for zh_CN
- Replaced usage of 伪装 with 变形/形态
- It's now possible to enable debug commands by creating
cmd_debug.txtin the plugin's data folder- Warning! This feature is not intended for use in a production environment. Enabling this feature will cause issues!
- The night vision ability no longer applies the potion particle to the player
entity/custom_nameproperty now has a limit of 256 characters for user input, and a 50-character limit for the final textentity/custom_namenow no longer accepts empty inputs- Disguise Bossbar will now read texts from the
entity/custom_nameproperty if it has been set - Player disguises now no longer accept
entity/custom_nameinputs- However, the Ender Dragon disguise still accepts, and currently this is an intended feature :D
- The default value for
armor_stand/show_armswill now be set to the configured value in the config again DisguiseStateinstances will now update themselves, instead of updating fromMorphManagerWe are not connected with master server! Refusing to update unlock state...message is now logged as errors instead of warnings
API
- Property inputs are now included in
PlayerMorphEarlyEvent
Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.4.0...2.4.1
New Feature
- Replaced usage of NBT with Disguise Property in disguises by @MATRIX-feather in https://github.com/NiFeather/FeatherMorph/pull/46
- This affects disguise building and syncing
- This feature allows players to customize their disguise more without needing to create an entity first.
- Players will need to upgrade their client mod. Support for clients implementing legacy APIs that use NBT to sync disguise is planned to end when 1.22 arrives or we reach 2026
- Permission control for customizing properties is currently not implemented.
- For more details, please check https://github.com/NiFeather/FeatherMorph/pull/46
- For Residence integration:
- Players inside a residence without the
placepermission will no longer be able to leave a snow trail when disguised - Players inside a residence without the
usepermission will no longer be able to activate their disguise skill
- Players inside a residence without the
Other
- Tweaked the listening priority of PlayerRegisterChannelEvent in CommonEventProcessor
- To shut someone up, making them not spam me in dm about HuskSync broke mod features again
New Feature
- It's now possible to set the player disguise's main hand by setting the
main_handproperty - Players can now consume any item with valid components to unlock new disguises.
/fm querycommand now accepts multiple players as the argument/request sendcommand now accepts multiple players as the argument
Bug Fixes
- Fixed a long-existing issue where toggling the
Modify Boundingboxesoption doesn't notify clients to reconnect correctly - Sometimes the server's emote GUI doesn't display emote names.
- Offline disguise always fails the UUID check
- Fixed a potential issue where Player Disguises' waypoint doesn't get removed when the player logs out
Other
- We now use
addTransientModifierto add attribute modifiers- Which means that the modifier we add will no longer get saved by the game anymore.
- Disguises with
morph:fake_equipskill now always copy to display the valid target entity's equipment by default, even if it's empty. - Use
getListeningPluginChannelsto check the player's registered plugin channels
API
- API level is now 5
- Now it's possible to get the plugin's preferred and all supported plugin channels via the API
- It's now possible to listen to whether the plugin panicked
- Currently, only when the Minecraft version is not supported, this plugin will panic
- Replaced usage of
runWhenAPILoadedtogetApiFuture, which returns aCompletableFuture <FeatherMorphAPI> - Added
PlayerConnection, which can be used to listen for player client login, get their implementing API, or disconnect them. Disconnecting a client now requires anExceptionas a reason.
This release aims to address several issues with disguise waypoints.
Bug Fixes
- Server crash when traveling between worlds if disguised as a player, when MorphAzimuthWaypointConnection is being used
- MorphAzimuthWaypointConnection has a relatively large deviation
- Disguise waypoint doesn't follow when players travel between worlds
Bug Fix
Server crash when disguising as a player, if PacketEvents is not installed1.21.4 is not affected
Other
- Added language file ru_ru.json
- Some attempt to fix potential thread-safety issues
Bug Fix
- Server crash when disguising as a player, if PacketEvents is not installed
Other
- Some attempt to fix potential thread-safety issues
Bug Fixes
- Fixed some potential issues
Other
- Added Sentry Logger
- Sentry Logger is a kind of telemetry, and we use it to upload errors that occur in FeatherMorph automatically
- This feature is disabled by default, you can check the config file for more details
We recommend upgrading to this hotfix release to prevent a potential bug in AI modification that can cause entities to be removed by the server.
New Feature
- Disguising as Happy Ghast now allows players to fly
Bug Fix
- Fixed a bug where MorphManager#getDisguiseStateFor(Player) would throw an unexpected exception, which can cause FeatherMorphNearestAttackableGoal to fail and related entities to disappear
We recommend upgrading to this hotfix release to prevent a potential bug in AI modification that can cause entities to be removed by the server.
Bug Fix
- Fixed a bug where
MorphManager#getDisguiseStateFor(Player)would throw an unexpected exception, which can causeFeatherMorphNearestAttackableGoalto fail and related entities to disappear
Please note that stepping on players disguised as Happy Ghasts for a while might result in being kicked by the server for flying. Enabling allow-flight in the server.properties might help resolve the issue.
You might also want to check the 2.2.0 changelog.
Other
- We are now 1.21.7
Please note that stepping on players disguised as Happy Ghasts for a while might result in being kicked by the server for flying. Enabling allow-flight in the server.properties might help resolve the issue.
You might need the latest 2.9.0 PacketEvents development build, which can be found on their description page.
New Feature
- Implemented Disguise Waypoint feature
- This will replace the player's waypoint while they are disguising themselves
- Added support for Ghastling variant for Happy Ghast
Bug Fix
- Zombie villager watcher using the wrong value set when applying the villager type and profession
Changelog translated via DeepSeek, with some manual proofreading
New Features
- Implemented new mod communication protocol
- V2 (1.21.3 ~1.21.4) and V1 (1.21.3-) are still supported by the plugin
- Added Magic Bottle
- Can collect disguises of friendly mobs and other players
- Can be crafted using Redstone and Glass Bottle, sneak and interact an entity to collect
- Corresponding permission nodes: Use (
feathermorph.magic_bottle.use) and Exclude(feathermorph.magic_bottle.exclude)- "Use" node determines if a player can use the Magic Bottle functionality
- "Exclude" node determines if a player can be targeted for form collection
- Particle effects now appear when players unlock new disguises
- Added mod/resource pack localization support for new plugin items
- Added variant support for Pigs, Cows, and Chickens in 1.21.5
- Added aggressive animation for the evoker skill
- Added experimental interaction mirror controller
BY_RANGE- For players using client integration, we recommend installing the latest 1.21.5 mod version (≥ 0.11.2) to avoid potential issues
- When enabled, actions will sync to both the original target and nearby players disguised as that target
- If a player isn't disguised, actions will sync to nearby players disguised as them
/fm statcommand now displays the current player data backend
Bug Fixes
- Evoker ability fixes:
- Fixed Fangs not spawning on slabs or spawning at incorrect positions
- Fang spawning is no longer affected by player pitch/yaw
- Quick disguise can be attempted on non-LivingEntity entities
- Fixed console command autocomplete spamming
This command is currently only available to players.
Miscellaneous
- Migrated from ProtocolLib to PacketEvents
- Now FeatherMorph requires PacketEvents 2.8.0 or later to use the Server Renderer!
- Removed ModelEngine support
- Changed behavior for Instance Network
- Notice! Version 2.x instance networks are INCOMPATIBLE with 1.x versions!
- Sub-instance servers will now sync player data from the main server upon connection, rather than reading from local plugin directories
- Moved API events to
xyz.nifeather.morph.api.events- API version is now 3
- Added new API event
DataStoreSwitchEvent- Triggers when
MorphManagersets a new data storage backend
- Triggers when
- Added some workarounds for Towny integration issues on Folia
- Plugin will now attempt to revert changes made to the player when they leave the server
- Attempted fix for
java.net.BindException: Address already in useduring instance network restarts on Linux - Tweaked Evoker ability implementation:
- The plugin will now attempt to keep vexes summoned near the summoner
- Summoned vexes will now attempt to attack the target more aggressively
- Players can always summon Vexes by sneaking when the server difficulty is Peaceful
- A maximum of 6 Vexes can be summoned per player
- Summoned Vexes are removed when the player undisguises
- Removed player list modification functionality
- Adjusted attack animation trigger conditions
- Improved implementation of the Disguise Selection server GUI
- Player head disguise no longer includes cancel-disguise behavior
- Bumped Java-WebSocket from 1.5.7 to 1.6.0
- Re-migrate attribute modifiers in skill configurations to resolve Windows migration bugs
- Update checks now return more detailed results
This release fixes a critical bug that may occur on Folia and causes invisible disguises in the previous 2.0.0 beta/rc releases.
Glad we caught this before the final 2.0.0/2.1.0 release :v


