Помогите Удаление живности при загрузке и выгрузке чанков.

Exception_Prototype

Активный участник
Пользователь
Баллы
96
Делаю плагин в плане контроля определённого кол-ва живности в чанках.
Проблема в том, что согласно коду каждый загруженный\выгруженный чанк проверяется на живность и в случае превышения допустимого кол-ва - удаляется лишние. НО! Почему то ни при выгрузке ни при загрузке живность не удаляется. Хотя если я подлечу в чанку с живностью и введу команду с точно таким же алгоритмом работы (не считая, что там чанк получаю через эвент, а там через корды моей локации), то всё прекрасно работает. Собственно вот такая проблема. Я чего то не знаю про работу с чанками? Просветите...
 
Java:
    @EventHandler
    public void ChunkLoadEvent(ChunkLoadEvent event) {

        chunkLoad = event.getChunk();
        enLoad = chunkLoad.getEntities();
        int pig = 0, cow = 0, sheep = 0, chicken = 0;

        for (Entity entity : enLoad) {
            entityLoadType = entity.getType();
            switch (entityLoadType) {
                case PIG:
                    pig++;
                    break;
                case SHEEP:
                    sheep++;
                    break;
                case COW:
                    cow++;
                    break;
                case CHICKEN:
                    chicken++;
                    break;
            }
        }

        int result = pig + cow + sheep + chicken;

        if (result > MAX_LIVESTOCK_IN_CHUNK) {
            int must_be_removed = result - MAX_LIVESTOCK_IN_CHUNK;

            for (Entity entity : enLoad) {
                entityLoadType = entity.getType();
                if (must_be_removed > 0) {

                    switch (entityLoadType) {
                        case PIG:
                            if (pig > 2) {
                                entity.remove();
                                pig--;
                                must_be_removed--;
                            }
                            break;
                        case SHEEP:
                            if (sheep > 2) {
                                entity.remove();
                                sheep--;
                                must_be_removed--;
                            }
                            break;
                        case COW:
                            if (cow > 2) {
                                entity.remove();
                                cow--;
                                must_be_removed--;
                            }
                            break;
                        case CHICKEN:
                            if (chicken > 2) {
                                entity.remove();
                                chicken--;
                                must_be_removed--;
                            }
                            break;
                    }
                } else {
                    break;
                }
            }
        }

    }

Тот же код, только чанк получаю так (по тест команде) :
Java:
Chunk chunk = p.getWorld().getChunkAt(p.getLocation());
и всё работает.
Ещё проводил эксперимент.
При загрузке и выгрузке чанка выводил кол-во живности из чанка.
Так вот максимум показывала при загрузке или выгрузки 1-2 живности. Но как?! Там минимум 20 существ.
Где событие, которое должно вывести тот самый чанк, где моя живность сидит? Он что не выгружается когда я отлетаю?
 
Последнее редактирование:
Я новичок, так что могу быть и не прав, но где то в коде сначала будет вызван евент, благодаря вызову сработают все EventHandler с этим ивентом, и только потом выполнится непосредственно код.

т.е. сначала ивент вызвался, потом сработал твой хандлер, и только ПОСЛЕ этого прошелся сам код. т.е. в теории чанк еще не прогружен на момент ивента

Опять же повторюсь: могу быть не прав
 
Я новичок, так что могу быть и не прав, но где то в коде сначала будет вызван евент, благодаря вызову сработают все EventHandler с этим ивентом, и только потом выполнится непосредственно код.

т.е. сначала ивент вызвался, потом сработал твой хандлер, и только ПОСЛЕ этого прошелся сам код. т.е. в теории чанк еще не прогружен на момент ивента

Опять же повторюсь: могу быть не прав
Допустим твой мысль. Но это только при загрузке, но ТОЖЕ самое и при выгрузке. Это тогда как объяснить?
@AtomicInteger @alexandrage @xDark help...
 
Мммм....
А на сколько поставить задержку?
И... а как он поможет? Если когда я вручную удаляю, то всё нормально.
Ща всё равно попробую.
Да как бы не помогло... удалял с задержкой.
Вот у меня есть такая строка:
Java:
Bukkit.broadcastMessage(CHAT_PREFIX + "Какой-то чанк загружен. В нём живности: " + enLoad.length);
Такая же и есть и на выгрузку. enLoad - массив живности полученной с чанка.
Странность в том, что я стоял афк и ничего не делал. Находился далеко от той самой проверяемой живности (иногда подлетая и отлетая к тому чанку) и я не видел в чате, чтобы сработала выгрузка\загрузка чанка, где было 20 живности. Почему так? Он что вообще с тем чанком работать перестал? С чего бы? Или из-за того, что я 1 на серваке и нагрузки нет сервер его не выгружает?
 
Последнее редактирование:
На котле чунк лоад ивент коряво работает, точнее местами да, местами нет.
 
Капец. И что делать?
На котле чунк лоад ивент коряво работает, точнее местами да, местами нет.
Да я как пример чанк лоад привёл, там то у меня и при выгрузке чанка и при загрузке.
 
Назад
Верх