Один из способов сделать это - получить направление, в котором находится игрок (используя yaw
), а затем использовать его, чтобы получить правильную грань блока:
Player p;
Block b;
Location l = p.getLocation();
float yaw = l.getYaw();
// Make sure yaw is in the range 0 to 360
while(yaw < 0){yaw+=360;}
yaw = yaw % 360;
// The player's yaw is their rotation in the world,
// so, we can use that to get the right face of a block!
BlockFace rightFace;
// if the player is facing SE to SW
if(yaw < 45 || yaw >= 315){
rightFace = BlockFace.EAST;
}
// if the player is facing SW to NW
else if(yaw < 135){
rightFace = BlockFace.SOUTH;
}
// if the player is facing NW to NE
else if(yaw < 225){
rightFace = BlockFace.WEST;
}
// if the player is facing NE to SE
else if(yaw < 315){
rightFace = BlockFace.NORTH;
}
И теперь, когда мы знаем, какой BlockFace находится справа от блока, мы можем получить блок справа:
Block b;
BlockFace rightFace;
Block rightBlock = b.getRelative(rightFace);
Вы также можете использовать код, похожий на этот, чтобы получить блок перед, позади или слева от блока относительно игрока - просто измените значение, установленное rightFace
на
.
У меня не было возможности проверить это, но это должно сработать!