Paper icon indicating copy to clipboard operation
Paper copied to clipboard

Collidable

Open Jakush opened this issue 1 year ago • 2 comments

Expected behavior

Using LivingEntity#setCollidable(boolean) should disable or enable collisions with the living entity.

Observed/Actual behavior

When setting collidable to false on Player, it collides with another entity no matter if it is set to false or true.

Steps/models to reproduce

  1. Spawn entity or obtain entity instance
  2. Get player instance
  3. Use setCollidable(false) on the player
  4. Collide with the entity :)

Plugin and Datapack List

[16:52:55 INFO]: Server Plugins (4): [16:52:55 INFO]: Bukkit Plugins: [16:52:55 INFO]: - FastAsyncWorldEdit, Multiverse-Core, ServerFramework, VoidGen

Paper version

[16:53:13 INFO]: Checking version, please wait... [16:53:14 INFO]: This server is running Paper version 1.21.1-99-master@1bc02e6 (2024-09-25T02:41:02Z) (Implementing API version 1.21.1-R0.1-SNAPSHOT) You are running the latest version Previous version: 1.21.1-98-9b1ee0d (MC: 1.21.1)

Other

I was doing this when command is issued using Brigadier, though I don't think that could cause any issues.

Jakush avatar Sep 26 '24 14:09 Jakush

if you only set it on the player, this is the expected behavior because collisions work both ways

electronicboy avatar Sep 26 '24 15:09 electronicboy

I have this logic which you say, should work:

Player player = context.getArgument("player", PlayerSelectorArgumentResolver.class).resolve(context.getSource()).getFirst();
disguiseManager.disguiseAsEntity(player, entityType.getEntityClass(), entity -> {
    player.getCollidableExemptions().add(entity.getUniqueId());
    if (entity instanceof LivingEntity livingEntity) {
        livingEntity.setAI(false);
        livingEntity.getCollidableExemptions().add(player.getUniqueId());
    }
});

However this does not work.

Jakush avatar Sep 26 '24 16:09 Jakush

setCollidable and collidable exemptions are purely server concepts, the player doesn't know it's not supposed to collide with a certain entity. The only way I can see that this could be fixed would be for the server to send team packets with collision set to never, but when dealing with plugins that may do the same it could become quite an ordeal.

Warriorrrr avatar Aug 03 '25 16:08 Warriorrrr