Bukkit插件开发教程 - 序章

序章

历史:

以下历史也许会出现错误,可以当做故事来看,与教程无太大关系

众所周知在 Minecraft 早期时的多人游戏是只有一个 minecraft_server.jar 的端的,而它并不能满足服主们的需求,只有少数服主可以通过第三方修改,因为它是被混淆
并且这个端的内部代码写得并不是很好,因为它是由 Notch 一个人完成的

那么既然服主有需求那就有了"市场"所以在早期的Minecraft社区就出现了几次较大的"变革"


hMod(Mod向):

hMod是由一个叫 hey0 的大佬制作出来的,也就是那时候所说的hey0端
hMod的原理呢其实就是反混淆,将混淆过的代码,反混淆成可读的代码,所以在服务器加入自己的原创内容,就没有这么困难了...

这里我们可以把hMod理解为一个Wrapper,将我们的代码"翻译"成官方端的代码

Bukkit插件开发教程 - 序章_第1张图片
hMod.png

但事情永不可能这么顺心如意,不久之后hey0就弃坑了


Bukkit:

既然hey0弃坑了就有第二人接坑,而这个人就是现在被Mojang"收购"的大佬 —— Dinnerbone,并且叫上了几个志同道合的朋友推翻重做,将其反混淆(人工),并且做出了一个叫做BukkitAPI的东西,这一重做就是我们现在熟知的Bukkit,但是虽然是反混淆,但是还是有部分的字段,方法没有反混淆,还是a,b,c...之类的类名 —— 来源 Bukkit About Us
我们来了解一下Bukkit给我们都做了些什么

Bukkit插件开发教程 - 序章_第2张图片
Bukkit.png

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 呈现在大众面前。如今他们走了,虽然有人接班,但是他们都没有了 DinnerboneGrum 的那份旁人难以理解的激情,更新对他们来说更像是一份义务而不是责任。这也不能怪他们,但伴之而来的就是 CraftBukkit 的更新越来越慢,当初两天就能更新完,现在要花上两个月;而Bukkit 在 1.5 后鲜有再加入新的 API,意思就是上文提到的“翻译”活越来越少人肯去做,导致许多 SMP(多人联机) 的新功能都无法单纯地利用 Bukkit API 实现,必须还得配合之前提到的那种直接修改源代码的蛋疼方法...

  • 收费泛滥
    服务器们收费的方式推陈出新,以 Hypixel 为例,VIP 出完了出 VIP+ 之后又推出 MVP...

  • 版权问题
    CraftBukkit 内置了 Minecraft 反编译过后的源代码,无形中已经侵犯了 Mojang 的版权;而 Bukkit 采用的是 GPL 协议...

Spigot!

自从原开发团队离去后,先不提越来越慢的更新和越来越落后的 BukkitAPICraftBukkit 的性能也饱受诟病。许多人都自己私下制作了 CraftBukkit 的优化版本,当时最出名的是 CraftBukkit++,着重优化了农作物生长的部分,能显著提高 TPS ,但是每个优化版本都只是优化了一小部分,这个优化通讯,这个优化实体,这个优化 AI,这个优化地图加载...

那么有没有一款包含所有优化的 CraftBukkit 呢? 有!
就是由

md_5_64px.png

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 (可能要凉)

你可能感兴趣的:(Bukkit插件开发教程 - 序章)