如果你想开一个MC服务器, 你会发现有各式各样的服务端可以选择. 由于MC是一款社区驱动发展的游戏, 各种各样的玩家社区正在以非常快的速度开发以及维护各式各样的服务端.
那么, 它们都是什么? 它们本质上是怎样的? 本节大致上以时间顺序进行叙述来讲述这个问题.
最开始, Minecraft这款游戏只有Java版本, 在每个版本(不考虑远古版本)发布时, 开发商Mojang都会同时发布其对应的ServerJar文件.
利用ServerJar文件可以开启一个MC服务器, 这种服务器俗称为官服.
官服启动后, 会在根目录下创建server.properties文件, 这是它的配置文件.
在配置文件里可以对服务器端口等内容进行设置. 在这里需要重点提及的是其中的一个设置项目online-mode.
这一项默认的设置为true. 开启后连入服务器的客户端必须是使用正版登录的方式才可以进入. 如果把这一项手动改为false, 那么我们俗称的盗版玩家也可以连入服务器.
Mojang设计这样的一种设置是为了给无法连网(指互联网)的服务器提供便利.
如果有台电脑开启了官服, 这台电脑没法联网, 但是这台电脑连入了某个局域网内, 局域网中的小伙伴们就可以愉快的玩耍了. 如果没有这样的设置项目, 不联网没法进行正版验证, 那就没办法确定正版身份, 多人联机在这种场合下无法正常进行.
由此看来, Mojang之所以允许盗版玩家的出现, 其实是为了给不能正常联网的玩家提供一种“离线模式”, 而绝不是官方允许盗版理所应当地正常游玩, 官方服务端在开发时根本就没有对盗版玩家“特殊照顾”.
但社区开发者在开发后续服务端时, 在部分场合考虑到并对盗版玩家进行了某些特殊优化.
如果你还是一名MOD开发者, 试想, 在MOD开发时难免要对MOD进行调试, 而大多数调试工作其实开启的游戏客户端都是“离线模式”.
Mojang这种举措其实还能极大地促进MC游戏社区的发展, 显然利大于弊.
官服有显而易见的问题, 那就是没有“插件系统”.
如果你是一个盗版服务器服主, 你根本没办法对玩家进行“身份识别”, 因为所有的玩家都可以把启动器中的玩家名修改成另一个玩家, 从而“代替”他连入服务器. 如果你想把服务器内的TNT禁止掉, 或者你有特殊需求, 就偏偏想让玩家没法把手里的钻石扔在地上, 正常情况下根本无法在官服实现这个功能.
MC日渐完善的红石和命令方块功能根本无法满足社区玩家对服务器自定义的需求, 因而一种成熟的“插件系统”显得极为迫切.
Bukkit因此出现.
Bukkit服务端启动后会额外多创建一个配置文件bukkit.yml, 还有一个名为plugins的文件夹.
服主可以将插件jar文件放入plugins文件夹并重新加载服务器使之生效, 极为方便地安装一个插件. 开发者可以利用Bukkit官方给出的API开发一款插件, 丰富并拓展玩法.
SpigotMC社区发布了Spigot服务端. 最开始是对Bukkit服务端的各种优化和拓展.
后来由于Bukkit服务端直接使用了Mojang的代码, 由于法律原因, Bukkit被Mojang起诉并败诉, Bukkit服务端停止开发.
虽然Bukkit停止开发, 但是社区内Bukkit的热度依然很高, Bukkit服务端插件数量极大. 后来SpigotMC社区渐渐地接管了Bukkit的开发工作, 这意味着SpigotMC社区接管了BukkitAPI的维护工作.
SpigotMC为了逃避直接使用Mojang的代码带来的法律问题, 在发布服务端时用了BuildTool.具体运作模式大致是: 服主若想下载Spigot服务端, 需要先下载BuildTool, 正确使用BuildTool后, BuildTool会先下载一个官服Jar文件, 再下载SpigotMC社区特制的fernflower反编译工具把官服Jar文件反编译得到官服源代码, 再下载Spigot服务端的源码(这部分不包含Mojang的源代码), 一切准备完毕后, BuildTool会在用户的计算机上自动完成代码的植入以及编译工作, 制作出最终的Spigot服务端Jar文件.
由于这一过程中, SpigotMC社区没有直接给用户提供官方源码二次修改成品, 因而规避了法律问题.
目前网上流传的Spigot服务端现成的Jar版本, 绝大多数都是基于BuildTool编译后的成品Jar文件. 实际上在SpigotMC社区官方网站上不提供这些成品Jar文件.
后来又有许多服务端基于Spigot进行修改, 创造出了其他各种各样的服务端. 例如Paper服务端, 它是基于Spigot服务端的社区优化版本.
如果你运行了一个Paper服务端服务器, 你会发现服务端目录下会有bukkit.yml、spigot.yml、paper.yml这三个配置文件, 足以看出这背后的故事.
社区内还有单打独干的服务端. 例如在输掉官司后, 一些Bukkit服务端的开发者参与了一项几乎完全脱离官方服务端代码的服务端, 即Sponge服务端.
最早时还有MCPC+服务端. 其开发者将Spigot与Forge整合在一起, 使服务器既可以装MOD又可以装插件. 后来MCPC+改为了Cauldron, 又衍生出了KCauldron, 但这三款服务端都停在了1.7.10版本不再更新.
社区还出现了CatServer、Uranium、Arclight等服务端, 它们可以也可以实现开出插件+MOD服的功能.
社区中部分服务端存在极大争议, 并因此发生过一些影响深远的故事.
本教程功能仅为介绍, 如果没有纳入某些常用的服务端不能代表作者对这些服务端持有任何形式的不良想法, 服务端名称的排序没有先后, 不能认为某款服务端的名字排在前面即是作者对该款服务端存在某些偏向性指向或理解.
本教程正如其名, 是Bukkit插件开发教程.
这意味着理论上应当支持Bukkit服务端、Spigot服务端和各种衍生服务端. Sponge服务端由于使用的API体系与Bukkit完全不一样, 本教程不考虑Sponge服务端.
BukkitAPI由于发展原因变动很多, 本教程尽可能提及. 这意味着本教程的内容肯定是不能支持全部版本的BukkitAPI版本. 但是问题不大, 变动虽然多但是不大, 思路一致, 如果你足够清晰BukkitAPI, 你应当可以在你需要开发的版本中找到你想要的API用法.