Architektura pluginu
Jak MarketPlace 1.0.3 składa hooki, magazyn, menedżery i GUI — bez warstwy HTTP.
Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.
Jedyna działająca logika rynku jest w pluginie Paper. Klasa startowa: com.example.marketplace.MarketPlace. Strona WWW nie wchodzi w ten łańcuch.
Start (onEnable)
isSupportedServerVersion()— tylko token 26.2 (PaperServerBuildInfo, potemBukkitVersion/MinecraftVersion/getVersion()). Inna wersja: logGrzybcioRynek działa TYLKO na Paper 26.2!idisablePlugin.ConfigurationSerialization.registerClass(MarketListing.class).ConfigManager,GuiConfigManager,MessageManager.VaultHook. Jeśli Economy niegotowa — retry za 20 ticków (1 s). Drugi fail:Vault nie znaleziono lub brak providera ekonomii! Wyłączanie pluginu.finishEnable().
finishEnable() kolejność:
NexoHook → OraxenHook → CustomItemsHook
ExtendedDataStore → StorageManager
backupListings() + extendedDataStore.backup()
AntiAbuseManager → MailboxService → AlertService
StatsManager → ListingQueryService → ChatInputManager
MarketManager → GUIManager
MarketAPI.init(this)
komendy + listenerzy + opcjonalny PlaceholderHook
removeExpiredListings() + processExpiryOutbox()
timer co 30 minut (20L * 60 * 30)
onDisable: synchroniczny storageManager.save() i extendedDataStore.save().
Graf zależności
MarketPlace
├── ConfigManager / GuiConfigManager / MessageManager
├── VaultHook
├── NexoHook / OraxenHook / CustomItemsHook
├── ExtendedDataStore market-data.yml
├── StorageManager listings.yml
├── AntiAbuseManager
├── MailboxService / AlertService
├── StatsManager / ListingQueryService
├── ChatInputManager
├── MarketManager
├── GUIManager
└── MarketAPI
Komendy: MarketCommand (/market, aliasy ah, rynek), WystawCommand (/wystaw), AukcjeCommand (/aukcje, aliasy rynek-gui, ah-gui). Listenerzy: GUIListener, PlayerJoinListener, ChatInputListener.
Warstwy
| Warstwa | Klasy | Odpowiedzialność |
|---|---|---|
| Wejście | MarketCommand, WystawCommand, AukcjeCommand, GUI | komendy i kliknięcia |
| Rynek | MarketManager | wystawianie, zakup, usuwanie, refund, rezerwacje |
| Zapytania | ListingQueryService + ItemSearchUtil | filtr, sort, kategoria |
| Oferty | StorageManager | listings.yml, expiry outbox, pending queues |
| Dane rozszerzone | ExtendedDataStore | historia, mailbox, ulubione, alerty, oceny |
| Ekonomia | VaultHook | saldo, withdraw, deposit po UUID, depositAccount |
| Custom itemy | CustomItemsHook | klon stacka; rebuild tylko gdy AIR |
| GUI | InventoryGUI + impl/* | ekrany rynku |
Transakcja zakupu (skrót)
MarketManager.buyItem trzyma reservedListings i globalLock. Stany: CREATED → LISTING_RESERVED → MONEY_WITHDRAWN → SELLER_PAID → ITEM_DELIVERED → COMPLETED. Błąd: FAILED albo rollback do ROLLED_BACK. Szczegóły: MarketManager.
Dane na dysku
plugins/GrzybcioRynek/
├── config.yml
├── gui.yml
├── listings.yml
├── listings.yml.bak
├── market-data.yml
└── market-data.yml.bak
Komunikaty są w config.yml pod messages.*. Osobnego messages.yml nie ma.
Poza pluginem
| Część | Rola |
|---|---|
Strona/ | Next.js 16, mock 0.1.0 — brak połączenia z pluginem |
Wiki/ | dokumentacja |
HTTP API i webhooki nie istnieją. To 🚧 Planned — zobacz Planowane HTTP API.