NOTICE!
Support for the legacy permission nodes is now ended!
Please make sure ALL related permissions are moved to the new prefix feathermorph.XXX
before updating!
New Features
- Added initial support for specifying disguise properties (variants)
- Currently only through the disguise command!
- The usage is:
/morph <id> <properties>
- For example, to disguise as an Armor Stand with arms:
/morph minecraft:armor_stand [armor_stand_show_arms=true]
- For multiple properties:
/morph foo:bar [property1=value1, property2=value2, ...]
- For example, to disguise as an Armor Stand with arms:
- It's now possible to specify worlds that disabled the disguise feature through the config
config.yml > world_option > disabled_worlds
- Wither Skeleton disguise now can make the player immune from the wither effect
- Added new placeholder
feathermorph_state_provider_is?<namespace>
, to identify the category (The namespace) of the player's disguise- For example, to identify whether a player is using a player disguise:
feathermorph_state_provider_is?player
- To identify whether a player is disguised as a mob:
feathermorph_state_provider_is?minecraft
- For example, to identify whether a player is using a player disguise:
- Added new placeholder
feathermorph_state_id_is?<id>
, to identify whether a player is using a specific disguise.- For example, to identify whether a player disguises as Creaking:
feathermorph_state_id_is?minecraft:creaking
- For example, to identify whether a player disguises as Creaking:
Bug Fixes
- Client session not being cleared after player disconnects
- Placeholder expansions are no longer available after
/papi reload
- The plugin doesn't download Minecraft language file that matches the currently running version
- Towny integration tries to process an offline player when it has been added to a town
Other
- We're now a pure Paper plugin!
- That means Spigot servers are no longer able to load this plugin
- Support for legacy permission nodes (
xiamomc.morph.XXX
) is now DEPRECATED! Please move to the new permission node (feathermorph.XXX
)!- For example,
xiamomc.morph.chat_override
is nowfeathermorph.chat_override
- For example,
- Changed placeholder names from
morph_...
tofeathermorph_...
- Changed how FeatherMorph communicates with client mods
- Tweaked Placeholder expansions' behavior
- Now returns more specific feedback if the parameter is not valid or the player is not disguised
- Player disguises no longer have a Custom Name metadata
- We now use Brigadier to register commands
NOTICE!
Support for the legacy permission nodes is now ended!
Please make sure ALL related permissions are moved to the new prefix feathermorph.XXX
before updating!
New Features
- Added initial support for specifying disguise properties (variants)
- Currently only through the disguise command!
- The usage is:
/morph <id> <properties>
- For example, to disguise as an Armor Stand with arms:
/morph minecraft:armor_stand [armor_stand_show_arms=true]
- For multiple properties:
/morph foo:bar [property1=value1, property2=value2, ...]
- For example, to disguise as an Armor Stand with arms:
- It's now possible to specify worlds that disabled the disguise feature through the config
config.yml > world_option > disabled_worlds
- Players can now unlock the Creaking disguise by breaking a natural and active Creaking Heart
- Added two actions for Creaking disguise
- Illagers will now attempt to avoid players disguised as Creaking
- Wither Skeleton disguise now can make the player immune from the wither effect
- Added new placeholder
feathermorph_state_provider_is?<namespace>
, to identify the category (The namespace) of the player's disguise- For example, to identify whether a player is using a player disguise:
feathermorph_state_provider_is?player
- To identify whether a player is disguised as a mob:
feathermorph_state_provider_is?minecraft
- For example, to identify whether a player is using a player disguise:
- Added new placeholder
feathermorph_state_id_is?<id>
, to identify whether a player is using a specific disguise.- For example, to identify whether a player disguises as Creaking:
feathermorph_state_id_is?minecraft:creaking
- For example, to identify whether a player disguises as Creaking:
Bug Fixes
- Client session not being cleared after player disconnects
- Placeholder expansions are no longer available after
/papi reload
- The plugin doesn't download Minecraft language file that matches the currently running version
- Towny integration tries to process an offline player when it has been added to a town
Other
- We're now a pure Paper plugin!
- That means Spigot servers are no longer able to load this plugin
- Support for legacy permission nodes (
xiamomc.morph.XXX
) is now DEPRECATED! Please move to the new permission node (feathermorph.XXX
)!- For example,
xiamomc.morph.chat_override
is nowfeathermorph.chat_override
- For example,
- Changed placeholder names from
morph_...
tofeathermorph_...
- Changed how FeatherMorph communicates with client mods
- Tweaked Placeholder expansions' behavior
- Now returns more specific feedback if the parameter is not valid or the player is not disguised
- Player disguises no longer have a Custom Name metadata
- We now use Brigadier to register commands
NOTICE!
Support for the legacy permission nodes is now ended!
Please make sure ALL related permissions are moved to the new prefix feathermorph.XXX
before updating!
New Feature
- Now it's possible to specify worlds that disabled the disguise feature through the config
config.yml > world_option > disabled_worlds
Bug Fixes
- Placeholder expansions are no longer available after
/papi reload
- Some options are no longer tweakable through the
/fm option
command after moving to brigadier
Other
- Support for legacy permission nodes (
xiamomc.morph.XXX
) is now DEPRECATED! Please move to the new permission node (feathermorph.XXX
)!- For example,
xiamomc.morph.chat_override
is nowfeathermorph.chat_override
- For example,
- Tweaked Placeholder expansions' behavior
- Now returns more specific feedback if the parameter is not valid or the player is not disguised
New Feature
- Added initial support for specifying disguise properties (variants)
- Currently only through the disguise command!
- The usage is:
/morph <id> <properties>
- For example, to disguise as an Armor Stand with arms:
/morph minecraft:armor_stand [armor_stand_show_arms=true]
- For multiple properties:
/morph foo:bar [property1=value1, property2=value2, ...]
- For example, to disguise as an Armor Stand with arms:
Bug Fixes
- Cannot get key of Legacy Material happens when initializing Disguise Tool's recipe
- Opening GUI crashes the server if running recent versions of Paper
Other
- We're now a pure Paper plugin!
- That means Spigot servers are no longer able to load this plugin
- All child commands under
/fm manage
now accepts entity selectors (@a
,@p
, etc.) /fm reload
can be run without arguments once again (And it reloads config and language, just like before)
New Features
- Players can now unlock the Creaking disguise by breaking an activated Creaking Heart
- The state of the Creaking Heart can be found at
F3 -> Targeted Block -> "creaking: ..."
- The state of the Creaking Heart can be found at
- Added two actions for Creaking disguise
- Used for toggling eye glowing
Bug Fixes
- Client session not being cleared after player disconnects
- The plugin doesn't download Minecraft language file that matches the currently running version
Other
- Ignore Transient Creaking, and remove it from known disguises
Reupload because some baka uploaded the wrong artifact :)
New Features
- Added new placeholder
feathermorph_state_provider_is?<namespace>
, to identify the category (The namespace) of the player's disguise- For example, to identify whether a player is using a player disguise:
feathermorph_state_provider_is?player
- To identify whether a player is disguised as a mob:
feathermorph_state_provider_is?minecraft
- For example, to identify whether a player is using a player disguise:
- Added new placeholder
feathermorph_state_id_is?<id>
, to identify whether a player is using a specific disguise.- For example, to identify whether a player disguises as Creaking:
feathermorph_state_id_is?minecraft:creaking
- For example, to identify whether a player disguises as Creaking:
Bug Fix
- When using certain plugins, attacking others in regions that disabled PVP will still apply effects to them
Other
- Renamed placeholders from
morph_...
tofeathermorph_...
- Added warnings for hot load and reload
Reupload because some baka uploaded the wrong artifact :)
This version also comes with some changes in 1.3.2, for more details, see 1.3.2 changelog
New Feature
- Wither Skeleton disguise now can make the player immune from the wither effect
- Added new placeholder
feathermorph_state_provider_is?<namespace>
, to identify the category (The namespace) of the player's disguise- For example, to identify whether a player is using a player disguise:
feathermorph_state_provider_is?player
- To identify whether a player is disguised as a mob:
feathermorph_state_provider_is?minecraft
- For example, to identify whether a player is using a player disguise:
- Added new placeholder
feathermorph_state_id_is?<id>
, to identify whether a player is using a specific disguise.- For example, to identify whether a player disguises as Creaking:
feathermorph_state_id_is?minecraft:creaking
- For example, to identify whether a player disguises as Creaking:
Bug Fixes
- Yaw/Pitch convert error with Ender Dragon and Phantom disguise in server renderer
- When using certain plugins, attacking others in regions that disabled PVP will still apply effects to them
Other
- Changed placeholder names from
morph_...
tofeathermorph_...
- Changed how FeatherMorph communicates with client mods
- Legacy mods are still supported at least until the 1.22 update!
- Added warnings for hot load and reload
- Tweaked Creaking disguise's max health to 20
Bug Fix
- Fixed multiple Instance Network issues, including:
- It never starts
- The WebSocket server isn't closed upon configuration reload
- The WebSocket client doesn't get handled correctly upon configuration reload
- The client tries to reconnect multiple times on fail
Other
- Added workarounds for health modifiers
- Trying to solve some mysterious issues with health scaling
- Also, if you are using HuskSync or something else like it, you may want to add these attribute modifiers to the ignore list:
feathermorph:health_modifier
feathermorph:fm_health_modifier
- And also for these in case something strange happens:
minecraft:health_modifier
minecraft:fm_health_modifier
If your server has experimental features enabled, we suggest updating this version to avoid a dupe glitch!
Also if you're updating from 1.2.x, please also check the 1.3.0 changelog
Bug Fixes
- Quick disguise triggers ignoring the item held
- Disguises constructed from entities still apply random properties
Other
- Bump InventoryGUI
- Fixes an item dupe glitch
This version includes some changes related to permissions, please attention!
- Permissions will now use
feathermorph
as the prefix instead ofxiamomc.morph
, while other usages remain unchanged. - Support for legacy permission nodes will be removed in 1.5.0.
- Which is expected to be released with the 1.22 winter drop.
We recommend updating ProtocolLib to version 5.3.0, which you can download here.
New Features
- Inventory GUI for Disguise Action selection
- Added Disguise Tool
- This replaces the old skill item.
- By default, the disguise tool can be obtained through crafting using Feather + Redstone. The recipe can be configured in
recipes.yml
.
- Assuming we are using the default keybinds:
- Players can open the disguise selection GUI with Sneak + RMB, and unmorph themselves with Sneak + LMB.
- When disguising, use RMB to activate skills, and LMB to open disguise action selection.
- You can also execute the command
/fm make_disguise_tool
while holding an item to make it a Disguise Tool.
- Towny Integration
- It is now possible to set whether flying is allowed in the wilderness in worlds with Towny enabled.
- Players can also set whether their town allows flying through the command
/toggle-town-morph-flight
. By default, flying is allowed in all towns.- The permission node for this command is
feathermorph.toggle_town_fly
- The permission node for this command is
- Players can fly in towns that allow flying if they meet any of the following conditions:
- The player is a resident/mayor of the town.
- The player is trusted by the town.
- The player and the town belong to the same nation.
- The player's town is allied with the target town.
- Note! Due to the mysterious teleport event trigger conditions of Folia, there may be bypass issues on these servers.
- It is currently known that using the vanilla teleport command will not trigger the event, so avoid using this command to teleport others whenever possible.
Bug Fixes
- The packet that hides a player from other's TAB list is also sent to the hidden player
- And causes the hidden player’s client don't display their skin.
- Armor stand disguises do not correctly present the source entity’s pose.
- Creeper disguises do not have charged variants.
Other
- Changed permission prefix
- Permission nodes have changed from
xiamomc.morph.XXX
tofeathermorph.XXX
.
- Permission nodes have changed from
- Changed package name
- Package name has changed from
xiamomc.morph.XXX
toxyz.nifeather.morph.XXX
.
- Package name has changed from
- Tweaked Skill Configuration and Player Data Storage
- Skill configurations are now distributed in the
skills
directory, stored as<namespace>/<id>.json
.- For example, the skill configuration for
minecraft:sheep
is located atskills/minecraft/sheep.json
.
- For example, the skill configuration for
- Player configurations are now stored in the
playerdata
directory as<UUID>.json
. - The original
data.json
andskills.json
will be renamed todata.json.old
andskills.json.old
.
- Skill configurations are now distributed in the
- Added profile request batching
- Requests for player profiles in the plugin will now be processed in batches at intervals to prevent Mojang API from rejecting them with' 429 Too Many Requests` when many requests are made.
- Warden disguises will now become invisible after the digging animation finishes.
- Removed TAB integration
- It is no longer needed.
New Features
- (Experimental) Allow hiding disguised players from the TAB list
- (Experimental) Allow displaying player disguises on the TAB list
Other
- Removed suggestion about using the client mod
- Allow 1.21 servers for using this
- That said, we still suggest upgrading your server to 1.21.1 since 1.21 is no longer supported by Paper and we target the latest 1.21.1 API in the dev environment
- Tweaked some disguise's icon on the selection GUI
- The disguise selection GUI will now play sound when opening and flipping pages
- The UUID of the disguise now has a more specific rule to generate
- But the client still doesn't have much chance to crack it, as long as they don't have access to the plugin configuration
New Features
- Added Inventory GUI for disguise selection
- You can open it using the
/morph
command! With no arguments, it will open the GUI instead of complaining that there are not enough arguments.
- You can open it using the
- Now can configure whether players can fly in water/lava in different worlds
Bug Fix
- ServerSetEquipCommand doesn't construct the client command correctly
- And cause the client can't see the disguise's equipment
Other
- The undisguise operation now plays the same sound as the disguise op
- Avoid modifying the mob's AI twice
- I don't know why a modified mob could get passed to the plugin again, so let's make a workaround for this...
New Feature
Disguise Actions
Or Disguise Emotes/Animations
You can play the action using the client mod >= 0.6.4 or /play-action
command.
The permission node for the action is xiamomc.morph.emote.<DisguiseID>.<ActionID>
- You can check the Action ID using the
/play-action
command. - For example, the node of Allay Dancing action is
xiamomc.morph.emote.minecraft.allay.dance
- The node for Player disguises is
xiamomc.morph.emote.player.all.<ActionID>
Currently, these actions only have visual effects, they don't interact with the environment.
1.2.1 comes with these actions bundled:
Disguise | Action(s) |
---|---|
Allay | Dance |
Warden | Roar, Sniff, Dig down, Appear |
Armadillo | Roll up |
Cat | Lay, Sit |
Fox | Sit, Sleep |
Frog | Eat(Use tongue) |
Panda | Sit |
Piglin | Dance |
Player | Lay, Crawling |
Pufferfish | Inflate, Deflate |
Shulker | Peek, OPen |
Sniffer | Sniff |
Wolf | Sit |
Bug Fix
- Disguises are not recovered after reloading configuration
Other
- Tweaked the node of abilities and skills for player disguise
- It's now
xiamomc.morph.skill.player.all.<SkillID>
- It's now
This release mainly fixed several issues when running on Folia.
Bug Fixes
- Zombie Villager disguise doesn't have random variants
- Rabbit disguise doesn't have the Killer Bunny variant
- Fixed several issues with Folia, this includes:
- Can only disguise in overworld
- InteractionMirror may throw
async getEntities
when players are in different regions
Other
- Move the process of random variants from the server disguise renderer to MorphManager