Bukkit插件开发教程 - 序章
序章
历史:
以下历史也许会出现错误,可以当做故事来看,与教程无太大关系
众所周知在 Minecraft 早期时的多人游戏是只有一个 minecraft_server.jar 的端的,而它并不能满足服主们的需求,只有少数服主可以通过第三方修改,因为它是被混淆的
并且这个端的内部代码写得并不是很好,因为它是由 Notch 一个人完成的
那么既然服主有需求那就有了"市场"所以在早期的Minecraft社区就出现了几次较大的"变革"
hMod(Mod向):
hMod是由一个叫 hey0 的大佬制作出来的,也就是那时候所说的hey0端
hMod的原理呢其实就是反混淆,将混淆过的代码,反混淆成可读的代码,所以在服务器加入自己的原创内容,就没有这么困难了...
这里我们可以把hMod理解为一个Wrapper,将我们的代码"翻译"成官方端的代码
但事情永不可能这么顺心如意,不久之后hey0就弃坑了
Bukkit:
既然hey0弃坑了就有第二人接坑,而这个人就是现在被Mojang"收购"的大佬 —— Dinnerbone,并且叫上了几个志同道合的朋友推翻重做,将其反混淆(人工),并且做出了一个叫做BukkitAPI的东西,这一重做就是我们现在熟知的Bukkit,但是虽然是反混淆,但是还是有部分的字段,方法没有反混淆,还是a,b,c...之类的类名 —— 来源 Bukkit About Us
我们来了解一下Bukkit给我们都做了些什么
Bukkit制作当中出现的一些问题(2012-2013)
Bukkit 时代看似辉煌,但实际上有不少隐患出现:
-
Bukkit 本身的衰落。
2012 年 2 月,Bukkit 的开发团队(Dinnerbone,EvilSeph,Grum,Tahg)收到来自 Mojang 的 offer,于是欣然应邀加盟 Mojang;作为条件,他们不能再开发 Bukkit,而是负责开发新版本的 SMP(多人联机) 和其他与 Minecraft 有关的工作,比如编写 Plugin API。
Dinnerbone 和 Grum 这两位可以说是对整个 Bukkit 计划贡献最大的人,反编译和反混淆由 Grum 全权负责,然后 Dinnerbone 则接过代码坐在电脑桌前除了上厕所外不停歇地码上二三十个小时,为的就是以最快的速度将新版本的 Bukkit API 和 CraftBukkit 呈现在大众面前。如今他们走了,虽然有人接班,但是他们都没有了 Dinnerbone 和 Grum 的那份旁人难以理解的激情,更新对他们来说更像是一份义务而不是责任。这也不能怪他们,但伴之而来的就是 CraftBukkit 的更新越来越慢,当初两天就能更新完,现在要花上两个月;而Bukkit 在 1.5 后鲜有再加入新的 API,意思就是上文提到的“翻译”活越来越少人肯去做,导致许多 SMP(多人联机) 的新功能都无法单纯地利用 Bukkit API 实现,必须还得配合之前提到的那种直接修改源代码的蛋疼方法... -
收费泛滥
服务器们收费的方式推陈出新,以 Hypixel 为例,VIP 出完了出 VIP+ 之后又推出 MVP... -
版权问题
CraftBukkit 内置了 Minecraft 反编译过后的源代码,无形中已经侵犯了 Mojang 的版权;而 Bukkit 采用的是 GPL 协议...
Spigot!
自从原开发团队离去后,先不提越来越慢的更新和越来越落后的 BukkitAPI,CraftBukkit 的性能也饱受诟病。许多人都自己私下制作了 CraftBukkit 的优化版本,当时最出名的是 CraftBukkit++,着重优化了农作物生长的部分,能显著提高 TPS ,但是每个优化版本都只是优化了一小部分,这个优化通讯,这个优化实体,这个优化 AI,这个优化地图加载...
那么有没有一款包含所有优化的 CraftBukkit 呢? 有!
就是由
md_5 开发的 Spigot
Spigot 是个"强化版"的 CraftBukkit,只要换上它你的服务器立刻流畅几倍,提供的 API 和配置文件都更丰富,并且完全开源免费。
开发前的准备:
那我们有了一个初步的概念之后我们就来讲讲关于Java的东西吧
众所周知Minecraft是用Java语言进行开发的,并且BukkitAPI也是用Java语言来开发的,所以在学习之前你需要了解以下Java知识
- Java基础语法,与部分基础知识 如if,基本数据类型,try catch等…
- 面向对象思想
- YAML语法
- JSON语法 (非必须)
- 集合类的使用(Collection类和Map类等)
- 反射(非必须)
- SQL语法(非必须)
服务端的选择
这里我列举一些常见的服务端,它们各有各的好处,在这里我就不一一列举了
单服服务端
- minecraft_server
- craftbukkit
- spigot (Recommended)
- PaperSpigot
- TacoSpigot
- TorchSpigot
- GlowStone
Bungee服务端
- BungeeCord
- WaterFall (Recommended)
- FlexPipe
本文开发环境
本文的开发环境如下
- spigot-1.10.2-R1.jar
- jdk-1.8.0_77
本书为了面向广大开发者决定使用以下两种IDE进行开发
- IntelliJ IDEA
- Eclipse (可能要凉)