Думаю использовать для этого ивенты немного неэффективно.
Если у тебя есть свой блок, к которому ты хочешь применить эту механику, то тебе лучше переопределить метод разрушения блока onBlockDestroyedByPlayer(), а дальше использовать код наложения эффекта, представленный выше.
Ивенты нужны, если ты хочешь проверять абсолютно все разрушения блоков в мире и идти от этого.
Преймущество переопределения метода в том, что он будет вызываться только при разрушении твоего блока, а не отслеживать все разрушения.
Возможно способ реализации не сильно принципиален, ибо работать будет и так и так, но с точки зрения правильности кода этот вариант лучше.