Jump to content

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


Recommended Posts

Posted (edited)

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
Posted

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

  • Thanks 1
Posted
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 :)

Posted

A quick follow up question for anybody that knows.

 

Is there anyway to get the side of the block a player is touching?

E.g if they are touching the north face of a block

Posted

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
Posted
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)

Posted (edited)

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.

Posted
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 :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.