[爆卦]BKCommonLib是什麼?優點缺點精華區懶人包

為什麼這篇BKCommonLib鄉民發文收入到精華區:因為在BKCommonLib這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者zxcvforz (塔歐茲)看板Minecraft標題Re: [情報] Nolagg作者退出Bu...


※ 引述《kalijason (?)》之銘言:
: Bukkit插件NoLagg作者bergerkiller
: 在2012/12/12宣布退出Bukkit插件的開發
: 原文: https://gist.github.com/4330229
: 文章很長 大意應該是..

隨手譯了一下,沒潤稿沒校稿大家加減看吧

以下譯文開始。
==

經過好幾天測試、爬討論、思考各種可能性之後,我決定不再開發 Bukkit 插件。
在我說明理由之前,先說說是如何發展到現在這地步的:

我的插件開發經歷

在 2011 年初,我的 ICT 課完結題目是要用 Java 寫一個 3D 的擲骰遊戲。
當時我是 Java 新手,在 3D 模組與材質方面則不是,我學 Java 越來越深入,
也越來越知道該怎麼使用它。這個課題我做了大概 5-6 個月後,完成了遊戲。
遊戲本身很簡單,但是它讓我深入瞭解到遊戲引擎是如何運作的。它讓我懂得
一些例如遊戲時脈迴圈等概念,像是時脈速率會如何影響到物理效果,
還有像是畫面運算與音效的基礎概念。

放假之後,我接觸到 Minecraft。我很意外發現它用的 3D 程式庫跟我用的一樣:
LWJGL。當時我沒有多想,但是我一上朋友的伺服器,一切都不同了。
那是個 Bukkit 伺服器,而我也很快就發現了 Bukkit 插件開發的世界。

我從很簡單的東西開始,像是封鎖 IP 和箱子交易。之後做出 TrainCarts,
這是來自我找到的一個插件徵求串。那一年後來我還從之前沒做完的插件做出
MyWorlds。到最後其他的插件也都完成了,有部分原因在於我需要某個功能,
或是因為那插件具有挑戰性。

在這段期間,開發真的很有樂趣。我可以專心製做新的東西,幾乎不必回頭去看
舊程式碼。當 Minecraft 進入了大量更新的時代後,一切都不同了,
而我的插件也不例外。TrainCarts 和 NoLagg 在當時需要不斷花心力維護,
佔去很多可以用來開發新功能或改善功能的時間。最後我不想再這樣浪費時間,
所以著手製做 BKCommonLib 程式庫。

1) 最初是因為 Bukkit 裡的 YAML 組態真的很難用。然後我開始移植數學函式和
物質比較。沒過多久,我所需要的所有工具幾乎都進 BKCommonLib 了。

看來一切都很好,但這只有最初。後來更新的量大增,包括 CraftBukkit 和 MC
本身的解譯所需的心力。有一次,我才剛修好 NoLagg 裡的欄位參照,下一版更新
就公布了……時間還不到一個禮拜。我發現我沒辦法這樣維護所有插件,所以所有
會一直變動的程式碼都進了 BKCommonLib。

在 2012 年夏季,我喜歡上 Spout 和 Spout Vanilla 開發,因為它讓我又能夠
再度專心投入於遊戲本身。它讓我想起自己遊戲專案的許多時光,但不只這樣,
它還教導我很多我連想都沒想過的東西。我對於界面、javadoc、記憶體回收、
資料儲存和同步處理的知識都是因為他們而學會的。

我從 9 月到現在開學 (我 2011-2012 年間從高中畢業),所以這佔掉一些時間。
我幾乎所有時間都花在清除掉直連 CraftBukkit 的參照,把他放進 BKCommonLib
裡的 SafeField/Method 裡。我主要目標是提供一個穩定的環境,讓我不必
那麼頻繁更新我的插件。我不想要老是在更新插件,因為我真的很想要從之前
中斷的地方繼續開發 Vanilla。

