开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[其他教程] 【原创】Bukkit插件开发教程 —— 第二节 写代码之前的准备

发表于 2020-6-20 20:36:21 | 显示全部楼层 |阅读模式 IP:广东省
本帖最后由 主世界 于 2020-8-14 19:24 编辑

Bukkit 插件开发 入门教程
第二节 写代码之前的准备




搭建环境

作为一名Minecraft Bukkit服务端插件开发者,你必须准备和安装一些东西,才能正式开始开发。
硬件准备:一台运行内存≥2GB的电脑。手机无法完成开发。
软件准备:
首先,你必须安装Java开发工具包——JDK(Java Development Kit)。这玩意儿可跟你玩Minecraft游戏时安装的Java环境——JRE(Java Runtime Environment)有很大区别。JRE只是一个用于运行某些应用的运行环境,而JDK可供编写你的Java程序。在下面的链接中选择一个进行安装(zPan的可能不是最新版):
  1. 官网下载:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
  2. zPan下载:https://pan.izhuolin.cn/#/s/3kGfX(提取码:klpbbs)
复制代码
双击下载的文件并运行,大致按照安装JRE时的流程走就可以了。
接着,你需要安装一个编译器。一看到“编译器”,你可能就会想到与Java相关的有个软件叫Eclipse。或许,这个软件在只是编写Java程序的情况下非常适用;但如今,你将要在Java下编写Bukkit插件,这意味着如果你还使用Eclipse,你将会在导入Bukkit API上耗费大量宝贵时间。现在有个软件,它不需要你对其进行任何的配置,并且你一打开就能直接导入各种各样的Minecraft服务端插件API进行插件编写,它的界面还简洁明了、现代化极强,它就是——IntelliJ Idea。在我说出软件名称之后,你可能会发现,你周围的插件开发者们都在用这款软件。在这里下载(zPna的可能不是最新版):
  1. 官网下载:https://www.jetbrains.com/idea/download/#section=windows
  2. zPan下载:https://pan.izhuolin.cn/#/s/m7KCB(提取码:klpbbs)
复制代码
如果你选择了去官方下载,请下载名为“Community - For JVM and Android development”的那一项内容。Community版本部分功能收费,不过我们只用得上它的免费功能,因此不建议购买付费版。
安装IntelliJ Idea时,推荐你勾选以下选项:


“32位”和“64位”这两个选项请根据你系统的实际位数来选择。
IntelliJ Idea大约需要1GB的磁盘空间。本人亲测,不安装在系统盘不会出现任何问题。
安装完成后,它会自动跳出一个初始化界面,对我们插件开发没有什么用,点“Skip”跳过就可以了。然后,IntelliJ Idea会自行启动。软件加载完成后,不要着急着新建项目,我们需要装个13,啊不是,装个插件。


点击“Configure”并单击“Plugins”,在弹出的界面中搜索“Minecraft Development”,再点击安装。还推荐安装一个叫“Chinese (Simplified) Language Pack EAP”的插件,因为它可以将IntelliJ Idea默认的英文界面变成大部分都是中文的界面,并且我们接下来的教程全部用的是中文界面操作。





创建你的第一个插件

重新启动IntelliJ Idea,你会发现它变成中文的了!


行,我们点击“创建新项目”->“Minecraft”->“Bukkit Plugin”->“下一步”。这样,一个Bukkit插件就进入了基本的配置环节。
接下来的页面里,你能看到“GroupId”“ArtifactId”“Version”和“Maven”。
GroupId即插件的包名。在一开始,你不用了解这么多,但你需要知道,你在这里应该填入一个反写着的网址,例如“com.baidu.wenku”。不过,你最好是将自己的域名或邮箱反写,不然容易跟其它插件的包名“撞车”,发生冲突。同时,你也不能填中文进去。
ArtifactId是你的插件名。只能用英文、下划线、空格等常见字符。在给插件取名之前,想想常见的插件名有哪些,不要跟它们“撞车”了。
Version是你的插件版本。没有必要改它,后面在plugin.yml里面改都可以,不然可能会出错。
Maven。这相当于一个仓库,你还可以选择“Gradle”。这两者的区别自行上网搜索,我习惯用Maven,所以我这里就选它了。


点击下一步,你可以看到更多要填的东西。
看着头晕目眩?不不不,不要这样。事实上,上边写了“Required Settings”的才是必填项,下面“Optional Settings”是可填可不填的那种。
Required Settings那里都帮你填好了,你只需要选择一下对应的Minecraft Java版本。一般是1.7及以下版本互相兼容,1.8-1.12之间互相兼容,1.13及以上互相兼容。
至于Optional Settings,我只用给你个https://bukkit.gamepedia.com/Plugin_YAML(接下来讲的plugin.yml文件中参考用的网页),你就可以大致了解这些Settings分别是什么意思了。


点击下一步,根据喜好修改项目名称和路径,最后点击“完成”,你的第一个插件就创建好了!




plugin.yml

