Dodawanie funkcji
Rzeczywista kolejność warstw przy nowej funkcji rynku — model, YAML, GUI, komenda, Wiki.
Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.
Nowa funkcja w 1.0.3 idzie przez te same warstwy co mailbox, alerty i oceny. Poniżej rzeczywista kolejność, nie życzeniowa.
1. Model w model/
Klasa danych (jak MailboxEntry, PriceAlert, SellerRating). Pola, które mają przeżyć restart, muszą dać się zserializować do YAML.
2. Persistencja
- Dane oferty / outbox / pending →
StorageManager+listings.yml(zapis sync). - Historia, mailbox, ulubione, alerty, oceny, TX →
ExtendedDataStore+market-data.yml(saveAsync, zapis atomowy).
Nie dokładaj trzeciego pliku bez powodu — reload ładuje tylko te dwa magazyny.
3. Klucz w config.yml + ConfigManager
Dodaj klucz i wczytaj go w ConfigManager.reload() z domyślną wartością. Flaga enabled ma naprawdę bramkować zachowanie (porównaj favorites.enabled vs stats.enabled, które jest ładowane i nigdy nie sprawdzane).
4. Komunikat w messages.* + MessageManager
Wszystkie teksty gracza są w config.yml pod messages. Osobnego messages.yml nie ma. ensureMessageDefaults() dopisuje brakujące klucze przy reloadzie — nowy klucz dodaj tam i w config.yml.
5. Serwis / menedżer
Logika biznesowa w managers/ (albo rozszerzenie MarketManager, jeśli mutujesz oferty / kasę). Mutacje ekonomii i ofert trzymaj pod globalLock i z dala od zarezerwowanych ID.
6. GUI w inventory/impl + przycisk
Nowa klasa *GUI extends InventoryGUI, otwarcie przez GUIManager.openGUI.
Pasek akcji przeglądarki (sloty 45–53) jest zahardkodowany w MarketBrowseGUI. Nowy przycisk na browse wymaga zmiany Javy, nie samego gui.yml.
Sloty listingów / confirm / kategorie — gui.yml + GuiConfigManager.
7. Komenda w MarketCommand
Dodaj case w onCommand oraz wpis w onTabComplete. Aliasy polskie trzymaj obok angielskich (wzorzec my/moje). /wystaw i /aukcje to osobne klasy — nie pakuj tam nowej logiki rynku.
8. Uprawnienie w plugin.yml — i faktyczny check
Wpis w plugin.yml nic nie daje, dopóki Java nie woła hasPermission. Dziś egzekwowane: market.use, market.sell, market.reload, market.admin. market.history, market.mailbox, market.alerts są w YAML (default: true) i nie są sprawdzane w Javie.
9. Opcjonalny event w api/event
Tylko jeśli inny plugin ma zareagować. Eventy 1.0.3 nie są Cancellable.
10. Opcjonalny PAPI w PlaceholderHook
Identifier ekspansji: grybciorynek. Cache odświeżany co 20 ticków. Nowy placeholder = nowy case w onRequest + wpis w PLACEHOLDERS.md.
11. Pokrycie MarketSelfTest
/market admin selftest (FakePlayer SellerBot/BuyerBot albo dwaj online gracze). Nowa ścieżka mutująca oferty/kasę powinna dostać asercję w MarketSelfTest.run.
12. Wiki + nawigacja + indeks
- Plik Markdown w
Wiki/content/...z frontmatter (title,description,keywords). - Wpis
hrefwWiki/src/lib/navigation.ts. npm run indexwWiki/(scripts/validate-docs.mjs— każdy href musi mieć plik).
Bez kroku 12 strona nie pojawi się w sidebarze, a npm run index padnie, jeśli href jest a pliku nie ma.