
SQLib
SQLib - простая библиотека для хранения данных в модах Minecraft. Упрощает работу с SQLite, MySQL и PostgreSQL через удобный API, заточенный под нужды мододелов.
SQLib
SQLib - это, по сути, удобная обёртка для работы с базами данных, заточенная под нужды Майнкрафт-модов. Если тебе надоело каждый раз городить велосипеды для сохранения данных игроков, координат домов или инвентаря - этот мод-библиотека реально упростит жизнь.
Важный момент
Сразу скажу: SQLib не претендует на звание полноценного SQL-драйвера. Он не даёт доступа ко всем фишкам SQL, и это сделано намеренно. Основная цель - дать простой и понятный способ хранить данные в твоих модах без лишней головной боли. Если тебе нужна серьёзная база с кучей возможностей - глянь в сторону Nitrite.
Конфиг
При первом запуске SQLib генерирует конфиг, где можно настроить базу данных, которая будет использоваться всеми модами, что от него зависят. По умолчанию стоит SQLite в папке sqlib. Ничего менять не надо, если только ты не хочешь переехать на MySQL или PostgreSQL.
Типы данных
Из коробки SQLib поддерживает кучу типов - от стандартных Java до специфических майнкрафтовских и даже Adventure API. Вот табличка для наглядности:
| Стандартные | 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");
Транзакции
Когда надо быстро записать или прочитать кучу данных, SQLib умеет батчить SQL-команды в одну:
DataStore store = db.dataStore("modIddata");
DataContainer playerData = table.createDataContainer();
playerData.transaction().put("username", "CoolGuy123").put("home", new BlockPos(304, 304, 62, 37)).commit();
Свои типы
Хочешь добавить свой тип - смотри, как реализованы JavaTypes, MinecraftTypes и AdventureTypes, и делай по аналогии:
// SQLPrimitive - базовый тип для сериализации, а две лямбды - сериализатор и десериализатор
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);
Зачем это вообще нужно
В ванильном Майнкрафте данные хранятся в NBT - это удобно, но когда модов много, начинается каша. SQLib даёт единый интерфейс для хранения: хочешь - в SQLite на клиенте, хочешь - в MySQL на сервере. И все моды, что используют библиотеку, работают через один конфиг. Удобно, когда пишешь сборку или плагин, где нужно сохранять прогресс игроков, приваты, статистику - да что угодно.
Скачай SQLib и забудь про танцы с бубном вокруг баз данных. Для Fabric, Forge и других популярных загрузчиков - всё работает из коробки.
