Зависимости
Примечание: "клиент" относится к установке модов в игру через лаунчер Minecraft, тогда как "сервер" означает установку модов на сервер, к которому подключаются через меню "сетевая игра".
- Fabric API
- >>>> Клиент: Обязателен начиная с
1.20.5
- >>>> Сервер: Обязателен начиная с
1.20.5
- >>>> Клиент: Обязателен начиная с
Цель
Основная задача этого API — ускорить и улучшить процесс разработки модов для Minecraft, устраняя необходимость повторного написания однотипного кода. Первоначально API создавался для реализации улучшенной системы графического интерфейса, но со временем оброс дополнительными функциями, включая события, хуки и утилиты.
Моды, использующие этот API
Основной пользователь API — TheCSDev, разрабатывающий мод Better Statistics Screen.
Возможности API
Клиентская часть
- Система GUI: Удобная система пользовательского интерфейса с расширенными возможностями кастомизации по сравнению с ванильной реализацией.
- Экраны HUD: Отрисовка элементов интерфейса поверх игрового HUD. Важно: эти элементы предназначены только для отображения и не поддерживают взаимодействие.
Общая часть
- Система автоматической конфигурации: Упрощает создание JSON-конфигов, автоматически сериализуя примитивные типы данных из классов конфигурации.
- Система событий: Позволяет отслеживать игровые события и создавать пользовательские события для взаимодействия между модами.
- Хуки: Обеспечивает доступ к различным компонентам игры.
- Сетевое взаимодействие: Реализация пользовательской сети на основе игрового протокола для обмена данными между клиентом и сервером.
- Утилиты: Набор вспомогательных инструментов, включая интерфейсы, перечисления, обработку исключений, IO-операции и систему кэширования для асинхронной загрузки ресурсов.
Базовое использование системы GUI
Система использует концепцию TScreen
вместо ванильных Screen
. Все компоненты GUI расположены в пакете io.github.thecsdev.tcdcommons.api.client.gui
.
public final class ExampleTScreen extends TScreen
{
public ExampleTScreen() { super(Text.literal("Пример TScreen")); }
@Override
protected void init()
{
TButtonWidget button = new TButtonWidget(
getWidth()/2 - 50,
getHeight()/2 - 10,
100, 20
);
button.setText(Text.literal("Нажми меня"));
button.setOnClick(btn -> System.out.println("Hello World!"));
addChild(button);
}
}
Открытие экрана:
MinecraftClient.getInstance().setScreen(new ExampleTScreen().getAsScreen());
Работа с системой событий
public final class ExampleEvents
{
public static final TEvent<Runnable> eSomething = TEventFactory.createLoop();
public static void registerAndUnregisterListener()
{
Runnable listener = () -> System.out.println("Событие вызвано");
eSomething.register(listener);
eSomething.unregister(listener);
}
public static void invokeEvent() { eSomething.invoker().run(); }
}
Вклад в разработку
- Переводы: помощь с локализацией на другие языки.
- Идеи и предложения: отчеты об ошибках, запросы функций, улучшения.
- Создание issue: для обсуждения проблем и новых возможностей.