空空叶博客 学习与开发博客

MC插件制作介绍

2017-05-20

MC服务器最吸引人的就是插件,通过插件,可以改变游戏的玩法,配合MC本身是沙盒游戏的本质,可以创造出无限的可能性. 本文就来简单地介绍一下插件制作的总体概念.

注: 此教程的服务端采用spigot,另外,本文上说到的接口并非指java接口.

在MC服务器新手教程里说到过几种服务端:

一. 原版服

这个服务端基本上没有插件,因此基本上没人会去直接使用这个端开服

可能出于商业上的考虑,原版服对代码做了混淆(天哪,看着混淆的代码,我怎么知道有哪些功能?怎么做插件?)

服务端包(通常叫server.jar)结构上,主要包含:

  1. 第三方lib库
  2. 服务端本身的代码,都在包net.minecraft.server内(有人称这个为’底层’)

二. 水桶服(bukkit)

这是曾经最盛行的插件服务端,它在原版服的基础上构建,对原版服做了完整的封装. (可惜后来因为协议的问题停止开发了)

因为做了完整的封装,所以对于服务端所有的功能,我们都不需要去接触原版服的代码,这是很重要的一点,它避免了我们直接接触混淆的代码,大大降低了开发的难度.

水桶服的架构主要分为两大模块,一个是Bukkit,一个是CraftBukkit,前者是接口,后者是实现.

这样架构有什么好处呢? 这样更方便插件开发,因为接口主要是给插件开发者引用的,作为插件的开发者,不需要去关心具体的实现是怎样的,只需要知道服务端提供给你使用的接口是怎样的.

那么开发插件引入的jar包应该是接口的jar包还是实现的jar包呢? 一般引入的都是接口的jar包,因为随着版本更新,接口一般变动比较小,而实现变动比较大. 针对接口开发的插件意味着跨版本使用的可能性更大.

接口包(通常叫Bukkit.jar)结构上,主要包含:

  • 服务端本身的代码,都在org.bukkit包内

实现包(通常叫CraftBukkit.jar)结构上,主要包含:

  • 第三方lib库
  • 服务端接口的代码
  • 服务端实现的代码,都在org.bukkit.craftbukkit包内

三. 水龙头服(spigot)

这是目前最流行的插件服务端,它在水桶服的基础上构建,基本上可以看做水桶服的继承与扩展.(或者可以看做水桶服的延续?)

架构也与水桶服类似,扩展Bukkit接口成Spigot-Api,扩展CraftBukkit实现成Spigot

接口包(通常叫Spigot-Api.jar)结构上,主要包含:

  • Bukkit服务端接口的代码
  • Spigot服务端额外接口的代码,都在org.spigotmc包内(实际上很少)

实现包(通常叫Spigot.jar)结构上,主要包含:

  • Bukkit服务端实现的代码
  • spigot服务端额外实现的代码,都在org.spigotmc包内(实际上很少)

四. 总结

从与水桶服的关系可以看出来, 针对水桶服制作的插件,一般都能在水龙头服上使用; 但反过来针对水龙头服制作的插件,不一定能在水桶服上使用.

总体来说,一般针对接口编程而不针对实现编程,极少会去调用混淆过的原版服务端代码.

即使制作spigot服务端插件,大部分情况下仍然是调用bukkit服务端的接口,因为spigot提供的额外接口很少.

少数情况下某些功能可能服务端提供的接口满足不了,就会针对实现编程,调用服务端实现的某些代码,但这种方式制作出来的插件通常版本兼容性较差,服务端更换版本插件可能就需要调整调用的方法(即升级插件).


目录