Spigot插件开发笔记——插件的七个重要部件

一、导读

在第一篇文章(Spigot插件开发笔记——第一个插件与事前准备)中,我详细的讲述了编写一个最简单的插件的方法,但其中只讲述了方法,没有讲述概念,为了帮助理解,我将学习插件开发以来的笔记和日志修改成该文章分享出来,本文描述了我在学习过程中对插件各部件的看法,如有错误之处还请各位指出,我会立刻纠正。

二、概述

在我看来,在插件开发过程中,不计外部引入的包与实例,也不计自行封装的工具或方法,最重要的组成部分有七个:主线程支线程执行器补全器监听器存储器配置文件
下面我简单概述一下这七个部件。

主线程 — JavaPlugin

一个插件可以没有其他部件,但必不可少的两个部件之一,即为主线程JavaPlugin
这是一个插件的主体,加载配置、绑定指令、注册监听器等等一系列操作都需要在这里进行。
这并不是绝对的,比如说,你也可以在生成执行器对象时,在执行器的构造函数中对自身进行指令绑定,但是不建议把这些东西分布到其他文件中,因为那样十分不利于编辑与管理

主线程

支线程 — BukkitRunnable

一些需要延时进行的操作,比如传送前摇、定期清理掉落物、轮播公告等功能,都需要用到支线程BukkitRunnable
支线程可以在任何地方启用,除了处理定时任务、延时任务以外,极少数处理速度较慢,会造成长时间等待的功能,也建议放到支线程中执行,这样可以指令执行所导致的服务器延迟与卡顿。

支线程

执行器 — CommandExecutor

我有时候也叫它解析器。
在绑定了一条指令与其对应的执行器后,玩家在服务器中输入该指令时,内容便会全部传入执行器的部件,交由执行器CommandExecutor来解析与处理。
你可以给多条指令绑定同一个执行器,以实现使用不同指令来实现同一功能的目的,但一定要记得,千万不要给一条指令绑定多个执行器,而且指令头必须在配置中注册
比如,我想要使插件读取并识别/demo test Delamer这条指令,则必须把指令头demo写入配置文件plugin.yml中以注册该指令,否则服务端就不知道该把哪条指令交给你来执行了,而指令头以外的内容,则全部会被划分到参数的范畴,交给执行器自己去解析处理。

执行器-控制台

执行器-玩家

补全器 — TabCompleter

除了指令头以外(指令头在配置文件中注册后会自动写入补全器),玩家使用指令时,可以使用Tab键自动补全指令或是后续参数,这便是补全器TabCompleter的用处。
补全器可以很大程度上优化插件的使用体验,这一点在新版中尤为明显(1.13开始补全功能被大幅度优化),玩家可以不用手动输入繁琐冗长的指令,只需要输入少许指令的开头,再敲击Tab键,即可自动补全后续指令,这使得补全器的作用大大提升。

补全器

监听器 — Listener

在游戏过程中,玩家会执行很多操作,触发各种各样的事件,如上线、下线、受伤、放置/破坏方块、死亡等等,要在玩家触发这些事件时进行一系列操作,就需要用到监听器Listener了。
监听器在经过注册后,会在玩家触发指定事件时自动执行你所写下的代码,比如,在玩家造成伤害时,向玩家发送伤害信息,又比如,在玩家破坏钻石方块时,如果方块高度不高于60,那么就否决掉这个破坏动作
所有可监听的事件在Spigot-API中皆已列出,可以随时翻阅。

监听器

存储器

有些时候,指令的效果不是实时的,而是存储一些数据以便日后使用,如:死亡时记录坐标以便使用back指令回到死亡地点;使用sethome指令设置家后,使用home指令回到之前所设置的家;标记一个方块,使这个方块受保护,Op以外的玩家无法破坏……诸如此类的场景,你需要一个存储数据的手段。
存储数据的手段相当"丰富",数据库,Redis,IO流读取文本文件,或是直接使用游戏内部标签与计分板等等,方法过多,所以无法一一介绍与列举,就不再赘述了。


存储器

配置文件

配置文件实际上分为两种,一种是插件必要的组成部分plugin.yml,没有这一部分,插件则不会被识别为插件。另一种,是为了供玩家动态调整插件内使用参数而使用的配置文件,FileConfiguration
前者的必要性毋庸置疑,在上面所提到的必不可少的两个部件之一,很大程度上指的就是plugin.yml这一部分。但后者的作用也不小,它可以让玩家或服主自定义插件内使用的数据数值,从而提升插件使用的灵活度,使插件可以在不需要重新编译源码的情况下,适用于更多的玩家、更多的场景。

配置文件-必要配置

配置文件-数据配置

三、附录

插件的重要组成部分就介绍到这里了,这里仅代表个人的看法与见解,所附的中文名称也只是依照我对这个部件的理解而擅自命名,并非官方解释,也不是英汉直译,更多细节与权威说法请参考SpigotAPI与更多大佬留下文章进行对照,或者自行尝试过实现以后,自己去理解,这样才能看得更加透彻。
后续有机会的话,会对这些部件一一进行详细介绍与教学,若有疏漏请大佬指正,我会尽快修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。