(譯注:這裡不知他講的是 Minecraft 官版的意思還是專案叫做 Vanilla。)

在我幾乎要完成這項工作時,Bukkit 心血來潮想了新點子出來:「讓我們把
CraftBukkit 所有套件路徑都改成動態的!」我知道我這下慘了,所以我所能
想到的只有想辦法繞過這個設計。在一開始,我把插件裡所有用到 NMS 的地方
都拿掉。沒多久我就發現我在之前幾個月就已經幾乎要完成這個了,剩下需要
最佳化的地方也沒很多。還需要做的就是拿掉 NMS World 和 WorldServer,
改用 org.bukkit.World。在 BKCommonLib 裡的所有公用函式都接受 bukkit
類別,但這仍然不夠。差遠了。很多插件都繼承 CraftBukkit 提供的類別,
我也知道這些東西都無法固定也無法丟進程式庫裡。我手上的選擇只有:

.全面改用 reflection 和變數儲存類別,並給 BKCommonLib 裡所有的
CB 類別都外包一層類別
.修改類別載入程式來重新導向到正確的類別 (要修改位元碼)
.把我的插件改經外部程式傳遞而不用類別載入程式

上面這些我全都做了,我發現類別載入程式的方法最耐用也最安全。它的效果
完全就是我所想要的。然後討論串就出現了。永遠沒有結論的討論,一再反覆
出現的論點,沒有人願意聽,沒有人懂。當時我心中對於 Bukkit 所剩無幾的
支持就這麼消逝了。我無法忍受這種不願意會體他人處境的態度。

Bukkit 團隊,我可以瞭解你們維護更新很難。我瞭解你們想要維持程式乾淨。
但是你們把自己的問題怪罪在錯的人身上了。

.大家都有心要寫有用的問題報告,但是卻都被忽略,被當做輕微問題擱置
一旁。
.大家都有心要改善你們的軟體,但是你們讓人等好幾個月,甚至毫無回應
就直接關閉問題報告。
.大家都有心要修改自己的程式讓它更安全,但是你們從來沒有說過這是個
必需。

而我們這些「有心」的人得到的是什麼?我們這個 NMS 核心開發小組得到:

.你們所有插件都是垃圾,都用我們不鼓勵用的程式碼。不要再用 NMS 了。
用 API。
.問題在你們身上,因為伺服器管理人用的是你們的插件錯的版本。
.我們有太多故障問題了,現在你們除了這些還可以每一版多加 100 個
版本錯誤的相關問題。
.你們的插件造成重大伺服器問題,像是世界損毀。結果整個討論裡就只有
提出一個實例。
.你們的插件會默不出聲直接當掉,而不是因為我們改程式!(現在插件用
reflection 和不安全的程式碼,所以當掉時可能沒錯誤訊息)

所以現在,2012 年 12 月 12 日,我受夠了。

.伺服器管理員的錯卻怪在我身上?
.他們把我這 3 個月在 BKCommonLib 花的心力全部毀掉?
.他們除了根本不適用我的論點以外都提不出任何實在的論點?
.為什麼好幾個月前一個伺服器管理員用了舊版插件造成的問題卻怪我?

就算他們決定撤銷套件版本管理,我也不會再回去碰叫做 CraftBukkit 的那堆
沒人管理的位元碼。他們不給支援,不想要你用它。想用的人在 Bukkit 社群
不受歡迎。在 Bukkit API 皇民下還有誰願為我站出來?我看不到任何針對
CraftBukkit 的管理行為!www.craftbukkit.org 在哪?
我要到哪去才能投入插件開發而不是 API 本身?

我也很難相信自己竟然變成在這個沒人管、沒支援、問題百出的軟體下做開發。
在 2011 年夏天的時候那麼多人用,那麼穩定。那段使用 CraftBukkit 不必
擔心版本相容性的時光到哪去了?

