Получение блока относительно блока и относительного по направлению игрока в Буккит - PullRequest
1 голос
/ 27 июня 2019

Получение блока относительно блока и относительно игрока. Направление в Буккит

Здравствуйте, я борюсь с проблемой Bukkit. В общем, я пытаюсь получить блок справа от другого. Но я хочу, чтобы игроки видели в любом направлении, что блок справа от другого тоже справа от игрока. Я хочу, чтобы игрок видел блок слева от первого блока, но ОТ игрока, а не из системы технических локаций сервера.

Поскольку изображения объясняют лучше, чем просто текст, вот некоторые изображения:

Просто нормальный блок (Image 1)

Результат, который я исключаю: новый блок исключен из того, что игрок видит справа от нормального блока (Image 2)

1 Ответ

0 голосов
/ 28 июня 2019

Один из способов сделать это - получить направление, в котором находится игрок (используя 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 на

.

У меня не было возможности проверить это, но это должно сработать!

...