SQLib
SQLib 是存储所有 Minecraft 需求数据的最简单方式!这是一个专为 Minecraft 使用场景打造的简单 SQL 封装库。
重要提示:
本库并非功能完备的 SQL 封装库,也不提供对许多 SQL 功能的完整访问权限。 本库的主要目标是为您的模组提供一种简单易懂的数据存储方式。 如果您需要更高级的数据库,我建议查看类似 Nitrite 这样的项目。
配置
模组在首次启动时会生成一个配置文件,允许您配置所有依赖 SQLib 的模组所使用的数据库。 默认数据库是一个运行在 sqlib 目录下的 SQLite 数据库。
数据类型
数据类型可通过 JavaTypes、MinecraftTypes 或 AdventureTypes 类访问。我倾向于在项目中遇到新类型时为其添加支持。如果您希望添加某种类型,请提交 issue!
| 标准类型 | Minecraft 类型 | Adventure 类型 |
|---|---|---|
| Byte | Vec3i | Key |
| Byte[] | BlockPos | Component |
| Bool | ChunkPos | |
| Short | Text | |
| Int | Identifier | |
| Float | Sound | |
| Double | Json | |
| Long | NbtElement | |
| 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 积分
正在加载内容…


