56 lines
1.7 KiB
Java
56 lines
1.7 KiB
Java
package tc.oc.pgm.match.inject;
|
|
|
|
import java.util.Optional;
|
|
import javax.annotation.Nullable;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Provider;
|
|
|
|
import com.google.inject.TypeLiteral;
|
|
import org.bukkit.event.Listener;
|
|
import tc.oc.commons.core.reflect.Types;
|
|
import tc.oc.pgm.match.Match;
|
|
import tc.oc.pgm.match.MatchModule;
|
|
import tc.oc.pgm.match.MatchModuleContext;
|
|
import tc.oc.pgm.module.ModuleLoadException;
|
|
import tc.oc.pgm.module.ModuleManifest;
|
|
|
|
/**
|
|
* Base manifest for configuring a {@link MatchModule}
|
|
*
|
|
* If the module has the @ApiRequired annotation, and there is no API connection,
|
|
* the module is not provisioned.
|
|
*
|
|
* If the module returns false from its {@link MatchModule#shouldLoad()} method,
|
|
* it is discarded.
|
|
*/
|
|
public abstract class MatchModuleManifest<M extends MatchModule> extends ModuleManifest<MatchModule, MatchScoped, MatchModuleContext, M> {
|
|
|
|
protected MatchModuleManifest() {
|
|
this(null);
|
|
}
|
|
|
|
protected MatchModuleManifest(@Nullable TypeLiteral<M> type) {
|
|
super(type);
|
|
}
|
|
|
|
@Override
|
|
protected void configure() {
|
|
super.configure();
|
|
|
|
// Register the module as a Listener if it is one
|
|
if(Types.isAssignable(Listener.class, type)) {
|
|
matchOptionalListener((Class<? extends Listener>) rawType);
|
|
}
|
|
}
|
|
|
|
@Inject protected Provider<Match> matchProvider;
|
|
|
|
@Override
|
|
protected final Optional<M> provisionModuleWithoutDependencies() throws ModuleLoadException {
|
|
return provisionModuleWithoutFiltering()
|
|
.filter(MatchModule::shouldLoad);
|
|
}
|
|
|
|
protected abstract Optional<M> provisionModuleWithoutFiltering() throws ModuleLoadException;
|
|
}
|