@EventHandler(priority = EventPriority.NORMAL)
    public void onPlayerInteract(final PlayerInteractEvent event){
        // instead of ignoreCancelled = true
        if (event.useItemInHand() == Result.DENY){
            return;
        }
        
        final Player player = event.getPlayer();
        // return if not right click
        if (!(Action.RIGHT_CLICK_AIR.equals(event.getAction()) || Action.RIGHT_CLICK_BLOCK.equals(event.getAction()))) {
            return;
        }
        
        // check inHand items and permission
        if (player.getItemInHand() == null || player.getItemInHand().getTypeId() != config.getLaunchTool() || !Perms.CLICK_LAUNCH.has(player)){
            return;
        }
        
        final FireworkMeta meta = FireworkMetaContainer.getRandomFireworkMeta(player);
        if (meta != null){
            Block target = player.getTargetBlock(null, config.getCheckDistance());
            if (target != null && target.getType() != Material.AIR){
                Firework fw = (Firework)target.getWorld().spawnEntity(target.getLocation(), EntityType.FIREWORK);
                fw.setFireworkMeta(meta);
            }
        }
    }