木头光波
本帖最后由 木头光波 于 2015-1-13 18:49 编辑

· 大纲

    - 本教程根据Bukkit 1.7.10-R0.1-SNAPSHOT APIBukkit 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()中写上一句 ←(((废话……

                - 所以我们将上面的代码改一下,让这个插件在被启动的时候报告一下当前的时间,在被卸载的时候也报告一下当前时间……
               
                - 如果你是完全参考的上面的代码,恭喜你,你完成了一个最简单的插件。但是如果要让Bukkit识别他,你还需要干一点事情。

                - 在与插件所在包同级目录下建立一个plugin.yml,一般在src上右键单击,选择File,在File Name中输入plugin.yml即可。



注意plugin.yml的级别与包同级


               - 在文件中输入以下内容,保存即可

  1. name: 插件名
  2. main: 包名.主类名
  3. version: 版本号
复制代码
              - 对于main要着重说一下,很多同学在插件做好后丢到服务端测试都会报claaNotFound……就是因为这里写错了,同时还要注意冒号后面的空格。

                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。
          -问题
              · 那么,有如下代码:

             代码节选如图所示,onLoad()方法在代码中的位置位于onEnable()后面。那么,将插件编译后丢入服务端运行,Console出的信息顺序是什么?

=======================以上=======================
敬请期待下一节。
欢迎各位关注我的新浪微博@疾汌 与我一起讨论~






sulu
大触发威了.

Ayamuta
完全看不懂T_T

木头光波

_(:з」∠)_我感觉我讲的很通俗了……吧?
其实这一部分稍微学一下J2SE基础就能看懂啦~加油

木头光波

_(:з」∠)_客气客气

3x0c
顶!终于有Eclipse的教程了!终于不用看官方tutorial扒拉扒拉了,Lz好人!【嫁窝

深蓝の回忆
额,弃坑了?

angeloer

大触发威了.

Zoogue
好复杂啊!!!!!!!!!!!!!!!!!

wwykahuna
谢谢大神指点

whatafcukday
蛮好的,不过要继续更新哦!

苏黎世°
看不懂……

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