914554688wyt
本帖最后由 914554688wyt 于 2016-8-20 12:18 编辑

0.序章
*什么是Bukkit

[以下为本人口胡时间]
从前minecraft官方推出了一款服务端,这里暂且成为官服.
但这个官服呢,又和mc的尿性一样,没有开源(混淆了),而且对外兼容性差! (不能兼容mod,插件那时还没有)
于是呢,就有一个团队,他们把官服给强势反混淆(人工的)了一遍,然后在其中强力插入♂某些需要的内容,然后封装做成现在的bukkitAPI供我们调用. 于是就有了现在的插件....
虽说反混淆了,但是仍有许多方法名是没改过来的,所以如果你去反编译一下net.minecraft.server包的话,大概看到的方法名都是a,b,c,d......
[以下为正文]
Bukkit About Us

读前准备
本教程不考虑没有java基础的初学者。
换句话说,本教程要求所有的阅读者都掌握Java语法且清晰的了解以下概念

[题外话:我就是半吊子从其他语言边写插件边转过来的,然后现在还得恶补一番.]
标有*的为非必须,但推荐阅读相关资料.
粗体的为必须中的必须,必须掌握并熟练运用


还需要什么
对mc与编程的热情.(必须): 经常需要看一大坨别人的代码,如果你没有这个耐心与逻辑思维,学学倒是可以..
坚强的,耐挫的决心. : 论如何调试代码? 都说是试... 很多时候你没法直接定位错误在哪,这个时候该怎么办?.....
对mc游戏内容的了解 : 这个不解释
JDK与一个IDE: JDK7或者JDK8, IDE推荐EclipseIntellijIDEA
一个bukkit的JavaDoc : Bukkit 1.10.2-R0.1-SNAPSHOT API

若有写的不好的地方,欢迎各位斧正.


如果你已经阅读完毕这些东西并认为自己可以继续阅读,那你可以往下翻页了!








914554688wyt
本帖最后由 914554688wyt 于 2016-8-25 17:26 编辑

1.创建一个空白插件

安装好jdk和IDE之后,我们就可以准备写第一个插件了.
[文中非关键步骤我都只是一笔带过,如果看不明白可以去baidu,Google,或者找别人的教程看看有没有说明.
总是依赖别人替你做好所有事情永远也不是一个好码农]


1.首先新建java项目, "MyFirstPlugin".
2.右键项目,属性,将编码设置为UTF-8, 并在"java构建路径"中将服务端的jar文件添加到引用的库.

3.
右键项目,新建plugin.yml文件,按如下格式

plugin的g漏掉了.... 不要在意
这个文件用于让bukkit识别这是一个插件.bukkit加载插件最先会读取这个文件,获取主类路径,然后再一路加载下去

需要遵循Yaml语法.
name - 插件名称 (推荐全字母)
main - 一个类的完整类名,这个类,需要继承Bukkit中的JavaPlugin类,又称插件的主类
version - 能表示插件版本的字符串.

特别容易错的地方有: 冒号后面没加空格, 主类路径打错, 作死用中文 值可以用
错误plugin.yml在开服时会有一段报错并导致插件不加载,就像这样: Invaild plugin.yml.

4.
打开项目,在源文件夹(\src)下,新建包com.github.MrWub.MyFirstPlugin, 在这个包下新建类MyFirstPlugin.

那么我们就说MyFirstPlugin类的完整类名为com.github.MrWub.MyFirstPlugin.MyFirstPlugin
plugin.yml的main项必须与该类完整类名一致,就像我所写的一样.

5.
使得主类继承bukkit中的JavaPlugin类


这时候出现了编译错误,有可能是因为JavaPlugin类未导入. 可使用IDE的快速补全解决.

这类问题以后非特殊情况不再特殊说明.

6.重写onEnable()与onDisable()方法


Bukkit会在启用某插件时调用 (继承JavaPlugin类的) 主类的onEnable()方法,禁用某插件时调用onDisable()方法.
**小括号内为注释与补充,可以忽略**
**中括号内为题外话**
重写这两个方法,这样我们就可以让他在启用禁用时做我们想做♂的事情.
其实还有onLoad()方法,这个方法仅在开服加载插件时调用一次.
(开服时,插件会被加载并启用,
reload时,插件会先被禁用,再被启用,
关服时,插件会被禁用.)

[推荐大家去使用反编译工具(例如jdgui)看一下JavaPlugin类的源码,这样印象会深很多.
其实不止是javaplugin的,其他很多常用类都可以看看...]


7.在启用时向控制台输出信息
: 这不很简单吗,在onEnable()中添加System.out.println()?
不不不 我们有更高级的方法 this.getLogger().info("msg"); 这是一个定义在javaplugin类中的方法.
这个方法能够记录一条日志信息并在控制台即时显示.

不过,这玩意不支持颜色代码.这个之后会讲.
8.完工!
确认你的插件没有编译错误,确认plugin.yml编写正确后,选择项目,导出jar文件(不是可运行的!)
将得到的jar文件放到服务端的plugins文件夹中,运行服务器吧!










第一页 上一页 下一页 最后一页