public BoolMsgResult canRemove(Plugin plugin) {
        if (plugin == null)
            return new BoolMsgResult(false, "The Plugin is null.");
        String name = "Plugin(" + plugin.getPluginName() + ")";
        if (!plugins.containsKey(plugin.getPluginName()))
            return new BoolMsgResult(false, name + " did not load or has already removed.");
        ArrayList<String> needRemoveFirst = new ArrayList<>(plugins.size() - 1);
        plugins.forEach((n, p) -> {
            if (!n.equals(plugin.getPluginName()))
                for (String needPluginName : p.needSupportPlugins())
                    if (needPluginName.equals(plugin.getPluginName())) {
                        needRemoveFirst.add(n);
                        break;
                    }
        });
        if (!needRemoveFirst.isEmpty()) {
            StringJoiner strJoiner = new StringJoiner(", ");
            needRemoveFirst.forEach(n -> {
                strJoiner.add(n);
            });
            return new BoolMsgResult(false,
                    name + " needs to remove follow Plugins first: (" + strJoiner + ").");
        } else
            return new BoolMsgResult(true, "");
    }