本帖最后由 木头光波 于 2015-1-13 18:49 编辑
· 大纲
- 本教程根据Bukkit 1.7.10-R0.1-SNAPSHOT API和Bukkit Plugin Tutorial为蓝本,经过适当的翻译和个人的理解编译而成。
- 开发环境为Windows 8.1 x64/JDK 1.8_20/MyEclipse 2014/Bukkit 1.7.2
- 此教程对Linux用户友好,全程无任何Windows专有软件。Linux下的MyEclipse因为官网被墙,我提供下载地址。
=================正文=================
· Step 1 - 开发环境搭建以及最简单的一个插件
· 软件 : MyEclipse 2014
· 文件 : bukkit库文件(此文件可以直接复制bukkit/MCPC服务端下的开服文件【.jar主文件】)
- 步骤
· 新建一个项目(Project):在包管理器(Package Explorer)的空白处单击右键,选择第一行的“New”,在弹出的二级菜单中选择第一个“Java Project”。
· 做完这些,已经完成了插件开发的50%的工作,剩下的50%就是代码和算法。 - 首先建立一个主类,在我们刚才建立的包上右键单击,选择New,在二级菜单中选择class,弹出的窗口中输入类名(同理,类名请使用非中文且非Java保留关键字),点击Finish即可。
- 在与插件所在包同级目录下建立一个plugin.yml,一般在src上右键单击,选择File,在File Name中输入plugin.yml即可。
复制代码 - 对于main要着重说一下,很多同学在插件做好后丢到服务端测试都会报claaNotFound……就是因为这里写错了,同时还要注意冒号后面的空格。
· 大纲
- 本教程根据Bukkit 1.7.10-R0.1-SNAPSHOT API和Bukkit Plugin Tutorial为蓝本,经过适当的翻译和个人的理解编译而成。
- 开发环境为Windows 8.1 x64/JDK 1.8_20/MyEclipse 2014/Bukkit 1.7.2
- 此教程对Linux用户友好,全程无任何Windows专有软件。Linux下的MyEclipse因为官网被墙,我提供下载地址。
=================正文=================
· Step 1 - 开发环境搭建以及最简单的一个插件
· 软件 : MyEclipse 2014
· 文件 : bukkit库文件(此文件可以直接复制bukkit/MCPC服务端下的开服文件【.jar主文件】)
- 步骤
· 新建一个项目(Project):在包管理器(Package Explorer)的空白处单击右键,选择第一行的“New”,在弹出的二级菜单中选择第一个“Java Project”。

在弹出的窗口中,设置项目名、JDK版本等信息,完毕后点击Next。注意项目名尽量使用非中文且非Java保留关键字。

在接下来的窗口中,我们需要将Bukkit库文件导入;首先切换选项卡到Libraries,选择右侧的Add External JARs,在弹出的文件选择框内选择准备好的库文件,点击打开。如果一切顺利,在Build Path中就可以看到了,点击我们导入的库文件前的三角形,双击JavaDoc location,将此地址复制进去 : http://jd.bukkit.org/rb/apidocs/ ,最后点击OK,且点击Finish即可完成项目的建立。



红色框内即为我们创建好的Project
· 下面我们要为插件创建一个“包”(Package),Java中的Package类似于C#中的Namespace。一般包的命名可以使用网站域名倒过来的方式;譬如,我的网站是iKoskiX.com,我对包的命名一般都是"com.iKoskiX.项目名",例如此次的com.iKoskiX.mcPlugins;同时我们不可能只做一个插件,所以在mcPlugins下还可以建立子级包用于分辨不同的插件,比如com.iKoskiX.mcPlugins.teachStu 一个用于教学的插件、com.iKoskiX.mcPlugins.marray 结婚插件等等。具体信息各位可以参考各个Java教程。
在建立好的项目上单击右键,选择New,再选择Package,弹出的窗口中输入包名(命名方式如上所述,如果没有自己的域名,可以随便起一个包名,比如“你的姓名.插件名” → “Tuisku.teachStu”,这个不影响使用),注意包名请使用非中文,最后点击Finish即可。


· 做完这些,已经完成了插件开发的50%的工作,剩下的50%就是代码和算法。 - 首先建立一个主类,在我们刚才建立的包上右键单击,选择New,在二级菜单中选择class,弹出的窗口中输入类名(同理,类名请使用非中文且非Java保留关键字),点击Finish即可。


