Posted July 18, 20205 yr 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 July 18, 20205 yr by squidlex
July 18, 20205 yr 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
July 18, 20205 yr Author 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
July 18, 20205 yr Author 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
July 18, 20205 yr 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)).
July 18, 20205 yr Author 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)
July 18, 20205 yr 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 July 18, 20205 yr by Dzuchun Everything said above may be absolutely wrong. No rights reserved.
July 18, 20205 yr Author 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.