ClientTickEvent это каждый тик. Вообще можешь оформить свои ивенты по примеру ивентов форджа. Придется конечно миксинить и костылять, с этим ничего не поделать. Конкретно ивент смены слота в хотбаре можешь замиксинить в начало метода changeCurrentItem() в классе InventoryPlayer (1.12.2). Вроде этот метод отвечает за смену слота