This detects if you are in 3.0 or 2.0 In 2.0 it sends a the message "" with the broadcast and join, then receives "" to say 2.0 In 3.0 scratch tries to remove the "" message, and so changes it to "message1". But it does not change the block with the join in it. As a result, in 3.0 it broadcasts "", and fails to receive "message1" to say 3.0
this can could be fixed by replacing broadcast(reporter) with if<(reporter)=[]> broadcast[ v] // or the replacement empty message if done by 3.0 else broadcast(reporter)