package com.supaham.commons.bungee;
import com.supaham.commons.bungee.modules.framework.ModuleContainer;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
import javax.annotation.Nonnull;
import pluginbase.logging.LoggablePlugin;
import pluginbase.messages.LocalizablePlugin;
/**
* Simple interface that represents a common plugin. This is used from within the whole commons
* library.
*
* @since 0.3.6
*/
public interface CommonPlugin extends LocalizablePlugin, LoggablePlugin {
/**
* Returns the {@link Plugin} instance this {@link CommonPlugin} is extended by.
*
* @return bungee plugin
*/
Plugin getBungeePlugin();
/**
* Returns {@link ProxyServer} instance registering this plugin.
*
* @return bungee proxy
*/
ProxyServer getProxy();
/**
* Registers a {@link Listener} to this plugin.
*
* @param listener listener to register
* @param <T> listener type
*
* @return registered listener (that is the given parameter)
*/
@Nonnull <T extends Listener> T registerEvents(@Nonnull T listener);
/**
* Unregisters a {@link Listener} to this plugin.
*
* @param listener listener to unregister
* @param <T> listener type
*
* @return unregistered listener (that is the given parameter)
*/
@Nonnull <T extends Listener> T unregisterEvents(@Nonnull T listener);
/**
* Returns this plugin's {@link ModuleContainer}.
*
* @return module container instance
*/
@Nonnull ModuleContainer getModuleContainer();
}