System GUI
InventoryGUI, GUIManager i ekrany rynku — co jest w gui.yml, a co zahardkodowane.
Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.
GUI to zwykłe inventory Bukkit. GUIManager mapuje otwarte Inventory → InventoryHandler. GUIListener przekazuje click / open / close.
Szkielet
GUIManager.openGUI(gui, player)
→ registerHandledInventory
→ player.openInventory
GUIListener.onOpen → InventoryGUI.decorate(player)
GUIListener.onClick → event.cancel + button consumer (tylko top inventory)
GUIListener.onClose → unregisterInventory
InventoryGUI:
createInventory()— rozmiar i tytuł;addButton(slot, InventoryButton)— creator ikony + consumer kliknięcia;onClickanuluje event; ignoruje klik w ekwipunku gracza.
InventoryButton ma creator(Player → ItemStack) i consumer(InventoryClickEvent).
Ekrany (inventory/impl)
| Klasa | Otwarcie |
|---|---|
MarketBrowseGUI | /market, /aukcje, search |
MarketCategoryGUI | przycisk Kategorie |
MarketDetailGUI | klik oferty w browse |
MarketConfirmGUI | Kup w detail |
MyListingsGUI | /market my |
FavoritesGUI | /market favorites |
HistoryGUI | /market history |
MailboxGUI | /market mailbox |
AlertsGUI | /market alerts |
StatsGUI | /market stats |
SellerProfileGUI | przycisk profilu w detail |
Tytuły i lore: messages.gui.* w config.yml (przez MessageManager). Layout slotów browse/confirm: gui.yml (GuiConfigManager).
Co jest w gui.yml
browse:
size: 54 # rzeczywisty rozmiar przeglądarki
border-slots: [...]
listing-slots: [10–16, 19–25, 28–34]
categories: # slot + material w MarketCategoryGUI
pagination: { previous: 39, page: 40, next: 41 }
filler: { enabled: true, material: BLACK_STAINED_GLASS_PANE }
confirm:
size: 27
slots: { confirm: 11, item: 13, cancel: 15 }
confirm-material / cancel-material
filler: ...settings.gui-rows: 6 jest ładowane (ConfigManager.guiRows) i nigdzie nie używane.
Zahardkodowany pasek browse
W MarketBrowseGUI sloty 45–53 są stałe w kodzie, nie w YAML:
| Slot | Przycisk |
|---|---|
| 45 | Szukaj (czat: ChatInputManager) |
| 46 | Sort (SortMode.next()) |
| 47 | Kategorie |
| 48 | Skrzynka |
| 49 | Statystyki |
| 50 | Alerty |
| 51 | Ulubione |
| 52 | Moje oferty |
| 53 | Historia |
Przesunięcie listing-slots na 45–53 nachodzi na pasek akcji. Pusty rynek przy złych slotach albo braku ofert / filtrze search — zobacz GUI.
Dane na ekranie
ListingQueryService.query(BrowseContext, viewer):
- wszystkie oferty z
StorageManager; - filtr kategorii (
MarketCategory.matches); - filtr sprzedawcy;
ItemSearchUtil.matches(material, display, lore, nexo/oraxen ID, nick,#id);- opcjonalnie tylko ulubione;
- sort
SortMode(domyślnieNEWEST).
Paginacja: listing-slots.length = itemy na stronę.
Kategorie
Enum MarketCategory: ALL, TOOLS, WEAPONS, ARMOR, BLOCKS, FOOD, FARMING, REDSTONE, DECORATIONS, POTIONS, ENCHANTED_BOOKS, OTHER.
Siekiery (*_AXE) są w WEAPONS, nie w TOOLS.
Czat zamiast Anvil
Wyszukiwanie z GUI, alerty, ocena i relist idą przez ChatInputManager + ChatInputListener. Przerwanie: cancel albo anuluj.