Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[Solved] How to see which face of a block the player has collided with


squidlex
 Share

Recommended Posts

As the title suggests!

 

In a similar veign, I'm also trying to work out how to check if the block infront of the player's head and the block above that are air blocks.

For example: X = PLAYER, O = BLOCK (from a side on perspective)

 

X

X O would be fine

                    but...

   O

X

XO would not be

 

I know it's a weird question but I've always wondered how mods work out stuff like this. I hope my terrible text diagrams help illustrate my question.

Thanks for your help!

Edited by squidlex
Link to comment
Share on other sites

3 minutes ago, poopoodice said:

you can use 


player.getHorizontalFacing()

to get the player's facing, and 


player.getPosition()

to get the blockpos of the player, and


BlockPos.offset(dir)

to get the translated position

My lord that's elegantly put.

 

Thanks for the help! I'll get to work messing around with these :)

Link to comment
Share on other sites

When you say touching, do you mean which side they're bumping against, or which side they're clicking on?

 

For clicking on, there's an event that gets fired (PlayerInteractEvent) that includes the face of the block they interacted with. Or, if you want a block to do something depending on which face the player interacts with, the Block class has onBlockActivated which takes a BlockRayTraceResult, which contains the side of the block that was clicked.

For which side a player has run in to, that's a bit tricker. I don't think there's any event which gets fired off for that, so the easiest way would be to check PlayerTickEvent or some other similar event and just see if a player is colliding with any blocks, and then from there it'd be pretty simple (i.e. if the player is colliding with a block in the +x direction, then they must be touching the western face (since the block is to their east, the player is to the block's west)).

  • Like 1
Link to comment
Share on other sites

9 hours ago, Blazer Nitrox said:

For which side a player has run in to, that's a bit tricker

That's where I'm stumped.

Of course there is PlayerEntity.collidedHorizontally but that's a boolean and doesn't give the side. (used to be called EnumFacing not sure if it's the same or changed nowadays)

Link to comment
Share on other sites

Check out net.minecraft.util.math.AxisAlignedBB class. You may take Player AABB and then use AxisAlignedBB#intersect method on blocks positioned at player's coordinates +1(-1). AABB has constructor AxisAlignedBB(BlockPos pos).

 

Don't forget to check if block at selected BlockPos exists and is not air (optional)

Edited by Dzuchun
  • Thanks 1

Everything said above may be absolutely wrong. No rights reserved.

Link to comment
Share on other sites

11 minutes ago, Dzuchun said:

Check out net.minecraft.util.math.AxisAlignedBB class. You may take Player AABB and then use AxisAlignedBB#intersect method on blocks positioned at player's coordinates +1(-1). AABB has constructor AxisAlignedBB(BlockPos pos).

 

Don't forget to check if block at selected BlockPos exists and is not air (optional)

Perfect! That's exactly what I was looking for, thank you :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.