Skip to main content
Version: 2.1.0

AbstractGui

AbstractGui - базовий графічний інтерфейс з мінімальним функціоналом для тих, хто привик працювати зі звичайним Bukkit Inventory API

Усі наступні графічні інтерфейси наслідують AbstractGui

Приклад реалізації простого меню

TestAbstractGui
import com.jodexindustries.jguiwrapper.gui.AbstractGui;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.jetbrains.annotations.NotNull;

public class TestAbstractGui extends AbstractGui {

public TestAbstractGui() {
super("&cTest abstract gui");
Заголовок меню

Inventory inventory = holder().getInventory();
GuiHolder

for (int i = 0; i < 5; i++) {
ItemStack itemStack = new ItemStack(Material.DIAMOND);
ItemMeta itemMeta = itemStack.getItemMeta();

itemMeta.displayName(Component.text(i));
itemStack.setItemMeta(itemMeta);

inventory.setItem(i, itemStack);
}
}

@Override
public void onClick(@NotNull InventoryClickEvent e) {
// реакція на клік
HumanEntity player = e.getWhoClicked();

player.sendMessage("You just clicked!");
}
}
info

Перевизначити також можна методи: onOpen, onClose, onDrag

Відкриття меню для гравця

TestAbstractGui gui = new TestAbstractGui();

Конструктори

AbstractGui дає можливість одразу встановити базові параметри меню (заголовок, розмір, тип та серіалайзер) за допомогою вбудованих конструкторів див. JavaDocs

info
AbstractGui(int size, String title)
AbstractGui(int size, Component title)
AbstractGui(String title)
AbstractGui(Component title)
AbstractGui(InventoryType type, Component title)
AbstractGui(InventoryType type, Component title, SerializerType defaultSerializer)

Оновлення заголовку

Усі графічні інтерфейси підтримують оновлення заголовку без закриття меню за допомогою NMS

@Override
public void onClick(@NotNull InventoryClickEvent e) {
updateMenu(Component.text("New title"));
}
warning

Часто при оновлені меню, у якому відбувається взаємодія з предметами, варто оновлювати його вміст, щоб це зробити, використовуйте метод AbstractGui#updateMenu(HumanEntity, InventoryType, int, Component, boolean)

Аргумент refreshData повинен бути true задля оновлення положення предметів (особливо при зміні типу та розміру). Оновлення меню також потрібно здійснити після взаємодії з предметами (у випадку реакції на InventoryClickEvent), тобто через один тік:

runTask(() -> {
runTask це заміна звичайному
BukkitScheduler#runTask(Plugin, Runnable)
updateMenu(player, type(), size(), Component.text("New title"), true);
});