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

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

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

  1. Sonicxd2

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

    Баллы:
    76
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/World.html#getLoadedChunks()
     
  2. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Я вроде правильно написал и имел ввиду именно все чанки. Мне нужно пройтись по каждому чанку.
    Можете подсказать, как пройтись по всем чанкам в мире?
    нет метода getChunks();
     
  3. xDark

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

    Баллы:
    96
    Я вам сказал, что бакит может иногда работать с другими тредами, вот и подумайте.
     
  4. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    А какое отношение сейчас имеет треды к получению всех чанков?
    Я не знаю как пройтись по всем чанкам, ибо метода getChunks(); нет
     
  5. xDark

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

    Баллы:
    96
    Location
     
  6. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Да, я видел, что можно получить все чанки по их номеру или локации, но не знаю как это правильно реализовать.
    Вот искал на анг. форуме https://bukkit.org/threads/get-all-chunks-within-a-x-z-region.95204/ , но опять же, но понимаю что к чему.
     
  7. Sonicxd2

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

    Баллы:
    76
    Вот именно что "иногда"
     
  8. xDark

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

    Баллы:
    96
    С локациями баккит умеет асинхронно работать
     
  9. alexandrage

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

    Баллы:
    173
    Но не с чанками.
    И вообще тс зря это затеял, это все сожрет уйму памяти.
     
  10. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Я вот тоже сижу сейчас и думаю. На сколько я знаю, вся живность грузит только тогда, когда она прогружена, т.е. тогда, когда чанк загружен. Получается нет смысла чистить всю карту, а достаточно переодически получать активные чанки и удалять с них всё что нужно. Как вы считаете?
     
  11. alexandrage

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

    Баллы:
    173
    Ну вот этим кодом и получай Bukkit.getServer().getWorlds().get(0).getEntities(); Как тпс наипнется начитай деспавнить. Хотя сервер сам деспавнит излишки, кроме петов и нпс плагинов-модов. Хотя бывает и петов деспавнит. Ну там еще от дистанции игрока от ентитей зависит. Чтоб не было такого, когда моб на глазах игрока пропал. Хотя и такое случается.
     
  12. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Там не мобы, а объекты с модов, которые сами не удаляются.
    Как можно сделать "лёгкую" проверку tps ?
     
  13. alexandrage

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

    Баллы:
    173
    ess.getTimer().getAverageTPS();
     
  14. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Код:
    List<Entity> en = (List<Entity>) Bukkit.getServer().getWorlds().get(0).getEntitiesByClass(EntityType.HORSE.getEntityClass()); //HORSE для примера, там EntityType из модов будет.
    
    Вот такой способ получения Entity по классу нормальный?
    А tps, знаете, если игрок прогрузит чанк с этой дрянью, то никакая временная проверка tps не поможет. А если этой дряни там много, то сервак упадёт быстро. По этому буду чистить раз в час.[/code]
     
  15. alexandrage

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

    Баллы:
    173
    Что хоть за моды такие?
     
  16. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    flans и customnps.
    В мире летают куча патронов и не пропадают, создавая ураганы. Никак не вредят игрокам, только лагами как сервера так и клиента.
    А второе это некоторые виды выпущенных предметов мобами из customnps. Просто летят бесконечно.
    Удалить моды - не вариант.
    Фиксить - нет смысла, ибо серверу осталось от силы 2-3 месяца и будет глобальное обновление и переход на новую версию + другие моды с оружием и обновлённый cestomnps. Если с оружием забудем, то с кастом хз, возможно останется.
     
    Последнее редактирование: 20 янв 2017
  17. alexandrage

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

    Баллы:
    173
    Ну, можно попробовать закостылить, отслеживай их спавн и через n сек удаляй. И таких проджектилей без гравитации станет в разы меньше. Хотя в идеале дописать в класс пуль время жизни.
     
  18. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Каким образом их можно отслеживать? Мне просто в голову ничего не приходит. Я с таким ранее не имел дело.
    А какие есть эвенты, которые оповещают о спавне entity в мире?
    Код:
        @EventHandler//(priority = EventPriority.HIGHEST)
        public void onEntitySpawn(final EntitySpawnEvent event) {
            //Bukkit.getServer().getWorlds().get(0).getChunkAt(event.getLocation()).isLoaded();
            System.out.println("TEST");
            isNeededEntity = false;
            EntityType etype = event.getEntityType();
            if (etype == EntityType.HORSE) { //EntityType.HORSE || bullet
                amountbullet++;
                isNeededEntity = true;
            } else if (etype == EntityType.PIG) { //EntityType.PIG || throwableitem
                amountthrowableitem++;
                isNeededEntity = true;
            }
    
            if (isNeededEntity) {
                Bukkit.getScheduler().runTaskLater(this, new Runnable() {
                    @Override
                    public void run() {
                        event.getEntity().remove();
                    }
                }, 300);
            }
        }
    
    Вот так я сделал. У меня есть сомнения по поводу удаления из выгруженных чанков.
    Стоит ли делать проверку на то, что чанк в котором находится entity загружен?
    И стоил ли ставить "(priority = EventPriority.HIGHEST)" ?
     
    Последнее редактирование: 20 янв 2017
  19. alexandrage

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

    Баллы:
    173
    Есть ChunkUnloadEvent, если что. Можешь еще в этом ивенте удалять пули.
     
  20. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Да, тоже хорошая идея.
    Появилась проблема.
    Эвент EntitySpawnEvent не отслеживает спавн выстрелов и не видит нужны мне Entity... Капец. Почему...
     

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