My answer would be -Two opposite sides to be mirrored and the connecting one to be 90° rotated
easy peasy case: a pattern of blocks wich is at the same time a floor and a roof: so the pattern (and design on the faces of the blocks) should be reflected on the 2 opposite faces… otherwise i will need to do 2 layers; in this case 4 faces of the block are ignored - this is valid also for a wall wich is at least 3 blocks high
a wall wich is 1 or 2 blocks high: visible faces 3 (we do not take in cosideration starting and ending blocks)
design patterns: to have a pattern you need at least a repeated series (or module) of 2 (a straight corridor large 2 blocks) >>>>>>>> or a 2x2 pattern like <><><><>; this is the easiest especially if you are using a block with symmetrical design for 1 or 2 axis;
with all the blocks with wich you have no symmetry axis, you will need at least 2 of them to do something, and in particular you need 1 and it’s mirrored version to do it - the point is that with at least 1 symmetry axis you don’t speak about mirroring, without axis of simmetry the joint between the 2 blocks will become your axis of simmetry
a tool wich rotates the faces will not give you the mirrored version of your “P” design but only the contrary, or opposite if you prefer
but if you have an “L” design where both lines of the “L” are equals you would have it (because this “L” do have 1 axis of symmetry, bisector 45°)
or the example of passing from a “P” design to a “T” design (from zero to 1 central axis of symmetry)
in the end if you want to use ANY random design on the block face, you need a rotation and a mirroring option
as i understood we havo no space for this…
what i would suggest is to eliminate completely designs with no symmetry axis, cause as it is they are not going to be used because of the “can’t close the pattern”, wich is why i decide to make a decorated block of a kind or the other, it must make sense, or else a colored block with no design is better
and would insert at theyr places blocks with angular design of already existing blocks with straight patterns (so we can close a “frame” design around a pattern on a horizontal plane)