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

Помогите Установить направление взгляда энтити

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mr_RoboMan, 13 июл 2016.

  1. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Итак, как я понимаю - в майнкрафте, направление взгляда - это Yaw и Pitch.
    Мне надо установить энтити направление взгляда при спавне!
    Я делаю это так:
    Код:
        public Trader(String name, ConfigurationSection section) {
            type = CustomEntityType.TRADER;
            location = TextLocation.parse(section.getString("LOCATION"));
            System.out.println(location.getYaw()); //Внимание
            System.out.println(location.getPitch()); //Внимание
            if (location.getChunk().isLoaded()) location.getChunk().load();
            entity_type = EntityType.valueOf(section.getString("ENTITY"));
            display_name = section.getString("DISPLAY_NAME");
            entity = (LivingEntity) location.getWorld().spawnEntity(location, entity_type);
            entity.setCustomName(display_name);
            entity.setCustomNameVisible(true);
            entity.setInvulnerable(true);
            entity.setGravity(false);
            entity.setSilent(true);
            entity.setAI(false);
            entity.setCollidable(false);
            entity.setCanPickupItems(false);
        }
    
    Вот что я получаю в тех двух принтах:
    (Это две энтити)
    [​IMG]
    Однако, в игре обе энтити стоят в направлении (0;0) почему не так?(
    Неужели нельзя установить направление взгляда сразу при спавне, и необходимо это делать после спавна?(
    Если да, то как лучше setYaw & setPitch или setDirection?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    И еще, что делает метод setInvulnerable?
    По гугл переводчику это "неуязвимость" однако такую энтити можно бить..
     
  4. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Это значит что ентити нельзя толкать.[DOUBLEPOST=1468402188,1468402002][/DOUBLEPOST]Создай метод, который будет управлять головой в зависимости от позиции игрока. (Голова постоянно будет смотреть на игрока)
     
  5. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Та нИт же! За это отвечает метод setCollidable (вроде.. (а если нет, то за что тогда отвечает метод setCollidable? O,o))..
    Это я тоже думаю сделать, но это я хочу сделать с помощью пакетов, так как я хочу чтоб энтити смотрел на каждого игрока..
    Но сейчас не про это, сейчас именно взгляд при спавне, ибо сейчас у меня энтити расположен в здании, и он спавнится смотря в стенку (я ж его не собираюсь расстреливать, емае), а мне надо чтоб он смотрел на то место, откуда предположительно появится игрок (лестница).[DOUBLEPOST=1468402742,1468402640][/DOUBLEPOST]Лучше вообще сделаю чтоб энтити всегда смотрел в одно место (для конкретного жителя - в сторону лестницы), но пакетами "поворачивался" к каждому игроку.
    Так же можно надеюсь? :D
     
  6. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    В теории - можно, на практике не занимался таким.
    Попробуй после спавна Entity с задержкой устанавливать ему позицию для головы.
    runTaskLater(2-5 тиков)
     
  7. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Так вот мне интересно, как правильно это делать,
    setYaw & setPitch или setDirection?
     
  8. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Можно и так и так, насколько мне известно. setDirection работает с векторами и направлениями сторон (setDirection(West)). setYaw && setPitch работают с числами.
     
  9. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Сделаль вот так:
    Код:
        public Trader(String name, ConfigurationSection section) {
            type = CustomEntityType.TRADER;
            location = TextLocation.parse(section.getString("LOCATION"));
            if (location.getChunk().isLoaded()) location.getChunk().load();
            entity_type = EntityType.valueOf(section.getString("ENTITY"));
            display_name = section.getString("DISPLAY_NAME");
            entity = (LivingEntity) location.getWorld().spawnEntity(location, entity_type);
            entity.setCustomName(display_name);
            entity.setCustomNameVisible(true);
            entity.setInvulnerable(true);
            entity.setGravity(false);
            entity.setSilent(true);
            entity.setAI(false);
            entity.setCollidable(false);
            entity.setCanPickupItems(false);
            Bukkit.getScheduler().runTaskLater(GWMServerPlugin.plugin, () -> {
                System.out.println(location.getYaw());
                System.out.println(location.getPitch());
                entity.getLocation().setYaw(location.getYaw());
                entity.getLocation().setPitch(location.getPitch());
            }, 20L);
        }
    
    Значения в консоли те-же, энтити смотрит туда-же (0;0)..
     
  10. CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Лол, ты принтишь значения раньше, чем устанавливаешь их.
     
  11. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Так это для того что-бы проверять правильные ли значения я устанавливаю, чтоб я точно знал что это что-то не работает, а не значения не правильные..
    Попытаюсь.. Но по идее, мне надо телепортировать жителя на ту же локацию которую я использую для его спавна (так как в той локации уже есть нужные Yaw и Pitch) а это немножко.. Странно)[DOUBLEPOST=1468407192,1468406890][/DOUBLEPOST]Ни работайт...
    Код:
        public Trader(String name, ConfigurationSection section) {
            type = CustomEntityType.TRADER;
            location = TextLocation.parse(section.getString("LOCATION"));
            if (location.getChunk().isLoaded()) location.getChunk().load();
            entity_type = EntityType.valueOf(section.getString("ENTITY"));
            display_name = section.getString("DISPLAY_NAME");
            entity = (LivingEntity) location.getWorld().spawnEntity(location, entity_type);
            entity.setCustomName(display_name);
            entity.setCustomNameVisible(true);
            entity.setInvulnerable(true);
            entity.setGravity(false);
            entity.setSilent(true);
            entity.setAI(false);
            entity.setCollidable(false);
            entity.setCanPickupItems(false);
            Bukkit.getScheduler().runTaskLater(GWMServerPlugin.plugin, () -> {
                System.out.println(location.getYaw());
                System.out.println(location.getPitch());
                entity.teleport(location);
            }, 20L);
        }
    
    Энтити все еще смотрит на 0;0
     
  12. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    76
    Долго жевался с этим в своё время.
    Насколько я понял, непосредственно при спауне нельзя задавать то ли yaw, то ли pitch.
    И, что самое приколькольное, метод setYaw() или setPitch() либо вовсе не работает, либо не отправляет пакет поворота головы игроку.
    Поэтому я самостоятельно отправляю PacketPlayOutEntityHeadRotation - всё работает.
    А вообще, конечно, это ещё один повод называть minecraft калом.
     
    Последнее редактирование: 19 июл 2016
  13. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    76
    В смысле? Я уже написал, что при спауне yaw или pitch не учитывается вообще. Хоть ты новую локацию создавай, хоть умоляй ядро работать по-человечески - пакет спауна не изменится (и его обработка). Поворот головы задаётся отдельным пакетом - о чём, собственно, я тоже сказал.
    Новый экземпляр объекта - полный бред. Разница лишь в hashCode будет. А он, как известно, клиенту не передаётся. Клиент самостоятельно формирует объекты из примитивных входных данных.
    Или речь о собственной структуре (классе)? Если так, то это уже обёртка - исключительно на усмотрение ТС. Я лишь показал "концепт" решения его проблемы.[DOUBLEPOST=1468890445,1468889582][/DOUBLEPOST]Ах да, забыл добавить, что такая ситуация была на 1.9.
    ТС, самоятоятельно глянь сорцы ядра нужной версии, если "моя реализация" тебе не нравится. Возможно что-то и по-другому там...
     
    Последнее редактирование: 19 июл 2016
  14. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Я пробовал даже с задержкой в 20 тиков это делать, такое чувство что энтити вообще похрен, мол "я заспавнился, а дальше иди нахерн"[DOUBLEPOST=1468900300,1468899931][/DOUBLEPOST]Есть еще такой вопрос для самых знатоков, если у энтити установлено removeWhenFarAway на false,
    то необходимо ли отменять ChunkUnloadEvent чтоб.. Ну чтоб типо все было хорошо :D
     
  15. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Попробовать себя телепортировать с установкой yqw & pitch? Попробую
     
  16. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    У игроков таких проблем точно нет при телепорте.
     
  17. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    76
    Возможно дело в NoAI. Если так, то решение было предложено мной выше.
     

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