Skip to content

开发接口

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 对象修改的逻辑建议回到主线程执行。数据库查询、写入可以异步处理,但不要在异步线程直接修改玩家背包、实体、世界方块等对象。