Перейти к основному содержимому
Версия: 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!");
}
}
к сведению

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

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

TestAbstractGui gui = new TestAbstractGui();

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

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

к сведению
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"));
}
внимание

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

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

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