Bungee can't differentiate between loaded and enabled

This commit is contained in:
Frank van der Heijden 2021-08-03 20:07:50 +02:00
parent 11a5c5140b
commit dd99bad81c
No known key found for this signature in database
GPG key ID: B808721C2DD5B5B8
2 changed files with 25 additions and 10 deletions

View file

@ -124,7 +124,12 @@ public class BungeePluginManager extends AbstractPluginManager<Plugin, BungeePlu
@Override
public boolean isPluginEnabled(String pluginId) {
return false; // Not supported on BungeeCord.
return getPlugin(pluginId).isPresent();
}
@Override
protected Optional<Plugin> checkPluginStates(List<Plugin> plugins, boolean enabled) {
return Optional.empty(); // Bungee can't differentiate between "loaded" and "enabled"
}
@Override

View file

@ -97,11 +97,9 @@ public abstract class AbstractPluginManager<P, D extends ServerUtilsPluginDescri
* Enables a list of plugins.
*/
public PluginResults<P> enablePlugins(List<P> plugins) {
for (P plugin : plugins) {
String pluginId = getPluginId(plugin);
if (isPluginEnabled(pluginId)) {
return new PluginResults<P>().addResult(pluginId, Result.ALREADY_ENABLED);
}
Optional<P> pluginOptional = checkPluginStates(plugins, false);
if (pluginOptional.isPresent()) {
return new PluginResults<P>().addResult(getPluginId(pluginOptional.get()), Result.ALREADY_ENABLED);
}
return enableOrderedPlugins(determineLoadOrder(plugins));
@ -115,6 +113,19 @@ public abstract class AbstractPluginManager<P, D extends ServerUtilsPluginDescri
public abstract boolean isPluginEnabled(String pluginId);
/**
* Finds the first plugin where the enabled state does not match the given state it must be in.
* This method can be overridden by implementations which don't support the enabled state.
*/
protected Optional<P> checkPluginStates(List<P> plugins, boolean enabled) {
for (P plugin : plugins) {
if (isPluginEnabled(plugin) != enabled) {
return Optional.of(plugin);
}
}
return Optional.empty();
}
/**
* Disables the given plugin by name.
*/
@ -132,10 +143,9 @@ public abstract class AbstractPluginManager<P, D extends ServerUtilsPluginDescri
* Disables a list of plugins.
*/
public PluginResults<P> disablePlugins(List<P> plugins) {
for (P plugin : plugins) {
if (!isPluginEnabled(plugin)) {
return new PluginResults<P>().addResult(getPluginId(plugin), Result.ALREADY_DISABLED);
}
Optional<P> pluginOptional = checkPluginStates(plugins, true);
if (pluginOptional.isPresent()) {
return new PluginResults<P>().addResult(getPluginId(pluginOptional.get()), Result.ALREADY_DISABLED);
}
List<P> orderedPlugins;