跳转至

3. 学会调用API

​ 应用程序编程接口(Application Programming Interface, API)是一组定义和协议,允许不同的软件组件之间进行通信和数据交换。它就像是软件之间的桥梁,使得一个程序可以利用另一个程序的功能,而无需了解其内部实现细节。例如,天气应用通过 API 获取气象局的数据,而无需直接访问其数据库。

API 的主要优势包括:

  • 模块化开发:开发者可以专注于自身应用的核心功能,通过 API 集成其他服务。
  • 提高效率:避免重复造轮子,利用已有的功能接口,加快开发进度。
  • 促进协作:不同团队或组织可以通过 API 协同工作,实现系统间的互联互通。

3.1 Javadoc

3.1.1 什么是Javadoc

​ Javadoc 是 Java 官方提供的文档生成工具,它通过解析源代码中的特殊注释,自动生成 HTML 格式的 API 文档。这种文档不仅有助于开发者理解和维护代码,也方便他人查阅和使用相关的类、方法和接口。在开发 Spigot 或 Paper 插件时,查阅 Javadoc 是了解 API 功能和用法的关键途径。

​ 无论是在Javadoc中,还是在源码中,我们都会见到一系列的标签。常用的 Javadoc 标签包括:

  • @param:描述方法的参数。
  • @return:描述方法的返回值。
  • @throws@exception:描述方法可能抛出的异常。
  • @author:标注作者信息。
  • @version:标注版本信息。
  • @see:引用相关的类或方法。
  • @since:标注自哪个版本开始引入。

3.1.2 Javadoc的结构

Javadoc 页面通常包含以下部分:

  • 类或接口的简介:简要描述该类或接口的功能和用途。
  • 枚举常量摘要(Enum Constant Summary):列出了枚举中定义的所有常量。
  • 构造方法摘要(Constructor Summary):列出所有构造方法及其参数信息。
  • 方法摘要(Method Summary):列出所有方法及其简要说明。
  • 详细说明(Method Detail):提供每个方法的详细信息,包括参数、返回值、异常等。

类或接口的简介

​ 在 Javadoc 页面中,每个类或接口的顶部通常包含一段简短的描述,称为“类/接口简介”。这部分内容提供了该类或接口的整体概览,帮助您快速了解其用途和功能。

  1. 定位简介部分:在 Javadoc 页面中,类或接口的简介通常位于页面的顶部,紧跟在类名和包名之后。
  2. 关注继承关系:简介部分通常会列出该类或接口的继承关系,包括其父类(extends)、实现的接口(implements)等。这有助于您理解其在整个 API 结构中的位置。
  3. 查看相关链接:简介部分可能包含指向相关类、接口或方法的链接,便于您进一步查阅相关文档。

枚举常量摘要

​ 枚举(Enum)类型是一种特殊的类,用于表示一组固定的常量值。每个枚举常量都是该枚举类型的一个实例,通常用于表示一组预定义的常量,如材料(Material)。当您查看一个枚举类型的 Javadoc 页面时,通常会看到一个名为 Enum Constant Summary 的部分。该部分列出了枚举中定义的所有常量,每个常量通常包括:

  • 常量名称:枚举常量的名称,通常使用全大写字母表示,例如 ANVILARROW 等。
  • 简要描述:对该常量的简要说明,帮助开发者理解其含义和用途。

构造方法摘要

​ 构造方法摘要(Constructor Summary) 部分列出了类或接口中定义的所有构造方法。构造方法是用于创建类实例的特殊方法,通常与类名相同,不具有返回类型。

​ 构造方法摘要通常以表格形式展示,每一行代表一个构造方法,包含以下信息:

  • 修饰符:如 publicprivateprotected 或默认(包私有)。
  • 构造方法名称:构造方法的名称,通常与类名相同。
  • 参数列表:构造方法的参数类型和名称,帮助开发者了解如何使用该构造方法。
  • 简要描述:对构造方法的简要说明,帮助开发者理解其用途。

方法摘要

​ 方法摘要(Method Summary) 部分列出了类或接口中定义的所有方法。这对于开发者快速了解类的功能和可用的操作非常有帮助。点击方法摘要中的相关方法可直接跳转至详细说明的对应条目,供开发者快速查阅。

​ 方法摘要通常以表格形式展示,每一行代表一个方法,包含以下信息:

  • 修饰符:如 publicprivateprotected 或默认(包私有)。
  • 返回类型:方法的返回类型,如 voidintString 等。
  • 方法名称:方法的名称。
  • 参数列表:方法的参数类型和名称,帮助开发者了解如何调用该方法。

3.2 初识Spigot API

3.2.1 什么是Spigot API

​ Spigot API 是专为 Minecraft 服务器开发的高性能、轻量级框架。它基于 Bukkit 项目,旨在提供更高的性能和效率,同时保持与 Bukkit 插件的兼容性。通过 Spigot API,开发者可以使用 Java 编程语言创建自定义插件,实现对游戏的深度定制。

Spigot API 的特点包括:

  • 丰富的功能接口:提供了对玩家、实体、方块、事件等游戏元素的全面控制。
  • 事件驱动机制:允许开发者响应游戏中的各种事件,如玩家登录、方块破坏等,实现动态交互。
  • 高性能优化:相比原生 Bukkit,Spigot 提供了显著的性能提升,减少了不必要的计算和内存消耗。
  • 广泛的插件支持:拥有庞大的插件生态系统,开发者可以利用已有资源进一步定制服务器。

​ 通过 Spigot API,开发者不仅可以实现简单的功能扩展,还能构建复杂的游戏机制,打造独特的 Minecraft 服务器体验。

​ Paper 是基于 Spigot 的 Minecraft 服务器软件,旨在大幅提高性能,并提供更先进的功能和 API。Paper API 在 Spigot API 的基础上,提供了更多的功能和优化,具有更强的定制能力,完成一些Spigot API难以甚至无法完成的操作。在实际的程序设计中,我们常常将Spigot API与Paper API结合起来使用。

3.2.2 事件

​ 在 Spigot API 中,Event 是事件系统的核心类,代表游戏中发生的各种事件,如玩家点击方块、物品掉落、玩家死亡等。事件系统允许插件监听这些事件并作出响应,是实现插件功能的基础。Event是所有事件类的基类,位于 org.bukkit.event 包中。每个事件类都继承自 Event,并各自实现不同的方法。

​ PySpigot为我们提供了便利的事件注册与监听的“监听器管理器”,详见PySpigot中文文档

事件的工作流程

  1. 事件触发:当游戏中发生某个特定行为时(如玩家点击方块),相应的事件会被触发。
  2. 事件调用:通过 PluginManager.callEvent(Event event) 方法,事件被传递给所有注册的监听器。
  3. 事件处理:监听器中的方法会被调用,处理事件。
  4. 事件取消:如果事件实现了 Cancellable 接口,即为可取消的事件,可以通过 setCancelled(true) 方法取消事件,阻止默认行为的发生。

事件的分类

Spigot API 中的事件可以分为以下几类:

  • 玩家事件:如 PlayerJoinEventPlayerQuitEventPlayerInteractEvent 等。
  • 方块事件:如 BlockBreakEventBlockPlaceEventBlockRedstoneEvent 等。
  • 实体事件:如 EntityDamageEventEntityDeathEventEntitySpawnEvent 等。
  • 世界事件:如 WeatherChangeEventChunkLoadEventWorldSaveEvent 等。
  • 命令事件:如 CommandPreprocessEventTabCompleteEvent 等。

每个事件类都有其特定的触发条件和处理方式。

3.3 常用插件API