You should throw an exception if the player does not have the capability because what you do here
drugUse.orElse(new DrugUse())
is pointless because if the player does not have the capability you are always accessing data of a new instance of your capability.
Also is the event correctly registered?
You're trying to use the vanilla crafting GUI.
The vanilla crafting gui checks to see if the block being accessed is The One And Only Vanilla Crafting Table.
Your block is not The One And Only Vanilla Crafting Table.
Therefor the use of that gui is invalid and thus closed.