ImproperUI
Идеальное решение для тех, кому рендеринг в Minecraft кажется слишком сложным. Использует собственный скриптовый язык, сильно вдохновлённый Cascading Style Sheets, для создания полностью рабочих игровых GUI!
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 408 тыс.
- Подписчиков на Modrinth
- 64
- версий
- 17
- Обновлён
- 14 августа 202614 авг.
- Опубликован
- в 2024
Коротко о моде
Ставится только в игру; на сервер ставить не нужно
ImproperUI
Окончательное решение проблемы слишком сложного для изучения рендеринга в Minecraft.
Введение
В отличие от моего другого проекта, ClickCrystals Script, ImproperUI Script требует от вас предварительных знаний:
- Базовых свойств CSS и того, как они работают
- Базовой структуры HTML
- Java
Синтаксис ImproperUI во многом вдохновлён CSS (Cascading Style Sheets), хотя и не полностью идентичен ему.
Ниже — скриншот интерактивного экрана с перетаскиваемыми и прокручиваемыми элементами в качестве домашней страницы мода. Этот экран написан на ImproperUI Script:

Последние изменения
Version: 0.0.6-BETA
Added:
- added ConfigReader
- added ImproperUIAPI.getConfigReader()
Patches:
- fixed config integer args not parsing properlyДобавление ImproperUI в ваш проект
Чтобы добавить ImproperUI, скачайте его как jar и затем добавьте в gradle вручную. Я не хотел создавать онлайн-репозиторий и не хотел делать его отдельным модом. Womp Womp.
Здесь — пример того, как ImproperUI можно использовать в моде!
Шаг 1
Скачайте jar и добавьте его в файлы вашего проекта, а также в build.gradle как зависимость.
dependencies {
compileOnly files("libs/ImproperUI-theVersionYouWant.jar")
}Шаг 2
Добавьте скачанный jar как мод в папку mods! Вы должны использовать его как библиотеку!
Шаг 3 (Финальный шаг)
Инициализируйте API. В этом разделе вы вызываете функцию init() у ImproperUIAPI, затем указываете:
modIdВАШЕГО модаmain class mod initializerВАШЕГО мода- и наконец список путей к скриптам внутри папки
src/main/resources/ВАШЕГО мода. - по соглашению, вы должны создавать свои скрипты внутри папки
src/main/resources/assets/YOURMODID/improperui/
public class ImproperUI implements ModInitializer {
@Override
public void onInitialize() {
ImproperUIAPI.init("improperui", ImproperUI.class,
"assets/improperui/improperui/what.ui",
"assets/improperui/improperui/screen.ui"
);
}
}public class YourModInitializer implements ModInitializer {
@Override
public void onInitialize() {
ImproperUIAPI.init("yourModId", YourModInitializer.class,
"assets/yourModId/improperui/yourscreen1.ui",
"assets/yourModId/improperui/yourscreen2.ui"
);
}
}УЧТИТЕ, ЧТО КОГДА ВЫ РЕАЛЬНО ПОПЫТАЕТЕСЬ РАЗОБРАТЬ ИЛИ ЗАПУСТИТЬ СКРИПТЫ, ВЫ ССЫЛАЕТЕСЬ НА ИМЯ ФАЙЛА СКРИПТА, А НЕ НА ПУТЬ, УКАЗАННЫЙ ЗДЕСЬ!
События
Чтобы слушать события, объявленные в вашем скрипте, создайте новый класс, реализующий CallbackListener.
Создайте метод, который
- Имеет аннотацию
CallbackHandler - Имеет параметр, содержащий тип события, которое вы хотите слушать
- Имя метода должно совпадать с объявленным событием из вашего скрипта
public class CustomCallbacks implements CallbackListener {
@CallbackHandler
public void sendHelloWorld(MouseEvent e) {
if (e.input.isDown())
ChatUtils.sendMessage("Hello World");
}
}
В твоём скрипте событие должно выглядеть так:
element { on-click: sendHelloWorld }
И наконец, когда объявляешь экран `ImproperUIPanel`, зарегистрируй колбэк для своей панели:
```java
public void openScreen() {
ImproperUIPanel panel = new ImproperUIPanel();
panel.registerCallback(new CustomCallback());
// parse script and add children elements here
// panel.addChild()
MinecraftClient.getInstance().setScreen(panel);
}Если запускаешь скрипт, передай свой кастомный колбэк в аргументах создания:
public void openScreen() {
ImproperUIAPI.parseAndRunFile("yourModId", "testing.ui", new CustomCallback() /* and more... */);
}Вспомогательные методы
Helper Methods:
- ImproperUIPanel.collect() // a list of all elements and widgets, even their children
- ImproperUIPanel.collectOrdered() // a sorted list based on z-index, of all elements and widgets including their children
- ImproperUIPanel.collectById() // a list of elements with specified ID
- ImproperUIPanel.collectByClassAttribute() // a list of elements with specified class attribute
- ImproperUIPanel.collectById() // first element with specified ID
- ImproperUIPanel.collectByClassAttribute() // first element with specified class attribute
API:
- ImproperUIAPI.parse() // parses a script then returns all parsed result elements
- ImproperUIAPI.parseAndRunFile() // parses a registered script file NAME (NOT PATH) from init() and opens the screen with the elements
- ImproperUIAPI.parseAndRunScript() // parses a registered script from init() and opens the screen with the elements
- ImproperUIAPI.reload() // reloads the API
- ImproperUIAPI.reInit() // re-init the API with possibly a different Mod IDКлючи конфига
Ключ конфига состоит из трёх частей: modId, confileFile, propertyName. Они используются для сохранения значений конфигурации, скажем, для твоих слайдеров и чекбоксов.
Чтобы использовать ключ конфига в скрипте, просто напиши все три части БЕЗ ПРОБЕЛОВ И РАЗДЕЛЯЯ ДВОЕТОЧИЕМ (:). Затем используй эту строку как класс-атрибут для элемента:
slider #someId -yourModId:config.properties:testing-slider-value -someAnotherAttributeClass {
}Так создаётся слайдер, который задаёт и сохраняет значения в конфиг.
Теги
| Тег элемента | Динамические hover, select, focus | Поддержка дочерних элементов | Поддержка конфига | Псевдонимы | Особые свойства: type |
|---|---|---|---|---|---|
| element | ✅ | ✅ | ✅ | e, div | |
| checkbox | ✅ | ❌ | ✅ | active:boolean | |
| radio | ✅ | ❌ | ✅ | active:boolean | |
| button | ✅ | ❌ | ❌ | ||
| link | ✅ | ❌ | ❌ | a | href:string |
| slider | ❌ | ❌ | ✅ | min:double max:double value:double range:double,double decimal-places:integer | |
| input | ❌ | ❌ | ✅ | textbox | pattern:quote placeholder:quote |
| textfield | ❌ | ❌ | ✅ | textarea | |
| label | ✅ | ❌ | ❌ | textlabel | |
| header1 | ✅ | ❌ | ❌ | h1 | |
| header2 | ✅ | ❌ | ❌ | h2 | |
| header3 | ✅ | ❌ | ❌ | h3 | |
| header4 | ✅ | ❌ | ❌ | h4 | |
| header5 | ✅ | ❌ | ❌ | h5 | |
| header6 | ✅ | ❌ | ❌ | h6 | |
| positionable | ✅ | ✅ | ✅ |
Этот проект никогда не бывает завершён
Так что присылайте свои идеи через pull request! Поставьте звезду, чтобы получать последние интересные обновления/pull request!
Понравился главный экран? Это его скрипт!
div #background-gradient {
size: 100%
margin-top: 100%
shadow-distance: 50%
shadow-color: #9775a6
}
div #display {
size: 420 240
center: both
border-radius: 10
border-thickness: 1
border-color: #412752
background-color: #2d162c
shadow-distance: 5
shadow-color: #683a68
child-align: grid
grid-columns: 1
div #title {
inner-text: "ImproperUI Interactives"
size: 100% 10
text-align: center
text-scale: 1.69
text-color: #9775a6
background-color: none
margin-top: 15
}
div #motto {
inner-text: "We got CSS in Minecraft before GTA 6"
size: 100% 10
text-align: center
text-scale: 0.8
background-color: none
margin-top: 10
}
div #motto {
inner-text: "The Ultimate Solution To Minecraft Rendering Being Too Difficult"
size: 100% 10
text-align: center
text-scale: 0.8
background-color: none
margin-bottom: 10
}
div #navbar {
size: 100% 15
margin-top: 10
background-color: none
child-align: grid
grid-columns: 100
button #discord {
inner-text: "Discord"
background-color: #9775a6
border-radius: 0
margin: 0
width: 20%
padding-left: 0
padding-right: 0
on-click: openDiscord
hovered => { padding: 3; border-thickness: 0; border-radius: 2; shadow-distance: 2; }
}
button #github {
inner-text: "GitHub"
background-color: #9775a6
border-radius: 0
margin: 0
width: 20%
padding-left: 0
padding-right: 0
on-click: openGithub
hovered => { padding: 3; border-thickness: 0; border-radius: 2; shadow-distance: 2; }
}
button #modrinth {
inner-text: "Modrinth"
background-color: #9775a6
border-radius: 0
margin: 0
width: 20%
padding-left: 0
padding-right: 0
on-click: openModrinth
hovered => { padding: 3; border-thickness: 0; border-radius: 2; shadow-distance: 2; }
}
button #wiki {
inner-text: "Wiki"
background-color: #9775a6
border-radius: 0
margin: 0
width: 20%
padding-left: 0
padding-right: 0
on-click: openWiki
hovered => { padding: 3; border-thickness: 0; border-radius: 2; shadow-distance: 2; }
}
button #wiki {
inner-text: "Example"
background-color: #9775a6
border-radius: 0
margin: 0
width: 20%
padding-left: 0
padding-right: 0
on-click: openExampleScreen
hovered => { padding: 3; border-thickness: 0; border-radius: 2; shadow-distance: 2; }
}
}
div #mini-world {
size: 100% 140
background-color: none
child-align: grid
grid-columns: 21
scrollable: true
background-clip: padding
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/oak_leaves.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } div #greenshade { size: 100%; background-color: green; opacity: 0.5; click-through: true; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_log.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/stone.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/oak_log.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/ice.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
div #block { background-image: textures/block/grass_block_side.png; size: 20; draggable: true; hovered => { border-thickness: 1; border-color: white; } }
}
}
Частые вопросы
Как установить ImproperUI?
Установите Fabric под свою версию Minecraft, скачайте ImproperUI под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть ImproperUI?
У ImproperUI есть сборки для Minecraft 1.20–1.20.4, 1.20.6–1.21, 1.21.6–1.21.8, 1.21.11–26.2.
Нужен ли ImproperUI на сервере?
Ставится только в игру; на сервер ставить не нужно