001package com.ericlam.mc.eldgui;
002
003import org.jetbrains.annotations.Nullable;
004
005/**
006 * 玩家在打開界面到關閉界面時的數據容器,用於在各個 Controller 之間傳遞資料用
007 */
008public interface UISession {
009
010    /**
011     * 透過 key 獲取數據
012     *
013     * @param key 鍵
014     * @param <T> 數據類型
015     * @return 數據,可爲 null
016     */
017    @Nullable <T> T getAttribute(String key);
018
019    /**
020     * 透過 key 提取數據並在 Session 中刪除
021     *
022     * @param key 鍵
023     * @param <T> 數據類型
024     * @return 數據,可爲 null
025     */
026    @Nullable <T> T pollAttribute(String key);
027
028    /**
029     * 設置數據到 Session
030     *
031     * @param key   鍵
032     * @param value 數值
033     */
034    void setAttribute(String key, Object value);
035
036
037}