Правильное удаление существ в мире

Версия Minecraft
1.7.10
214
11
59
Привет.

Столкнулся с проблемой. У меня есть такой незамысловатый код, который удаляет всех подгруженных существ, а мне нужно удалять всех существ в мире. Может кто подсказать как это сделать возможно ?

Java:
    public static void killAllInArena(Arena arena) {
        int i = 0;
        for(Object o : arena.world.loadedEntityList) {
            Entity e = (Entity) o;
            if(e instanceof EntityLootBox || e instanceof EntityVehicle || e instanceof EntityCorpse || e instanceof EntityItem) {
                e.setDead();
                i++;
            }
        }
        Main.logger.info("Killed entities: " + i + " in arena " + arena.id);
    }
 
3,005
192
592
Попробуй получать мир так: MinecraftServer.getServer().worldServerForDimension(ID).
 
1,990
18
105
Готового списка нет, сущности принадлежат чанкам (и дублируются в World#loadedEntityList). Когда чанк выгружается, вместе с ним выгружаются сущности.
Надо подгружать все чанки с диска, удалять в них сущности и пересохранять. Чтоб не делать лишнюю работу, можно сделать скриптик, который проходится по нбт всех нужных чанков и удаляет в них записи с нужными сущностями (по тегу как-нибудь сможешь это определить).

Есть вариант проще и дешевле, если он тебе подходит:
1) добавить всем нужным сущностям какое-то поле, отвечающее за "версию арены", которой они принадлежат:
Java:
long arenaVersionId = Arena.getArena(world).versionId;
1.1) не забываем записывать\подгружать его из нбт
2) добавить такое же поле в мир (арену)
3) подписаться на какой-нибудь EntityJoinWorldEvent и выпиливать нашу сущность ещё на подгрузке в мир, если у неё устаревшая версия арены (сравнивать versionId арены и сущности)
4) метод деспавна должен инкрементить versionId арены и деспавнить всех подгруженных на данный момент сущностей (ровно как у тебя сейчас и сделано)
 
214
11
59
Пока не нашел другого решения, кроме как подгружать все чанки по заранее сохраненным x y и удалять всех entity при условии в них

Готового списка нет, сущности принадлежат чанкам (и дублируются в World#loadedEntityList). Когда чанк выгружается, вместе с ним выгружаются сущности.
Надо подгружать все чанки с диска, удалять в них сущности и пересохранять. Чтоб не делать лишнюю работу, можно сделать скриптик, который проходится по нбт всех нужных чанков и удаляет в них записи с нужными сущностями (по тегу как-нибудь сможешь это определить).

Есть вариант проще и дешевле, если он тебе подходит:
1) добавить всем нужным сущностям какое-то поле, отвечающее за "версию арены", которой они принадлежат:
Java:
long arenaVersionId = Arena.getArena(world).versionId;
1.1) не забываем записывать\подгружать его из нбт
2) добавить такое же поле в мир (арену)
3) подписаться на какой-нибудь EntityJoinWorldEvent и выпиливать нашу сущность ещё на подгрузке в мир, если у неё устаревшая версия арены (сравнивать versionId арены и сущности)
4) метод деспавна должен инкрементить versionId арены и деспавнить всех подгруженных на данный момент сущностей (ровно как у тебя сейчас и сделано)
Ага, окей, такой вариант может подойти. Разве что я обойдусь одной булевской переменной для обозначения устаревшего entity
 
3,005
192
592
Сверху