《插件设计与编程》第一话示例的spigot平台代码

《插件设计与编程》简介

《插件设计与编程》是一套面向 Minecraft 服务端插件开发的学习指南,它以一系列循序渐进的示例项目带领读者从零开始掌握插件开发的基本流程和核心思路。该教程属于 Bukkit 服务端插件开发指南的重制版,其目标是让初学者能够理解插件的结构、如何与 Minecraft 服务器进行交互,以及如何组织代码实现功能。

教程的第一部分“旅程的开始”通过几个简单的示例插件,展示如何创建项目、配置开发环境、编写基本代码、监听事件等,让读者在实践中理解插件开发的基础机制和设计方法。它强调核心概念、步骤与模式,而不是简单堆砌复杂功能,帮助学习者在掌握基础之后自信地开发更复杂的插件。

整个教程适合没有插件开发经验的读者,尤其是对Bukkit/Paper平台有兴趣、希望从最基础开始系统学习插件开发的人。它通过项目示例让读者逐步熟悉服务端 API、事件监听、命令注册和功能逻辑设计等关键内容,从而打破初学者对插件开发的神秘感。

第一话示例

教学文章用paper的API,我分享的是用Spigot的API编写的内容

Github:https://github.com/fanxien/ExampleKotlin

1.迎宾广播

功能:玩家进入服务器时在聊天区欢迎玩家

学习与收获

  • 要编写插件,就需要了解 Kotlin 语言(表达式、变量、分支、循环、函数、对象)。

  • 分析插件的功能,把它转换为事件驱动的模式(『当……发生时,就……这么做』)。

  • 创建监听器对象,将事件处理函数作为其方法添加,第一个参数类型是事件类型,并且需要加 @EventHandler 注解。

  • 将监听器对象在 Main 中通过 registerEvents 传递给 Bukkit。

  • 使用客户端加入服务器和测试。

  • 在编辑代码时,可以利用 IDEA 提供的自动补全功能加快编写速度。

2.今日要闻(AnnoListener

功能:玩家进入服务器时在聊天区显示配置好的内容,可多行

学习与收获

  • 使用 YAML 来存储配置文件。

  • 插件启动时通常保存默认配置文件,默认配置文件的名称是 config.yml

  • 使用 config 属性获取配置文件(实际上是调用 getConfig 方法),并用合适的 getXXX 方法读取内容。

  • 使用 as 进行类型转换,但这种方法可能出错。

  • 使用 sendMessage 向玩家发送消息。

  • onEnable 内『就地』创建事件监听器,并根据情况注册。

  • 在 YAML 中用 | 填写多行字符串。

3.开始菜单(MenuEventListener

功能:通过与gui的交互触发命令交互

学习与收获:

  • 使用物品栏作为菜单,物品作为按钮交互。

  • 用物品栏所有者区分是否是插件的物品栏。

  • 监听 InventoryClickEvent,并根据被点击物品信息执行操作。

  • 通过取消事件来阻止它的默认行为,例如将物品拿走。

  • plugin.yml 中注册命令。

  • 通过设置命令处理函数来处理命令。

4.区块过热

功能:如果一个区块在短时间内刷新大量指定的生物,那么就暂缓或阻止这些生物继续生成

学习与收获:

  • 了解如何监听实体生成的事件。

  • 使用 PDC 在 Minecraft 中的各种对象上附加数据。

  • 利用时间标记的的方式,在事件处理函数中衡量时间。

  • 利用会话 ID 技术判断存储的数据是否有效。

  • 创建、使用和重复利用命名空间 ID。

  • 使用变量提升来减少新对象的创建。

  • 使用列表 List 、数组 Array 和无重复集合 Set 表示一组数据,并检测某个对象是否包含在其中。

  • 处理命令的参数,并在命令执行失败时提示用户。

  • 实时(但临时地)修改配置内容。

5.刺刀冲锋

功能:玩家疾跑状态下右键指定物品开始冲锋,撞到实体/超过最大冲锋距离/中途更换物品/停止疾跑会停止冲锋,并将冲锋处于冷却状态

学习与收获:

  • 使用映射表将玩家与需要的数据关联。

  • 利用已有的对象存储数据,避免创建不必要的新结构。

  • 在多次触发的事件处理函数中追踪玩家的状态(例如剩余冲锋距离)。

  • 想要的事件不存在时,需要寻找其它事件代替(例如『右键单击』可以通过玩家交互加上对 action 的筛选实现)。

  • 创建和修改 BOSS 状态条。

  • 创建和使用状态效果。

  • 让插件功能与玩家体验保持一致(例如增加攻击动作)。

6.旅行背包

功能:玩家通过指令打开额外储物空间

学习与收获:

  • 根据数据存储需求,选用合适的数据库。

  • 在 Gradle 中添加依赖库。

  • 创建并妥善关闭数据库。

  • 物品栏数据与 ByteArray 的相互转换。

  • 选择合适的时机,将物品栏数据存入数据库。

  • 灵活地选择合适的位置处理命令。

  • 修复数据保存与物品恢复中的漏洞。

7.双重验证

功能:玩家进入服务器通过指令获得密钥并通过二维码展示,需扫码获得验证码,验证成功后才能使用各种指令

学习与收获:

  • 了解 TOTP 如何增强帐户的安全性。

  • 在配置文件以外的 YAML 中存储数据。

  • 在执行命令前获取事件,并进行预处理。

  • 设计和编写较为复杂的命令处理程序。

© 版权声明
THE END
喜欢就支持一下吧
点赞2赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容