由于“依赖循环”,自行编写的插件无法在服务器启动时加载

问题描述 投票:0回答:1

我有两个自己写的插件。 NovEcon2 和 RealBanks2。

NovEcon2 是我的经济插件,它依赖于

Vault
RealBanks2
作为软依赖。 RealBanks2 是我的银行插件,它也取决于
Vault

源代码可以在这里找到(重要,留在分支

kotlin-rewrite
):

我在 RealBanks2 中实现了一个 api,以访问 NovEcon2 中的一些功能。

可以在 NovEcon2 中启用 api,通过将 configlet-bool 设置为

true
但是,由于这两个插件都依赖于
Vault
,因此在 configlet-bool 设置为
true
时加载它们目前是不可能的。

由于 RealBanks2 需要加载经济插件,而 NovEcon2 需要加载 RealBanks2,因此它们都不会被加载。 最终导致 NovEcon2 无法加载,因为 RealBanks2 未加载,并且 RealBanks2 无法加载,因为没有经济插件连接到金库,例如 NovEcon2。

其他一些人将其称为“依赖循环”。 这是服务器启动时控制台中的样子:

[18:31:35 INFO]: [Vault] Enabling Vault v1.7.3-b131
[18:31:35 INFO]: [Vault] [Permission] SuperPermissions loaded as backup permission system.
[18:31:35 INFO]: [Vault] Enabled Version 1.7.3-b131
[18:31:35 INFO]: [NovEcon2] Enabling NovEcon2 v1.0.0
[18:31:35 ERROR]: [NovEcon2] - Disabled due to no RealBanks dependency found!
[18:31:35 INFO]: [NovEcon2] Disabling NovEcon2 v1.0.0
....
[18:31:36 INFO]: [RealBanks2] Enabling RealBanks2 v2.0.0
[18:31:36 ERROR]: [RealBanks2] - Disabled due to no Vault dependency found!
[18:31:36 INFO]: [RealBanks2] Disabling RealBanks2 v2.0.0

我考虑过一个单独的桥接插件,但是据我所知,它会以同样的问题结束,因为 NovEcon2 需要桥接插件,而桥接插件将依赖于 RealBanks2。

更改

plugin.yml
中依赖的插件的顺序或添加
loadbefore
并没有帮助我更接近可行的解决方案。

这没有任何结果,但仍然失败。

minecraft circular-dependency spigot
1个回答
0
投票

经过长时间的搜索,以下过程解决了我的问题:

有一个事件,叫做

ServiceRegisterEvent
。当服务在服务器启动时注册时,它可用于获取服务。

我监听了服务

Economy
,如果发生这种情况,我加载了经济插件。

我还必须编辑银行插件的

plugin.yml
,以便在经济插件之前加载。

服务注册事件:

internal class ServiceRegisterListener(private val realBanks2: RealBanks) : Listener {
    @EventHandler
    fun onEconomyServiceRegister(e: ServiceRegisterEvent) {
        if(e.provider.service.simpleName.equals("Economy")) {
            if(!realBanks2.setupEconomy()) {
                RealBanks.LOG.severe(String.format("[%s] - Disabled due to no Vault dependency found!", realBanks2.name))
                realBanks2.server.pluginManager.disablePlugin(realBanks2)
                return
            }
        }
    }
}

插件.yml

name: RealBanks2
version: ${project.version}
main: me.linuxsquare.realbanks2.RealBanks
api-version: "1.19"
depend: [Vault, PlayerUUIDCache]
loadbefore:
    - NovEcon2
author: LinuxSquare
website: https://codeberg.org/Noveria/RealBanks2
© www.soinside.com 2019 - 2024. All rights reserved.