001package com.ericlam.mc.eldgui.component;
002
003import org.bukkit.inventory.ItemStack;
004import org.jetbrains.annotations.Nullable;
005
006/**
007 * 物品屬性編輯器
008 */
009public interface AttributeController {
010
011    /**
012     * 預設綁定 Model 屬性數值 的 標識文字
013     */
014    String VALUE_TAG = "input-value";
015    /**
016     * 預設綁定 Model 屬性名稱 的 標識文字
017     */
018    String FIELD_TAG = "input-field";
019
020    /**
021     * 設置屬性
022     *
023     * @param itemStack 物品
024     * @param key       鍵
025     * @param value     數值
026     */
027    void setAttribute(ItemStack itemStack, String key, Object value);
028
029    /**
030     * 設置 該 pattern 内所有物品的屬性
031     *
032     * @param pattern pattern
033     * @param key     鍵
034     * @param value   數值
035     */
036    void setAttribute(char pattern, String key, Object value);
037
038    /**
039     * 獲取物品的屬性
040     *
041     * @param item 物品
042     * @param key  鍵
043     * @param <C>  獲取類型
044     * @return 數值
045     */
046    @Nullable <C> C getAttribute(ItemStack item, String key);
047
048}