I was simply explaining that it should be that way. There is a reason they are being called on both sides by vanilla and it should stay that way. Only real fact is that when you for e.g generate random it will be different on both sides - BUT the server side value will most likely take over - I was having fun with those some time ago and I simply said "nah, it works so better leave it".
And back to issue:
You want to have a tool that when it breaks block, the block broken will scan blocks around and if block == blockaround it will break too giving loot (without recurrency/chain reaction)?
If so - take a look at BlockEvent.class
You have two events you can use - both seem good for what you want to do.
How would i do it?
1. Subscribe to BreakEvent.
2. Read neat documentation with nice addnotation: Reference to the Player who broke the block.
3. If (equipeditem == sledgehammer) - BAM, launch "reaction"
4. Scan blocks around with simple +/- x/y/z scanner
5. If (blockaround == sameblock)
6. Wait... <miracles happening>
7. BOOOOOOOM!!! Stomp, crush, destroy, smash! Set(0) and drop!
8. Profit!
And yes... this is me in free time:
Hope it helped
P.S - you can probably do that all from tool side of code, but I am too lazy to look into that, unless you want me to.
Using event will cost you one "get" (itemequiped) and one "if" statement per block broken (the rest of actual code would be launched anyway), so I guess that's not worst way to do it, but there is better.