The Bad news is that your current module design will never work on Vassal 3.1.
The Good news is that it is very easy to fix you module to run on both 3.1 and 3.0.
Your module works on Vassal 3.0.x because it takes advantage of a bug that is present in Vassal 3.0 and earlier. Your Global Key Commands (GKC’s) access the property $BasicName$ in the Blue cards that are face down in the Deck.
But, face down cards in a Deck are Masked to all users and so the $BasicName$ should not be accessible - The purpose of Masking is to hide the identidy of the card. No properties at all defined above the Mask trait should be accessible when the card is Masked.
The easy way to fix your module is to define a new Marker below the Mask trait that contains the name of the card and reference this Marker instead of $BasicName$ in any triggers and GKC’s.
$BasicName is underneath the mask - makes sense that you should not be able
to access it when piece is face down
Would it also apply to $PieceName$ or does $PieceName$ circumvent masking?
$PieceName$ is modified by the Mask trait to return the ‘Name when masked’ text. So you can see components of the PieceName that where created by traits above the Mask, but you will never see any component of the PieceName created by traits below the Mask (e.g. the BasicName).