.

Статус
Закрыто для дальнейших ответов.
И еще, что делает метод setInvulnerable?
По гугл переводчику это "неуязвимость" однако такую энтити можно бить..
 
И еще, что делает метод setInvulnerable?
По гугл переводчику это "неуязвимость" однако такую энтити можно бить..
Это значит что ентити нельзя толкать.
Создай метод, который будет управлять головой в зависимости от позиции игрока. (Голова постоянно будет смотреть на игрока)
 
Это значит что ентити нельзя толкать.
Та нИт же! За это отвечает метод setCollidable (вроде.. (а если нет, то за что тогда отвечает метод setCollidable? O,o))..
Создай метод, который будет управлять головой в зависимости от позиции игрока. (Голова постоянно будет смотреть на игрока)
Это я тоже думаю сделать, но это я хочу сделать с помощью пакетов, так как я хочу чтоб энтити смотрел на каждого игрока..
Но сейчас не про это, сейчас именно взгляд при спавне, ибо сейчас у меня энтити расположен в здании, и он спавнится смотря в стенку (я ж его не собираюсь расстреливать, емае), а мне надо чтоб он смотрел на то место, откуда предположительно появится игрок (лестница).
Лучше вообще сделаю чтоб энтити всегда смотрел в одно место (для конкретного жителя - в сторону лестницы), но пакетами "поворачивался" к каждому игроку.
Так же можно надеюсь? :D
 
Та нИт же! За это отвечает метод setCollidable (вроде.. (а если нет, то за что тогда отвечает метод setCollidable? O,o))..

Это я тоже думаю сделать, но это я хочу сделать с помощью пакетов, так как я хочу чтоб энтити смотрел на каждого игрока..
Но сейчас не про это, сейчас именно взгляд при спавне, ибо сейчас у меня энтити расположен в здании, и он спавнится смотря в стенку (я ж его не собираюсь расстреливать, емае), а мне надо чтоб он смотрел на то место, откуда предположительно появится игрок (лестница).
Лучше вообще сделаю чтоб энтити всегда смотрел в одно место (для конкретного жителя - в сторону лестницы), но пакетами "поворачивался" к каждому игроку.
Так же можно надеюсь? :D
В теории - можно, на практике не занимался таким.
Попробуй после спавна Entity с задержкой устанавливать ему позицию для головы.
runTaskLater(2-5 тиков)
 
В теории - можно, на практике не занимался таким.
Попробуй после спавна Entity с задержкой устанавливать ему позицию для головы.
runTaskLater(2-5 тиков)
Так вот мне интересно, как правильно это делать,
setYaw & setPitch или setDirection?
 
Так вот мне интересно, как правильно это делать,
setYaw & setPitch или setDirection?
Можно и так и так, насколько мне известно. setDirection работает с векторами и направлениями сторон (setDirection(West)). setYaw && setPitch работают с числами.
 
Можно и так и так, насколько мне известно. setDirection работает с векторами и направлениями сторон (setDirection(West)). setYaw && setPitch работают с числами.
Сделаль вот так:
Код:
    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)..
 
Сделаль вот так:
Код:
    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)..
Лол, ты принтишь значения раньше, чем устанавливаешь их.
 
entity.teleport(newLocationWithNewYaw);
 
Лол, ты принтишь значения раньше, чем устанавливаешь их.
Так это для того что-бы проверять правильные ли значения я устанавливаю, чтоб я точно знал что это что-то не работает, а не значения не правильные..
entity.teleport(newLocationWithNewYaw);
Попытаюсь.. Но по идее, мне надо телепортировать жителя на ту же локацию которую я использую для его спавна (так как в той локации уже есть нужные Yaw и Pitch) а это немножко.. Странно)
Ни работайт...
Код:
    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
 
Долго жевался с этим в своё время.
Насколько я понял, непосредственно при спауне нельзя задавать то ли yaw, то ли pitch.
И, что самое приколькольное, метод setYaw() или setPitch() либо вовсе не работает, либо не отправляет пакет поворота головы игроку.
Поэтому я самостоятельно отправляю PacketPlayOutEntityHeadRotation - всё работает.
А вообще, конечно, это ещё один повод называть minecraft калом.
 
Последнее редактирование:
И, что самое приколькольное, метод setYaw() или setPitch() либо вовсе не работает, либо не отправляет пакет поворота головы игроку.
Так почему бы не создать НОВУЮ локацию на основе getX() getY() getZ() и выставить энтити?
Попытаюсь.. Но по идее, мне надо телепортировать жителя на ту же локацию которую я использую для его спавна (так как в той локации уже есть нужные Yaw и Pitch) а это немножко.. Странно)
Это норма, просто прочитай teleport как setLocation. Метод setYaw и не должен отсылать пакет, он тупо записывает в объект Location новое значение. Это как и с setX xetY setZ setPitch. Баккит никому ничего не должен. Нужен поворот головы - лезь в NMS. Я видел сотни раз эти функции в NMS когда портировал плагины. А баккит апи предоставляет только setLocation (читай - teleport)
 
Так почему бы не создать НОВУЮ локацию на основе getX() getY() getZ() и выставить энтити?
В смысле? Я уже написал, что при спауне yaw или pitch не учитывается вообще. Хоть ты новую локацию создавай, хоть умоляй ядро работать по-человечески - пакет спауна не изменится (и его обработка). Поворот головы задаётся отдельным пакетом - о чём, собственно, я тоже сказал.
Новый экземпляр объекта - полный бред. Разница лишь в hashCode будет. А он, как известно, клиенту не передаётся. Клиент самостоятельно формирует объекты из примитивных входных данных.
Или речь о собственной структуре (классе)? Если так, то это уже обёртка - исключительно на усмотрение ТС. Я лишь показал "концепт" решения его проблемы.
Ах да, забыл добавить, что такая ситуация была на 1.9.
ТС, самоятоятельно глянь сорцы ядра нужной версии, если "моя реализация" тебе не нравится. Возможно что-то и по-другому там...
 
Последнее редактирование:
Понял, ясненько. А последующий поворот (телепортация) с задержкой в один тик (или 10-20) при помощи runTaskLater поможет? Разве нет?
 
Понял, ясненько. А последующий поворот (телепортация) с задержкой в один тик (или 10-20) при помощи runTaskLater поможет? Разве нет?
Я пробовал даже с задержкой в 20 тиков это делать, такое чувство что энтити вообще похрен, мол "я заспавнился, а дальше иди нахерн"
Есть еще такой вопрос для самых знатоков, если у энтити установлено removeWhenFarAway на false,
то необходимо ли отменять ChunkUnloadEvent чтоб.. Ну чтоб типо все было хорошо :D
 
Странновато. А у тебя самого поворачивается голова при телепортации?
 
У игроков таких проблем точно нет при телепорте.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх