
SQLib
存储所有Minecraft数据的最简单方式!
SQLib
SQLib 是满足您所有 Minecraft 数据存储需求的最简单方式!一个专注于 Minecraft 用例的简单 SQL 封装库。
重要说明:
该库并非功能完整的 SQL 封装库,也未提供对许多 SQL 功能的完整访问。该库的主要目标是为您的模组提供一种简便的数据存储方式。如果您需要更高级的数据库,建议参考 Nitrite 等类似项目。
配置
模组在首次启动时会生成一份配置文件,允许您配置所有依赖 sqlib 的模组所使用的数据库。默认数据库是运行在 sqlib 目录下的 SQLite 数据库。
数据类型
数据类型可以通过 JavaTypes、MinecraftTypes 或 AdventureTypes 类进行访问。我倾向于在自己的项目中遇到新类型时添加相应的支持。如果您希望添加某类型,请提交问题!
| 标准 | 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);
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。