Делай проще создай мапу аля <BlockPos, HashMap<BlockPos, IBlockState>>
И храни всё в ней.
Как ты понял первый BlockPos для карьера, хэшмап же для pos=state т.е чтобы восстановить блок в ровно в том состоянии котором он был, а не в обычном.
Далее вешаешь мапу в карьер или в ивент разрушения блока карьером(лучше последнее, если есть)
Создаёшь на ивент разрушения блока проверку на карьер
С помощью blockpos карьера получаешь из хэшмапа нужный нам хэшмап
Пробегаешь по всем координатам и восстанавливаешь блоки.
Done.
Можно проще создать объект аля PosNState
В конструктор BlockPos, IBlockState
Ну и getter'ы пихаешь аля getPos(); и getState();
И потом уже создаешь вместо <BlockPos, HashMap<BlockPos, IBlockState>>
Это <BlockPos, Arraylist<PosNState>>
И тогда уже проще так как тупо перебираешь уже 100% существующие блока, а не ищешь по координатам blockState.
Дальше разберёшься.
Fatality.