# ServiceIO
一个现代化、开箱即用的 Vault 替代方案,提供增强的功能、
更好的性能和插件之间的无缝集成。
> [!NOTE]
> ServiceIO 只支持 [paper](https://papermc.io/downloads/paper) 的最新构建 (1.20+)
>
> ServiceIO 被设计成 Vault 的完整替代品,因此在您切换后,Vault 将不再是必需的。 请放心,
> 您现有的所有依赖于 Vault 的插件将继续与 ServiceIO 协同工作。
指标可以在 [这里](https://bstats.org/plugin/bukkit/TheNextLvl%20ServiceIO/23083) 找到
[在 Hangar 上下载插件](https://hangar.papermc.io/TheNextLvl/ServiceIO)
## 为什么您应该使用 ServiceIO?
ServiceIO 是 Vault 的一种前沿替代方案,旨在克服过时 VaultAPI 的局限性。 虽然
Vault 仍然具有用途,但它依赖于已弃用且不受支持的代码,这迫使开发人员使用不安全 null 的
接口,这可能导致不稳定和错误。
ServiceIO 通过提供强大的空指针安全性注释、全面的文档和
维护良好的源代码来解决这些问题。 此外,ServiceIO 启用异步数据加载并提供对缓存的
结果访问,从而提高性能和可扩展性。
ServiceIO 的一项关键功能是其与现有 Vault 接口的无缝集成,允许您的插件同时使用
这两个 API,而无需进行任何额外的代码更改。 这确保了平滑的过渡,同时
利用现代、可靠平台的优势。
此外,ServiceIO 通过启用不同插件之间的数据转换,不仅限于
经济,还包括银行、权限、聊天和组等内容,超越了 Vault 提供的内容。 这消除了开发人员
实施自定义转换逻辑的需要,从而节省了时间和精力。 对于服务器所有者来说,这意味着可以比以往
任何时候都更流畅地替换插件,确保平稳运行和灵活性,而无需手动数据迁移引起的手头问题。
## 命令
### Convert
| 命令 | 描述 |
|--------------------------------------------------|------------------------------------------------------------------------------------------|
| `/service convert banks ` | 转换所有银行和银行账户 |
| `/service convert character ` | 转换所有 npc |
| `/service convert chat ` | 转换所有聊天数据 (前缀、后缀、显示名称...) |
| `/service convert economy ` | 转换所有经济数据 (账户和余额) |
| `/service convert groups ` | 转换所有组数据 (组、前缀、后缀、显示名称、权限、成员) |
| `/service convert holograms ` | 转换所有全息图 |
| `/service convert permissions ` | 转换所有权限数据 (用户、权限) |
### Info
| 命令 | 描述 |
|-----------------------------|----------------------------------------------------|
| `/service info` | 查看添加任何功能的所有插件 |
| `/service info banks` | 查看安装了哪些银行提供程序插件 |
| `/service info characters` | 查看安装了哪些 npc 提供程序插件 |
| `/service info chat` | 查看安装了哪些聊天提供程序插件 |
| `/service info economy` | 查看安装了哪些经济提供程序插件 |
| `/service info groups` | 查看安装了哪些组提供程序插件 |
| `/service info holograms` | 查看安装了哪些全息图提供程序插件 |
| `/service info permissions` | 查看安装了哪些权限提供程序插件 |
## 权限
使用 `/service convert` 命令需要权限 `service.convert`
使用 `/service info` 命令需要权限 `service.info`
`service.admin` 权限授予访问所有 ServiceIO 命令
由于兼容性 `vault.admin` 充当 `service.admin`
## API
要在 Gradle 项目中使用 Kotlin DSL 包括 API,请执行以下步骤:
1. **添加存储库:** 在您的 `repositories` 块中包含 `maven` 存储库。
2. **添加依赖项:** 将 `` 替换为 API 的实际版本。
这是一个示例配置:
```kts
repositories {
maven("https://repo.thenextlvl.net/releases")
}
dependencies {
compileOnly("net.thenextlvl.services:service-io:")
}
```
要查找最新版本:
1. 访问 [存储库链接](https://repo.thenextlvl.net/#/releases/net/thenextlvl/services/service-io)。
2. 将依赖项声明中的 `` 替换为列出的最新版本号。
例如,如果最新版本是 **2.2.0**,则您的依赖项将如下所示:
```kts
dependencies {
compileOnly("net.thenextlvl.services:service-io:2.2.0")
}
```
您可以在存储库中找到源代码和 Javadoc
您还可以在 IDE 中从那里下载文档
### 实施 ServiceIO
ServiceIO _松散地_ 遵循模型视图控制器 (MVC) 设计模式
目前,有以下控制器:
BankController
CharacterController
ChatController
EconomyController
GroupController
HologramController
PermissionController
控制器负责加载、检索、删除和创建数据
访问控制器的示例:
```java
public @Nullable BankController getBankController() {
return getServer().getServicesManager().load(BankController.class);
}
public @Nullable ChatController getChatController() {
return getServer().getServicesManager().load(ChatController.class);
}
public @Nullable EconomyController getEconomyController() {
return getServer().getServicesManager().load(EconomyController.class);
}
```
提供您自己的控制器的示例:
```java
private void registerBankController() {
getServer().getServicesManager().register(BankController.class, new YourBankController(), this, ServicePriority.Highest);
}
private void registerEconomyController() {
getServer().getServicesManager().register(EconomyController.class, new YourEconomyController(), this, ServicePriority.Highest);
}
```