001package com.ericlam.mc.minigames.core.manager; 002 003import com.ericlam.mc.minigames.core.exception.task.TaskAlreadyRunningException; 004import com.ericlam.mc.minigames.core.game.InGameState; 005 006import javax.annotation.Nullable; 007 008/** 009 * 排程管理器 010 */ 011public interface ScheduleManager { 012 013 /** 014 * 運行初始程序 (大堂倒數) 015 * 016 * @param forceStart 是否為強制開始 (無法取消 + 倒數只有十秒) 017 */ 018 void startFirst(boolean forceStart); 019 020 /** 021 * 開始該場地狀態的程序 022 * 023 * @param state 場地狀態 024 * @throws TaskAlreadyRunningException 該程序已在運行時 025 */ 026 void start(InGameState state) throws TaskAlreadyRunningException; 027 028 /** 029 * 該程序是否運行中 030 * 031 * @param state 遊戲狀態 032 * @return 是否運行中 033 */ 034 boolean isRunning(InGameState state); 035 036 /** 037 * 取消目前程序 038 */ 039 void cancelCurrent(); 040 041 /** 042 * 強制完成目前程序 043 */ 044 void finishCurrent(); 045 046 /** 047 * 跳到某程序 048 * 049 * @param state 遊戲狀態 050 * @param cancel 強制取消, 否則強制完成 051 */ 052 void jumpInto(InGameState state, boolean cancel); 053 054 /** 055 * 返回目前場地狀態 056 * 057 * @return 目前場地狀態 058 */ 059 @Nullable 060 InGameState getCurrentGameState(); 061 062}