Here's an idea... (warning, WALL O' TEXT AHEAD, approach at own risk)
Have the distributor (on placement) begin calculating the blocks it requires to pump oxygen into.
Here's an idea of how it might do that:
- Is distributor under direct "sunlight" (visible to the lunar "sky") Yes? ---> Error, unable to fill space, space too large. End... No? ---> Continue to 2.
- Then it would start looking around itself in constantly-growing cubes, or spheres, etc. and would stop searching in a direction if it met an intervening solid block that you can define (if you want to say that a wool house on the moon isn't really airtight, for example... ) It would then check to see if any of those blocks are visible from the sky. Yes? ---> Error, unable to fill space, space too large, End... No? ---Continue to 3.
- It would count the blocks on every iteration of the loop, and display a number above the distributor. The more blocks of "air" it needs to create, the more leaves/trees need to be near the collector(s). (Would be possible at this point to create a limit on the amount of atmosphere each distributor can maintain if you wanted to, and if another distributor(s) was detected during the earlier steps, add to the number of maintainable atmosphere blocks appropriately.
- Check to see if distributor(s) are receiving enough pressure. [ex: 900/100 bsi?(Blocks per square inch ) Nope! Build a bigger oxygen farm. (You would see the required oxygen for your area above the distributor after it was done calculating.) 1000/1000? ---> Continue to 5 OR just fill area with oxygen]
- Begin filling spaces with air. This could use the same sort of loops as the search method, and would begin to fill the base one block at a time per distributor (if you wanted how fast a base gains atmosphere to be a function of the number of distributors, that is... which if you used this system, would be in my opinion, the way to go.)
As for the issue of bases becoming depressurized via "accidental" mining...
Is it possible to have oxygen blocks test the other blocks around them whenever they have a space adjacent to them that contains neither a Galacticraft oxygen block nor a solid block? (a normal minecraft "air" block)
If so, then every time a block beside a GC oxygen block is replaced with an air block, it would check that block, and any other air blocks that are attached to it for "sky" above it, if so, remove all oxygen blocks adjacent to each other. Add each block to the distributor upper limit, and if they exceed the capacity of the distributor, or the amount of oxygen being supplied by the collectors, remove all oxygen blocks adjacent to each other. (As OP posted about pressure being required to breathe...) Until the hole is fixed, the "sky" condition on the distributor checking would remain true, and it would stop producing oxygen.
I'm not sure that this is the best way, but with my small amount of knowledge with java, I know that the idea is at least possible, but I am unsure if minecraft/forge has the required functions to do this... or how well it handles checks like that...
Anyway, just the two cents of a GC fan who wants you to keep up the good work!
Cheers!
~Bcbear