GrzybcioRynek

StorageManager i ExtendedDataStore

listings.yml (sync) i market-data.yml (async, zapis atomowy) — oferty, outbox, historia.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

Dwa magazyny, dwa pliki. Oferty żyją w StorageManager. Historia, skrzynka, ulubione, alerty i oceny — w ExtendedDataStore.

StorageManager — listings.yml

Plik: plugins/GrzybcioRynek/listings.yml. Zapis synchroniczny (dataConfig.save).

Klucze YAML:

KluczZawartość
listingslista MarketListing
next-idnastępne ID (max z pliku i z ofert)
expiry-outbox.<id>journal zwrotów wygasłych (seller, item, price, reason)
pending-returns.<uuid>kolejka itemów gdy mailbox wyłączony / legacy
pending-sales.<uuid>powiadomienia o sprzedaży dla offline

API

MetodaDziałanie
createListing(...)nextId++, dodanie, save()
removeListing(int)usunięcie, save()
restoreListing(listing)przywrócenie po failu zakupu (to samo ID)
getListing / getAllListings / getListingsBySellerodczyt z pamięci
returnListingToSeller(listing, reason)ekwipunek albo mailbox
backupListings()kopia listings.yml.bak (REPLACE_EXISTING)
removeExpiredListings()pod globalLock, pomija zarezerwowane
processExpiryOutbox()dostarcza journal
addPendingSaleNotification / deliverPendingSaleNotificationspowiadomienia po UUID
deliverPendingReturnspending-returns per-item (save przed oddaniem)

addPendingReturnPublic jest używane, gdy mailbox.enabled: false i sprzedawca jest offline (MailboxService.deposit).

Expiry outbox

Żeby crash nie zgubił itemu: najpierw zapis expiry-outbox.<id>, potem usunięcie oferty w tym samym save(), potem processExpiryOutbox. Outbox czyści wpis przed dostarczeniem; przy online + miejscu w ekwipunku — expiry.returned, inaczej mailbox.

Timer: start + co 30 minut.

Błędy zapisu

text
Nie można utworzyć pliku listings.yml!
Nie można zapisać pliku listings.yml!
Nie udało się utworzyć backupu listings.yml: <msg>
Pominięto oferte #<id> - brak przedmiotu.
Nie udalo sie wczytac oferty ze starszego formatu: <msg>

ExtendedDataStore — market-data.yml

Plik: plugins/GrzybcioRynek/market-data.yml. Mutacje wołają saveAsync()runTaskAsynchronously → zsynchronizowane save().

Zapis atomowy: market-data.yml.tmpFiles.move(..., ATOMIC_MOVE), fallback zwykły move, na końcu bezpośredni data.save.

Sekcje YAML: favorites.<uuid>, mailbox.<uuid>, alerts.<uuid>, ratings, transactions.

API (wybrane)

MetodaDziałanie
toggleFavorite / removeFavoriteEverywhereulubione po ID oferty
addMailbox / takeMailboxEntry / restoreMailboxEntryskrzynka atomowo
addAlert / removeAlert / getAllAlertsalerty (limit price-alerts.max-per-player)
addRating / hasRated / getAverageRatingoceny 1–5
addTransaction / updateTransaction / getTransactionTX po string-ID
getCompletedTransactionstylko TransactionState.COMPLETED
getBuyerHistory / getSellerHistoryposortowane malejąco po czasie
getPriceHistory(material, nexoId, oraxenId)tożsamość: najpierw Nexo, potem Oraxen, potem material
pruneHistory()usuwa COMPLETED starsze niż history.retention-days (domyślnie 30)
flushAndSave()synchroniczny zapis (reload)
backup()market-data.yml.bak

MarketAPI.getCompletedTransactions() / getTransaction(String) czytają ten store.

Błędy zapisu

text
Nie można utworzyć market-data.yml
Nie można zapisać market-data.yml: <msg>
Nie udało się utworzyć backupu market-data.yml: <msg>
Pominięto transakcję: <msg>
Note

listings.yml jest kompatybilny ze starszym formatem Map. market-data.yml pojawił się w 1.0.3.