准备好了,之后我的废话不会那么多了,因为,“技术性”内容即将登场!
在软件右边浏览项目内的路径,双击打开“plugin.yml”文件(IntelliJ Idea帮我们。之后,你可以同时打开好几个文件进行编辑,并可在上边像浏览器的标签页一样切换。


打开之后,如下:
  1. name: 插件名称
  2. version: ${project.version}
  3. main: 插件主类(包名)
  4. api-version:
  5. authors: []
  6. description:
复制代码
不同人的plugin.yml文件中的文字可能不同,但必填的有如下几个:
  1. name: 插件名称
  2. main: 插件主类(包名)
  3. version: 插件版本号
复制代码
一般来说,必填的内容都在创建插件时IntelliJ Idea帮你填好了。我建议填上authors(作者)和description(简介)这两行内容,像这样:
  1. authors: Zhushijie
  2. description: My first plugin
复制代码
便于辨识。
plugin.yml还有很多的内容可添加,包括我们的指令、权限、插件前置等等,详情请见https://bukkit.gamepedia.com/Plugin_YAML



主类

创建好插件之后,IntelliJ Idea会自动打开项目的主类。此时,你可以看到下面的代码:
  1. package com.gmail.zhushijie.myplugin;

  2. import org.bukkit.plugin.java.JavaPlugin;

  3. public final class MyPlugin extends JavaPlugin {

  4.     @Override
  5.     public void onEnable() {
  6.         // Plugin startup logic
  7.     }

  8.     @Override
  9.     public void onDisable() {
  10.         // Plugin shutdown logic
  11.     }
  12. }
复制代码
这些代码是不用自己写的喔!在创建项目的时候IntelliJ Idea自动帮你写好了的!
  • package:插件的包名,不能删掉了。
  • extends JavaPlugin:这代表一个Java插件的基类,放在这里就代表这里是插件的主类,其它类无法再继承主类。
  • onEnable方法:插件被启用(Enable)时执行的内容
  • onDisable方法:插件被禁用(Disable)时执行的内容
在注释处,可以添加任意代码。例如:
  1. getLogger().info("MyPlugin插件已成功加载!");
复制代码
通过这个语句,你能够让插件在控制台中发送“MyPlugin插件已成功加载!"这一消息。冒号内的内容可以随便更改。
同时,你可以在onEnable方法的前面再加上个onLoad方法:插件被加载时执行的内容。
  1. @Override
  2.     public void onLoad() {
  3.         getLogger().info("MyPlugin插件已成功加载!");
  4.     }
复制代码
当然,这是可加可不加的。
如果我们把上述内容放在一起,就能在主类中写出这样的代码:
  1. package com.gmail.zhushijie.myplugin;

  2. import org.bukkit.plugin.java.JavaPlugin;

  3. public final class MyPlugin extends JavaPlugin {
  4.     @Override
  5.     public void onLoad() {
  6.         getLogger().info("MyPlugin插件已成功加载!");
  7.     }

  8.     @Override
  9.     public void onEnable() {
  10.         getLogger().info("MyPlugin插件已成功启用!");
  11.     }

  12.     @Override
  13.     public void onDisable() {
  14.         getLogger().info("MyPlugin插件已成功禁用!");
  15.     }
  16. }
复制代码
另外,如果你的插件里有一个用来存储玩家信息的HashMap,你需要在OnEnable中加入下列代码,以免插件在服务器中被重载后发生“未将全部在线玩家的信息获取到”的错误。
  1.         for (Player player : Bukkit.getServer().getOnlinePlayers()) {
  2.                 playerList.put(player.getName(), playerData(player));
  3.         }
复制代码
若插件里没有相关内容请勿添加。



导出你的第一个插件

主类和plugin.yml都写好了,理论上你的第一个插件就已经完备了。在使用自己写的插件之前,你不仅需要尝试去编译和调试它,还要对它进行“导出”。
首先,右键整个项目模块,选择“打开模块设置”或按下F4。


然后,选择“构建”,你会发现里面空空如也。
点击“+”,也就是添加,选择“JAR”并单击“From modules with dependencies”。


在弹出的“从模块创建 JAR”窗口中,在“Main Class”那一行中输入主方法(或点击旁边的文件夹图标浏览并选择主方法)。路径可以不用管,咱没有META-INF和MANIFEST.MF。


点击确定,可以更改输出路径。完成后,点击确定。


回到程序主界面,在菜单栏中点击“构建”并选择“构建 Artifacts...”。


最后选择“Build”即可。


当你看到这些文件的时候,你的第一个插件就编译好了!可以拿到服务器中使用了!


注意:在程序界面点“运行”或“调试”(如下图)之后并不意味着你的插件成功编译,那只是供你测试用的。
真正的插件应该是通过上面的步骤产生的,注意一下哦。





更新教程不易,能给个评分表示来过么~
有问题尽管在下面回复,若有错误欢迎批评指正!
本帖未经作者允许严禁转载!


作者:主世界.png
苦力怕论坛,感谢有您~
回复

使用道具 举报

 楼主| 发表于 2022-3-15 15:52:23 | 显示全部楼层 IP:香港
fantuan_233 发表于 2022-2-21 08:16
这个硬件要求比fml模组开发好多了

(人家环境搭建就要3Gb) ...
gitpod.io (在线vscode,但不是网页版那种限制很多的),环境都不用
2# 2022-3-15 15:52:23 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

发表于 2022-3-15 16:00:52 | 显示全部楼层 IP:广东省
Katorly 发表于 2022-3-15 15:52
上 gitpod.io (在线vscode,但不是网页版那种限制很多的),环境都不用

很有道理=   =催更(爷爷你追的番更新了(bushi

评分

参与人数 1铁粒 +1 收起 理由
帐号不存在 + 1 不更哩 网上有很多教程可以去看.

查看全部评分

3# 2022-3-15 16:00:52 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-4-24 03:37

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号