- Поддерживаемые версии
- 1.16
- 1.17
- 1.18
- 1.19
Этот гайд посвящен работе с GUILib, для быстрого и удобного создания инвентарей.
Для начала добавим саму библиотеку в наш проект:
Gradle
Maven
Отлично, теперь можем приступать к разработке!
Для создания меню мы можем использовать новый класс вида Panel, либо же просто создать новый объект. Конкретно в этом гайде я буду использовать новый класс.
Обратите внимание что т.к Panel требует объект плагина, нам нужно передать его в конструкторе.
Далее перезапишем основные методы:
Метод getSize() должен возвращать размер меню.
Дальше метод getTitle(), он просто возвращает заголовок инвентаря.
Теперь самое интересное - метод setItems(), в нем нам нужно разложить все вещи в инвентарь.
Важно заметить что хоть мы и не создавали переменные player и inventory, и не определяли их, мы можем спокойно их использовать, т.к. на момент вызова этого метода им уже будут выданы значения,
Итак, например добавим голову игрока:
При помощи функции fillEmpty() мы можем заполнить все свободные слоты одним предметом.
Теперь когда мы добавили предметы, давайте добавим обработчик кликов.
Для этого создадим вот такой метод:
Обратите внимание на значение в скобках, оно позволяет нам указать на какие слоты должен реагировать метод.
Их можно указать несколько:
Или не указывать вообще, и тогда метод будет вызываться при любом клике:
Например я хочу выдать игроку его голову, когда он на нее нажимает:
Ну и как финальный штрих, мы можем добавить событие при закрытии меню:
Наше меню готово! Осталось только открыть его игроку:
Заметьте что нам нужно передать наш плагин как параметр в конструкторе.
Надеюсь что этот гайд смог помочь вам.
Если есть вопросы или предложения для новых фишек, буду рад выслушать в обсуждении.
Для начала добавим саму библиотеку в наш проект:
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
Например: 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);
Надеюсь что этот гайд смог помочь вам.
Если есть вопросы или предложения для новых фишек, буду рад выслушать в обсуждении.