mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-23 03:37:38 +00:00
Fix method of loading dependant plugins
This commit is contained in:
parent
5a8b76d97b
commit
3c361b432f
@ -108,7 +108,7 @@ public final class PluginManager {
|
||||
fileReader.close();
|
||||
|
||||
// Check if the plugin has alternate dependencies.
|
||||
if(pluginConfig.loadAfter.length > 0) {
|
||||
if(pluginConfig.loadAfter != null && pluginConfig.loadAfter.length > 0) {
|
||||
// Add the plugin to a "load later" list.
|
||||
dependencies.add(new PluginData(
|
||||
pluginInstance, PluginIdentifier.fromPluginConfig(pluginConfig),
|
||||
@ -130,20 +130,30 @@ public final class PluginManager {
|
||||
|
||||
// Load plugins with dependencies.
|
||||
int depth = 0; final int maxDepth = 30;
|
||||
while(!dependencies.isEmpty() || depth < maxDepth) {
|
||||
while(!dependencies.isEmpty()) {
|
||||
// Check if the depth is too high.
|
||||
if(depth >= maxDepth) {
|
||||
Grasscutter.getLogger().error("Failed to load plugins with dependencies.");
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
// Get the next plugin to load.
|
||||
var pluginData = dependencies.get(0);
|
||||
|
||||
// Check if the plugin's dependencies are loaded.
|
||||
if(!this.plugins.keySet().containsAll(List.of(pluginData.getDependencies()))) {
|
||||
depth++; // Increase depth counter.
|
||||
continue; // Continue to next plugin.
|
||||
}
|
||||
|
||||
// Remove the plugin from the list of dependencies.
|
||||
dependencies.remove(pluginData);
|
||||
|
||||
// Load the plugin.
|
||||
this.loadPlugin(pluginData.getPlugin(), pluginData.getIdentifier(), pluginData.getClassLoader());
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger().error("Failed to load a plugin.", exception);
|
||||
Grasscutter.getLogger().error("Failed to load a plugin.", exception); depth++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -175,7 +185,7 @@ public final class PluginManager {
|
||||
// Call the plugin's onLoad method.
|
||||
try {
|
||||
plugin.onLoad();
|
||||
} catch (Exception exception) {
|
||||
} catch (Throwable exception) {
|
||||
Grasscutter.getLogger().error("Failed to load plugin: " + identifier.name, exception);
|
||||
}
|
||||
}
|
||||
@ -188,7 +198,7 @@ public final class PluginManager {
|
||||
Grasscutter.getLogger().info("Enabling plugin: " + name);
|
||||
try {
|
||||
plugin.onEnable();
|
||||
} catch (Exception exception) {
|
||||
} catch (Throwable exception) {
|
||||
Grasscutter.getLogger().error("Failed to enable plugin: " + name, exception);
|
||||
}
|
||||
});
|
||||
@ -202,7 +212,7 @@ public final class PluginManager {
|
||||
Grasscutter.getLogger().info("Disabling plugin: " + name);
|
||||
try {
|
||||
plugin.onDisable();
|
||||
} catch (Exception exception) {
|
||||
} catch (Throwable exception) {
|
||||
Grasscutter.getLogger().error("Failed to disable plugin: " + name, exception);
|
||||
}
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user