IsEnabled && enabling late components
Also finally added the source plugin
This commit is contained in:
parent
f8a850df76
commit
9b097b7858
3 changed files with 48 additions and 2 deletions
|
@ -80,6 +80,18 @@
|
||||||
</useSystemClassLoader> <!-- https://stackoverflow.com/a/53012553/2703239 -->
|
</useSystemClassLoader> <!-- https://stackoverflow.com/a/53012553/2703239 -->
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-source-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-sources</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|
|
@ -2,12 +2,21 @@ package buttondevteam.core;
|
||||||
|
|
||||||
import buttondevteam.lib.architecture.Component;
|
import buttondevteam.lib.architecture.Component;
|
||||||
import buttondevteam.lib.architecture.exceptions.UnregisteredComponentException;
|
import buttondevteam.lib.architecture.exceptions.UnregisteredComponentException;
|
||||||
|
import lombok.val;
|
||||||
|
|
||||||
public final class ComponentManager {
|
public final class ComponentManager {
|
||||||
private ComponentManager() {}
|
private ComponentManager() {}
|
||||||
|
|
||||||
|
private static boolean componentsEnabled = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables components based on a configuration
|
* This flag is used to enable components registered after the others were enabled.
|
||||||
|
* @return Whether already registered components have been enabled
|
||||||
|
*/
|
||||||
|
public static boolean areComponentsEnabled() { return componentsEnabled; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables components based on a configuration - any component registered afterwards will be also enabled
|
||||||
*/
|
*/
|
||||||
public static void enableComponents() {
|
public static void enableComponents() {
|
||||||
//Component.getComponents().values().stream().filter(c->cs.getConfigurationSection(c.getClass().getSimpleName()).getBoolean("enabled")).forEach(c-> {
|
//Component.getComponents().values().stream().filter(c->cs.getConfigurationSection(c.getClass().getSimpleName()).getBoolean("enabled")).forEach(c-> {
|
||||||
|
@ -17,6 +26,7 @@ public final class ComponentManager {
|
||||||
} catch (UnregisteredComponentException ignored) { //This *should* never happen
|
} catch (UnregisteredComponentException ignored) { //This *should* never happen
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
componentsEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,5 +39,17 @@ public final class ComponentManager {
|
||||||
} catch (UnregisteredComponentException ignored) { //This *should* never happen
|
} catch (UnregisteredComponentException ignored) { //This *should* never happen
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
componentsEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will also return false if the component is not registered.
|
||||||
|
*
|
||||||
|
* @param cl The component class
|
||||||
|
* @return Whether the component is registered and enabled
|
||||||
|
*/
|
||||||
|
public static boolean isEnabled(Class<? extends Component> cl) {
|
||||||
|
val c = Component.getComponents().get(cl);
|
||||||
|
return c != null && c.isEnabled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package buttondevteam.lib.architecture;
|
package buttondevteam.lib.architecture;
|
||||||
|
|
||||||
|
import buttondevteam.core.ComponentManager;
|
||||||
import buttondevteam.lib.TBMCCoreAPI;
|
import buttondevteam.lib.TBMCCoreAPI;
|
||||||
import buttondevteam.lib.architecture.exceptions.UnregisteredComponentException;
|
import buttondevteam.lib.architecture.exceptions.UnregisteredComponentException;
|
||||||
import buttondevteam.lib.chat.TBMCChatAPI;
|
import buttondevteam.lib.chat.TBMCChatAPI;
|
||||||
|
@ -73,7 +74,8 @@ public abstract class Component {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a component checking it's dependencies and calling {@link #register(JavaPlugin)}.<br>
|
* Registers a component checking it's dependencies and calling {@link #register(JavaPlugin)}.<br>
|
||||||
* Make sure to register the dependencies first.
|
* Make sure to register the dependencies first.<br>
|
||||||
|
* The component will be enabled automatically, regardless of when it was registered.
|
||||||
*
|
*
|
||||||
* @param component The component to register
|
* @param component The component to register
|
||||||
*/
|
*/
|
||||||
|
@ -113,7 +115,17 @@ public abstract class Component {
|
||||||
if (component.config == null) component.config = compconf.createSection(component.getClassName());
|
if (component.config == null) component.config = compconf.createSection(component.getClassName());
|
||||||
component.register(plugin);
|
component.register(plugin);
|
||||||
components.put(component.getClass(), component);
|
components.put(component.getClass(), component);
|
||||||
|
if (ComponentManager.areComponentsEnabled() && component.shouldBeEnabled().get()) {
|
||||||
|
try { //Enable components registered after the previous ones getting enabled
|
||||||
|
setComponentEnabled(component, true);
|
||||||
|
} catch (UnregisteredComponentException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (component.enabled) {
|
||||||
|
component.disable();
|
||||||
|
component.enabled = false;
|
||||||
|
}
|
||||||
component.unregister(plugin);
|
component.unregister(plugin);
|
||||||
components.remove(component.getClass());
|
components.remove(component.getClass());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue