跳转到内容
我的世界XyeBBS论坛3群 进群吹水聊天!众多整合包作者、插件作者、玩家在内哦!不定时发福利,公布重要通知!
...

SQLib

(SQLib)
存储您所有 Minecraft 需求数据的最简单方式!
服务端/客户端前置API管理娱乐

维护状态 欢迎 PR

ko-fi

SQLib

SQLib 是存储所有 Minecraft 需求数据的最简单方式!这是一个专为 Minecraft 使用场景打造的简单 SQL 封装库。

重要提示:

本库并非功能完备的 SQL 封装库,也不提供对许多 SQL 功能的完整访问权限。 本库的主要目标是为您的模组提供一种简单易懂的数据存储方式。 如果您需要更高级的数据库,我建议查看类似 Nitrite 这样的项目。

配置

模组在首次启动时会生成一个配置文件,允许您配置所有依赖 SQLib 的模组所使用的数据库。 默认数据库是一个运行在 sqlib 目录下的 SQLite 数据库。

数据类型

数据类型可通过 JavaTypes、MinecraftTypes 或 AdventureTypes 类访问。我倾向于在项目中遇到新类型时为其添加支持。如果您希望添加某种类型,请提交 issue!

标准类型Minecraft 类型Adventure 类型
ByteVec3iKey
Byte[]BlockPosComponent
BoolChunkPos
ShortText
IntIdentifier
FloatSound
DoubleJson
LongNbtElement
String
Char
Date
Color
UUID
URI
URL

您也可以添加自己的自定义类型,如下所示:

安装设置

在您的 build.gradle 文件中包含以下内容:

repositories {
    maven { url "https://api.modrinth.com/maven" }
}

dependencies {
  modImplementation("maven.modrinth:sqlib:3.2.2")
}

开发者用法

此示例使用由 SQLib 管理的内置数据库。对于 99% 的模组而言,使用内置数据库已足够好,不过下文也提供了自定义数据库管理的示例。

// 不要在模组早期初始化器中调用 SQLib.getDatabase()。这样做很可能导致模组崩溃。
// 在常规模组初始化器中或之后调用是安全的。
Database db = SQLib.getDatabase();

DataStore store = db.dataStore("myModId", "userdata");
        
DataContainer playerData = store.createDataContainer();
playerData.put(JavaTypes.STRING, "username", "CoolGuy123");
playerData.put(MinecraftTypes.BLOCKPOS, "home", new BlockPos(304, 62, 37));
playerData.put(MinecraftTypes.NBT, "nbt", new NbtCompound());

System.out.println(playerdata.get(JavaTypes.STRING, "username"));
System.out.println(playerdata.get(MinecraftTypes.BLOCKPOS, "home"));
System.out.println(playerdata.get(MinecraftTypes.NBT, "nbt"));

自定义数据库管理

Postgres db = new Postgres("name", "192.168.1.69", "3306", "cooluser", "radman");
// 或
MySQL db = new MySQL("name", "192.168.1.69", "3306", "cooluser", "radman");
// 或
SQLite db = new SQLite("name", "some/dir");

事务支持

此方法会将 SQL 命令批处理为单个命令,以实现大量数据的更快读写。

DataStore store = db.dataStore("modId", "userdata");

DataContainer playerData = table.createDataContainer();
playerData.transaction().put("username", "CoolGuy123").put("home", new BlockPos(304, 62, 37).commit();

自定义类型

您可以参照 JavaTypes、MinecraftTypes 和 AdventureTypes 中的实现来添加自定义类型。然后即可像其他原生 SQLib 类型一样使用它。

// SQLPrimitive 是序列化的基础类型,两个函数式 Lambda 分别用于序列化和反序列化
public static final SQLibType<JsonElement> JSON = new SQLibType<>(SQLPrimitive.STRING, JsonElement::toString, JsonParser::parseString);

// 您也可以这样扩展类型:
public static final SQLibType<Identifier> IDENTIFIER = new SQLibType<>(SQLPrimitive.STRING, Identifier::toString, Identifier::tryParse);
public static final SQLibType<SoundEvent> SOUND = new SQLibType<>(IDENTIFIER, SoundEvent::getId, SoundEvent::of);
资源外链

选择礼物

使用社区积分,为喜欢的作品送上一份支持

加载中...

打赏记录

感谢每一位送出礼物的社区成员

0 次支持0 积分
正在加载内容…