TCDCommons API
Активный0.0
Установок
Последнее обновление
Версии
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();
}
}
Участие в разработке
Я ценю вклад каждого в развитие этого мода, будь то перевод, отзывы или ценные предложения. Если вы хотите помочь, вот несколько способов принять участие:
- Если вы владеете несколькими языками, рассмотрите возможность помощи в переводе мода. Ваши усилия сделают мод доступным для более широкой аудитории.
- Ваши идеи и предложения бесценны! Не стесняйтесь делиться мыслями о том, как можно улучшить мод. Будь то сообщение об ошибке, запрос функции или идея улучшения — я буду рад получить обратную связь от сообщества.
- Если вы столкнулись с проблемами или у вас есть идеи для улучшений, создайте issue на странице репозитория этого API мода.