[](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[](http://makeapullrequest.com)
[](https://ko-fi.com/G2G4DZF4D)
# SQLib
SQLib 是存储 Minecraft 数据最简单的方法!一个简单的 SQL 包装器,专注于 Minecraft 用例。
# 重要提示:
此库不是一个完整的 SQL 包装器,并且不提供对许多 SQL 功能的完全访问。
此库的主要目的是提供一种简单易行的方式来在您的模组中存储数据。
如果您正在寻找更高级的数据库,我建议您查看 [Nitrite](https://github.com/nitrite/nitrite-java)。
# 配置
模组会在首次启动时生成一个配置,允许您配置所有依赖 sqlib 的模组使用的数据库。
默认数据库是 sqlib 目录中的一个 SQLite 数据库。
# 数据类型
数据类型可以通过 `JavaTpes`、`MinecraftTypes` 或 `AdventureTypes` 类访问。我倾向于在我的项目中遇到新类型时添加对新类型的支持。如果您希望添加一个类型,请提交一个 issue!
| 标准 | Minecraft | Adventure |
|----------|-------------|-----------|
| 字节 | Vec3i | Key |
| 字节数组 | BlockPos | Component |
| 布尔 | ChunkPos | |
| 短整型 | Text | |
| 整数 | Identifier | |
| 浮点型 | Sound | |
| 双精度浮点型 | Json | |
| 长整型 | NbtElement | |
| 字符串 | | |
| 字符 | | |
| 日期 | | |
| 颜色 | | |
| UUID | | |
| URI | | |
| URL | | |
您还可以像这里看到的那样添加您自己的自定义类型:
# 设置
在您的 build.gradle 中包含:
``` gradle
repositories {
maven { url "https://api.modrinth.com/maven" }
}
dependencies {
modImplementation("maven.modrinth:sqlib:3.2.2")
}
```
# 开发者用法
此示例使用 sqlib 管理的内置数据库。对于 99% 的模组,使用内置数据库是好的,但是
下面是自定义数据库管理示例。
```java
// 不要在使用 sqlib 的早期模组初始化程序中调用 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"));
```
# 自定义数据库管理
```java
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 命令分批到一个命令中,以便更快地读取/写入大量数据。
```java
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 原生类型一样使用它。
```java
// SQLPrimitive 是要序列化的基本类型,并且两个函数 lambda 是用于从其序列化和反序列化的。
public static final SQLibType JSON = new SQLibType<>(SQLPrimitive.STRING, JsonElement::toString, JsonParser::parseString);
// 您也可以像这样扩展一个类型:
public static final SQLibType IDENTIFIER = new SQLibType<>(SQLPrimitive.STRING, Identifier::toString, Identifier::tryParse);
public static final SQLibType SOUND = new SQLibType<>(IDENTIFIER, SoundEvent::getId, SoundEvent::of);
```