1
mirror of https://github.com/CarmJos/UltraDepository.git synced 2024-09-19 19:55:45 +00:00
UltraDepository/.documentation/develop/use-custome-storage.md

105 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发 - 自定义存储源
在某些情况下,插件提供的几种存储方式并不能满足您的需求,此时您可以选择在您自己的插件中自定义本插件的存储源。
## 1. 修改 plugin.yml
您需要在您自己的插件中声明依赖了本插件,即在 `plugin.yml` 中添加以下内容:
```yaml
softdepend:
- UltraDepository
```
添加后Bukkit会让您的插件在本插件之后加载此时您就可以应用您的存储源。
## 2. 依赖本插件
请依据 [开发指南](../README.md) 中的依赖介绍部分完成对本插件的依赖。
## 3. 实现 DataStorage
您需要在您的插件中实现 DataStorage 类,并实现其中的功能,他看起来像是这样的:
```java
import cc.carm.plugin.ultradepository.data.UserData;
import cc.carm.plugin.ultradepository.storage.DataStorage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import java.util.UUID;
public class CustomStorage implements DataStorage {
@Override
public boolean initialize() {
//初始化存储,在这里可进行连接数据库、创建表等操作。
return true; //返回true代表初始化成功若失败则插件将不再加载
}
@Override
public void shutdown() {
// 插件卸载时触发,一般用于释放连接池。
}
@Override
public @Nullable UserData loadData(@NotNull UUID uuid) throws Exception {
// 加载玩家数据部分
// 若抛出错误,则视为加载出错,会采用临时玩家数据的形式保证插件继续运行,同时在后台提示检查。
// 返回空则代表暂无该玩家数据,会自动视作新数据
return null;
}
@Override
public void saveUserData(@NotNull UserData data) throws Exception {
// 保存玩家数据部分
// 若抛出错误,则视为保存出错,将在后台提示检查。
}
}
```
您也可以 [点击这里](../../src/main/java/cc/carm/plugin/ultradepository/storage/impl) 参考本插件提供的其他已实现的存储方式,并在此基础上开发您的自定义存储。
> 若您需要JSON格式存储可以直接继承 [`JSONStorage`](../../src/main/java/cc/carm/plugin/ultradepository/storage/impl/JSONStorage.java) ,并重写相关方法。
## 4. 应用您的存储
您需要在插件加载(`onLoad()`)时,应用您的自定义存储。
```java
import cc.carm.plugin.ultradepository.storage.DataStorage;
import cc.carm.plugin.ultradepository.storage.StorageMethod;
import cc.carm.plugin.ultradepository.storage.impl.CustomStorage;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.function.Supplier;
public class YourPlugin extends JavaPlugin {
@Override
public void onLoad() {
// 应用您的存储方式
StorageMethod.CUSTOM.setStorageSupplier(new Supplier<DataStorage>() {
@Override
public DataStorage get() {
return new CustomStorage();
}
});
// 简化后大概长这样(lamda)
StorageMethod.CUSTOM.setStorageSupplier(CustomStorage::new);
}
}
```
## 5. 修改本插件的 config.yml
您需要修改本插件的 `config.yml` 中的 `storage.method`**CUSTOM**
修改完成后,在插件下次启动时就将应用您实现的 **DataStorage** 从而完成自定义存储源。