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

3.2 KiB
Raw Permalink Blame History

开发 - 自定义存储源

在某些情况下,插件提供的几种存储方式并不能满足您的需求,此时您可以选择在您自己的插件中自定义本插件的存储源。

1. 修改 plugin.yml

您需要在您自己的插件中声明依赖了本插件,即在 plugin.yml 中添加以下内容:

softdepend:
  - UltraDepository 

添加后Bukkit会让您的插件在本插件之后加载此时您就可以应用您的存储源。

2. 依赖本插件

请依据 开发指南 中的依赖介绍部分完成对本插件的依赖。

3. 实现 DataStorage

您需要在您的插件中实现 DataStorage 类,并实现其中的功能,他看起来像是这样的:


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 {
		// 保存玩家数据部分
		// 若抛出错误,则视为保存出错,将在后台提示检查。
	}

}

您也可以 点击这里 参考本插件提供的其他已实现的存储方式,并在此基础上开发您的自定义存储。

若您需要JSON格式存储可以直接继承 JSONStorage ,并重写相关方法。

4. 应用您的存储

您需要在插件加载(onLoad())时,应用您的自定义存储。


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.methodCUSTOM

修改完成后,在插件下次启动时就将应用您实现的 DataStorage 从而完成自定义存储源。