序章
歷史:
以下歷史也許會出現(xiàn)錯誤,可以當做故事來看,與教程無太大關(guān)系
眾所周知在 Minecraft 早期時的多人游戲是只有一個 minecraft_server.jar 的端的,而它并不能滿足服主們的需求,只有少數(shù)服主可以通過第三方修改,因為它是被混淆的
并且這個端的內(nèi)部代碼寫得并不是很好,因為它是由 Notch 一個人完成的
那么既然服主有需求那就有了"市場"所以在早期的Minecraft社區(qū)就出現(xiàn)了幾次較大的"變革"
hMod(Mod向):
hMod是由一個叫 hey0 的大佬制作出來的,也就是那時候所說的hey0端
hMod的原理呢其實就是反混淆,將混淆過的代碼,反混淆成可讀的代碼,所以在服務(wù)器加入自己的原創(chuàng)內(nèi)容,就沒有這么困難了...
這里我們可以把hMod理解為一個Wrapper,將我們的代碼"翻譯"成官方端的代碼
但事情永不可能這么順心如意,不久之后hey0就棄坑了
Bukkit:
既然hey0棄坑了就有第二人接坑,而這個人就是現(xiàn)在被Mojang"收購"的大佬 —— Dinnerbone,并且叫上了幾個志同道合的朋友推翻重做,將其反混淆(人工),并且做出了一個叫做BukkitAPI的東西,這一重做就是我們現(xiàn)在熟知的Bukkit,但是雖然是反混淆,但是還是有部分的字段,方法沒有反混淆,還是a,b,c...之類的類名 —— 來源 Bukkit About Us
我們來了解一下Bukkit給我們都做了些什么
Bukkit制作當中出現(xiàn)的一些問題(2012-2013)
Bukkit 時代看似輝煌啤誊,但實際上有不少隱患出現(xiàn):
Bukkit 本身的衰落。
2012 年 2 月,Bukkit 的開發(fā)團隊(Dinnerbone,EvilSeph,Grum缆巧,Tahg)收到來自 Mojang 的 offer虱朵,于是欣然應(yīng)邀加盟 Mojang莉炉;作為條件,他們不能再開發(fā) Bukkit碴犬,而是負責開發(fā)新版本的 SMP(多人聯(lián)機) 和其他與 Minecraft 有關(guān)的工作絮宁,比如編寫 Plugin API。
Dinnerbone 和 Grum 這兩位可以說是對整個 Bukkit 計劃貢獻最大的人服协,反編譯和反混淆由 Grum 全權(quán)負責绍昂,然后 Dinnerbone 則接過代碼坐在電腦桌前除了上廁所外不停歇地碼上二三十個小時,為的就是以最快的速度將新版本的 Bukkit API 和 CraftBukkit 呈現(xiàn)在大眾面前偿荷。如今他們走了窘游,雖然有人接班,但是他們都沒有了 Dinnerbone 和 Grum 的那份旁人難以理解的激情跳纳,更新對他們來說更像是一份義務(wù)而不是責任忍饰。這也不能怪他們,但伴之而來的就是 CraftBukkit 的更新越來越慢寺庄,當初兩天就能更新完艾蓝,現(xiàn)在要花上兩個月;而Bukkit 在 1.5 后鮮有再加入新的 API斗塘,意思就是上文提到的“翻譯”活越來越少人肯去做赢织,導致許多 SMP(多人聯(lián)機) 的新功能都無法單純地利用 Bukkit API 實現(xiàn),必須還得配合之前提到的那種直接修改源代碼的蛋疼方法...收費泛濫
服務(wù)器們收費的方式推陳出新馍盟,以 Hypixel 為例敌厘,VIP 出完了出 VIP+ 之后又推出 MVP...版權(quán)問題
CraftBukkit 內(nèi)置了 Minecraft 反編譯過后的源代碼,無形中已經(jīng)侵犯了 Mojang 的版權(quán)朽合;而 Bukkit 采用的是 GPL 協(xié)議...
Spigot!
自從原開發(fā)團隊離去后俱两,先不提越來越慢的更新和越來越落后的 BukkitAPI,CraftBukkit 的性能也飽受詬病曹步。許多人都自己私下制作了 CraftBukkit 的優(yōu)化版本宪彩,當時最出名的是 CraftBukkit++,著重優(yōu)化了農(nóng)作物生長的部分讲婚,能顯著提高 TPS ,但是每個優(yōu)化版本都只是優(yōu)化了一小部分尿孔,這個優(yōu)化通訊,這個優(yōu)化實體,這個優(yōu)化 AI活合,這個優(yōu)化地圖加載...
那么有沒有一款包含所有優(yōu)化的 CraftBukkit 呢? 有!
就是由
md_5 開發(fā)的 Spigot
Spigot 是個"強化版"的 CraftBukkit雏婶,只要換上它你的服務(wù)器立刻流暢幾倍,提供的 API 和配置文件都更豐富白指,并且完全開源免費留晚。
開發(fā)前的準備:
那我們有了一個初步的概念之后我們就來講講關(guān)于Java的東西吧
眾所周知Minecraft是用Java語言進行開發(fā)的,并且BukkitAPI也是用Java語言來開發(fā)的,所以在學習之前你需要了解以下Java知識
- Java基礎(chǔ)語法,與部分基礎(chǔ)知識 如if,基本數(shù)據(jù)類型,try catch等…
- 面向?qū)ο笏枷?/li>
- YAML語法
- JSON語法 (非必須)
- 集合類的使用(Collection類和Map類等)
- 反射(非必須)
- SQL語法(非必須)
服務(wù)端的選擇
這里我列舉一些常見的服務(wù)端,它們各有各的好處,在這里我就不一一列舉了
單服服務(wù)端
- minecraft_server
- craftbukkit
- spigot (Recommended)
- PaperSpigot
- TacoSpigot
- TorchSpigot
- GlowStone
Bungee服務(wù)端
- BungeeCord
- WaterFall (Recommended)
- FlexPipe
本文開發(fā)環(huán)境
本文的開發(fā)環(huán)境如下
- spigot-1.10.2-R1.jar
- jdk-1.8.0_77
本書為了面向廣大開發(fā)者決定使用以下兩種IDE進行開發(fā)
- IntelliJ IDEA
- Eclipse (可能要涼)