2-4 在服务器上测试
在上一节中我们已经完成了代码的编写,现在是时候在服务器上测试它了!首先还是在 Gradle 面板中使用 jar 选项进行构建,并将构建完成的插件(位于 build/libs 下)复制到服务器的 plugins 目录中,并且删除先前添加的 HelloWorld 插件。
以玩家之名
为了实际测试我们的插件对于玩家的效果,我们需要启动一个 Minecraft 客户端。你可以随意选择任何支持 1.21.4 的启动器,但我们将使用 Alicorn 启动开发用的客户端。在 Alicorn 中使用以下步骤创建游戏:
- 在『游戏库』页面点选 创建新游戏。
- 选择版本 1.21.4。
- 选择 不安装模组系统。
- 选择一个帐户登入游戏。
- 点按 现在游玩 按钮,稍等一会儿,游戏将启动。
如果在选择帐户的时候没有使用微软帐户,那么需要对服务器进行一些额外的设置,请展开下面的折叠内容。
我需要帮忙!
默认情况下,Minecraft 服务器在玩家登录时会与 Microsoft 验证玩家的身份,并拒绝任何非正版玩家加入游戏。必须要说明的是,要游玩游戏,你需要使用有效的微软帐户,所谓的『离线登录』其实是违反 EULA 的行为。
但是,如果仅仅是没有购买游戏就不让人来开发插件的话,那就太过分了。如果不是抱着玩游戏的心态,而仅仅是拿一个客户端来测试的话,那也不是不能理解。在这种情况下,你需要编辑服务器根目录下的 server.properties 文件,找到这样一行:
online-mode=true将 true 改为 false,然后保存并关闭文件。如果你先前已经启动了服务端,那么需要重启它。
现在启动服务器,你将在日志中看到以下内容:
[14:39:11 INFO]: [PluginInitializerManager] Bukkit plugins (1):
- WelcomeBroadcast (1.0)
...
[14:39:11 INFO]: [WelcomeBroadcast] Enabling WelcomeBroadcast v1.0
[14:39:11 INFO]: This is the Welcome Broadcast plugin.
这正是我们先前添加的 println(...) 的作用,现在我们可以确定,我们的插件已经加载。
加入服务器
在客户端中选择多人游戏,点击 直接连接,并输入服务器地址 localhost 或者 127.0.0.1,然后加入世界。如果一切顺利的话,你就能在聊天栏看见欢迎消息了:

如果大家在加入服务器后物品栏没有出现两根骨头也不要慌张地觉得哪里出了问题,那确实只是笔者玩心大发的结果(笑)。
如果你在服务器控制台中找找,也能找到一条同样的消息,因为 broadcast 函数会将指定的消息发送给服务器的所有终端,包括玩家和服务器控制台。
现在试试修改一下广播的消息吧!只需要改变 onPlayerJoin 方法中的相应内容。小提示:Kotlin(和 Minecraft)都完全支持 UTF-8 编码,所以你也完全可以使用中文或者其它语言甚至表情符号来构成消息哦!
这就是第二个插件的全部内容了!来看看我们在这一章里所做的事情:
- 要编写插件,就需要了解 Kotlin 语言(表达式、变量、分支、循环、函数、对象)。
- 分析插件的功能,把它转换为事件驱动的模式(『当……发生时,就……这么做』)。
- 创建监听器对象,将事件处理函数作为其方法添加,第一个参数类型是事件类型,并且需要加
@EventHandler注解。 - 将监听器对象在
Main中通过registerEvents传递给 Bukkit。 - 使用客户端加入服务器和测试。
- 在编辑代码时,可以利用 IDEA 提供的自动补全功能加快编写速度。
到目前为止还不错!我们的插件虽然代码很少,功能简单,但是正走在构建更大型插件的正确道路上。如果对于这个项目的代码还有什么疑问,你可以在 GitHub 上查看这个插件的 源代码。一切都 OK 的话,我们就在下一章再见了!