001package com.ericlam.mc.minigames.core.registable;
002
003import com.ericlam.mc.minigames.core.SectionTask;
004import com.ericlam.mc.minigames.core.arena.ArenaConfig;
005import com.ericlam.mc.minigames.core.arena.ArenaMechanic;
006import com.ericlam.mc.minigames.core.character.GamePlayerHandler;
007import com.ericlam.mc.minigames.core.gamestats.GameStatsHandler;
008import com.hypernite.mc.hnmc.core.managers.builder.AbstractInventoryBuilder;
009import com.hypernite.mc.hnmc.core.misc.commands.DefaultCommand;
010import org.bukkit.plugin.java.JavaPlugin;
011
012import javax.annotation.Nonnull;
013
014/**
015 * 強制註冊類,必須註冊所有遊戲才會被激活。
016 */
017public interface Compulsory {
018
019    /**
020     * 註冊大堂倒數程序
021     *
022     * @param task 遊戲程序
023     */
024    void registerLobbyTask(SectionTask task);
025
026    /**
027     * 註冊遊戲結束程序
028     *
029     * @param task 遊戲程序
030     */
031    void registerEndTask(SectionTask task);
032
033    /**
034     * 註冊場地創建主指令, 創建後將會自動幫你把 {@link com.ericlam.mc.minigames.core.manager.ArenaCreateManager} 的操作全部加到這個主指令內。
035     *
036     * @param defaultCommand 根指令
037     * @param plugin         插件實例
038     */
039    void registerArenaCommand(DefaultCommand defaultCommand, final JavaPlugin plugin);
040
041    /**
042     * 註冊場地設定
043     *
044     * @param arenaConfig 場地設定
045     */
046    void registerArenaConfig(@Nonnull ArenaConfig arenaConfig);
047
048    /**
049     * 註冊場地設置機制
050     *
051     * @param arenaMechanic 場地設置機制
052     */
053    void registerArenaMechanic(@Nonnull ArenaMechanic arenaMechanic);
054
055    /**
056     * 註冊遊戲玩家管理機制
057     *
058     * @param gamePlayerHandler 遊戲玩家管理機制
059     */
060    void registerGamePlayerHandler(@Nonnull GamePlayerHandler gamePlayerHandler);
061
062    /**
063     * 註冊遊戲玩家資料管理機制
064     *
065     * @param gameStatsHandler 遊戲玩家資料管理機制
066     */
067    void registerGameStatsHandler(@Nonnull GameStatsHandler gameStatsHandler);
068
069    /**
070     * 註冊投票界面
071     *
072     * @param inventoryBuilder 背包建造器
073     * @param allowSlot        地圖投票物品 slot
074     */
075    void registerVoteGUI(AbstractInventoryBuilder inventoryBuilder, Integer... allowSlot);
076}