Class ServerSetting

java.lang.Object
server.ServerSetting

public final class ServerSetting extends Object
單一伺服器設定項在「settings.ini 鍵」與「執行期欄位」之間的雙向繫結。

每個 ServerSetting 同時知道如何:

  • apply(String):把 ini 讀到的原始字串解析後寫入欄位(載入方向)。
  • currentValue():把欄位目前的執行期值格式化為 ini 字串(存檔方向)。

如此一來「載入」與「存檔」共用同一份宣告,避免過去 loadSetting() 有讀無寫、 導致 ServerProperties.saveProperties() 無法回存執行期變更的不對稱問題。 設定持有者(如 ServerConstants)以一份 List 集中宣告所有項目, 再交由 ServerProperties.loadInto(List)ServerProperties.collectFrom(List) 統一處理。

本類別刻意不依賴 ServerProperties(解析/格式化皆為純函式), 因此可在無資料庫的離線單元測試中直接驗證(見 test/server/ServerSettingTest)。

  • Method Details

    • key

      public String key()
      取得本設定對應的 settings.ini 鍵名。
      Returns:
      鍵名
    • apply

      public void apply(String raw)
      解析 ini 原始字串並套用到繫結的欄位(載入方向)。
      Parameters:
      raw - settings.ini 中該鍵的原始字串值(呼叫端需確保非 null
    • currentValue

      public String currentValue()
      取得欄位目前的執行期值並格式化為 ini 字串(存檔方向)。
      Returns:
      可直接寫入 settings.ini 的字串(保證非 null
    • ofString

      public static ServerSetting ofString(String key, Supplier<String> getter, Consumer<String> setter)
      建立字串設定;讀取端把 null 視為空字串,避免寫入 Properties 時 NPE。
      Parameters:
      key - ini 鍵名
      getter - 取得目前字串值
      setter - 套用新字串值
      Returns:
      繫結物件
    • ofBoolean

      public static ServerSetting ofBoolean(String key, BooleanSupplier getter, Consumer<Boolean> setter)
      建立布林設定;解析比照舊行為採 equalsIgnoreCase("true")(其餘字串皆視為 false)。
      Parameters:
      key - ini 鍵名
      getter - 取得目前布林值
      setter - 套用新布林值
      Returns:
      繫結物件
    • ofByte

      public static ServerSetting ofByte(String key, Supplier<Byte> getter, Consumer<Byte> setter)
      建立 byte 設定(例:登入伺服器清單旗標)。
      Parameters:
      key - ini 鍵名
      getter - 取得目前值
      setter - 套用新值
      Returns:
      繫結物件
    • ofInt

      public static ServerSetting ofInt(String key, IntSupplier getter, IntConsumer setter)
      建立 int 設定。
      Parameters:
      key - ini 鍵名
      getter - 取得目前值
      setter - 套用新值
      Returns:
      繫結物件
    • ofLong

      public static ServerSetting ofLong(String key, LongSupplier getter, LongConsumer setter)
      建立 long 設定(例:傷害上限 damagecap)。
      Parameters:
      key - ini 鍵名
      getter - 取得目前值
      setter - 套用新值
      Returns:
      繫結物件
    • ofDouble

      public static ServerSetting ofDouble(String key, DoubleSupplier getter, DoubleConsumer setter)
      建立 double 設定(可含小數的數值)。

      格式化時若值為整數(如 1.0)會輸出 "1" 而非 "1.0", 以保持與既有 ini(整數寫法)往返一致。

      Parameters:
      key - ini 鍵名
      getter - 取得目前值
      setter - 套用新值
      Returns:
      繫結物件
    • ofIntArray

      public static ServerSetting ofIntArray(String key, Supplier<int[]> getter, Consumer<int[]> setter)
      建立 int[] 設定(逗號分隔,例:blockedSkillsMapNotCCCSHotSellHellCh)。

      解析比照舊行為:以 "," 切分後,每段先移除所有空白再 parseInt; 格式化則以 ", " 連接。

      Parameters:
      key - ini 鍵名
      getter - 取得目前陣列
      setter - 套用新陣列
      Returns:
      繫結物件