Открытие окна
Прежде всего вам нужно открыть окно с поддержкой ImGui, для этого вы можете использовать:
Minecraft.getInstance().setScreen(ImGuiScreen(gui))
Контекст ImGui
Переменная gui
- интерфейс Renderable. Например:
val gui: Renderable = {
// Тут вы можете вызывать любые методы из ImGui
}
Возможности ImGui
Все методы вы можете найти в классе Graphics и ImGui. Тут есть не более 10% от всех виджетов, поскольку их очень много. Когда-нибудь у меня дойдут руки рассказать обо всех них и принципе работы с курсором...
Виджеты
Следущий элемент на той же строке
Функция: sameline() Описание: Указывает что следующий виджет будет располог аться на той же строке.
Переход на новую строку
Функция: newLine() Описание: Указывает что следующий виджет будет распологаться на следующей строке.
Центрированное окно
Функция: centredWindow(name: String, args: Int, codeBlock: Graphics.() -> ) Описание: Создаёт новое окно по центру экрана. Параметры:
- name: String - Название окна.
- args: Int - Параметры окна. (см. ImGuiWindowFlags)
- codeBlock: Graphics.() -> Unit - функция с контекстом Graphics, содержимое окна. Пример:
centredWindow("Окно 1", 0) {
// Тут содержимое окна
}
Окно
Функция: window(name: String, args: Int, codeBlock: Graphics.() -> ) Описание: Создаёт новое окно. Параметры:
- name: String - Название окна.
- args: Int - Параметры окна. (см. ImGuiWindowFlags)
- codeBlock: Graphics.() -> Unit - функция с контекстом Graphics, содержимое окна. Пример:
window("Окно 1", 0) {
// Тут содержимое окна
}
Центрирование окна
Функция: centerWindow() Описание: Располагает открытое окно по центру экрана.
Дочерний элемент
Функция: child(name: String, width: Float, height: Float, codeBlock: Graphics.() -> Unit) Описание: Создаёт новый дочерний элемент. (Грубо говоря окно внутри окна) Параметры:
- name: String - Название элемента.
- width: Float - Ширина окна.
- height: Float - Высота окна.
- codeBlock: Graphics.() -> Unit - функция с контекстом Graphics, содержимое элемента. Пример:
child("Окно 1", 100, 100) {
// Тут содержимое дочернего элемента
}
Маркированный текст
Функция: bulletText(text: String) Описание: Создаёт маркированный текст. (С точкой слева) Параметры: Сам текст в качестве строки.
Кнопка
Функции:
button(name: String, codeBlock: Graphics.() -> Unit) // Автоматические размеры
button(name: String, width: Float, height: Float, codeBlock: Graphics.() -> Unit) // С размерами
Описание: обычная кнопка, выполняет код при нажатии. Пример:
button("Привет") {
// Тут действие при нажатии
}
Картинка
Функция: image(texture: ResourceLocation, width: Float, height: Float) Описание: Добавляет указанную картинку с заданными размерами. Параметры:
- texture: ResourceLocation - сама текстура, например:
"minecraft:textures/block/dirt.png".rl
- width: Float - Ширина картинки.
- height: Float - Высота картинки.
Кнопка с картинкой
Функция: imageButton(texture: ResourceLocation, width: Float, height: Float, codeBlock: Graphics.() -> Unit) Описание: Добавляет кнопку с указанной текстурой с заданными размерами. Параметры:
- texture: ResourceLocation - сама текстура, например:
"minecraft:textures/block/dirt.png".rl
- width: Float - Ширина картинки.
- height: Float - Высота картинки.
- codeBlock: Graphics.() -> Unit - функция с контекстом Graphics, действие при нажатии.
Переключатель
Функция: checkBox(name: String, isActive: Boolean, codeBlock: Graphics.() -> Unit) Описание: Простой переключатель из состояний вкл/выкл. Пример:
var status = false // Все переменные должны быть за пределами контекста ImGui
val gui: Renderable = {
checkBox("Включить что-то?", status) {
status = !status // Изменяем переменную
}
}
Виджет "Загрузка"
Функция: progressBar(progress: Float)
Описание: Показывает прогресс загрузки по переданному параметру (от 0f
до 1f
)
Контекст OpenGL
Функция: glCanvas( width: Float, height: Float, border: Boolean = false, red: Float = 1f, green: Float = 1f, blue: Float = 1f, alpha: Float = 1f, alwaysOnTop: Boolean, enableScissor: Boolean = true, isNodeEditor: Boolean = false, renderable: (cursor: ImVec2, isHovered: Boolean) -> Unit, ): Boolean Описание: С её помощью вы можете зарендерить что-то используя OpenGL (обычно это что-то из самой игры, вроде блоков, предметов и т.п.)
Моб
Функция: entity( entity: LivingEntity, // Сущность width: Float, // Ширина height: Float, // Высота offsetX: Float = 0f, // Смещение моба по x offsetY: Float = 0f, // Смещение моба по y scale: Float = 1f, // Размер моба border: Boolean = false, // Включить ли рамку у виджета rotation: Boolean = true, // Должен ли моб поворачиваться вслед за курсором red: Float = 1f, // Дополнительный цвет виджета green: Float = 1f, // Дополнительный цвет виджета blue: Float = 1f, // Дополнительный цвет виджета alpha: Float = 1f, // Дополнительный цвет виджета ) Описание: Рендерит моба в контексте ImGui
Предмет
Функция: item( item: ItemStack, // Предмет width: Float, // Ширина виджета height: Float, // Высота виджета ) Описание: Рендерит предмет в контексте ImGui
Текст
Функции:
text(text: String, alpha: Float = 1f, shadow: Boolean = true) // Для обычного текста
text(text: Component, alpha: Float = 1f, shadow: Boolean = true) // Для текстовых компонентов игры
Описание: Рендерит текст с поддержкой всех возможностей текстовых компонентов (переводимый текст, цвета, подчёркивание и перечёркивание текста, скрытый текст, действия при клике или наведении курсора на предмет, всё из обычных компонентах) Параметры:- text - Текст, который будет показан
- alpha - Прозрачность текста от 0 до 1
- shadow - Рисовать ли тень от текста