@Override
    public boolean unload(Class<? extends Unloadable> clazz) {
        for (Injectable i : getInjected()) {
            if (i.getClass().getName().equalsIgnoreCase(clazz.getName())) {
                if (i instanceof Unloadable) {
                    UnloadEvent ue = new UnloadEvent((Unloadable) i);

                    Bukkit.getPluginManager().callEvent(ue);

                    if (!ue.isCancelled()) {
                        i.setInjected(false);

                        if (i instanceof Listener) {
                            HandlerList.unregisterAll((Listener) i);
                        }

                        if (i instanceof InjectableCommand) {
                            getCommandMap().getCommand(ChatColor.stripColor(((InjectableCommand) i).getLabel().replace(" ", "_"))).unregister(getCommandMap());
                        }

                        if (i instanceof InjectablePlugin) {
                            try {
                                Bukkit.getPluginManager().disablePlugin((InjectablePlugin) i);
                            } catch (Exception e) {
                                Bukkit.getPluginManager().disablePlugin((InjectablePlugin) i);
                            }
                        }

                        injected.remove(i);
                    }
                    return true;
                }
            }
        }
        return false;
    }