Essentially a long-standing (and reported) bug caused by sponge with a mod causes 3x the amount of blocks to be dropped than is expected (you cannot change this via the mod’s config).
I was looking to cancel the break event if the block and tool are correct then set the block to air and drop the correct amount of blocks.
Don’t change the break event, then; that’s not what you’re looking to modify. Instead, store the Location (and invalidate it after one tick). Then, check for a DropItemEvent.Destruct; if it’s at that location, invalidate the location there as well, and modify the drops from there.
Location is relative to an Extent (World in this case), while Vector3i is simply a set of 3 integers. Location has a method getBlockPosition() which converts it to a Vector3i, and Extent has a method getLocation() that converts a Vector3i to a Location.