Source:
<code>private void processData() { BlueprintCalculator.BuildingInfoData infoData = null; try { infoData = future.get(); } catch (InterruptedException | ExecutionException e) { <START> e.printStackTrace(); <END> } Pair<List<ItemStack>[][][], List<FluidStack>[][][]> required = infoData.blockRequirements; Pair<List<List<ItemStack>>, List<List<FluidStack>>> requiredEntities = infoData.entityRequirements; for (int z = 0; z < getSnapshot().size.getZ(); z++) { for (int y = 0; y < getSnapshot().size.getY(); y++) { for (int x = 0; x < getSnapshot().size.getX(); x++) { ISchematicBlock<?> schematicBlock = palette.get(Blueprint.this.data[x][y][z]); BlockPos blockPos = new BlockPos(x, y, z).rotate(rotation).add(basePos).add(offset.rotate( rotation)); if (schematicBlock.isAir()) { toBreak.add(blockPos); } else { toPlace.put(blockPos, schematicBlock.getRotated(rotation)); toPlaceRequiredItems.put(blockPos, required.getLeft()[x][y][z]); toPlaceRequiredFluids.put(blockPos, required.getRight()[x][y][z]); } } } } int i = 0; for (ISchematicEntity<?> schematicEntity : getSnapshot().entities) { ISchematicEntity<?> rotatedSchematicEntity = schematicEntity.getRotated(rotation); entities.add(rotatedSchematicEntity); entitiesRequiredItems.put(rotatedSchematicEntity, requiredEntities.getLeft().get(i)); entitiesRequiredFluids.put(rotatedSchematicEntity, requiredEntities.getRight().get(i)); i++; } Stream.concat(toBreak.stream(), toPlace.keySet().stream()).forEach(box::extendToEncompass); finishedComputing = true; }</code><technical_language>If error happen need it: Please throw a RuntimeException Error instead of discarding ExecutionException. behaviour is for handling InterruptedException though</technical_language>

Target:
private void processData() { BlueprintCalculator.BuildingInfoData infoData = null; try { infoData = future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { throw new RuntimeException("Something went wrong during blueprint requirement calculations!", e); } List<ItemStack>[][][] blockRequirementsItems = infoData.blockRequirementsItems; List<FluidStack>[][][] blockRequirmentsFluids = infoData.blockRequirementsFluids; List<List<ItemStack>> entityRequirementsItems = infoData.entityRequirementsItems; List<List<FluidStack>> entityRequirementsFluids = infoData.entityRequiremntsFluids; for (int z = 0; z < getSnapshot().size.getZ(); z++) { for (int y = 0; y < getSnapshot().size.getY(); y++) { for (int x = 0; x < getSnapshot().size.getX(); x++) { ISchematicBlock<?> schematicBlock = palette.get(Blueprint.this.data[x][y][z]); BlockPos blockPos = new BlockPos(x, y, z).rotate(rotation).add(basePos).add(offset.rotate( rotation)); if (schematicBlock.isAir()) { toBreak.add(blockPos); } else { toPlace.put(blockPos, schematicBlock.getRotated(rotation)); toPlaceRequiredItems.put(blockPos, blockRequirementsItems[x][y][z]); toPlaceRequiredFluids.put(blockPos, blockRequirmentsFluids[x][y][z]); } } } } int i = 0; for (ISchematicEntity<?> schematicEntity : getSnapshot().entities) { ISchematicEntity<?> rotatedSchematicEntity = schematicEntity.getRotated(rotation); entities.add(rotatedSchematicEntity); entitiesRequiredItems.put(rotatedSchematicEntity, entityRequirementsItems.get(i)); entitiesRequiredFluids.put(rotatedSchematicEntity, entityRequirementsFluids.get(i)); i++; } Stream.concat(toBreak.stream(), toPlace.keySet().stream()).forEach(box::extendToEncompass); finishedComputing = true; }