PaperMC / Paper

The most widely used, high performance Minecraft server that aims to fix gameplay and mechanics inconsistencies
https://papermc.io/
Other
10.03k stars 2.33k forks source link

Collidable #11440

Open Jakush opened 1 month ago

Jakush commented 1 month ago

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.

electronicboy commented 1 month ago

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

Jakush commented 1 month ago

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.