开发接口
LyMySQLCore 提供两种接入方式:监听事件,或注册 MySQLSupplier。
普通业务插件只需要在玩家数据加载完成后开放操作,并在保存事件中写入数据。
依赖
硬依赖:
yaml
depend:
- LyMySQLCore如果你的插件只有在开启 MySQL 时才接入,可以使用软依赖:
yaml
softdepend:
- LyMySQLCore监听玩家数据加载
java
import Ly.sqlcore.safer.event.MySQLSafePlayerLoadEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class DataListener implements Listener {
@EventHandler
public void onMySQLLoad(MySQLSafePlayerLoadEvent event) {
// 在这里读取并应用玩家数据
}
}玩家进入服务器后,LyMySQLCore 会先处理锁和加载流程。不要在玩家数据未加载完成前开放依赖数据库的操作。
监听玩家数据保存
java
import Ly.sqlcore.safer.event.MySQLSafePlayerSaveEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class DataListener implements Listener {
@EventHandler
public void onMySQLSave(MySQLSafePlayerSaveEvent event) {
// 在这里保存玩家数据
}
}监听周期保存
java
import Ly.sqlcore.safer.event.MySQLSafePlayerCycleSaveEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class DataListener implements Listener {
@EventHandler
public void onMySQLCycleSave(MySQLSafePlayerCycleSaveEvent event) {
// 在这里执行周期保存
}
}注册 Supplier
需要更早接入加载顺序时,可以注册 MySQLSupplier。
java
import Ly.sqlcore.safer.MySQLSupplier;
import Ly.sqlcore.safer.MySQLSupplierManager;
import org.bukkit.OfflinePlayer;
public class DemoSupplier implements MySQLSupplier {
@Override
public String getName() {
return "DemoPlugin";
}
@Override
public void loadData(OfflinePlayer player) {
// 读取玩家数据
}
@Override
public void saveData(OfflinePlayer player) {
// 保存玩家数据
}
@Override
public void cycleSaveData(OfflinePlayer player) {
// 周期保存玩家数据
}
public static void register() {
MySQLSupplierManager.registerSupplier(new DemoSupplier());
}
}同名 Supplier 只能注册一次。重复注册会抛出异常。
优先级
注册 Supplier 时可以指定优先级:
java
MySQLSupplierManager.registerSupplier(new DemoSupplier(), MySQLSupplierPriority.HIGH);可用优先级:
| 优先级 | 说明 |
|---|---|
LOWEST | 最早执行 |
LOW | 较早执行 |
NORMAL | 默认 |
HIGH | 较晚执行 |
HIGHEST | 更晚执行 |
MONITOR | 最后执行 |
警告
涉及 Bukkit 对象修改的逻辑建议回到主线程执行。数据库查询、写入可以异步处理,但不要在异步线程直接修改玩家背包、实体、世界方块等对象。