AbstractGui
AbstractGui - базовий графічний інтерфейс з мінімальним функціоналом для тих, хто привик працювати зі звичайним Bukkit Inventory API
Усі наступні графічні інтерфейси наслідують AbstractGui
Приклад реалізації простого меню
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();
gui.open(player);
Gui#open(HumanEntity player)
Конструктори
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(HumanEntity, InventoryType, int, Component, boolean)
Аргумент refreshData повинен бути true
задля оновлення положення предметів (особливо при зміні типу та розміру).
Оновлення меню також потрібно здійснити після взаємодії з предметами (у випадку реакції на InventoryClickEvent), тобто через один тік:
runTask(() -> {
runTask це заміна звичайному
BukkitScheduler#runTask(Plugin, Runnable) updateMenu(player, type(), size(), Component.text("New title"), true);
});