Скачать TCDCommons API — Minecraft Моды — MetaMods

TCDCommons API

Активный

Установок

27

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

3 месяца назад

Версии

1.18.2 — 1.21.11
Клиент
Fabric
Forge
Neoforge
Quilt
Библиотеки
Утилиты

TCDCommons API

TCDCommons представляет собой библиотеку API для модификации Minecraft, которая включает собственную систему графического интерфейса, различные события и хуки для игры, а также полезные утилиты для разработчиков модов. Основная цель этого API — оптимизировать и ускорить процесс создания модов, исключая необходимость многократного написания одинакового кода для похожих задач. Важно отметить, что данный мод является библиотекой и не предоставляет пользователям видимых функций на стороне интерфейса.

Зависимости

В таблице ниже указаны требования для установки мода. Термин "клиент" относится к установке модов в игру через лаунчер Minecraft, а "сервер" — к установке на сервер, к которому подключаются через меню "сетевая игра".

Требования Клиент Сервер
Fabric API Обязательно с версии 1.20.5 Обязательно с версии 1.20.5

Назначение

Главная задача этого API — улучшить и ускорить разработку модов для Minecraft, избавляя от повторного написания однотипного кода. Изначально API создавался для предоставления более удобной системы графического интерфейса, но со временем расширился и теперь включает различные события, хуки и утилиты, часто используемые в разработке.

Моды, использующие это API

Данный API в основном применяется разработчиком TheCSDev для создания мода Better Statistics Screen.

Возможности API

Клиентская часть

  • Система GUI: Уникальная и удобная система пользовательского интерфейса, предлагающая больше возможностей для настройки и гибкости по сравнению с ванильной системой.
  • Экраны HUD: Позволяет отображать экраны на игровом HUD для визуального улучшения. Важно: эти экраны предназначены только для отображения и не поддерживают взаимодействие с пользователем.

Общая часть

  • Система авто-конфигурации: Упрощает создание JSON-файлов конфигурации для вашего мода. Система автоматически сериализует поля примитивных типов, определенных в классе конфигурации, при сохранении и загрузке настроек.
  • Система событий: Позволяет отслеживать различные игровые события, а также создавать собственные события, которые могут прослушиваться другими модами.
  • Хуки: Обеспечивают легкий доступ к различным компонентам игры.
  • Сетевое взаимодействие: API включает собственную сеть с пользовательскими пакетами, позволяющую модам обмениваться данными в направлениях от клиента к серверу и обратно через игровой сетевой протокол.
  • Утилиты: Включает различные интерфейсы, перечисления, типы исключений, утилиты ввода-вывода, работы с потоками и многое другое. Одна из таких утилит — система кэширования, позволяющая модам выполнять асинхронные операции для получения/загрузки ресурсов и их кэширования.

Простое введение в систему GUI

Система графического интерфейса позволяет создавать собственные меню более простым способом, обеспечивая при этом большую гибкость и возможности настройки. В ванильной системе GUI используются экраны Screen, а в этой API — так называемые TScreen.

Все компоненты GUI, включая TScreen и виджеты, находятся в пакете: io.github.thecsdev.tcdcommons.api.client.gui.

Ниже приведен пример реализации TScreen с простой кнопкой, которая выполняет действие при нажатии:

import io.github.thecsdev.tcdcommons.api.client.gui.screen.TScreen;
import io.github.thecsdev.tcdcommons.api.client.gui.widget.TButtonWidget;
import net.minecraft.text.Text;

public final class ExampleTScreen extends TScreen
{
    /
      super принимает аргумент Text для заголовка экрана
     /
    public ExampleTScreen() { super(Text.literal("Пример TScreen")); }

    /
      Здесь экран инициализирует свои элементы GUI.
      Мы добавим виджет кнопки здесь.
     /
    protected final @Override void init()
    {
        //создаем кнопку и центрируем ее на экране
        final var button = new TButtonWidget(
            (getWidth() / 2) - 50,  //позиция X кнопки. мы центрируем ее
            (getHeight() / 2) - 10, //позиция Y кнопки. мы центрируем ее
            100, //ширина кнопки
            20   //высота кнопки
        );

        //определяем текст для кнопки
        button.setText(Text.literal("Нажми меня"));

        //теперь сделаем что-то при нажатии на кнопку
        button.setOnClick(btn ->
        {
            //выводим простое сообщение в консоль
            //при нажатии на кнопку
            System.out.println("Привет, мир!");
        });

        //и наконец, добавляем кнопку на экран
        addChild(button);
    }
}

Теперь нам нужно открыть экран и показать его пользователю. Для этого используем MinecraftClient#setScreen(Screen) (в Fabric) и TScreen#getAsScreen() для получения ссылки на Screen. Итоговый код будет выглядеть так:

final var tscreen = new ExampleTScreen();
final var screen = tscreen.getAsScreen();
MinecraftClient.getInstance().setScreen(screen);

Простое введение в систему событий

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

import io.github.thecsdev.tcdcommons.api.event.TEvent;
import io.github.thecsdev.tcdcommons.api.event.TEventFactory;

public final class ExampleEvents
{
    /
      Вот как мы создаем пользовательское событие с помощью этого API.
      Обратите внимание, что эта система событий похожа на систему событий Architectury API,
      но с некоторыми доработками и дополнениями для большей гибкости.
     /
    public static final TEvent<Runnable> eSomething = TEventFactory.createLoop();

    public static final void registerAndUnregisterListener()
    {
        //сначала определяем слушатель, который будет вызываться при вызове события
        final Runnable listener = () -> { System.out.println("Событие было вызвано."); };

        //затем вот как мы можем его зарегистрировать
        eSomething.register(listener);

        //и вот как мы можем отменить регистрацию
        eSomething.unregister(listener);
    }

    public static final void invokeEvent()
    {
        //мы вызываем событие, получая "вызыватель",
        //и вызывая основную функцию функционального интерфейса
        //(в случае Runnable основная функция — run)
        eSomething.invoker().run();
    }
}

Участие в разработке

Я ценю вклад каждого в развитие этого мода, будь то перевод, отзывы или ценные предложения. Если вы хотите помочь, вот несколько способов принять участие:

  1. Если вы владеете несколькими языками, рассмотрите возможность помощи в переводе мода. Ваши усилия сделают мод доступным для более широкой аудитории.
  2. Ваши идеи и предложения бесценны! Не стесняйтесь делиться мыслями о том, как можно улучшить мод. Будь то сообщение об ошибке, запрос функции или идея улучшения — я буду рад получить обратную связь от сообщества.
  3. Если вы столкнулись с проблемами или у вас есть идеи для улучшений, создайте issue на странице репозитория этого API мода.
Участники проекта
TheCSDev

TheCSDev

Разработчик

Создан: 25 ноя 2022

ID: 219