MC 插件开发教程 —— Hello World?(三)
Hello World? 什么是 Hello World? Hello World 中文意思是『你好,世界』。因为 C 语言中使用它做为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这一习惯。通常被用来接触新语言、新框架时的第一个项目!
观前提醒:本章将涉及很多 Java 和 Maven 概念,可能刚看到会有点懵,但是不要慌,勤百度,勤问,教程中会尽量避免使用到这些知识,或者去形象的解释,或者去总结,总之呢~ Nerver Give Up!加油 !
引言
好滴~ 经过上一章的学习,相信你已经配置好了你的开发环境,那么现在,就让我们按照常规的开发思路,来真正制作一个你自己的插件 吧!
构思项目
构思?为什么要构思?每一个项目的开始,都是从开发者们的奇思妙想中诞生的,但是,也不是每次想象,都能做出来,或者应该说。。你要怎么把它做出来?这便是构思项目的作用,它不仅告诉你你该怎么做这个项目,更可以告诉你到底能不能做这个项目,开发新项目前要先构思,想想为什么要开发,开发的结果是什么,我该怎么实现自己的想法,做好充足的准备再开发是个很好的习惯~
每当 MC 服务器运行时,都会有个叫做控制台(Console)的窗口,这里向腐竹展示服务器的运行信息、玩家信息、插件信息,以及可以在这里发送命令~ 相信你已经看到了,“插件信息”。没错,我们接下来就要在这里,输出 Hello World! !
那。地方找好了,我们要怎么去做呢?可以顺一下项目思路,我们可以这样制作:
插件启动 -> 输出 “Hello World!”
对的,就是这么简单~ 那,让我们开始吧!
新建项目
相信你已经正确安装了 IDEA 以及 JDK,现在让我们打开 IDEA,选择 项目-新建项目 出现新建项目窗口。接下来呢有两种新建方式,最终效果是差不多的,只不过分懒与不懒啦~
我还是比较推荐 Maven 自行搭建,可以便于你理解 Maven,也可以方便你能够在后续的使用其他插件的 API 章节中,更快的理解 Maven~ 当然,如果你已经很了解 Maven,也就不用来浪费时间啦~ 使用插件新建也是可以的!
哦?你开启 IDEA 不在启动窗口?而是在项目里?正常~ IDEA 会自动打开你关闭前的项目,你只需要在 文件-关闭项目 中点击,就可以回到启动界面啦~
项目基本配置
在弹出的窗口中,我们选择最顶上的 新建项目,不要选择 Maven Archtype!在里面填写你的项目名、项目路径,语言我们选择 Java,构建系统选择 Maven,如果你已经安装过 JDK,那么应该会自动选择。如果没有自动选择,点击 JDK 下拉框,选择 添加 JDK - JDK..,选择你的 JDK 安装目录。如果没有安装,点击 添加 JDK - 下载 JDK,下载合适版本的就好啦!然后再点击 高级设置,输入你的组 ID、工件 ID,点击新建!
啊啊啊?什么组 ID,工件 ID?创建 Git 仓库又是啥?
- 组 ID:类似于你家的地址,他是唯一的,不应该与其他插件冲突!标准的写法应该是将你的个人网站反写,比如:org.eu.xiaoyi311,但是我个人还是喜欢用:io.作者.项目名,这样基本上就可以杜绝重复啦~
- 工件 ID:这个在你写 项目名称 时,会自动填写,他便是最终生成的文件名(的一部分)
- 创建 Git 仓库:这个涉及开源仓库问题,在本章中不会过多说明,在后面章节中会详细解释开源仓库
已经听不懂了?不用担心,相信你听不懂的地方是那两个 ID,总结一下:
- 组 ID:别重复,包括和其他插件
- 工件 ID:项目名称就行,最后生成的文件名
插件基本配置
现在,一个最基础的项目已经建好啦!但是 Java 还不知道什么是 Paper,所以我们要告诉 Maven,让 Maven 下载 Paper 的 API,再提供给 Java~
先打开项目中的 pom.xml,在 </project>
前写入:
1 | <build> |
这一堆是什么意思?他干了什么?如果你学过 XML 或者接触过,我们可以把上面的配置文件分为三部分:build
、repositories
、dependencies
,分别为:构建、仓库、依赖,它们对应的意义如下:
- 构建:告诉 Maven 该怎么打包我们的插件,在此处我们使用了
org.apache.maven.plugins
包中的maven-compiler-plugin
以及maven-shade-plugin
两个插件,他们分别用来:编译你的代码、打包生成 jar。 - 仓库:他是为了告诉下面的 依赖 该从哪里下载
- 依赖:他用来告诉 Maven 你会使用哪个依赖,以保证 Maven 可以读懂,当然,IDEA 也会根据这里的提供的依赖,进行代码分析,在此处我们使用了
io.papermc.paper
包的paper-api
依赖,没错!他就是 Paper API!
那。。provided
什么意思?他便是指在打包的时候不用把这个依赖也打包进去,毕竟,是 Paper 提供的 API,在这里使用只是为了让 Maven 和 IDEA 知道你在写啥,在实际运行的时候 Paper 是能够看懂的,所以没必要再重复打包到你的插件里,反而会增加插件大小!
保存,你的编辑器界面上应该会冒出一个 M 带着循环符号,点它,它会让 Maven 下载 API
新建插件主类
展开 src/main/java 目录,在这个文件夹上,右键,新建软件包,按照你创建项目时写的来写。右键,新建 Java 类,名称推荐为插件名称。
此时 IDEA 应该会为你自动编写代码,就像这样:
1 | package io.xiaoyi311.mcplugin; |
新建插件信息
那么,项目建好了,我们总得告诉 Bukkit 我们项目的信息吧!
展开 src/main/resources 目录,右键,新建文件,名字叫做 plugin.yml
这里的名字不可随便起!否则 Bukkit 无法正常识别!
内容如下:
1 | name: MCPlugin |
喂喂喂,别傻乎乎的全改了哇,main
是你的包,这个别复制我的哇!还有 name
是你的插件名,也别复制我的哦!api-version
是你的 MC 版本!只要前两个数字位!
比如:1.20.1 -> 1.20; 1.16.5 -> 1.16
与手动 Maven 的区别?插件配置其实是通过一个向导快速的建立一个项目,避免多余的时间浪费。如果你不太了解 Maven,还是推荐手动试一试,从头看看它到底是个什么原理~
下载插件
既然要用插件,那就得先下插件!我们在顶部菜单栏打开 IDEA 的设置,找到 插件(Plugins) 选项卡,顶部选择 MarketPlace,搜索 Minecraft Development,下载你找到的插件!重启 IDEA
项目配置
重启后回到新建项目页面,此时你会发现,左侧选项卡中多出了 “Minecraft” 选项,点它!
在里面填写你的项目名、项目路径,Build System 选择 Maven,Platform Type 选择 Pluign,Platform 选择 Bukkit,Bukkit Platform 选择 Paper,Minecraft Version 可自己选择,但注意使用匹配的 JDK!如果你已经安装过 JDK,那么应该会自动选择。如果没有自动选择,点击 JDK 下拉框,选择 添加 JDK - JDK..,选择你的 JDK 安装目录。如果没有安装,点击 添加 JDK - 下载 JDK,下载合适版本的就好啦!然后再输入你的**组 ID(Group ID)、工件 ID(Artifact ID),你插件的版本(Version)**点击新建!
啊啊啊?什么组 ID,工件 ID?创建 Git 仓库又是啥?Main Class 咋办?Plugin Name?Paper manifest?
- 组 ID:类似于你家的地址,他是唯一的,不应该与其他插件冲突!标准的写法应该是将你的个人网站反写,比如:org.eu.xiaoyi311,但是我个人还是喜欢用:io.作者.项目名,这样基本上就可以杜绝重复啦~
- 工件 ID:这个在你写 项目名称 时,会自动填写,他便是最终生成的文件名(的一部分)
- 创建 Git 仓库:这个涉及开源仓库问题,在本章中不会过多说明,在后面章节中会详细解释开源仓库
- Main Class:这个暂时不用管,后面会详细讲解,用默认生成的就好啦,记住他的内容,它叫做 主类!这里写的是他在 Java 包里的路径!
- Plugin Name:你的插件名
- Paper manifest: 不用管,用的很少
已经听不懂了?不用担心,相信你听不懂的地方是那两个 ID,总结一下:
- 组 ID:别重复,包括和其他插件
- 工件 ID:项目名称就行,最后生成的文件名
- Main Class:不用管,用默认生成,记住他的内容,它叫做 主类
- Plugin Name:你的插件名
- Paper manifest: 不用管
请注意!极力!极力!极力!不推荐手动新建!前两者虽然过程不同但是都使用了 Maven!但是这个方法将完全不使用!这会导致后面章节中,添加其他插件提供的 API 时非常麻烦!虽然仍旧可以手动添加,但是这会大大加大工程量,后期维护也并不是太方便!什么都自己弄也不是很好的习惯!介于以上几种原因!本教程不提供任何本方法的教学!
乱写一通
此时,你的项目已经基本配置完成,打开你新建的主类,我们什么也不要管,直接全部删除,复制以下代码进去:
1 | package io.xiaoyi311.mcplugin; |
喂喂喂,别傻乎乎的全改了哇,最开始的一行是你的包,这个别复制我的哇!还有中间的 public class **** {
,这个是你的类名,也别复制我的哦!
好滴,写好啦?保存!别管你写了啥!
此时,你的代码已经编写成功,你可能疑惑到底发生了啥,别着急,让我们先把这个插件运行起来!