- Баллы
- 173
Почитал. И что теперь делать? Как узнать, направлен ли он вверх?просто прочитай про вектора, вспомни линейную алгебру.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Почитал. И что теперь делать? Как узнать, направлен ли он вверх?просто прочитай про вектора, вспомни линейную алгебру.
Почитал. И что теперь делать? Как узнать, направлен ли он вверх?
Прочитал уже. Что делать?продолжай дальше читать.
if(event.getTo().getY() > event.getFrom().getY()){
///
}
Я понимаю, что тебе хочется по-быстрому написать плагин и закрыть форум - но эти вещи слишком элементарны, чтобы не понимать, как определить по вектору спускается объект или поднимается.Прочитал уже. Что делать?
Player player = event.getPlayer();
if(Players.isGamePlayer(player)){
Location loc = player.getEyeLocation();
int direction = (int)(((loc.getYaw() * 4F) / 360F) + 0.5D) & 3;
switch(direction)
{
case 0:
{
loc = new Location(loc.getWorld(), (int)loc.getX(), (int)loc.getY(), (int)loc.getZ()+1);
break;
}
case 1:
{
loc = new Location(loc.getWorld(), (int)loc.getX()-1, (int)loc.getY(), (int)loc.getZ());
break;
}
case 2:
{
loc = new Location(loc.getWorld(), (int)loc.getX(), (int)loc.getY(), (int)loc.getZ()-1);
break;
}
case 3:
{
loc = new Location(loc.getWorld(), (int)loc.getX()+1, (int)loc.getY(), (int)loc.getZ());
break;
}
}
if(!(((Entity)player).isOnGround()) && (player.getGameMode() != GameMode.CREATIVE) && !(loc.getBlock().getType().equals(Material.AIR)) && (event.getTo().getY() > event.getFrom().getY()) && !(player.isSneaking())){
player.setVelocity(player.getVelocity().add(new Vector(0, 0.09, 0)));
}
}
Выполни дебаг, и погляди как тут direction реагирует - и исходя из найденного недочёт - устрани.Да, сделал. Всем спасибо.
Нет, не сделал. Определение, в какую сторону смотрит игрок работает через... раз. Иногда он определяет правильно, перед игроков, а иногда определяет блок справа него. В чем дело? Вот код:
Код:Player player = event.getPlayer(); if(Players.isGamePlayer(player)){ Location loc = player.getEyeLocation(); int direction = (int)(((loc.getYaw() * 4F) / 360F) + 0.5D) & 3; switch(direction) { case 0: { loc = new Location(loc.getWorld(), (int)loc.getX(), (int)loc.getY(), (int)loc.getZ()+1); break; } case 1: { loc = new Location(loc.getWorld(), (int)loc.getX()-1, (int)loc.getY(), (int)loc.getZ()); break; } case 2: { loc = new Location(loc.getWorld(), (int)loc.getX(), (int)loc.getY(), (int)loc.getZ()-1); break; } case 3: { loc = new Location(loc.getWorld(), (int)loc.getX()+1, (int)loc.getY(), (int)loc.getZ()); break; } } if(!(((Entity)player).isOnGround()) && (player.getGameMode() != GameMode.CREATIVE) && !(loc.getBlock().getType().equals(Material.AIR)) && (event.getTo().getY() > event.getFrom().getY()) && !(player.isSneaking())){ player.setVelocity(player.getVelocity().add(new Vector(0, 0.09, 0))); } }
Реагирует нормально, совпадает с клиентом.Выполни дебаг, и погляди как тут direction реагирует - и исходя из найденного недочёт - устрани.
Реагирует нормально, совпадает с клиентом.
Как-то не состыкуется это.Определение, в какую сторону смотрит игрок работает через... раз.
Проверил еще раз, и правда не совпадает. Пофиксил, но проблему это не решило.Как-то не состыкуется это.
В чем сложность? Делай отладочную печать - выводи нужную информацию в консоль, смотри, при каких данных происходит какая-то фигня, пытайся исходя из данных найти проблему.Проверил еще раз, и правда не совпадает. Пофиксил, но проблему это не решило.
Фигня происходит, когда направление определяется неправильно. Как определять его по Yaw правильно?В чем сложность? Делай отладочную печать - выводи нужную информацию в консоль, смотри, при каких данных происходит какая-то фигня, пытайся исходя из данных найти проблему.
Я не понимаю, в чем проблема тебе разобраться, что же это за такая величина Yaw, что он показывает для игрока и как из него получить сторону света?Фигня происходит, когда направление определяется неправильно. Как определять его по Yaw правильно?
Изучаю.Я не понимаю, в чем проблема тебе разобраться, что же это за такая величина Yaw, что он показывает для игрока и как из него получить сторону света?
После того, как ты разберёшься, что же это такое - подкорректировать получение направления и жить спокойно.
Страдай, изучай.
int yaw = (int) Math.abs(loc.getYaw());
if(yaw > 315 && yaw < 45){
direction = 0;
} else if (yaw > 45 && yaw < 135){
direction = 1;
} else if (yaw > 135 && yaw < 225){
direction = 2;
} else if (yaw > 225 && yaw < 315){
direction = 3;
}