Class ServerSetting
java.lang.Object
server.ServerSetting
單一伺服器設定項在「
settings.ini 鍵」與「執行期欄位」之間的雙向繫結。
每個 ServerSetting 同時知道如何:
apply(String):把 ini 讀到的原始字串解析後寫入欄位(載入方向)。currentValue():把欄位目前的執行期值格式化為 ini 字串(存檔方向)。
如此一來「載入」與「存檔」共用同一份宣告,避免過去 loadSetting() 有讀無寫、
導致 ServerProperties.saveProperties() 無法回存執行期變更的不對稱問題。
設定持有者(如 ServerConstants)以一份 List 集中宣告所有項目,
再交由 ServerProperties.loadInto(List) 與 ServerProperties.collectFrom(List) 統一處理。
本類別刻意不依賴 ServerProperties(解析/格式化皆為純函式),
因此可在無資料庫的離線單元測試中直接驗證(見 test/server/ServerSettingTest)。
-
Method Summary
Modifier and TypeMethodDescriptionvoid解析 ini 原始字串並套用到繫結的欄位(載入方向)。取得欄位目前的執行期值並格式化為 ini 字串(存檔方向)。key()取得本設定對應的settings.ini鍵名。static ServerSettingofBoolean(String key, BooleanSupplier getter, Consumer<Boolean> setter) 建立布林設定;解析比照舊行為採equalsIgnoreCase("true")(其餘字串皆視為false)。static ServerSetting建立byte設定(例:登入伺服器清單旗標)。static ServerSettingofDouble(String key, DoubleSupplier getter, DoubleConsumer setter) 建立double設定(可含小數的數值)。static ServerSettingofInt(String key, IntSupplier getter, IntConsumer setter) 建立int設定。static ServerSettingofIntArray(String key, Supplier<int[]> getter, Consumer<int[]> setter) 建立int[]設定(逗號分隔,例:blockedSkills/MapNotCC/CSHotSell/HellCh)。static ServerSettingofLong(String key, LongSupplier getter, LongConsumer setter) 建立long設定(例:傷害上限damagecap)。static ServerSetting建立字串設定;讀取端把null視為空字串,避免寫入Properties時 NPE。
-
Method Details
-
key
-
apply
解析 ini 原始字串並套用到繫結的欄位(載入方向)。- Parameters:
raw-settings.ini中該鍵的原始字串值(呼叫端需確保非null)
-
currentValue
取得欄位目前的執行期值並格式化為 ini 字串(存檔方向)。- Returns:
- 可直接寫入
settings.ini的字串(保證非null)
-
ofString
建立字串設定;讀取端把null視為空字串,避免寫入Properties時 NPE。- Parameters:
key- ini 鍵名getter- 取得目前字串值setter- 套用新字串值- Returns:
- 繫結物件
-
ofBoolean
建立布林設定;解析比照舊行為採equalsIgnoreCase("true")(其餘字串皆視為false)。- Parameters:
key- ini 鍵名getter- 取得目前布林值setter- 套用新布林值- Returns:
- 繫結物件
-
ofByte
-
ofInt
建立int設定。- Parameters:
key- ini 鍵名getter- 取得目前值setter- 套用新值- Returns:
- 繫結物件
-
ofLong
建立long設定(例:傷害上限damagecap)。- Parameters:
key- ini 鍵名getter- 取得目前值setter- 套用新值- Returns:
- 繫結物件
-
ofDouble
建立double設定(可含小數的數值)。格式化時若值為整數(如
1.0)會輸出"1"而非"1.0", 以保持與既有 ini(整數寫法)往返一致。- Parameters:
key- ini 鍵名getter- 取得目前值setter- 套用新值- Returns:
- 繫結物件
-
ofIntArray
建立int[]設定(逗號分隔,例:blockedSkills/MapNotCC/CSHotSell/HellCh)。解析比照舊行為:以
","切分後,每段先移除所有空白再parseInt; 格式化則以", "連接。- Parameters:
key- ini 鍵名getter- 取得目前陣列setter- 套用新陣列- Returns:
- 繫結物件
-