GrzybcioRynek

System GUI

InventoryGUI, GUIManager i ekrany rynku — co jest w gui.yml, a co zahardkodowane.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

GUI to zwykłe inventory Bukkit. GUIManager mapuje otwarte InventoryInventoryHandler. 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;
  • onClick anuluje event; ignoruje klik w ekwipunku gracza.

InventoryButton ma creator(Player → ItemStack) i consumer(InventoryClickEvent).

Ekrany (inventory/impl)

KlasaOtwarcie
MarketBrowseGUI/market, /aukcje, search
MarketCategoryGUIprzycisk Kategorie
MarketDetailGUIklik oferty w browse
MarketConfirmGUIKup w detail
MyListingsGUI/market my
FavoritesGUI/market favorites
HistoryGUI/market history
MailboxGUI/market mailbox
AlertsGUI/market alerts
StatsGUI/market stats
SellerProfileGUIprzycisk 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

yaml
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:

SlotPrzycisk
45Szukaj (czat: ChatInputManager)
46Sort (SortMode.next())
47Kategorie
48Skrzynka
49Statystyki
50Alerty
51Ulubione
52Moje oferty
53Historia
Warning

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):

  1. wszystkie oferty z StorageManager;
  2. filtr kategorii (MarketCategory.matches);
  3. filtr sprzedawcy;
  4. ItemSearchUtil.matches (material, display, lore, nexo/oraxen ID, nick, #id);
  5. opcjonalnie tylko ulubione;
  6. sort SortMode (domyślnie NEWEST).

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.