Скачать Offline Player Cache: Directors Cut — Minecraft Моды — MetaMods

Offline Player Cache: Directors Cut

Активный

Установок

17

Последнее обновление

1 год назад

Версии

1.20.1 — 1.21
Сервер
Fabric
Forge
Neoforge
Quilt
Библиотеки
Хранилища
Утилиты

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.*

В новой версии больше нет концепции ключей. Вместо этого вы регистрируете идентификатор, запись и кодер для работы с данными.