HtmlCraft API
HTML/CSS-движок рендеринга, который предоставляет возможности построения веб-интерфейсов для GUI Minecraft.
- Загрузчики
- FabricForge
- Скачиваний на Modrinth
- 211
- Подписчиков на Modrinth
- 2
- версии
- 4
- Обновлён
- 14 августа 202614 авг.
- Опубликован
- в 2026
Коротко о моде
Ставится только в игру; на сервер ставить не нужно
HtmlCraft API
Движок рендеринга HTML/CSS GUI для Minecraft 1.20.1 Forge
Введение
HtmlCraft API — это лёгкий движок рендеринга HTML/CSS, который привносит технологии веб-фронтенда в разработку GUI для Minecraft. Вместо изучения сложного Minecraft GUI API (
GuiGraphics,Widget,AbstractContainerScreenи т.д.) разработчики могут создавать красивые игровые интерфейсы, просто написав HTML + CSS.Возможности
Возможность Описание Парсинг HTML Распространённые HTML-теги, атрибуты, вложенные структуры, HTML-сущности (именованные/десятичные/шестнадцатеричные) Стилизация CSS Селекторы классов, селекторы ID, селекторы тегов, инлайн-стили Движок компоновки Блочная компоновка, Flexbox, CSS Grid Визуальные эффекты Линейные градиенты, скругление углов, имитация теней, прозрачность Взаимодействие События клика по кнопкам, прокрутка колёсиком мыши, проверка попадания Шаблонизатор Подстановка {{переменная}}, контекст привязки данныхПотокобезопасность ConcurrentHashMap, CopyOnWriteArrayList Требования
Зависимость Версия Minecraft 1.20.1 Forge 47.x Java 17 Установка
Как зависимость мода
Поместите
htmlcraftapi-1.0.0-1.20.1forge.jarв папкуmods.Как зависимость для разработки
Добавьте в ваш
build.gradle:dependencies { implementation files('libs/htmlcraftapi-1.0.0-1.20.1forge.jar') }Быстрый старт
1. Создание экрана через Builder
import com.htmlcraft.api.HtmlRendererAPI; import com.htmlcraft.api.binding.DataContext; import com.htmlcraft.api.screen.HtmlScreen; import net.minecraft.network.chat.Component;
DataContext data = new DataContext(); data.set("title", "My Interface"); data.set("content", "Hello, Minecraft!");
{{title}}
" + "{{content}}
" + " " + "Minecraft.getInstance().setScreen(screen);
### 2. Наследование HtmlScreen для кастомных экранов
```java
public class MyScreen extends HtmlScreen {
public MyScreen() {
super(Component.literal("My Screen"));
}
@Override
protected String getHtml() {
return "<div class='root'>Custom content</div>";
}
@Override
protected String getCss() {
return ".root { padding: 16px; background: #2d2d44; }";
}
}Основной API
HtmlRendererAPI
Единая точка входа, предоставляющая паттерн Builder для создания HTML-экранов.
| Метод | Описание |
|---|---|
createScreen(Component title) | Создать builder экрана |
HtmlRendererAPI.Builder
Цепочный builder для настройки HTML, CSS, данных и событий.
| Метод | Описание |
|---|---|
html(String html) | Задать HTML-содержимое |
css(String css) | Задать таблицу стилей CSS |
data(DataContext context) | Задать контекст данных шаблона |
| `onClick(Consumer handler)` | Задать обработчик события клика |
build() | Собрать экземпляр HtmlScreen |
HtmlScreen
Абстрактный базовый класс экрана HTML-рендеринга, наследует Minecraft Screen.
| Метод | Описание |
|---|---|
getHtml() | Абстрактный метод, подкласс предоставляет HTML-содержимое |
getCss() | Переопределите для предоставления стилей CSS |
| `setClickHandler(Consumer)` | Задать обработчик события клика |
setPreferredSize(int w, int h) | Задать размер области содержимого (центрированная компоновка) |
rebuild() | Пересобрать конвейер рендеринга (обновление после изменения данных) |
getRootLayout() | Получить корневой узел компоновки |
getPipeline() | Получить конвейер рендеринга |
HtmlScreen.ClickEvent
Событие клика, содержащее кликнутый элемент и координаты.
| Метод | Описание |
|---|---|
element() | Кликнутый DOM-элемент |
button() | Кнопка мыши (0=левая, 1=правая, 2=средняя) |
x() / y() | Координаты клика |
DataContext
Контекст переменных шаблона, потокобезопасный.
| Метод | Описание |
|---|---|
set(String key, Object value) | Задать переменную |
get(String key) | Получить переменную |
getString(String key) | Получить строковое значение |
has(String key) | Проверить существование переменной |
clear() | Очистить все переменные |
HtmlElement
Узел DOM-элемента.
| Метод | Описание |
|---|---|
tagName() | Получить имя тега |
getId() | Получить атрибут id |
hasClass(String) | Проверить наличие класса |
getAttribute(String) | Получить значение атрибута |
children() | Получить дочерние узлы |
Поддерживаемые свойства CSS
Компоновка
| Свойство | Значения |
|---|---|
display | block / flex / inline / grid / none |
flex-direction | row / column |
justify-content | flex-start / center / flex-end / space-between / space-around |
align-items | flex-start / center / flex-end / stretch |
gap | Значение в пикселях |
grid-template-columns | repeat(N, 1fr) |
Блочная модель
| Свойство | Описание |
|---|---|
width / height | Значение в пикселях, auto |
padding | Значение в пикселях |
margin | Значение в пикселях |
border-width | Значение в пикселях |
Визуальные эффекты
| Свойство | Значения |
|---|---|
background | #RRGGBB / #AARRGGBB / #RRGGBBAA |
background (градиент) | linear-gradient(to bottom, #color1, #color2) |
color | Цвет текста |
border-color | Цвет границы |
border-radius | Радиус скругления углов в пикселях |
box-shadow | offsetX offsetY blur spread #color |
opacity | 0.0 - 1.0 |
Текст
| Свойство | Значения |
|---|---|
font-size | Значение в пикселях |
text-align | left / center / right |
Позиционирование и переполнение
| Свойство | Значения |
|---|---|
position | static / relative / absolute / fixed |
overflow-x / overflow-y | visible / hidden / scroll / auto |
z-index | Целое число |
Шаблонизатор
Используйте плейсхолдеры {{variable}} в HTML. Они заменяются методом TemplateEngine.render() значениями из DataContext во время init().
DataContext data = new DataContext();
data.set("player_name", "Steve");
data.set("level", 30);
// HTML template
String html = "<div>Player: {{player_name}} | Level: {{level}}</div>";Специальные символы автоматически экранируются в HTML-сущности для предотвращения инъекций.
Конвейер рендеринга
HTML String
↓
HtmlParser (parse to DOM tree)
↓
StyleSheet + CssParser (load CSS rules)
↓
StyleCalculator (compute final styles per element)
↓
LayoutEngine (perform layout, generate LayoutNode tree)
↓
RenderPipeline (generate and execute render commands)
↓
GuiGraphics (draw to Minecraft screen)Структура пакетов
com.htmlcraft.api
├── HtmlCraftAPI.java // Mod main class
├── HtmlRendererAPI.java // Public entry point + Builder
├── core/
│ ├── HtmlDocument.java // HTML document
│ ├── HtmlElement.java // DOM element node
│ ├── HtmlNode.java // DOM node interface
│ └── HtmlText.java // DOM text node
├── parser/
│ ├── HtmlParser.java // HTML parser
│ └── CssParser.java // CSS parser
├── style/
│ ├── StyleSheet.java // CSS stylesheet
│ ├── StyleCalculator.java // Style calculator
│ └── ComputedStyle.java // Computed style
├── layout/
│ ├── LayoutEngine.java // Layout engine
│ └── LayoutNode.java // Layout node
├── render/
│ ├── RenderPipeline.java // Render pipeline
│ ├── RenderContext.java // Render context
│ ├── RenderCommand.java // Render command interface
│ └── commands/ // Concrete render commands
│ ├── FillRectCommand.java
│ ├── DrawTextCommand.java
│ ├── DrawBorderCommand.java
│ └── BlitTextureCommand.java
├── binding/
│ ├── DataContext.java // Data binding context
│ └── TemplateEngine.java // Template engine
└── screen/
└── HtmlScreen.java // HTML rendering screen base classСобытия клика
Кликабельные элементы включают:
- Теги `
- Теги ``
- Любой элемент с атрибутом
idКлики вызывают колбэкClickEvent. Используйтеevent.element().getId(), чтобы определить, по какому элементу кликнули.
Поддержка прокрутки
Элементы с overflow-y: scroll или overflow-y: auto автоматически реагируют на прокрутку колёсиком мыши. Каждый шаг прокрутки сдвигает на 20 пикселей.
Лицензия
LGPL-2.1
Автор
Yifei
Частые вопросы
Как установить HtmlCraft API?
Установите Fabric под свою версию Minecraft, скачайте HtmlCraft API под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть HtmlCraft API?
У HtmlCraft API есть сборки для Minecraft 1.20.1, 26.1.2–26.2.
Нужен ли HtmlCraft API на сервере?
Ставится только в игру; на сервер ставить не нужно