package com.supaham.commons.bukkit; import com.supaham.commons.bukkit.commands.CommonCommandsManager; import com.supaham.commons.bukkit.modules.ModuleContainer; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.plugin.Plugin; import java.io.File; 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.1 */ public interface CommonPlugin extends LocalizablePlugin, LoggablePlugin, Plugin { /** * 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 default <T extends Listener> T registerEvents(@Nonnull T listener) { getServer().getPluginManager().registerEvents(listener, this); return 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 default <T extends Listener> T unregisterEvents(@Nonnull T listener) { HandlerList.unregisterAll(listener); return listener; } /** * Returns this plugin's {@link ModuleContainer}. * * @return module container instance */ @Nonnull ModuleContainer getModuleContainer(); /** * Returns this plugin's {@link CommonCommandsManager}. This may be a subclass of {@link CommonCommandsManager} if * the plugin has set it so. * * @return CommonCmmandsManager */ @Nonnull CommonCommandsManager getCommandsManager(); /** * Returns this plugin's {@link CommonSettings}. * * @return settings */ CommonSettings getSettings(); @Nonnull File getSettingsFile(); boolean reloadSettings(); boolean saveSettings(); boolean isFirstRun(); }