
Offline Player Cache: Directors Cut
Активный0.0
Установок
Последнее обновление
Версии
Offline Player Cache: Directors Cut - Кэширование данных игроков
Мод Offline Player Cache: Directors Cut представляет собой полностью переработанное решение для сохранения информации об игроках на сервере Minecraft даже после их выхода из игры.
Основные возможности
Разработчики могут регистрировать специальные записи (Records), связанные с идентификаторами и кодерами для сериализации данных. Когда игрок покидает сервер, вся его информация сохраняется в данных уровня сервера, что позволяет получать к ней доступ через код или команды мода.
При повторном подключении игрока к серверу его кэшированные данные автоматически удаляются.
Доступные команды
Получение информации
Команда /opc get <uuid>|<name> <key>
показывает текущие значения игрока. Для онлайн-игроков отображаются актуальные данные, для офлайн-игроков — сохранённые в кэше.
Удаление данных
Команда /opc remove <uuid>|<name> <key>
удаляет кэшированные значения офлайн-игрока по выбранному ключу. На онлайн-игроков эта команда не влияет.
Просмотр списка
Команда /opc list <uuid>|<name>
отображает все ключи и значения, сохранённые для указанного игрока — как текущие для онлайн-игроков, так и кэшированные для офлайн-игроков.
Руководство для разработчиков
Настройка проекта
Для работы с API добавьте следующие настройки в ваш проект:
Файл gradle.properties
opc_version=...
Файл build.gradle
repositories {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
content {
includeGroup "maven.modrinth"
}
}
}
dependencies {
modImplementation "maven.modrinth:opc-directors-cut:${project.opc_version}"
// добавьте эту строку, если не хотите требовать от пользователей установку мода
include "maven.modrinth:opc-directors-cut:${project.opc_version}"
}
Создание записи
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
public record Contract(String label, boolean signed) {
public static Codec<Contract> CODEC = RecordCodecBuilder.create((instance) ->
instance.group(
Codec.STRING.fieldOf("label").forGetter(Contract::label),
Codec.BOOL.fieldOf("signed").forGetter(Contract::signed)
).apply(instance, Contract::new)
);
}
Регистрация записи
import maven_group.modid.concept.Contract; // Контракт :)
// где-то во время статической/мод-инициализации
private void init() {
OfflinePlayerCacheAPI.register(CONTRACT_RECORD_ID, Contract.class, Contract.CODEC, (Player player) -> {
// в этом блоке вы определяете, как преобразовать данные игрока в выбранную запись
return new Contract(player.getName() + ":contracted", true);
});
}
Получение данных
var cache = OfflinePlayerCacheAPI.getCache(server);
cache.getEntry(Contract.class, "bibi_reden").ifPresent(contract -> {
// теперь мы знаем, что для этого игрока есть действительная запись Contract
// Вы также можете использовать UUID для получения записи
});
Что нового в версии 2.*
В новой версии больше нет концепции ключей. Вместо этого вы регистрируете идентификатор, запись и кодер для работы с данными.