GrzybcioRynek

Dodawanie funkcji

Rzeczywista kolejność warstw przy nowej funkcji rynku — model, YAML, GUI, komenda, Wiki.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

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.

Warning

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

  1. Plik Markdown w Wiki/content/... z frontmatter (title, description, keywords).
  2. Wpis href w Wiki/src/lib/navigation.ts.
  3. npm run index w Wiki/ (scripts/validate-docs.mjs — każdy href musi mieć plik).
Tip

Bez kroku 12 strona nie pojawi się w sidebarze, a npm run index padnie, jeśli href jest a pliku nie ma.