> ## Documentation Index
> Fetch the complete documentation index at: https://docs.opai.today/llms.txt
> Use this file to discover all available pages before exploring further.

# 快速开始

> 创建第一个Java Extension

客户端提供了完整的Java环境支持，运行标准的Java字节码。

客户端默认使用Java 21启动，你可以使用Java 21编译，当然如果你想要确保仍然使用旧启动器的用户可以使用，也可以使用Java 8编译。

## 开发工具

推荐使用IntelliJ IDEA或者Eclipse进行开发。

* [下载IntelliJ IDEA](https://www.jetbrains.com/idea/download) - 建议使用Community版本（向下滚动下载，第一个链接为Ultimate版本）
* [下载Eclipse](https://www.eclipse.org/downloads/)

## 设置SDK和工作区

建议下载[Zulu 21](https://cdn.azul.com/zulu/bin/zulu21.44.17-ca-fx-jdk21.0.8-win_x64.zip)为SDK，如果要开发Java 8扩展使用任何JDK 8发行版即可。

准备好Java之后，克隆或下载[示例扩展](https://github.com/opai-client/example-extension)，并导入到IDE中，如果你安装了Git可以使用以下命令克隆：

```bash theme={null}
git clone https://github.com/opai-client/example-extension.git
```

如果一切顺利Maven会自动完成项目配置，配置完成之后你可以开始编辑代码。

## 打包

<Warning>
  在开始编写之前，请修改示例扩展的包名以及在`ExampleExtension.java`中的`@ExtensionInfo`注解中的`name`。

  有相当多的用户出于某种目的安装了这个示例扩展，请务必修改这些信息防止冲突。
</Warning>

在进行简单的编辑之后，可以使用IntelliJ IDEA侧栏的Maven菜单中的`package`命令打包。

<img src="https://mintcdn.com/opai/v5NV4tR0-Jbw9Wj5/images/package.png?fit=max&auto=format&n=v5NV4tR0-Jbw9Wj5&q=85&s=d6eac9f1604ce948a21c06e5b25793f9" alt="package" width="337" height="284" data-path="images/package.png" />

打包成功之后JAR会生成在`target`目录下

将这个JAR文件复制到`%appdata%\Opai\extensions`文件夹中加载这个扩展。

## 调试

客户端中可以使用命令

```bash theme={null}
.extension reload
```

重新加载所有插件，在修改代码之后使用这个命令可以快速测试（需要重新打包）。

对于不重新打包的调试请搜索JDWP（Java Debug Wire Protocol），使用IDE的调试功能。

## 开发文档

开发文档以Javadoc的形式提供，`Ctrl + 右键`任何一个API的类名，点击`Download Source`后可以查看Javadoc（只需要点击一次）

<img src="https://mintcdn.com/opai/v5NV4tR0-Jbw9Wj5/images/doc0.png?fit=max&auto=format&n=v5NV4tR0-Jbw9Wj5&q=85&s=2578c49f7513488e5ce5b8b2025dacfc" alt="doc" width="975" height="556" data-path="images/doc0.png" />

<img src="https://mintcdn.com/opai/v5NV4tR0-Jbw9Wj5/images/doc1.png?fit=max&auto=format&n=v5NV4tR0-Jbw9Wj5&q=85&s=aa242ded0f72267791cef5f0d87cbf2f" alt="doc" width="924" height="712" data-path="images/doc1.png" />

几乎所有方法都有详细的注释，如果要了解某个方法的作用阅读注释即可。
