Releases: BrilliantTeam/NatureRevive-brilliant
Releases · BrilliantTeam/NatureRevive-brilliant
2.2.6|錯誤修復
- 將
coreprotect-logging-enable的預設值更改為false。 - 修復在
1.21.8版本運行時,調用錯誤的 NMS 方法,致使再生功能失效的異常。 - 更改待再生之資料移除的時機,確保待再生之再生完畢後,資料才會移除。
-# https://github.com/BrilliantTeam/NatureRevive-brilliant/releases/tag/2.2.6
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar
2.2.5|優化
- 從根源上優化重複紀錄的處理方式。
- 以往,針對高頻率的區塊變動,插件會全盤接收這些紀錄,
- 然後一併發送給資料庫進行資料新增、TTL(要再生的時間)更新,
- 這代表 高頻率的紅石行為、作物生長 ... 等 都會作為一筆紀錄,傳遞至資料庫,
- 而在 2.2.4 中,
- 新增一個邏輯,會蒐集一個周期內的資料,並判斷哪些是重複的紀錄,並進行篩選,
- 最後僅發送給資料庫真正的最後變動。
- 而,
- 雖然重複的紀錄最後沒送進資料庫,
- 但它們還是被產生、被丟進佇列、還做了生物群系與領地的查詢,這些都是浪費效能。
- 因此,本次 2.2.5 直接在 產生紀錄的那一刻 就先攔截:
- 同一個區塊在短時間內只會被記錄 一次,
- 後續重複的高頻率變動會在做任何查詢之前就被略過,
- 等於把浪費掉的效能 從源頭 砍掉,而不是事後再清,使效能實現真正的優化。
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar
2.2.4|小優化
2.2.3|修資料庫相關的 Bug 、讓存檔更穩定、更快速
- 重要 Bug 修正
- 修正 SQLite 存檔會「存錯指令」的問題
- 之前在 SQLite 模式下,遇到一個還沒存進資料庫的新區塊時,
- 會丟出一個「刪除」指令(DELETE),導致資料根本沒被正確寫進去。現在已經改成正確的「新增」(INSERT)。
- 修正 SQLite 寫入參數位置全錯的問題
- 原本程式碼使用
setInt(0, ...)來填寫資料,但資料庫的欄位編號其實是從 1 開始算的, - 所以這些寫入根本對不上、會直接出錯。這次把欄位順序跟編號全部修正回來了。
- 原本程式碼使用
- 修正 MySQL 讀取資料時會「吃掉第一筆」的問題
- 之前讀取區塊清單時有一段多餘的判斷,會不小心把查詢結果的第一筆資料跳過去,
- 造成資料漏讀。現在已經移除這段邏輯。
- 修正 SQLite 存檔會「存錯指令」的問題
- 效能與穩定性改善
- 資料庫寫入改用「批次處理」,速度大幅提升
- 以前是一筆一筆送進資料庫(一次一個指令),現在改成打包成一整批一次送出(batch),
- 存檔時對資料庫的壓力更小、速度更快。
- 新增「寫入失敗自動重試」機制
- 以前存檔如果中途失敗,那些還沒寫進去的資料就直接消失了。
- 現在如果這批沒存成功,會自動把它們放回佇列,下次再試一次,資料不會憑空不見。
- INSERT 改用 Upsert(有就更新、沒有就新增)
- MySQL 用
ON DUPLICATE KEY UPDATE、SQLite 用ON CONFLICT DO UPDATE, - 避免遇到重複的區塊時跳出「主鍵重複」的錯誤。
- MySQL 用
- 多執行緒安全性強化
- 把任務佇列(Queue)跟資料庫快取(cache)換成執行緒安全的版本(
ConcurrentLinkedQueue與ConcurrentHashMap), - 降低在多執行緒環境下資料錯亂或當機的風險。
- 把任務佇列(Queue)跟資料庫快取(cache)換成執行緒安全的版本(
- 清掉 MySQL 一段沒在用的多餘連線
set()方法裡原本會開一條資料庫連線但其實根本沒用到,這次移除,減少不必要的連線開銷。
- 資料庫寫入改用「批次處理」,速度大幅提升
- 預設設定調整
- 存檔頻率調快
data-save-time-tick的預設值從3600改成1200(也就是從每 180 秒存一次,變成每 60 秒存一次),- 降低伺服器意外關閉時的資料遺失量。
- -# 已經有自己的設定檔的使用者不受影響,如果想跟進可以自行修改。
sql-processing-count支援「不限制」- 現在如果把這個值設成 0(或負數),代表一次把佇列裡所有指令全部處理完,不再卡上限。
-# https://github.com/BrilliantTeam/NatureRevive-brilliant/releases/tag/2.2.3
- 現在如果把這個值設成 0(或負數),代表一次把佇列裡所有指令全部處理完,不再卡上限。
- 存檔頻率調快
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar
2.2.2|針對 FAWE 再生模式小錯誤修正
- 已修正在 1.18+ 伺服器中,高度超過 256 格的位置不被再生到的問題。
-# https://github.com/BrilliantTeam/NatureRevive-brilliant/releases/tag/2.2.2
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
-# 本次改動未修改到 FastAsyncWorldEdit ,僅因為方便下載所以還是附上 jar
2.2.1|於 1.21+ 停用 bukkit 再生模式。
- 插件於 1.21 ~ 1.21.11 伺服器啟動時,將停用 bukkit 再生模式,
- 若檢查到使用 bukkit 再生模式,將自動切換至 fawe 再生模式(config 會強制修改),
- 並且
/nr regenchunk bukkit指令在 1.21+ 將不再作用。- 雖然在內部測試中,已有成功使 bukkit 再生模式 在部份情況下能夠運行,
- 但呈現的效果奇差(需待區塊卸載),因此我放棄了這個方案,
- 爾後,嘗試以【建立臨時維度】-> 複製區塊至再生世界 的方式,
- 但每次進行此操作時,都會造成 20 ~ 50 MSPT 的瞬間卡頓,
- 這在 Folia 下不是問題,但在 Paper 等單執行緒的伺服器中,就會是一陣一陣的全服卡頓,
- 很顯然也不是一個合適的選項,因此在此版本中,我們將針對 1.21+ 伺服器,停用 bukkit 模式。
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
⚠️ 若需要在 Folia 使用本插件,請使用下方提供的 FastAsyncWorldEdit 版本,所有改動
2.2.0|1.21.5 - 1.21.11 支援,還有 Folia 支援。
2.2.0
- 1.21.5 - 1.21.11 支援
- Folia 支援(要留意!)
- 已知在 Folia 上使用 FAWE 模式會有再生錯誤,且 Bukkit 模式在 1.21 以上版本無法運作。
- FAWE 在 async thread 讀 tile entity,而 Folia 的 tile entity 只能從 region thread 讀取。
- 嘗試過讓插件走 region thread,結果就是執行緒鎖死,因此這條路不通。
- 修改方式有兩個方向:
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
2.1.2 兼容 1.21.4,修復一些問題,並進行了些調整!
NatureRevive - 資源再生 2.1.2 更新
- 兼容 1.17 ~ 1.21.4。
- CoreProtect 紀錄改回預設開啟。
- 其餘改動後續補上,沒有 Config 更新,都是些修復錯誤與優化細節。
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
2.1.1 部分支援 1.21/1.21.1,修復一些問題,並進行了些調整!
NatureRevive - 資源再生 2.1.1 更新
🛠️ 修復
regeneration-engine設定不再強制要求大小寫。SQLite設定讀取問題已經修復。- 區塊標記 將檢查 該區塊是否有領地。
- 原先僅判定事件觸發的方塊是否在領地內
/nr reload指令將會重新載入所有依賴項目。
🖥️ API
- __日誌系統__全面使用
Adventure API提供的Component。 - 所有定期執行的任務都被歸類,並模塊化,在未來開發者可以透過
NatureRevive API注冊定期執行事件。
🔔 新功能
- 部分支援
1.21與1.21.1版本。- 需使用 此專用版本 才可正常支援,並且
regeneration-engine需設定為fawe
- 所有指令皆被歸類於
/naturerevive或/nr子指令。- 權限保持不變
暫停/繼續重生的訊息已區分為兩個設定,使用者可以透過config.yml編輯。start-regenerationstop-regeneration
⚠️ 更新 NatureRevive 版本前務必備份資料庫以及地圖檔案。
⚠️ 雖然我們已經盡全力確保領地、重生等插件功能無誤,還請務必在更新前備份地圖檔案。
2.1.0 第一個正式版,多了很多功能,修了很多錯誤!
NatureRevive - 資源再生 2.1.0 重大更新
🔔 更新
- 支援
1.17 ~ 1.20.6版本。 /regenthischunk將重生玩家當前所站在的區塊。- 默認需要
op權限。
- 默認需要
/navmigrate <yaml/sqlite/mysql>將 NatureRevive 的資料遷移到其他存儲方式。- 默認需要
op權限。
- 默認需要
- 終界船的鞘翅將會重生。
- (感謝 the_chosen_cat)
- 現在可以使用 FAWE
FastAsyncWorldEdit所提供的重生功能,以達成平滑地形重生。 - (感謝 the_chosen_cat)
- 當
區塊重生、鞘翅重生或藏寶箱重生時,NatureRevive 將觸發 Bukkit 事件,以供開發者界接。
⛔ 移除
/snapshot、/revert之相關代碼與指令已被完全移除。- 移除
sql-process-tick選項,請改為使用data-save-time-tick。
🛠️ 修復
Folia支援已初步可用,並與 Paper 版本合併。MySQL儲存功能已修復。- 在
loadChunk的一瞬間ChunkHolder將區塊unloadChunk,導致getChunk的執行緒安全鎖被永遠鎖死的問題。- (感謝 xuancat)
💡 新設置
regeneration-engine可被設定為bukkit或者fawe。- 設置為
bukkit時,使用Bukkit API所提供的重生函數,可能會導致地形斷層。 - 設置為
fawe時,使用FAWE所提供的重生功能,需使用2.9.2以下的版本。
- 設置為
max-elytra-per-day限制每日重生鞘翅的最大數量,將於本地時間00:00重置。regen-offset-max-duration設置於重生時,隨機額外添加重生時長,避免玩家於定期於重生時間搜刮物資,- 格式同
ttl-duration。
- 格式同
elytra-exceed-limit-offset-duration當鞘翅重生數量超過設定值時,偏移所設置的時間值。- 格式同
ttl-duration。
- 格式同
spawn-timer設置再生的時間段。- 格式為
xx:xx-xx:xx(感謝 the_chosen_cat)
- 格式為
blacklist-biomes設置帶有哪些生態域的區塊不被再生。enable-ore-obfuscation設置是否將礦物隨機分佈,避免玩家定期定點挖礦。
🖥️ API
- 現在 NatureRevive 提供了一套 API,以供外部開發者與 NatureRevive 程序界接。
IIntegrationManager負責處理領地保護、方塊紀錄、重生等功能的整合。IAPIMain則是插件本體的介面,可由此獲取其他類別。
- 目前開發者可以自行整合其他
領地保護、方塊紀錄、重生引擎等功能,
在未來,NatureRevive 將會提供更多接口,如礦物置換等,敬請期待。
⚙️ 其他更動
regeneration-strategy預設設置變更為passive。coreprotect-logging-enable預設設置變更為false。safer-ore-obfuscation預設設置變更為false。- 設定檔中有關重生的數值已經變動,以更好的應對性能問題。
- (感謝 the_chosen_cat)