Иконка ресурса

Руководство Удобное создание меню с GUILib

Поддерживаемые версии
  1. 1.16
  2. 1.17
  3. 1.18
  4. 1.19
Этот гайд посвящен работе с GUILib, для быстрого и удобного создания инвентарей.

Для начала добавим саму библиотеку в наш проект:

Gradle
PHP:
repositories {
  maven { url 'https://jitpack.io' }
}

dependencies {
  implementation 'com.github.devoirr:GUILib:1.0.2'
}

Maven
XML:
<repository>
  <id>jitpack.io</id>
  <url>https://jitpack.io</url>
</repository>

<dependency>
  <groupId>com.github.devoirr</groupId>
  <artifactId>GUILib</artifactId>
  <version>1.0.2</version>
</dependency>

Отлично, теперь можем приступать к разработке!
Для создания меню мы можем использовать новый класс вида Panel, либо же просто создать новый объект. Конкретно в этом гайде я буду использовать новый класс.

Java:
public class ExampleMenu extends Panel {

    public ExampleMenu(JavaPlugin plugin) {
        super(plugin);
    }

}

Обратите внимание что т.к Panel требует объект плагина, нам нужно передать его в конструкторе.

Далее перезапишем основные методы:
Java:
public class ExamplePanel extends Panel {

    public ExamplePanel(JavaPlugin plugin) {
        super(plugin);
    }

    @Override
    public String getTitle() {
        return "Тестовое меню";
    }

    @Override
    public int getSize() {
        return 9;
    }

    @Override
    public void setItems() {

    }
}

Метод getSize() должен возвращать размер меню.
Чтобы вычислить размер меню вам нужно умножить количество строк на 9.
Например: 6 строк - 54, 3 строки - 27

Дальше метод getTitle(), он просто возвращает заголовок инвентаря.
Java:
@Override
public String getTitle() {
    return "Тестовое меню"
}


Теперь самое интересное - метод setItems(), в нем нам нужно разложить все вещи в инвентарь.
Важно заметить что хоть мы и не создавали переменные player и inventory, и не определяли их, мы можем спокойно их использовать, т.к. на момент вызова этого метода им уже будут выданы значения,

Итак, например добавим голову игрока:
Java:
@Override
public void setItems() {

    ItemStack stack = new ItemStack(Material.PLAYER_HEAD);
    SkullMeta meta = (SkullMeta) stack.getItemMeta();

    meta.setOwningPlayer(player);
    meta.setDisplayName("Твоя голова");

    stack.setItemMeta(meta);
    inventory.setItem(4, stack);

    fillEmpty(new ItemStack(Material.BLACK_STAINED_GLASS_PANE));

}

При помощи функции fillEmpty() мы можем заполнить все свободные слоты одним предметом.

Теперь когда мы добавили предметы, давайте добавим обработчик кликов.
Для этого создадим вот такой метод:
Java:
@Click(slots = 4)
public void click(InventoryClickEvent event) {
 
}

Обратите внимание на значение в скобках, оно позволяет нам указать на какие слоты должен реагировать метод.
Их можно указать несколько:
Java:
@Click(slots = {1,2,3})
Или не указывать вообще, и тогда метод будет вызываться при любом клике:
Java:
@Click()

Например я хочу выдать игроку его голову, когда он на нее нажимает:
Java:
@Click(slots = 4)
public void onHeadClick(InventoryClickEvent event) {
    player.getInventory().addItem(event.getCurrentItem());
}

Ну и как финальный штрих, мы можем добавить событие при закрытии меню:
Java:
@Close
public void onClose(InventoryCloseEvent event) {
    player.sendMessage("Вы закрыли меню.");
}

Наше меню готово! Осталось только открыть его игроку:
Java:
Player player = ...
new ExampleMenu(plugin).open(player);
Заметьте что нам нужно передать наш плагин как параметр в конструкторе.

Надеюсь что этот гайд смог помочь вам.
Если есть вопросы или предложения для новых фишек, буду рад выслушать в обсуждении.
  • Мне нравится (+1)
Реакции: Ght и Circuless
Автор
ItsKekich
Просмотры
1,256
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Поделиться ресурсом

Последние рецензии

GUILib прост и удобен в использовании. Инструкция по подключению описана понятно и правильно. Рекомендую!
В дополнение скажу, разработчик GUILib довольно оперативно делает обновления. По его словам, было потрачено меньше 30 минут и уже на данный момент доступна 1.0.2! Уже есть описание нововведений. Весьма продуктивно!
Назад
Сверху Снизу