Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Двойной прыжок

Тема в разделе "Разработка плагинов для новичков", создана пользователем serega6531, 25 янв 2014.

Статус темы:
Закрыта.
  1. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Почитал. И что теперь делать? Как узнать, направлен ли он вверх?
     
  2. Хостинг MineCraft
    <
  3. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    продолжай дальше читать.
     
  4. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Прочитал уже. Что делать?[DOUBLEPOST=1390675888,1390675528][/DOUBLEPOST]А может быть использовать:
    Код:
    if(event.getTo().getY() > event.getFrom().getY()){
      ///
    }
    ?
     
  5. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Я понимаю, что тебе хочется по-быстрому написать плагин и закрыть форум - но эти вещи слишком элементарны, чтобы не понимать, как определить по вектору спускается объект или поднимается.

    Я дам тебе подсказку: у тебя есть вектор у него есть точка начала и точка конца, этот вектор как-то в пространстве расположен, как же ты на глаз определишь, что вектор наклонён вниз и как ты это покажешь на бумаге?

    Это школьная математика\геометрия для 8-10 классов.

    ---
    Можешь использовать метод, который ты предложил, он тяжеловесный.
     
  6. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Да, сделал. Всем спасибо.[DOUBLEPOST=1390732110,1390676142][/DOUBLEPOST]Нет, не сделал. Определение, в какую сторону смотрит игрок работает через... раз. Иногда он определяет правильно, перед игроков, а иногда определяет блок справа него. В чем дело? Вот код:
    Код:
            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)));
                }
            }
     
    ПриветОтЛайки нравится это.
  7. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Выполни дебаг, и погляди как тут direction реагирует - и исходя из найденного недочёт - устрани.
     
  8. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Реагирует нормально, совпадает с клиентом.
     
    MieBluck нравится это.
  9. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Как-то не состыкуется это.

    Крайне маловероятно, что кто-то здесь от скуки глядя полезет отлаживать твой код и выяснять, почему там что-то не так.

    У тебя там ещё есть отличное условие - его отлаживай.
     
  10. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Проверил еще раз, и правда не совпадает. Пофиксил, но проблему это не решило.[DOUBLEPOST=1390734804,1390734691][/DOUBLEPOST]Думаю, дело в неправильном определении взгляда. Как сделать правильно?
     
  11. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    В чем сложность? Делай отладочную печать - выводи нужную информацию в консоль, смотри, при каких данных происходит какая-то фигня, пытайся исходя из данных найти проблему.
     
  12. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Фигня происходит, когда направление определяется неправильно. Как определять его по Yaw правильно?
     
  13. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Я не понимаю, в чем проблема тебе разобраться, что же это за такая величина Yaw, что он показывает для игрока и как из него получить сторону света?

    После того, как ты разберёшься, что же это такое - подкорректировать получение направления и жить спокойно.

    Страдай, изучай.
     
  14. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Изучаю.[DOUBLEPOST=1390735921,1390735484][/DOUBLEPOST]Вот:

    Код:
    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;
    }
     
Статус темы:
Закрыта.

Поделиться этой страницей