Repository navigation
Releases: TinyYana/Lophinya
Release list
Lophinya 26.2 - cdb453b (實驗:候選 C 尋路平行化)
📦 Version: 26.2 | Commit cdb453b
實驗性版本 — 村民尋路平行化(NyaCore candidate C)
這是 ver/26.2-nya 第一次帶入 NyaCore candidate C:把村民尋路搜尋移到獨立
worker thread 做,owner thread 只負責送出請求、等結果、驗證後套用。預設關閉,
兩個 system property 都要開才會生效:
-Dlophinya.parallel.enabled=true
-Dlophinya.parallel.navigation=true
不開的話行為逐字回到原本的同步尋路,沒有任何殘留狀態。
為什麼標記成 pre-release
驗證覆蓋還沒到位:同步基準對照(100/300/1000 隻村民 × 1/4 熱 region)確認候選 C
平均比同步版快,且在完整真實插件集合(含 Kyokalith、Citizens、EssentialsX、
LuckPerms 等 30+ 插件)的鏡像環境上開關兩種狀態都乾淨開機、零候選 C 相關例外;
但村民實際行為的六個情境(交易所、鐵人塔、繁殖機、一般農場、工作站補貨、
時段行為)只完整測過其中幾項,且都只跑了個位數次重跑,還沒有正式服規模的長期
運行紀錄。這是可以部署到隔離測試服的狀態,不是「已驗證可上正式服」的狀態。
這一版還帶了什麼
跟候選 C 同一條研究線、同樣預設關閉:Region-local 平行化框架本身
(RegionParallelRunner/RegionParallelConfig)、Sensor shadow-run 量測骨架
(已結案,不再繼續調整,但程式碼保留供追溯)、Dynamic Activation of Brain
候選方案(另一個獨立、預設關閉的降載機制,尚未完成驗證)。
已知限制
- 目前的接線是「一隻村民一次請求」,沒有跟同一 tick 內其他村民的請求批次送出,
不會重現基準矩陣量到的批次分攤效益。 - 只在開發機(12 核心/20 執行緒)量過效能;正式服規格較小的話,worker pool
會明顯變小。
Built from ver/26.2-nya @ cdb453b. Java 25 required.
Lophinya 26.2 - 7bf8a0c
⚠ 先備份,再換核心
換核心之前請完整備份世界存檔與所有插件資料(
world*/、plugins/底下的
.db/userdata/ClaimData/PlayerData等)。這個 fork 會讓原本在 Folia 上被拒絕載入的 Paper/Spigot 插件實際跑起來,
也就是說它們會開始真的讀寫你的資料。沒有備份就沒有回頭路。退回 Paper 的路徑本輪有量過:同一份資料在 Lophinya 寫入 → 重啟 → 換回
Paper 26.2 build 65 → 仍讀得回來(詳見下面「已驗證」)。但那是在一份複製的
資料上量的,不是在你的正式資料上。
Lophinya 是 LophineLabs/Lophine 的 fork。
血緣:Paper → Folia → Lophine → Lophinya。
它想解決的問題:既有的 Paper/Spigot 插件,用原本的官方 binary、設定與資料,
在 Folia 的 region 架構上安全地跑起來。核心不內建任何 per-plugin 清單,
程式碼層面不拒絕任何插件——載入失敗就讓它失敗,把失敗變成功才是目標。
這一版是什麼
| 上游 | Lophine ver/26.2-hardfork @ 132ee40 |
| 本版 | ver/26.2-nya @ 7bf8a0c |
| 自有 patch | 27 個(paper feature 0024–0044、minecraft feature 0139–0144) |
| paperclip SHA-256 | 21DB03F0E3FE39BE1D5AC8800D26B746C28910200EFFE8DF1CA9623981798B6B |
相對上一次同步的變化
- 併入上游
302825c→132ee40(5 個 commit),applyAllPatches0 reject。 - 上游刪除
0127-Carpet-Features-Compatible並把0128–0138各往前一號;
本 fork 的 minecraft patch 仍是0139–0144,因此0138是空號(patch 依檔名排序套用,不影響)。 - 本版沒有新增 patch,也沒有新增 kill switch。
已驗證(這一版,不是轉述)
- 單元測試:
9209 tests / 1 failed / 7 skipped。唯一失敗是上游既有的
MaterialReroutingTest(純 pre-1.13 相容層,已知且與本 fork 無關)。 - 全插件同場:44 顆 jar 的環境冷啟動 ×2 可重現,
SEVERE0,
無未解釋的 thread ownership 例外。 - 生電回歸 vs Paper 26.2:同一顆探針量兩個平台、各跑兩次、中間真的重啟。
漏斗吞吐 2.500 items/s(=vanilla 參考值)、活塞(12 格推動上限/黏性拉回/
非黏性不拉回)、紅石中繼器延遲 2/4/6/8 game tick(間距正好 2)、村民就業、
TNT 引信 80 —— 每一項與 Paper 逐欄相同。
裝置被拆進不同 region 執行緒之後照樣以相同速率運轉。 - 資料遷移/退回 Paper:帶既有資料庫的複製環境上,Lophinya 寫入 → 重啟 → 讀 →
換成 Paper 26.2 build 65 → 仍讀得回來;三次啟動都是零錯誤。
Multiverse-Core
- ✅ 第一次安裝/新建世界現在會成功。先前在乾淨環境安裝 Multiverse-Core 會在
首次啟動自我停用(onEnable期間同步讀世界出生點方塊,而該 chunk 尚未常駐)。
執行期/mv create也已可用。 - 🔴
/mvtp的「安全傳送」跨世界仍會失敗:Multiverse 自己的目的地安全掃描
(AsyncSafetyTeleporterAction.doSafetyCheck)在 region 執行緒上跨世界讀方塊。
/mvtp <world> --unsafe目前可用。
已知限制
- 這是測試階段的核心,不是正式服建議版本。 請先在測試環境跑過你自己的插件組合。
- FastAsyncWorldEdit 目前不建議安裝:
//wand會讓 region tick 執行緒永久卡死
(FAWE 自製的「主執行緒」判定與 region 架構的形狀不相容)。 - 少數插件仍會在自己的呼叫點大聲失敗,這是設計上的行為,不是靜默損毀。
執行
java -Xms4G -Xmx4G -jar lophinya-paperclip-26.2-7bf8a0c.jar --nogui
回退開關(全部前綴 -Dlophinya.compat.,正常情況不需要動):
crossRegionBlockRead、teleportSemantics、callerContextDispatch、
economySerialization、startupGlobalContext 等,設 =false 即關閉對應行為。
Lophinya 26.2 — bdb0951
第一個正式標記出來的 Lophinya 建置。基底是 Lophine 26.2,上面疊了 21 個 paper patch 跟 6 個 minecraft patch,全部都是相容性,沒有效能改動。
這一版新增
跨 region/跨世界的唯讀方塊查詢(patch 0044)。
在 Folia 上每個世界都有自己的 regioniser,所以一條正在 tick 世界 A 的執行緒,永遠不可能是世界 B 任何區塊的合法擁有者。插件只要同步讀一次別的世界的方塊就直接爆掉,而且沒有任何執行緒是「對的」。Multiverse 的落點安全掃描就是死在這裡,/mvtp 之前只能加 --unsafe,等於把安全檢查整個跳過。
這個 patch 讓那種唯讀查詢改由已經在記憶體裡的區塊回答。區塊不在就照舊大聲失敗——那需要載入,是另一回事。寫入那一側一行都沒動。
會這樣做是因為上游自己已經把並行讀取處理掉了:PalettedContainer.data 是 volatile、所有 mutator 都 synchronized、resize 發佈的是新物件不是就地改、ThreadingDetector 被 Paper 刻意停用並註明「use proper synchronization」。最壞情況是讀到晚一個 tick 的方塊狀態。
有一個很窄的例外:palette 剛好在同一瞬間新增一種方塊型別時,讀者可能看到新索引卻還看不到那一格。那個情況會被捕捉,然後退回原本的 ownership 檢查——也就是退回這個 patch 之前的行為,訊息還是平台自己的。
驗證做到哪
- 單元測試 9209 通過 / 1 失敗(
MaterialReroutingTest,本 fork 的既有 baseline)/ 7 skipped - 44 個插件的鏡像環境冷啟動,enable 數與基線相同,無新增例外類別
/mvtp不帶--unsafe實測抵達,而且落點與--unsafe不同,代表安全掃描真的跑完了- kill switch 關掉後逐字回到未修改的行為
沒有做長時間 soak,也只在一台伺服器上驗過。
已知不會動的東西
/mv create 跟建完世界馬上 /mvtp 過去還是會失敗。新世界裡沒有任何人,spawn 區塊就不會常駐,這個 patch 拿不到東西可讀。要修得讓核心去載入區塊,而 Folia 在那條路徑上另外擋了一道,所以暫時不碰。
FastAsyncWorldEdit 的編輯引擎在這個平台上不能用,那是上游架構層的問題。
用法
直接當 paper.jar 跑,需要 Java 25。
出事的時候先把對應的 kill switch 關掉再查,全部列在 README。
⭐ 覺得有用的話給顆 Star,謝謝。