Удаление большого количества мобов за тик

Версия Minecraft
1.12.2
3,005
192
592
По команде удаляются все мобы, во всех мирах.
Мобов больше тысячи.
После удаления - идут лаги ~секунд 10.
Можно ли как-то оптимизировать удаление мобов, не добавляя лимита в тик?
 
7,099
324
1,510
А в чем собственно ,состоит удаление? Collection%clear обычно быстрый. А если он медленный, но можно создать новую коллекцию и присвоить ее вместо текущей
 
3,005
192
592
А разве не будет рассинхрона/ошибок?

А в чем собственно ,состоит удаление?
Stream.of(DimensionManager.getWorlds())
.filter(Objects::nonNull)
.map(world -> world.loadedEntityList)
.forEach(list -> list.stream()
.filter(entity -> !(entity instanceof EntityPlayer))
.forEach(Entity::setDead));
Все миры, проверка на не нулл, все ентити, стрим ентитей, что не игрок, убить.
 
292
14
160
Во-первых, стримы сами по себе медленные (относительно). Хочешь ускорить - замени на не-стримы.
Во-вторых, как миры могут быть тут нулл?
Stream.of(DimensionManager.getWorlds())
.filter(Objects::nonNull)

Можно ли как-то оптимизировать удаление мобов, не добавляя лимита в тик?
Удаление не более X мобов за тик - вполне здравая идея, чем она тебе не подходит?
 
7,099
324
1,510
.forEach(Entity::setDead));
Мне кажется, что тормозит больше всего это. Майн и форж наверняка делают еще какую-то работу по корректному удалению сущностей и она скорее всего не нужна, если удаляешь все.
Попробуй все что игрок собирать в новый список и сетать новый лист мирам world.loadedEntityList, таким образом в этих списках останется только игрок
 
Сверху