首先让我们谈谈API
最开始的Minecraft毫无疑问只有官方客户端/服务端
但是鉴于Java的特殊性,即便官方没有给源代码,依然可以通过反编译的方式修改游戏客户端/服务端
但是这种修改方式毫无疑问对开发者很不友好
一呢是对技术要求很高,毕竟Minecraft官方是对代码进行了混淆(一种代码保护手段)
二呢是容易造成冲突。比如说开发者A要开发一个登陆功能,需要获取用户登陆的消息。开发者B要开发一个上线提示功能,毫无疑问也需要获取用户登录的消息。如果A和B都自己修改代码实现功能,那么他们可能修改的代码会冲突。因为服务端只有一处用来做上线处理的,他们毫无疑问都会改这一处。那么到底按谁的代码为准呢?按A的为准那么B的功能就无法正常使用,反之亦然。而在代码越来越复杂以后,游戏和服务器都会无法启动,到处都是冲突,除非只使用一个扩展。
这个时候就有大神出现了,他们负责底层的游戏功能修改,然后整理成现成的功能提供给其他开发者使用。(比如获取各种消息,增加物品,地图,生物等等)
那么现在,用户登录的时候是大神的代码来处理,然后他再把上线消息转发给开发者A和B,这样就不会造成冲突了,而且也提高了可移植性,即便游戏代码修改,也只需要把大神那部分底层代码修改掉,A和B写的代码并不用再做修改。
大神的代就是所谓的API
毫无疑问能做这件事的人有很多,于是就有了各种API,比如Forge,ModLoader(已死),Bukkit,Sponge等等等等
在1.8之前,客户端最火的API当属Forge,而服务端当属Bukkit,就是我们常说的水桶服
修改游戏增加新物品/道具/地图/生物等等的扩展程序被称之为MOD,他们大部分基于Forge,当然也有部分基于其他API,而修改服务端,使用命令行作为主要操作和显示方式的扩展则被称为插件,他们几乎都是基于Bukkit开发的。
鉴于上面所说的原因,Forge和Bukkit是不兼容的,Bukkit自己实现了Craftbukkit,一个为原版服务端加上了BukkitAPI支持的服务端。而Forge则是提供了安装器,安装在原版服务端后服务端就能使用基于Forge的MOD。
但是很多人又想玩插件又想玩MOD,怎么办呢?
嗯,没错,又出来了一位大神,他手动处理两个API冲突部分,将他们整合到了一起,就是后来的MCPC Plus,后改名为Cauldron
接下来众所周知的GPL事件出现了,因为Bukkit的某个代码使用了GPL协议代码,按照GPL协议要求,使用了GPL协议代码的程序应当全部开源。然而Bukkit里又有一些无法开源的私有代码(这部分代码不属于Bukkit所以无权开源),结果就是Bukkit被告了,然后被迫停更了。
或许你们听说过Spigot,一个基于Bukkit增加了反作弊功能的服务端。它的作者钻了GPL协议的空子,强行继续更新起了Bukkit,然并卵,Cauldron作者,Forge作者等一系列大神都对那次事件心灰意冷,不想继续开发Bukkit,于是一合计就诞生了新的插件API--Sponge
和Bukkit不同,Sponge设计的时候就是基于Forge的,它看起来更像是一个基于Forge的MOD,所以兼容性方面也不再需要大神来整合了,只需要我们手动安装一个名为SpongeForge的MOD,就能得到Sponge插件的支持,十分方便。
而且它的更新速度很快,比如说1.10版本都发布了(当然,并不是稳定版),相对于永不更新的Cauldron,只有插件没有MOD的Spigot,毫无疑问Sponge更适合用来开1.8版本以后的服务器
这也是为什么要使用Sponge的理由
|