↑↑ 我们看到我们的文件了好激动_(:з」∠)_
· onEnable()和onDisable()
·大纲
-当插件启用或禁用时,将相应的调用这两个方法。默认情况下插件会自动调用他们,所以你可以在这两个方法中注册“事件”以及提供一些Debug信息。
-onEnable():
· 当插件启用时会被调用。
· 用于当方法被调用时“挂载”插件
-onDisable():
· 在插件卸载(禁用)时被调用。
· 用于在方法被调用时“卸载”插件以及相关的状态信息。
·更多的介绍
-首先在主类中(就是继承[extends]JavaPlugin的那个类)创建onEnable()和onDisable()方法,重写超类(父类、基类)的相应方法。如果一切正常,那么看起来应该是这样的:
编译器可能会在方法名下提示黄线,让我们加上@Override(代表重写父类方法),这个警告可以忽略,不会对项目造成实际影响。
截止至目前,这两个方法已经创建好了,但是他们什么都不能干。
记录一条消息
·大纲
-插件可以向控制台(Console)和服务器日志(Server Log)输出消息。所以“插件日志”可以通过调用正确的方法来实现。
·步骤
-首先我们需要在插件内调用getLogger()这个方法,然后我们就可以开始下一步。例如我们需要在onEnable()被调用时输出一句话,我们可以这样做:
e.g: getLogger().info("onEnable()方法竟然被调用了T.T");
P.S: void java.util.logging.Logger.info(String msg)
P.S.S: 上面那一句是什么意思看不懂暂时没关系……懂了的就先懂了
P.S.S.S:没必要在onEnable()方法中对控制台输出一句“XXX插件已经启用”,因为bukkit会自动输出这句话…… 当然我们也可以在onDisable()中写上一句 ←(((废话……
- 所以我们将上面的代码改一下,让这个插件在被启动的时候报告一下当前的时间,在被卸载的时候也报告一下当前时间……
·大纲
-当插件启用或禁用时,将相应的调用这两个方法。默认情况下插件会自动调用他们,所以你可以在这两个方法中注册“事件”以及提供一些Debug信息。
-onEnable():
· 当插件启用时会被调用。
· 用于当方法被调用时“挂载”插件
-onDisable():
· 在插件卸载(禁用)时被调用。
· 用于在方法被调用时“卸载”插件以及相关的状态信息。
·更多的介绍
-首先在主类中(就是继承[extends]JavaPlugin的那个类)创建onEnable()和onDisable()方法,重写超类(父类、基类)的相应方法。如果一切正常,那么看起来应该是这样的:

编译器可能会在方法名下提示黄线,让我们加上@Override(代表重写父类方法),这个警告可以忽略,不会对项目造成实际影响。
截止至目前,这两个方法已经创建好了,但是他们什么都不能干。
记录一条消息
·大纲
-插件可以向控制台(Console)和服务器日志(Server Log)输出消息。所以“插件日志”可以通过调用正确的方法来实现。
·步骤
-首先我们需要在插件内调用getLogger()这个方法,然后我们就可以开始下一步。例如我们需要在onEnable()被调用时输出一句话,我们可以这样做:
e.g: getLogger().info("onEnable()方法竟然被调用了T.T");
P.S: void java.util.logging.Logger.info(String msg)
P.S.S: 上面那一句是什么意思看不懂暂时没关系……懂了的就先懂了
P.S.S.S:没必要在onEnable()方法中对控制台输出一句“XXX插件已经启用”,因为bukkit会自动输出这句话…… 当然我们也可以在onDisable()中写上一句 ←(((废话……
- 所以我们将上面的代码改一下,让这个插件在被启动的时候报告一下当前的时间,在被卸载的时候也报告一下当前时间……

- 如果你是完全参考的上面的代码,恭喜你,你完成了一个最简单的插件。但是如果要让Bukkit识别他,你还需要干一点事情。
- 在与插件所在包同级目录下建立一个plugin.yml,一般在src上右键单击,选择File,在File Name中输入plugin.yml即可。


注意plugin.yml的级别与包同级
- 在文件中输入以下内容,保存即可
- name: 插件名
- main: 包名.主类名
- version: 版本号
main的正确值是:包名.主类名
e.g:com.iKoskiX.mcPlugins.teachStu是我的包名,teachStu.java是我的主类,主类名和包名最末一样,但是一个都不能省略!正确的是" main: com.iKoskiX.mcPlugins.teachStu.teachStu "。
如果一切都没问题了,那么,让我们开始打包插件,生成Jar文件,进行测试。
在项目上单击右键,选择Export,选择JAR File,点击下一步,选择我们的项目,且在下面的JAR File中选择输出的路径,最后点击Finish即可~


下面将得到的Jar文件丢到服务端的Plugins文件夹中,重启服务器,期待好运降临~

OK 我们看到插件已经在运行了,第一次提示信息是在插件启用调用onEnable(),第二次是我输入stop后调用的onDisable()
下面,有一个扩展知识和一个问题:
-扩展:onLoad():
· 这个方法在插件被“加载”的时候被调用。
· 此方法优先级比onEnable()高,插件先被服务端Load,然后Enable。
-问题
· 那么,有如下代码:
· 这个方法在插件被“加载”的时候被调用。
· 此方法优先级比onEnable()高,插件先被服务端Load,然后Enable。
-问题
· 那么,有如下代码:

代码节选如图所示,onLoad()方法在代码中的位置位于onEnable()后面。那么,将插件编译后丢入服务端运行,Console出的信息顺序是什么?
=======================以上=======================
敬请期待下一节。
欢迎各位关注我的新浪微博@疾汌 与我一起讨论~
=======================以上=======================
敬请期待下一节。
欢迎各位关注我的新浪微博@疾汌 与我一起讨论~
大触发威了.
完全看不懂T_T
sulu 发表于 2015-1-13 19:04
大触发威了.
_(:з」∠)_客气客气
顶!终于有Eclipse的教程了!终于不用看官方tutorial扒拉扒拉了,Lz好人!【嫁窝
额,弃坑了?
大触发威了.
好复杂啊!!!!!!!!!!!!!!!!!
谢谢大神指点
蛮好的,不过要继续更新哦!
看不懂……