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

Нашёл вот такой метод https://hub.spigotmc.org/javadocs/spigot/org/bukkit/World.html#getEntitiesByClass(java.lang.Class)

ArrayList<Chunk> chunks = Bukkit.getWorld("kek").getChunks()
А чего то я не наблюдаю метода getChunks(); Эм.
Так всё же, как получить все чанки в мире?
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/World.html#getLoadedChunks()
 
Я вроде правильно написал и имел ввиду именно все чанки. Мне нужно пройтись по каждому чанку.
Мммм странно... У меня всегда деспаунились... пойду смотреть где я косячил..
Можете подсказать, как пройтись по всем чанкам в мире?
нет метода getChunks();
 
Я вроде правильно написал и имел ввиду именно все чанки. Мне нужно пройтись по каждому чанку.

Можете подсказать, как пройтись по всем чанкам в мире?
нет метода getChunks();
Я вам сказал, что бакит может иногда работать с другими тредами, вот и подумайте.
 
Я вам сказал, что бакит может иногда работать с другими тредами, вот и подумайте.
А какое отношение сейчас имеет треды к получению всех чанков?
Я не знаю как пройтись по всем чанкам, ибо метода getChunks(); нет
 
Но не с чанками.
И вообще тс зря это затеял, это все сожрет уйму памяти.
Я вот тоже сижу сейчас и думаю. На сколько я знаю, вся живность грузит только тогда, когда она прогружена, т.е. тогда, когда чанк загружен. Получается нет смысла чистить всю карту, а достаточно переодически получать активные чанки и удалять с них всё что нужно. Как вы считаете?
 
Я вот тоже сижу сейчас и думаю. На сколько я знаю, вся живность грузит только тогда, когда она прогружена, т.е. тогда, когда чанк загружен. Получается нет смысла чистить всю карту, а достаточно переодически получать активные чанки и удалять с них всё что нужно. Как вы считаете?
Ну вот этим кодом и получай Bukkit.getServer().getWorlds().get(0).getEntities(); Как тпс наипнется начитай деспавнить. Хотя сервер сам деспавнит излишки, кроме петов и нпс плагинов-модов. Хотя бывает и петов деспавнит. Ну там еще от дистанции игрока от ентитей зависит. Чтоб не было такого, когда моб на глазах игрока пропал. Хотя и такое случается.
 
Там не мобы, а объекты с модов, которые сами не удаляются.
Как можно сделать "лёгкую" проверку tps ?
 
Java:
List<Entity> en = (List<Entity>) Bukkit.getServer().getWorlds().get(0).getEntitiesByClass(EntityType.HORSE.getEntityClass()); //HORSE для примера, там EntityType из модов будет.
Вот такой способ получения Entity по классу нормальный?
А tps, знаете, если игрок прогрузит чанк с этой дрянью, то никакая временная проверка tps не поможет. А если этой дряни там много, то сервак упадёт быстро. По этому буду чистить раз в час.[/code]
 
Java:
List<Entity> en = (List<Entity>) Bukkit.getServer().getWorlds().get(0).getEntitiesByClass(EntityType.HORSE.getEntityClass()); //HORSE для примера, там EntityType из модов будет.
Вот такой способ получения Entity по классу нормальный?
А tps, знаете, если игрок прогрузит чанк с этой дрянью, то никакая временная проверка tps не поможет. А если этой дряни там много, то сервак упадёт быстро. По этому буду чистить раз в час.[/code]
Что хоть за моды такие?
 
Что хоть за моды такие?
flans и customnps.
В мире летают куча патронов и не пропадают, создавая ураганы. Никак не вредят игрокам, только лагами как сервера так и клиента.
А второе это некоторые виды выпущенных предметов мобами из customnps. Просто летят бесконечно.
Удалить моды - не вариант.
Фиксить - нет смысла, ибо серверу осталось от силы 2-3 месяца и будет глобальное обновление и переход на новую версию + другие моды с оружием и обновлённый cestomnps. Если с оружием забудем, то с кастом хз, возможно останется.
 
Последнее редактирование:
flans и customnps.
В мире летают куча патронов и не пропадают, создавая ураганы. Никак не вредят игрокам, только лагами как сервера так и клиента.
А второе это некоторые виды выпущенных предметов мобами из customnps. Просто летят бесконечно.
Удалить моды - не вариант.
Фиксить - нет смысла, ибо серверу осталось от силы 2-3 месяца и будет глобальное обновление и переход на новую версию + другие моды с оружием и обновлённый cestomnps. Если с оружием забудем, то с кастом хз, возможно останется.
Ну, можно попробовать закостылить, отслеживай их спавн и через n сек удаляй. И таких проджектилей без гравитации станет в разы меньше. Хотя в идеале дописать в класс пуль время жизни.
 
Каким образом их можно отслеживать? Мне просто в голову ничего не приходит. Я с таким ранее не имел дело.
Что хоть за моды такие?
А какие есть эвенты, которые оповещают о спавне entity в мире?
Java:
    @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)" ?
 
Последнее редактирование:
Каким образом их можно отслеживать? Мне просто в голову ничего не приходит. Я с таким ранее не имел дело.

А какие есть эвенты, которые оповещают о спавне entity в мире?
Java:
    @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)" ?
Есть ChunkUnloadEvent, если что. Можешь еще в этом ивенте удалять пули.
 
Есть ChunkUnloadEvent, если что. Можешь еще в этом ивенте удалять пули.
Да, тоже хорошая идея.
Появилась проблема.
Эвент EntitySpawnEvent не отслеживает спавн выстрелов и не видит нужны мне Entity... Капец. Почему...
 
Назад
Верх