Rideable entities disguised as other entities can be ridden but not controlled.
James103 opened this issue ยท 6 comments
To reproduce:
- Starting with Minecraft 1.16.5, install Fabric loader and Fabric API.
- Install
mobdisguises-1.0.0-fabric
anddisguiselib-1.0.2-fabric
. - Create a new world with cheats enabled.
- Find a horse and tame it.
- Give yourself a saddle and equip it on the horse.
- Run
/disguise @e[type=horse] as spider
(optionally replacingspider
with any other non-horse entity) - Click on the (disguised) horse to ride it.
- Try to control the horse.
Issue on MobDisguises end: samolego/MobDisguises#4
I can still reproduce both problems using MobDisguises 1.0.4 and DisguiseLib 1.0.8 on Minecraft 1.17.1.
In addition, disguise @e[type=horse] clear
on a nearby horse does not make the horse controllable until you reload the entity.
This is more or less limitation of Vanilla client. But it could still be somewhat worked around
This also happens with Striders:
- Starting with Minecraft 1.16.5, install Fabric loader and Fabric API.
- Install
mobdisguises-1.0.0-fabric
anddisguiselib-1.0.2-fabric
. - Create a new world with cheats enabled.
/summon strider
/give @p warped_fungus_on_a_stick
/give @p saddle
- Use the saddle on the strider, then ride it while holding the Warped Fungus on a Stick.
- Notice that the (undisguised) strider can be controlled properly.
/summon minecraft:strider ~ ~ ~ {CustomName: '""', DisguiseLib: {DisguiseType: "minecraft:player", DisguiseAlive: 1b}, UUID: [I;-1075014358,-807843482,-1879089003,1077279333]}
(summons a Strider disguised as a player)/give @p saddle
- Use the saddle on the (disguised) strider, then ride it while holding the Warped Fungus on a Stick.
- Notice that you can't properly control the (disguised) strider (it does not move while being ridden by you).
I believe that will happen with any entity that can be ridden but disguised as "non-controllable" (e.g. boats, minecarts disguised as other mobs ...), as entity riding is done by the client afaik.
That's also why hacked clients allow you to control llamas / horses without saddles (if I know correctly).
Fabric Carpet mod already shows that server receives movement inputs from players, in PlayerInputC2SPacket
(more specifically at least p.getSideways(), p.getForward(), p.isJumping(), p.isSneaking()
where p
is the player), and various public servers that have rideable entities make the entity's movement server side. This would theoretically allow for any entity to be rideable and controllable server-side as long as it is actually a disguise of a rideable entity. Could this server-side controllable entity movement be implemented in DisguiseLib?