SQLib
Активный0.0
Установок
Последнее обновление
Версии
SQLib
SQLib представляет собой упрощённую библиотеку для работы с базами данных, специально адаптированную для использования в модах Minecraft. Она предлагает разработчикам удобный способ хранения различных типов данных без необходимости глубокого погружения в сложности SQL.
Основная концепция
Данная библиотека не является полноценной обёрткой SQL и не предоставляет доступ ко всем возможностям SQL. Её главная цель — упростить процесс сохранения данных в ваших модах, сделав его максимально интуитивным и эффективным.
Настройка конфигурации
При первом запуске мод автоматически создаёт конфигурационный файл, который позволяет настраивать параметры базы данных для всех модов, использующих SQLib. По умолчанию используется база данных SQLite, расположенная в директории sqlib.
Поддерживаемые типы данных
Библиотека предоставляет три основные категории типов данных:
Стандартные Java-типы:
- Byte, Byte[], Bool, Short, Int, Float, Double
- Long, String, Char, Date, Color, UUID, URI, URL
Minecraft-специфичные типы:
- Vec3i, BlockPos, ChunkPos, Text, Identifier
- Sound, Json, NbtElement
Adventure-типы:
- Key, Component
Разработчик постоянно расширяет список поддерживаемых типов в процессе работы над своими проектами. Если вам нужен дополнительный тип данных, вы можете создать соответствующий запрос.
Установка
Добавьте в файл build.gradle:
repositories {
maven { url "https://api.modrinth.com/maven" }
}
dependencies {
modImplementation("maven.modrinth:sqlib:3.2.2")
}
Пример использования
// Не вызывайте 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 - базовый тип для сериализации, две лямбда-функции отвечают за сериализацию и десериализацию
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);