1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как работает радиус getNearbyEntities

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

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

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

    Баллы:
    96
    По поводу player.getNearbyEntities(x, x, x);
    Может кто объяснить или нарисовать в паинте, как именно указанные координаты берут область вокруг игрока? Просто не понятно не много.
     
  2. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Кругом
     
  3. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    В примере было сказано, что все аргументы вводятся одинаковые. Это правильно?
     
  4. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ну первое это допустимое отклонение по X второе по Y третье по Z

    т.е. допустим есть локация 1 1 1 (xyz соответственно). теперь ты пишешь .getNearbyEntities(1 1 2)

    это значит что будут взяты все кто есть в промежутке от [0-2 по иксу (+-1), 0-2 по игрку (+-1) -1-3 по зед (+-2)]
     
  5. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Допустим, если аргумент будет 200к, то у меня будет достаточно большой шанс получить достаточно большое количество существ?
     
  6. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Это получится шар с радиусом 200к, не все чанки будут прогружены (только 1% их этого примерно)
     
  7. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    А если я получу всех существ так:
    Код:
    Bukkit.getServer().getWorlds().get(0).getEntities();
    
    То всё равно это будет тоже самое? Так как не все чанки прогружены?
     
  8. AtomicInteger

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

    Баллы:
    76
    Иногда полезно смотреть документацию:
     
  9. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Попробуй
    Код:
    for (Chunk chunk : Bukkit.getServer().getWorld(world).getLoadedChunks()) {
    Entity[] entity = chunk.getEntities();
    }
    
     
  10. xDark

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

    Баллы:
    96
    а потом пи*да серверу.
     
  11. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    А чё фигли, ему нужны были все энтити я ему и дал всех энтити
     
  12. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    вжух и нет сервера.
     
  13. xDark

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

    Баллы:
    96
    new Thread(() -> {

    }).start();
    С помощью тредов можна попробовать.
     
  14. 0x1EE7C0DE

    0x1EE7C0DE Участник Пользователь

    Баллы:
    36
    Разве, из других тредов можно обращаться к баккитовским объектам?
     
  15. xDark

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

    Баллы:
    96
    Можно, иногда.
     
  16. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    А вот теперь такая задача.
    Требуется получить не просто всех entity со всех прогруженных чанков, но и не прогруженны.
    Ладно, из загруженных чанков панятно как.
    А вот допустим:
    1. Получить ВСЕ чанки.
    2. Проверить. загружен ли он на данный момент, если да, то получить entity и сделать то что нужно, в противном случае подгрузить чанк и сделать то что нужно и выгрузить.
    Как такое можно сделать и как правильно оформить это через потоки?

    P.S. Хотелось бы самому сделать. Прошу, просто дайте наводку на правильный путь в плане потоков и возможности проверки чанков на загружен ли или нет, ну и конечно же ручная загрузка и выгрузка чанка.
    Как это понять ? "Иногда" :D
     
  17. xDark

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

    Баллы:
    96
    ChunkUnloadEvent
    ArrayList<Chunk> chunks = Bukkit.getWorld("kek").getChunks().stream()
    .filter((chunk) -> {
    return !chunk.isLoaded();
    }).map((chunk) -> {
    return (Chunk) chunk;
    }).collect(Collectors.toCollection(ArrayList::new));
     
  18. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Это к какому вопросу ответ?) Большому или "Иногда"?
    И как понятно из названия, это эвент при выгрузке чанка.
    Что можете подсказать по ручной загрузке и выгрузке?
     
  19. xDark

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

    Баллы:
    96
    Location loc = new Location(....);
    loc.getChunk().load(); // loc.getChunk().unload(true, true);
    1st true - сохранить чанк
    2 true - "безопасно" сорханить чанк
    Скорее всего чтобы сервер не крашнулся, в редких случаях такое наверное бывает
     
  20. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    -> - Java 8, сервер Java 7. Не затруднит ли Вас переделать под java7?
    А можно ли загрузить чанк который как раз !chunk.isLoaded(); таким же способом?
     

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