Mods
Resource Packs
Data Packs
Modpacks
Shaders
Plugins
Mods Resource Packs Data Packs Plugins Shaders Modpacks
Get Modrinth App Upgrade to Modrinth+
Sign in
ModsPluginsData PacksShadersResource PacksModpacks
Sign in
Settings
FeatherMorph

FeatherMorph

Yet another disguise plugin. Disguise as mobs and players, then acquire unique skills and abilities!

50.5k
87
Adventure
Game Mechanics
AboutGalleryChangelogVersions

2.5.1

by MATRIX-feather on Nov 27, 2025
Download

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

2.5.0-rc.5

by MATRIX-feather on Nov 9, 2025
Download

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!


Bug Fixes

  • Added SkinPatch support for ResolvableProfile, which fixes some skin setups not presenting properly on the client.
  • Explicitly declare whether a MorphResolvableProfileStruct is presenting a dynamic ResolvableProfile, which fixes some skin not displaying on the client side.
    • These two fixes above require players to update their client mod to 0.16.0-beta.6!
  • entity/custom_name always copies from the target entity, ignoring the entity's type
  • Nobody is calling BaseLivingEntityProperties#setupPropertiesFromEntity in the override methods
    • This makes disguises that have extra properties not copy the target entity's custom name.

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.4...2.5.0-rc.5

2.4.6

by MATRIX-feather on Nov 2, 2025
Download

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!

Bug Fix

  • StackOverflow when a player has a locale that is "en_US" rather than "en_us"

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.4.5...2.4.6

2.5.0-rc.4

by MATRIX-feather on Nov 2, 2025
Download

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!

Bug Fixes

  • Player disguise always copies the target player's skin, not checking conditions
  • StackOverflow when a player has a locale that is "en_US" rather than "en_us"

Other

  • Allow bukkitEntity is null for FoliaThreadUtils#isTickThreadFor
  • Make ServerBackend#disguise and SpawnPacketHandler#onEntityAddPacket fail softly if timed out waiting for the player's thread.
    • In beta.6, some exceptions are forwarded to the player's DisguiseState, including waiting timeouts when building virtual entity packets
    • Once timed out, the player will get unmorphed once ticked, even if it only affects the virtual entity displaying
    • This may improve player experience when the server is lagging

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.3...2.5.0-rc.4

2.5.0-rc.3

by MATRIX-feather on Oct 20, 2025
Download

Bug Fix

  • In previous 2.5.0 beta releases, sometimes the disguise reporting it fails to update and (may) cause nearby players to disconnect with a protocol error

Other

  • Catch JSON error when parsing client entity/equipment input and wrap it as a ParseErrorException, to tell players that the data is malformed

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.2...2.5.0-rc.3

2.4.5

by MATRIX-feather on Oct 20, 2025
Download

Bug Fix

  • Skill execution event not triggering

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.4.4...2.4.5

2.5.0-rc.2

by MATRIX-feather on Oct 20, 2025
Download

We are now slowly migrating our wiki to the docs/ directory under the repository. You can have a look if interested!

New Feature

  • [rc.1] Added permission for using disguise properties: feathermorph.disguise_properties.use
  • [rc.1] Added permission for setting a custom skin profile for items in entity/equipment property: feathermorph.disguise_properties.custom_skin_on_items

Bug Fix

  • [rc.2] Disguising as other entities can also trigger the Interaction Mirror for mannequins
  • [rc.2] The Interaction Mirror for mannequins triggers ignoring the difference in NPC description

Other

  • [rc.1] Moved some disguise validation to early disguise preparation
  • [rc.1] Bump PacketEvents to 2.10.0

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-beta.6...2.5.0-rc.2

2.5.0-beta.6

by MATRIX-feather on Oct 17, 2025
Download

New Feature

  • Players with permission feathermorph.mirror.mannequin are now able to apply the sneaking mirror to mannequins that have the same name 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
  • Bump API to 17
    • It's now possible for client mods to include property inputs in the C2S Morph command
  • Setting the Interaction Mirror Affect Distance (Control distance) in-game is now possible with /fm option mirror_control_distance

Bug Fix

  • Skill execution event not triggering
  • slime_magma/size property has a wrong random range

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

Full Changelog: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-beta.5...2.5.0-beta.6

2.4.4

by MATRIX-feather on Oct 12, 2025
Download

New Features

  • 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

  • Disguise status synced from slave servers doesn't really apply to the master server
  • Players got removed from their TAB view when undisguising, when feathermorph.disguise_use_real_uuid is set to true

2.5.0-beta.5

by MATRIX-feather on Oct 12, 2025
Download

Bug Fix

  • Disguise status synced from slave servers doesn't really apply to the master server

Other

  • We are now 1.21.10
  • We now compile against PacketEvents 2.10.0-SNAPSHOT dev build
    • So that CI is working again!

2.5.0-beta.3

by MATRIX-feather on Oct 6, 2025
Download

New Feature

  • Added permission feathermorph.custom_text for entity/custom_name, mannequin/description, and mannequin/hide_description property, 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_internal and mannequin/skin property. mannequin/skin property is now used for skin input and property syncing
    • Changed how plugin syncs mannequin/skin to the player
    • entity/custom_name and mannequin/description now accept JSON text component starting with {
    • player/skin now accepts GameProfile compound string
    • mannequin/skin now accepts a valid string for MorphResolvableProfileStruct starting with {

2.5.0-beta.2

by MATRIX-feather on Sep 30, 2025
Download

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/skin property is restricted to ops, as the plugin will try to fetch and cache skin from the given input. 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
    • 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_uuid is 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

2.4.3

by MATRIX-feather on Sep 22, 2025
Download

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_setup to true to 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, empty and entity are tested to work well
  • Added permission feathermorph.acquire_morph to control whether a specific player can unlock disguises via gameplay
  • Added permission feathermorph.disguise_use_real_uuid to 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-morph command

Bug Fixes

  • Cat and Wolf disguises don't have collar color property applied if targeting a valid entity
  • /fm make_disguise_tool command 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

2.4.2

by MATRIX-feather on Sep 16, 2025
Download

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

2.4.1

by MATRIX-feather on Sep 16, 2025
Download

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_collectable entity 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, and zombie/is_baby property don't have a TAB-completion list where they should
  • burns_under_sun no 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_attack ability 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.txt in 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_name property now has a limit of 256 characters for user input, and a 50-character limit for the final text
  • entity/custom_name now no longer accepts empty inputs
  • Disguise Bossbar will now read texts from the entity/custom_name property if it has been set
  • Player disguises now no longer accept entity/custom_name inputs
    • However, the Ender Dragon disguise still accepts, and currently this is an intended feature :D
  • The default value for armor_stand/show_arms will now be set to the configured value in the config again
  • DisguiseState instances will now update themselves, instead of updating from MorphManager
  • We 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

2.4.0

by MATRIX-feather on Aug 19, 2025
Download

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 place permission will no longer be able to leave a snow trail when disguised
    • Players inside a residence without the use permission will no longer be able to activate their disguise skill

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

2.3.5

by MATRIX-feather on Aug 17, 2025
Download

New Feature

  • It's now possible to set the player disguise's main hand by setting the main_hand property
  • Players can now consume any item with valid components to unlock new disguises.
  • /fm query command now accepts multiple players as the argument
  • /request send command now accepts multiple players as the argument

Bug Fixes

  • Fixed a long-existing issue where toggling the Modify Boundingboxes option 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 addTransientModifier to add attribute modifiers
    • Which means that the modifier we add will no longer get saved by the game anymore.
  • Disguises with morph:fake_equip skill now always copy to display the valid target entity's equipment by default, even if it's empty.
  • Use getListeningPluginChannels to 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 runWhenAPILoaded to getApiFuture, which returns a CompletableFuture <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 an Exception as a reason.

2.3.4

by MATRIX-feather on Aug 1, 2025
Download

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

2.0.3

by MATRIX-feather on Jul 28, 2025
Download

Bug Fix

  • Server crash when disguising as a player, if PacketEvents is not installed 1.21.4 is not affected

Other

  • Added language file ru_ru.json
  • Some attempt to fix potential thread-safety issues

2.3.3

by MATRIX-feather on Jul 28, 2025
Download

Bug Fix

  • Server crash when disguising as a player, if PacketEvents is not installed

Other

  • Some attempt to fix potential thread-safety issues
1
2
9

90% of ad revenue goes to creators

Support creators and Modrinth ad-free with Modrinth+
Filter

Show all versions

Modrinth is open source.

main@58dac27

© Rinth, Inc.

Company

TermsPrivacyRulesCareers

Resources

SupportBlogDocsStatus

Interact

Discord X (Twitter) Mastodon Crowdin
Get Modrinth App Settings
NOT AN OFFICIAL MINECRAFT SERVICE. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.