001package com.ericlam.mc.minigames.core.arena;
002
003import org.bukkit.configuration.file.FileConfiguration;
004import org.bukkit.entity.Player;
005
006import javax.annotation.Nonnull;
007
008/**
009 * 讓使用者註冊的場地設置機制
010 */
011public interface ArenaMechanic {
012
013    /**
014     * 定義如何加載場地
015     *
016     * @param yml  場地文件
017     * @param info 場地基本資訊
018     * @return Arena 實作容器
019     */
020    CreateArena loadCreateArena(FileConfiguration yml, Arena info);
021
022    /**
023     * 定義如何創建場地
024     *
025     * @param name   場地名稱
026     * @param player 創建該場地的玩家
027     * @return 新的 Arena 實作容器
028     */
029    CreateArena createArena(@Nonnull final String name, @Nonnull final Player player);
030
031    /**
032     * 保存額外的場地設定
033     *
034     * @param preSaveYml 即將會被儲存的場地文件
035     * @param arena      Arena 容器
036     */
037    void saveExtraArenaSetting(FileConfiguration preSaveYml, Arena arena);
038
039}