▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
SQLib

SQLib

SQLib - простая библиотека для хранения данных в модах Minecraft. Упрощает работу с SQLite, MySQL и PostgreSQL через удобный API, заточенный под нужды мододелов.

Оцените первым
10.9K
32

SQLib

SQLib - это, по сути, удобная обёртка для работы с базами данных, заточенная под нужды Майнкрафт-модов. Если тебе надоело каждый раз городить велосипеды для сохранения данных игроков, координат домов или инвентаря - этот мод-библиотека реально упростит жизнь.

Важный момент

Сразу скажу: SQLib не претендует на звание полноценного SQL-драйвера. Он не даёт доступа ко всем фишкам SQL, и это сделано намеренно. Основная цель - дать простой и понятный способ хранить данные в твоих модах без лишней головной боли. Если тебе нужна серьёзная база с кучей возможностей - глянь в сторону Nitrite.

Конфиг

При первом запуске SQLib генерирует конфиг, где можно настроить базу данных, которая будет использоваться всеми модами, что от него зависят. По умолчанию стоит SQLite в папке sqlib. Ничего менять не надо, если только ты не хочешь переехать на MySQL или PostgreSQL.

Типы данных

Из коробки SQLib поддерживает кучу типов - от стандартных Java до специфических майнкрафтовских и даже Adventure API. Вот табличка для наглядности:

СтандартныеMinecraftAdventure
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");

Транзакции

Когда надо быстро записать или прочитать кучу данных, 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 и других популярных загрузчиков - всё работает из коробки.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

1.21.x1.20.x1.19.x1.18.x1.17.x1.16.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Зависимости

Ссылки


Создатели

Детали

Лицензия:
Опубликован:3 года назад
Обновлён:1 год назад
Главная