Запись в HashMap определённых чанков

Версия Minecraft
1.16.5
API
Forge
1,369
112
241
Я хочу создать карту, которую потом буду записывать в World Saved Data, содержащую String и ChunkPos. Вопрос вот в чём: в каком ивенте получать эти чанки?
Пока сделал вот это, но примерно в 2 случаях из 3 при загрузке мира майн намертво зависает. Очевидно, это из-за того, что ивент вызывается при каждой прогрузке чанка. Есть какие альтернативы?
В EventBusSubscriber, Forge:
    public static Map<String, ChunkPos> nodes = Maps.newHashMap();
    @SubscribeEvent public static void generateNodes(ChunkEvent.Load e) {
        if(e.getWorld() instanceof ServerWorld) {
            ServerWorld world = (ServerWorld) e.getWorld();
            Random rand = new Random(world.getSeed());
            ChunkPos pos = e.getChunk().getPos();
            if(world.getChunk(world.getSharedSpawnPos()) == e.getChunk()) {
                tryPutChunkInMap(pos, createRandKey(rand), rand);
            } else {
                if(rand.nextInt(20) == 0) {//Добавить в карту с 5% шансом
                    tryPutChunkInMap(pos, createRandKey(rand), rand);
                }
            }
        }
    }
    @SubscribeEvent public static void onPlayerTick(LivingEvent.LivingUpdateEvent e) {
        if(!e.getEntityLiving().level.isClientSide) {
            if(nodes.containsValue(e.getEntityLiving().level
                    .getChunkAt(e.getEntityLiving().blockPosition()).getPos())) {
                System.out.println(nodes); //Ялвяется ли узлом чанк, в котором стоит игрок
            }
        }
    }
    private static String createRandKey(Random rand) { //Временное решение
        StringBuilder key = new StringBuilder();
        for(int i = 0; i < 9; i++)
            key.append(rand.nextInt(9));
        return key.toString();
    }
    private static void tryPutChunkInMap(ChunkPos pos, String key, Random rand) {
        if(nodes.keySet().contains(key)) {
            tryPutChunkInMap(pos, createRandKey(rand), rand);
        } else
            nodes.put(key, pos);
    }
 
1,369
112
241
Действительно, ChunkDataEvent.Save исполняется при генерации, мало того будет более удобен при записи, в отличие от простого ChunkEvent.
НО! Есть нюанс, и достаточно большой: ChunkDataEvent.Save срабатывает также при прожатии Esc. Как можно догадаться, такое действие мне не подходит. Можно ли как-то ограничить срабатывание в данном ивенте?
 
29
2
14
Действительно, ChunkDataEvent.Save исполняется при генерации, мало того будет более удобен при записи, в отличие от простого ChunkEvent.
НО! Есть нюанс, и достаточно большой: ChunkDataEvent.Save срабатывает также при прожатии Esc. Как можно догадаться, такое действие мне не подходит. Можно ли как-то ограничить срабатывание в данном ивенте?
просто найди то, что отвечает за паузу игры и ретурни это:
Java:
if(Minecraft.getInstance().isPaused() || !Display.isActive())return;
 
Сверху