Меню контейнерів
ПЕРЕДУМОВИ
Вам слід спочатку прочитати про блоки-контейнери, щоб ознайомитися зі створенням блока-сутності-контейнера.
Під час відкриття контейнера, наприклад скрині, для показу його вмісту потрібні дві речі:
Screen, який обробляє рендер вмісту та тла на екрані.Menu, яке обробляє логіку натискання клавіш Shift і синхронізацію між сервером і клієнтом.
У цьому посібнику ми створимо скриню з ґрунту із контейнером 3x3, до якого можна отримати доступ, натиснувши ПКМ та відкривши екран.
Створення блока
По-перше, ми хочемо створити блок і блок-сутність; читайте більше в посібнику блоків-контейнерів.
java
No lines matched.1
java
No lines matched.1
Відкриття меню
Ми хочемо мати можливість якимось чином відкрити меню, тому ми впораємося з цим за допомогою методу useWithoutItem:
java
No lines matched.1
Реалізація MenuProvider
Щоб додати функціональність меню, тепер нам потрібно реалізувати MenuProvider в блоці-сутності:
java
No lines matched.1
Метод getDisplayName повертає назву блока, яку буде показано у верхній частині екрана.
Створення меню
createMenu хоче, щоб ми повернули меню, але ми ще не створили його для нашого блока. Для цього ми створимо клас DirtChestMenu, який розширює AbstractContainerMenu:
java
No lines matched.1
Клієнтський конструктор викликається на клієнті, коли сервер хоче, щоб він відкрив меню. Він створює порожній контейнер, який потім автоматично синхронізується з фактичним контейнером на сервері.
Серверний конструктор викликається на сервері, і оскільки він знає вміст контейнера, він може безпосередньо передати його як аргумент.
quickMoveStack обробляє предмети меню, натискання з утриманим Shift. Цей приклад повторює поведінку стандартних меню, таких як скрині та роздавачів.
Потім нам потрібно зареєструвати меню в новому класі ModMenuType:
java
No lines matched.1
Тепер ми можемо встановити значення, що повертається createMenu в блоці-сутності, щоб використовувати наше меню:
java
No lines matched.1
INFO
Метод createMenu викликається лише на сервері, тому ми викликаємо конструктор на стороні сервера та передаємо this (блок-сутність) як параметр контейнера.
Створення екрана
Щоб фактично показувати вміст контейнера на клієнті, нам також потрібно створити екран для нашого меню. Ми створимо новий клас, який розширює AbstractContainerScreen:
java
No lines matched.1
Для тла цього екрана ми просто використовуємо стандартну текстуру екрана роздавача, тому що наша скриня з ґрунту використовує той самий макет слотів. Ви також можете надати власну текстуру для CONTAINER_TEXTURE.
Оскільки це екран для меню, нам також потрібно зареєструвати його на клієнті за допомогою методу MenuScreens#register():
java
No lines matched.1
Після завантаження гри у вас має бути скриня з ґрунту, меню якої ви можете відкрити за допомогою ПКМ та зберігати там предмети.



