listings.yml
Runtime YAML ofert — listings, next-id, expiry-outbox, pending-returns, pending-sales.
Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.
Plik: plugins/GrzybcioRynek/listings.yml. Klasa: StorageManager. Tworzony przy pierwszym starcie. Nie edytuj przy włączonym pluginie — save() nadpisze plik.
Backup: listings.yml.bak przy enable/reload (backupListings, REPLACE_EXISTING).
Główne klucze
listings:
- id: 1
seller: "069a79f4-44e9-4726-a5be-fca90e38aaf5"
sellerName: Gracz
item: {==: org.bukkit.inventory.ItemStack, type: DIAMOND_SWORD, amount: 1}
price: 1500.0
timestamp: 1730000000000
nexoId: custom_sword # opcjonalne
oraxenId: steel_blade # opcjonalne
next-id: 2| Klucz | Typ | Rola |
|---|---|---|
listings | lista map (MarketListing serializable) | Aktywne oferty |
next-id | int | Następne ID; przy load max(plik, maxId+1) |
expiry-outbox.<id> | sekcja | Dziennik zwrotów wygasłych |
pending-returns.<uuid> | lista itemów | Offline zwroty gdy skrzynka wyłączona |
pending-sales.<uuid> | lista | Powiadomienia sprzedaży dla offline sprzedawcy |
pending-sales.by-name.<nick> | legacy | Czyszczone przy joinie |
Pola oferty
| Pole | Wymagane | Opis |
|---|---|---|
id | tak | Unikalny int |
seller | tak | UUID string |
sellerName | nie | Fallback "Nieznany" |
item | tak | Bukkit ItemStack; AIR / amount≤0 = oferta odrzucona przy parse |
price | tak | double |
timestamp | tak | epoch ms — baza listing-expiry-days |
nexoId / oraxenId | nie | ID packa; brak = vanilla / sam stack |
expiry-outbox
Zapis przed usunięciem oferty z listy (crash-safe):
expiry-outbox:
"42":
seller: "069a79f4-44e9-4726-a5be-fca90e38aaf5"
item: {==: org.bukkit.inventory.ItemStack, type: DIAMOND, amount: 16}
price: 100.0
reason: expiredprocessExpiryOutbox kasuje wpis, potem dostarcza item. Pusty / zły UUID = wpis usuwany.
pending-returns
Gdy mailbox.enabled: false i sprzedawca offline (albo addPendingReturnPublic):
pending-returns:
069a79f4-44e9-4726-a5be-fca90e38aaf5:
- {==: org.bukkit.inventory.ItemStack, type: IRON_INGOT, amount: 32}Przy joinie plugin próbuje wcisnąć item do ekwipunku.
pending-sales
Sprzedaż gdy sprzedawca offline — powiadomienie przy wejściu (buy.seller-notified):
pending-sales:
<seller-uuid>:
- buyer: NickKupującego
item: "DIAMOND_SWORD"
price: 1500.0pending-sales.by-name.<nick> to stary format; przy joinie jest odczytywany i czyszczony.
Zapis
save() synchronicznie: listings + next-id (+ pozostałe sekcje w tym samym dataConfig). Nie ma zapisu atomowego temp (to ma market-data.yml).