Bukkit 以前真的很好,真的很棒。我幫了很多人讓他們上手投入開發行列。
我很喜歡幫助別人解決疑難,而我也很喜歡把看似無解的難題解開。
不過那段時光已經過去了。CraftBukkit 已死,剩下的只有鑲了半邊金的東西
叫做 Bukkit。

CraftBukkit 開發已死,也不會再復生。就算繼續用它也看不出有何未來。
有些人很有勇氣試過要解決這問題,但最後還是沒用的。CraftBukkit 只需要
撐住 Minecraft API 出來之前的期間。就是這麼微小的目標。但是他們卻
決定要「徹底清理」只留下用 Bukkit 的人,其他都排除掉。

無法依賴 Bukkit 的人必須要不斷更新到累死。我不想當那個人。我也可憐
dev-bukkit 團隊,因為他們現在處理插件更新事倍功半。我祝你們好運。

關於未來

我懷疑 CraftBukkit 這爛攤子到最後只會剩下 Bukkit。Bukkit 插件在未來
幾個月會是主流。這就是為什麼我要參加 Spout 開發 BukkitBridge 和
Vanilla。至少這樣我有個穩定的平台可以開發新功能,而不是煩相容性。

當時機到來,我會把我的插件全部移植到 Spout 伺服器。對於像是 NoLogg
這類插件,可能會少掉一些功能,因為他們本來就內建了。我也懷疑我可能
根本不需要 NoLagg,因為老實說,為什麼一個伺服器會需要用插件來做到
沒有延遲?

對於我留下的其他插件,我也不會讓他們斷尾。我會等 CraftBukkit 1.4.5
R0.3 出來後,修正我所有插件專門就適用這個版本。之後任何新版本出來,
可由其他人更新,但我不會再更新。

等 R0.3 的更新階段結束,我會在論壇發邀請串,讓其他人回應接手我留下
的東西。在有人接手前,我會想辦法精簡我的程式碼讓它更好理解,我在這
幾個月本來就已經有在做這個了。如果你有興趣,請傳私信給我或等我發文。

無論如何,在那段期間請不要期待我大量參與討論,因為我得到處跑不少
地方。不過,我會想辦法先修正掉還不熟我程式碼的人較難修正的問題。

祝福大家聖誕快樂,也祝我自己有個與去年全然不同的新年。

.Bukkit 板工:祝你們管板好運。
.Bukkit 粉絲:祝你們監督板工好運。
.Bukkit 開發:祝你們滿足板工和粉絲好運。

還有,拜託,不要傷心或生氣;過去這幾天裡已經夠多時間引發這些情緒了。
當然,我也很憤怒,但有時我們還是得放手讓它過去。對我來說,我花太多
時間在 CraftBukkit,有時我甚至睡不到 3 小時。這在以前從來沒發生過,
也是個很明確的警告,讓我知道我正在傷害自己。

Peace
完畢。

想接手我的插件嗎?請見 (連結略請見原文)。

==

以上譯文結束。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.63.66
FLJX:無償付出阿... 12/21 22:38
qmaper:唉~一直小更新小更新真的是搞死一堆插件作者 12/21 22:47
H45:官方本來就沒釋出API 全部都是靠社群在弄 規格參差不齊不意外 12/21 23:40
olys:可惜了 感謝翻譯 12/21 23:41
slcgboy:所以最根本的問題就在於官方跳號的速度... 12/22 00:07
jeffffliu:12/24 ~12/26 箱子的材質變成聖誕節箱子 12/22 00:34
GR3eeeN:Thx for ur translation. 12/22 03:53
tsubasawolfy:他對官方更新速度不知道有沒有怨言XD 12/22 09:06
willy69wu31:(正在調查spout 12/22 13:55
Foremanytz:spout網頁中有寫到,spout將以plugin支援各遊戲 12/22 17:56
Foremanytz:實作minecraft的spout plugin叫作 Vanilla 12/22 17:56
andychay2:官方就1.2 1.4這兩次被罵超慘阿XD 尤其是1.2那次 12/22 22:32

你可能也想看看

搜尋相關網站