Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add onEntityCollide function when entity are above a block #6347

Closed
wants to merge 21 commits into from

Conversation

Dhaiven
Copy link
Contributor

@Dhaiven Dhaiven commented May 14, 2024

Introduction

PocketMine don't have function to detect if an entity are above a block.
So i add a function and fix the bug with magma block.
But there are other bug of this type (with top of cactus...), so i must to be fix in this pr or open an other pr to fix them ?

Relevant issues

Fix #2041

Changes

API changes

Add Block::onEntityCollide()

Follow-up

Tests

Add-Magma-Block-PMMP.mp4

@IvanCraft623
Copy link
Member

This does not really check if there is a collision so if there is a slab between the magma block and the player, the player will be burned.

@Dhaiven
Copy link
Contributor Author

Dhaiven commented May 15, 2024

This does not really check if there is a collision so if there is a slab between the magma block and the player, the player will be burned.

Thanks for the feedback, it's fixed

@jasonw4331 jasonw4331 added Category: Gameplay Related to Minecraft gameplay experience Type: Fix Bug fix, typo fix, or any other fix Status: Waiting on Author labels Jun 23, 2024
Copy link
Member

@IvanCraft623 IvanCraft623 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current implementation only works for collsions on down side. An appropriate solution to the problem would be to detect when colliding with any face of the block, not just one.

src/block/Block.php Outdated Show resolved Hide resolved
@Dhaiven
Copy link
Contributor Author

Dhaiven commented Jun 29, 2024

The current implementation only works for collsions on down side. An appropriate solution to the problem would be to detect when colliding with any face of the block, not just one.

Fixed

src/block/Magma.php Outdated Show resolved Hide resolved
src/entity/Entity.php Outdated Show resolved Hide resolved
ShockedPlot7560
ShockedPlot7560 previously approved these changes Jul 5, 2024
Copy link
Member

@ShockedPlot7560 ShockedPlot7560 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Look OK to me

src/block/Block.php Show resolved Hide resolved
@Dhaiven Dhaiven requested a review from dries-c July 18, 2024 16:01
@Dhaiven
Copy link
Contributor Author

Dhaiven commented Nov 30, 2024

We also still have hasEntityCollision() from those days

Why not keep this name and call this function just if hasEntityCollision return true ?
Moreover, this can be increase performance

@dktapps
Copy link
Member

dktapps commented Nov 30, 2024

We also still have hasEntityCollision() from those days

Why not keep this name and call this function just if hasEntityCollision return true ? Moreover, this can be increase performance

Because this will cause unexpected behaviour. No one expected these two functions to be bound together in the first place.

src/entity/Entity.php Outdated Show resolved Hide resolved
Copy link
Member

@dktapps dktapps left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like what we actually need for this is a function that gets called when an entity is inside an adjacent block. Then, it should be up to the block to decide how much distance is allowed between the entity and the block to apply the effects.

Copy link

This PR has been marked as "Waiting on Author", but we haven't seen any activity in 7 days.

If there is no further activity, it will be closed in 28 days.

Note for maintainers: Adding an assignee to the PR will prevent it from being marked as stale.

@github-actions github-actions bot added the Stale label Dec 10, 2024
@dktapps
Copy link
Member

dktapps commented Dec 16, 2024

A little update on this: I attempted to implement this with an "adjacent" check, but it turns out that the extended AABB collision scanning has a significant performance impact. I probably should've realized this sooner considering how much effort I previously invested into optimising AABB collision checking. Not sure what other options there are except specializing for this particular case.

@Dhaiven
Copy link
Contributor Author

Dhaiven commented Dec 16, 2024

I tried to create an onEntityInNearbyBlock that is called on every tick and implements the collision logic in that function for each block. I stopped because I'm not convinced by this solution and I can't find a better solution without performance issues

Copy link

This PR has been marked as "Waiting on Author", but we haven't seen any activity in 7 days.

If there is no further activity, it will be closed in 28 days.

Note for maintainers: Adding an assignee to the PR will prevent it from being marked as stale.

@github-actions github-actions bot added the Stale label Dec 25, 2024
Copy link

As this PR hasn't been updated for a while, unfortunately we'll have to close it.

@github-actions github-actions bot added the Resolution: Abandoned PR has been abandoned by its author label Jan 22, 2025
@github-actions github-actions bot closed this Jan 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: API Related to the plugin API Category: Gameplay Related to Minecraft gameplay experience Performance Resolution: Abandoned PR has been abandoned by its author Stale Status: Waiting on Author Type: Enhancement Contributes features or other improvements to PocketMine-MP
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Magma blocks don't work any more
8 participants