Lycohinya 的插件清單,公開給想架服的人
Maybe 這邊有對 Minecraft 伺服器技術有興趣、或已經自己在架服的人。Lycohinya 的玩法核心有很大程度是自製插件,所以插件清單本身沒什麼好藏的,公開出來給大家參考。內部機制跟數值照舊不公開,但「整台伺服器是用哪些東西組起來的」這一層,對想架服的人反而最有用。
核心與前置依賴
- LycoLib
- Lyco 系列插件通用核心
- NBTAPI
- PlaceholderAPI
- ProtocolLib
- Vault
Lycohinya 自製插件
- AwesomeArmorStandEditor
- Kyokalith
- 反 X-Ray 礦層,2026-07 已開源
- LycoGacha
- LycohinyaCore
- LycoQuest
- LycoServerTweaks
- SlimeChunkChecker
- 早期作品,已公開
基礎伺服器功能
- Essentials
- EssentialsChat
- EssentialsSpawn
- LuckPerms
- Multiverse-Core
- NoChatReports
- TAB
- ViaVersion
世界管理與建築工具
- FastAsyncVoxelSniper
- FastAsyncWorldEdit
- GriefPrevention
- NatureRevive-brilliant
NPC、商店與場景呈現
- Citizens
- DecentHolograms
- HiddenArmor
- Shopkeepers
玩家互動與休閒功能
- GSit
聊天與 Discord 整合
- DiscordSRV
- InteractiveChat
- InteractiveChatDiscordSrvAddon
紀錄與管理
- Prism
共 33 個插件,其中 9 個為自製或自行維護的 Fork。
清單以下是工程面的部分,講自製的那幾個是怎麼組起來的。數值跟機率照舊不寫。
LycoLib 在做什麼
Lyco 系列的共用執行期函式庫:稽核紀錄、Vault 經濟橋、訊息載入、GUI 選單的排版引擎。沒有指令、沒有玩家看得到的功能,純粹是讓其他插件少寫重複的東西。依賴方向只有一個:所有 Lyco 插件硬依賴它,它不依賴任何人。
抽出共用庫這件事我忍了很久——一段邏輯要等到第三個真實使用者出現才准升進 lib,不然就留在原地。太早抽的下場大家都知道:一個只有一個使用者的「通用」介面,之後每次改都要動兩個 repo。
插件之間怎麼接
編譯期用 Gradle composite build(includeBuild 隔壁資料夾)拿到型別,不用發佈到 Maven。執行期走 Bukkit 的 ServicesManager:要用隔壁插件的功能就去載它註冊的橋,載不到就降級——LycoGacha 抽到需要別的插件發的獎、而那個插件不在場時,直接退款,不是報錯。
跨插件的自訂事件用反射橋。LycohinyaCore 想聽 Kyokalith 的礦物事件,但我不想讓 Core 編譯期認識它,所以 Class.forName 找事件類、反射註冊監聽,找不到就走自己的 fallback 路徑。結果是缺了誰伺服器都開得起來,只是少一塊功能。
LycoQuest 則是另一種偷懶:任務進度不自己存,直接以原版 advancement 為唯一進度來源。沒有進度表可以損壞,插件晚裝、條件早就達成的玩家也能補發獎勵。
一個踩過的雷:LinkageError
每個插件都載自己那份 kotlin stdlib,所以跨 classloader 的 kotlin.Pair 不是同一個 class,跨插件傳它會直接 LinkageError。真的炸過一次之後變成家規:kotlin 專屬型別不准跨插件邊界。LycoLib 對外的訊息 API 做成 inline,讓那個 Pair 只存在呼叫方自己的 classloader 裡,實際跨界的簽名只剩 String 和 Component。
紅線
挖礦、釣魚這種高頻路徑上:不查資料庫、不解析 YAML、不同步寫檔、不掃世界、不迭代全服玩家。沒中獎的快速路徑就是一兩個 map lookup 然後返回。Kyokalith(反 X-Ray 礦層)整個是事件驅動的,成本綁在「被挖掉的方塊 × 六個鄰居」——早期版本用過掃描區塊的做法,TPS 直接給我看臉色,改成事件驅動才回來。這種教訓寫進文件裡當硬規則,比記在腦子裡可靠。
設定都是啟動讀一次;reload 解析失敗就沿用舊設定,永遠不會進入「沒有設定」的狀態。
測試在測什麼
純邏輯抽出來變成不碰 Bukkit 的物件,讓骰子數學、選單排版、權重正規化、重啟排程這些可以直接單元測試。但我覺得更有用的是測「跟著出貨的 config」:任務獎勵的總額、轉蛋權重的加總、遊戲內手冊每一頁的連結,都被測試釘住,改壞一個數字 build 就紅。另外有一個 DocsCoverageTest——plugin.yml 宣告的指令和權限只要沒出現在文件裡,CI 直接不過。文件跟程式碼不同步這種事,靠自覺是靠不住的。
清單跟做法都會跟著伺服器更新變動,這篇寫的是 2026 年 7 月當下的狀態。